var d = document;
var MPOI = {};
var loader = 'maps_zloader.php';
MPOI['records'] = {};
MPOI['idmap'] = {};
MPOI['option'] = {};
MPOI['last_popup'] = 0;

var ULT_SEC_MAP_NAV = 'mapnav';
var ULT_SEC_SMARTVIEW_DTL = 'smvwdtls';
var ULT_SEC_TRAFFIC_DTL = 'trfdtls';
var ULT_SEC_BIZLOC_DTL = 'bldtls';

var ULT_LINK_PAN = 'pan';
var ULT_LINK_PAN_XY = 'panxy';
var ULT_LINK_ZOOM = 'zoom';
var ULT_LINK_SMARTVIEW_CATEGORY = 'cat';
var ULT_LINK_SMARTVIEW_SUBCAT = 'bfkey';

var ULT_KEY_SEC = 'sec';
var ULT_KEY_SEC_LINK = 'slk';
var ULT_KEY_DEST_SPACEID = '_s';
var ULT_KEY_LINK_TYPE = 'lt';
var ULT_KEY_PAN_DIR = 'dir';
var ULT_KEY_ZOOM_LEVEL = 'z_lvl';
var ULT_KEY_SMARTVIEW_CATEGORY = 'l_cat';
var ULT_KEY_SMARTVIEW_SUBCAT= 'l_bfkey';

var ULT_KEY_PAN_X = 'x';
var ULT_KEY_PAN_Y = 'y';
var ULT_KEY_POS = 'pos';
    
var LINKTYPE_NAV = 5;
var LINKTYPE_CPM = 3;

var BFKEY_TYPE_X = -1;
var BFKEY_TYPE_TRAFFIC = 1;
var BFKEY_TYPE_SMARTVIEW = 2;
var BFKEY_TYPE_BIZLOC = 3;

var g_domain = '';
var g_spaceid = -1;
var g_dbg_js = 0;
var g_ult_on = 0;
var g_loc = 'us';

function ylib_Browser() {
 d=document;
 this.agt=navigator.userAgent.toLowerCase();
 this.major = parseInt(navigator.appVersion);
 this.dom=(d.getElementById)?1:0; // true for ie6, ns6
 this.ns=(d.layers);
 this.ns4=(this.ns && this.major == 4);
 this.ns4up=(this.ns && this.major >=4);
 this.ns6=(this.dom&&navigator.appName=="Netscape");
 this.op=(window.opera? 1:0);
 this.op6= ((this.agt.indexOf("opera 6") > 0) || (this.agt.indexOf("opera/6") > 0));
 this.ie=(d.all);
 this.ie4=(d.all&&!this.dom)?1:0;
 this.ie4up=(this.ie && this.major >= 4);
 this.ie5=(d.all&&this.dom &&  navigator.userAgent.match(/MSIE 5/));
 this.ie6=(d.nodeType)? 1:0;
 this.sf=(this.agt.indexOf("safari")!=-1);
 this.win=((this.agt.indexOf("win")!=-1) || (this.agt.indexOf("16bit")!=-1));
 this.mac=(this.agt.indexOf("mac")!=-1);
}

var oBw = new ylib_Browser();
// this function assumes the inclusion of js/env_detection
function mpoi_is_supported() {
    if (oBw.op) return 0;
    if (oBw.ns4) return 0;
    if (oBw.mac && oBw.ie) return 0;
    if (oBw.dom) return 1;
    return 0;
}

// popups
function mpoi_mouseout(event) {
    var record = _mpoi_get_record(event);
    if (!record) { return false; }
    var state = record['popup_state'];
    if (state == 'title') {
        var icon = record['icon_div'];
        icon.style.zIndex = 50;
	var icon_size = 16;
        if ( record['isize'] > 0 ) {
   	    icon_size = record['isize'];
        }
        mpoi_set_icon(icon, record['icon'], 'mouseout', icon_size, icon_size, record['x'], record['y']);
        var popup = record['popup_div'];
        popup.style.visibility = 'hidden';
        popup.style.zIndex = 100;
        record['popup_state'] = 'closed';

	var id = record['id'];
	var item = document.getElementById(id);
	if ( item ) {
		var oHoverItm = item.childNodes[1];
		if ( oHoverItm ) {
			oHoverItm.style.backgroundColor = "";
		}
	}
    }
    return true;
}

function mpoi_mouseover(event) {
    var record = _mpoi_get_record(event);
    if (!record) { return false; }
    var state = record['popup_state'];
    if (!state || state == 'closed') {

	if ( record['isize'] > 20 ) {
   	    icon_size = record['isize'];
	} else {
	    icon_size = 20;
	} 
        var icon = record['icon_div'];
        icon.style.zIndex = 1000;
	var iconurl = record['icon'];
	if ( record['hover'] ) {
	    iconurl = record['hover'];
  	}	
        mpoi_set_icon(icon, iconurl, 'mouseover', icon_size, icon_size, record['x'], record['y']);
        var popup = record['popup_div'];
	var style = record['style'];
	if ( style != 'title' && style != 'expand' && style != 'origin' ) 
		style = 'title';
        var c = mpoi_make_popup(record, style);
        _mpoi_set_popup(popup, c);
        mpoi_position_popup(record);
        popup.style.zIndex = 1500;
        record['popup_state'] = 'title';

	var id = record['id'];
	var item = document.getElementById(id);
	if ( item ) {
		var oHoverItm = item.childNodes[1];
		if ( oHoverItm ) {
			oHoverItm.style.backgroundColor = "#bfcfe3";
		}
	}
    }
    return true;
}

function _mpoi_set_popup(popup, msg) {
    popup.style.left = '-1000px';
    popup.style.top = '1px';
    popup.style.width = '200px';
    popup.innerHTML = msg;
    popup.style.visibility = 'visible';
}

function mpoi_onclick(event) {
    var record = _mpoi_get_record(event);
    if (!record) { return false; }
    var state = record['popup_state'];
    if (state == 'closed' || state == 'title') {
        var icon = record['icon_div'];
        icon.style.zIndex = 1000;
	if(oBw.ie5) record['cat'] = null; //no tracking for ie5, url length issue
	if ( record['isize'] > 20 ) {
   	    icon_size = record['isize'];
	} else {
	    icon_size = 20;
	} 
	var iconurl = record['icon'];
	if ( record['popup'] ) {
	    iconurl = record['popup'];
	}
        mpoi_set_icon(icon, iconurl, 'click', icon_size, icon_size, record['x'], record['y'], record['cat']);
        var popup = record['popup_div'];
	var style = record['style'];
	if ( style == 'origin' ) {
	    style = 'originexpand';
	} else {
	    style = 'expand';
	}
        var c = mpoi_make_popup(record, style);
        _mpoi_set_popup(popup, c);
        mpoi_position_popup(record);
        popup.style.zIndex = 1100;
        record['popup_state'] = 'expand';
        if (MPOI['last_popup'] != record['id']) {
            mpoi_close(MPOI['last_popup']);
        }
        MPOI['last_popup'] = record['id'];
    }
    else if (state == 'expand') {
        mpoi_close(record['id']);
    }
    return true;
}

function mpoi_expand_popup(id) {
    var idmap = MPOI['idmap'];
    if (idmap[id]) {
        var record =idmap[id];
        var icon = record['icon_div'];
        icon.className = 'mpoiselected';
        var popup = record['popup_div'];
        var c = mpoi_make_popup(record, 'expand');
        _mpoi_set_popup(popup, c);
        mpoi_position_popup(record);
        record['popup_state'] = 'expand';
    }
}

function mpoi_position_popup(record) {
    var popup = record['popup_div'];
    var icon = record['icon_div'];
    var icon_w = icon.width;
    var icon_h = icon.height ;
    var width = popup.offsetWidth;
    var height = popup.offsetHeight;
    var image = document.getElementById('map');
    image.style.position = 'relative';
    var x = parseInt(record['x']);
    var y = parseInt(record['y']);

    if ((x + 4 + icon_w/2 + width) >= image.offsetWidth) {
        x = x - width - icon_w/2 - 2;
    } else {
        x = x + 4 + icon_w/2;
    }
    if ((y + height) >= image.offsetHeight) {
        y = (y - height) + icon_h / 2;
    } else {
        y = y - icon_h / 2;
    }
    popup.style.left = x + 'px';
    popup.style.top  = y + 'px';
    popup.style.zIndex = 1000;
}


function mpoi_close(id) {
    var record = MPOI['records'][id];
    if (!record) { return false; }
    var icon = record['icon_div'];
    icon_size = 16;
    if (record['isize'])
	icon_size = record['isize'];
    mpoi_set_icon(icon, record['icon'], 'mouseout', icon_size, icon_size, record['x'], record['y']);
    var popup = record['popup_div'];
    popup.style.visibility = 'hidden';
    record['popup_state'] = 'closed';

    var id = record['id'];
    var item = document.getElementById(id);
    if ( item ) {
	oHoverItm = document.getElementById(id).childNodes[1];
	if ( oHoverItm )
		oHoverItm.style.backgroundColor = "";
    }
}

function _mpoi_get_record(event) {
    if (!event) { event = window.event; }
    var src = event.srcElement;
    if (!src) { src = event.currentTarget; }

    if (!src) { return; }
    var idmap = MPOI['idmap'];

    while (src) {
        var id = src.id;
        if (id) {
            var record = idmap[id];
            if (record) { 
                return record; 
            }
        }
        src = src.parentNode;
    }
    return;
}

function mpoi_pan(x, y) {
    // TODO: decouple from mpoi_form name
    var form = document.getElementById('mpoi_form');
    if (x == 0) { x = 1; }
    if (y == 0) { y = 1; }
    form.pan_x.value = x;
    form.pan_y.value = y;

    var v_ult_params = {};
    v_ult_params[ULT_KEY_DEST_SPACEID] = g_spaceid;
    v_ult_params[ULT_KEY_SEC] = ULT_SEC_MAP_NAV;
    v_ult_params[ULT_KEY_SEC_LINK] = ULT_LINK_PAN_XY;
    v_ult_params[ULT_KEY_LINK_TYPE] = LINKTYPE_NAV;
/*
    v_ult_params[ULT_KEY_PAN_X] = x;
    v_ult_params[ULT_KEY_PAN_Y] = y;
*/

    return mpoi_update_state(form, v_ult_params);
}

function mpoi_pan_dir(dir) {
    var form = document.getElementById('mpoi_form');
    form.compass.value = dir;

    var v_ult_params = {};
    v_ult_params[ULT_KEY_DEST_SPACEID] = g_spaceid;
    v_ult_params[ULT_KEY_SEC] = ULT_SEC_MAP_NAV;
    v_ult_params[ULT_KEY_LINK_TYPE] = LINKTYPE_NAV;

    v_ult_params[ULT_KEY_SEC_LINK] = dir;
/*
    v_ult_params[ULT_KEY_SEC_LINK] = ULT_LINK_PAN;
    v_ult_params[ULT_KEY_PAN_DIR] = dir;
*/

    return mpoi_update_state(form, v_ult_params);
}

var MetersPerPixal = [ 15000.0, 9000.0, 4000.0, 1500.0, 500.0, 160.0, 36.0, 14.0, 4.2, 1.2 ];
        
function MapToBmp(lat, lon) {
    var form = document.getElementById('mpoi_form');
    var mlt = form.mlt.value;
    var mln = form.mln.value;
    var mag = form.mag.value;
         
    var bmpwidth = mpoi_get_width();
    var bmpheight = mpoi_get_height(); 
    var width_in_meter = MetersPerPixal[10-mag]*bmpwidth;
                
    if(width_in_meter<1.0) width_in_meter = 1.0;
                
    var yperlat = bmpwidth * 111000.0 / width_in_meter;
    var xperlon = yperlat*(Math.cos(mlt*3.1415926/180.0));
                
    var dx = ( lon - mln )* xperlon;
    var dy = ( lat - mlt )* yperlat;
     
    dx += bmpwidth/2;       
    dy = bmpheight/2 - dy;
                
    var bmp = {};
    bmp['x'] = parseInt(dx + 0.5);
    bmp['y'] = parseInt(dy + 0.5);
    
    return bmp;
}

function mpoi_refresh_client() {
    var html = '';
    var data = mpoi_expand_data(data_fields, client_data);
    var ct = 0;
    for (var i = 0; i < data.length; i++) {
        
        var rec = data[i];
        var bmp = MapToBmp(rec['lat'], rec['lon']);
    
	var width = mpoi_get_width();
	var height = mpoi_get_height();
        if ( bmp['x']<=width && bmp['x']>=0  &&  bmp['y']<=height && bmp['y']>=0 ) {
		ct++;
                var id = parseInt(Math.random()*9999);
                var record = {};
                record['id'] = id;
                record['x'] = bmp['x'];
                record['y'] = bmp['y'];
                record['title'] = rec['title'];
                record['body'] = rec['body'];

		var icon = rec['icon'];
		record['icon'] = icon;

		if ( rec['hover'] ) {
			record['hover'] = rec['hover'];
		} 
		if ( rec['popup'] ) {
			record['popup'] = rec['popup'];
		}

                mpoi_add_point(id, record);

		html += '<p style="clear:both;">';
		html += '<span id="' + record['id'] + '" class="items">';
		if ( icon.indexOf('http://') != -1 ) {
			html += '<img src="Yahoo!%20Maps%20-%20Orange,%20CA%2092868-1693_files/%27%20+%20%20record%5B%27icon%27%5D%20+%20%27">';
		} else {
			html += '<img src="' + 'http://us.i1.yimg.com/us.yimg.com/i/us/map/gr/' + record['icon'] + '_s.gif">';
		}
		html += '<a target="_blank" href="Yahoo!%20Maps%20-%20Orange,%20CA%2092868-1693_files/%27%20+%20rec%5B%27url%27%5D%20+%20%27" onmouseover="select_list(this.parentNode);" onmouseout="deselect_list(this.parentNode);" class="ygblock">' + record['title'] + '</a>';
		html += '<div class="ygcl"></div>';
		html += '</span>';
		html += '</p>';
	}
    }
    if( html.length == 0 ) {
	html += 'No results found.';
    }  
    d.getElementById('ymapopen-list').innerHTML = html;
    return false;
}

function mpoi_zoom(z) {
    // TODO: decouple from mpoi_form name
    var form = document.getElementById('mpoi_form');
    if (z == 0 && form.mag.value > 1) { 
	form.mag.value--;
    } 
    else if (z == 11 && form.mag.value < 10) { 
	 form.mag.value++;
    }
    else {
    form.mag.value = z;
    }

    var v_ult_params = {};
    v_ult_params[ULT_KEY_DEST_SPACEID] = g_spaceid;
    v_ult_params[ULT_KEY_SEC] = ULT_SEC_MAP_NAV;
    v_ult_params[ULT_KEY_LINK_TYPE] = LINKTYPE_NAV;
    v_ult_params[ULT_KEY_POS] = form.mag.value;
/*
    v_ult_params[ULT_KEY_SEC_LINK] = ULT_LINK_ZOOM;
    v_ult_params[ULT_KEY_ZOOM_LEVEL] = form.mag.value;
*/

    return mpoi_update_state(form, v_ult_params);
}

function mpoi_map_click(event) {
    if (!event) { event = window.event; }
    var src = event.srcElement;
    var form = document.getElementById('mpoi_form');

    if (!src) { src = event.currentTarget; }

    if (!src) { return false; }

    var pan_x;
    var pan_y;

    if (event.layerX) {
        pan_x = event.layerX;
        pan_y = event.layerY;
    } else {
        pan_x = event.offsetX;
        pan_y = event.offsetY;
    }

    var panable;
    if ( form.panable )
	return mpoi_pan(pan_x, pan_y);
    else
	return true;
}

function mpoi_server_update() {
    var data = mpoi_expand_data(mpoi_fields, mpoi_data);
    for (var i = 0; i < data.length; i++) {
        var record = data[i];
        var id = record['id'];
        mpoi_add_point(id, record);
    }
}

function mpoi_add_point(id, record) {
    var mpoi_records = MPOI['records']; 
    var mpoi_idmap = MPOI['idmap']; 

    if (mpoi_records[id]) {
        // duplicate id
        return;
    }

    var container = document.getElementById('mpoi_container');
    var x = record['x'];
    var y = record['y'];
    var icon = record['icon'];
    var id = record['id'];

    var icon_size = 16;
    if ( record['isize'] > 0) {
	icon_size = record['isize'];
    }
 		
     // icon
    var iconimg = document.createElement('img');
    iconimg.width = icon_size;
    iconimg.height = icon_size;
    iconimg.border = 0;
    iconimg.style.position = 'absolute';
    iconimg.style.zIndex = '500';
    if (record['state'] && record['state'] == 'expand') {
	mpoi_set_icon(iconimg, icon, 'mouseover', icon_size, icon_size, x, y);
    } else {
    	mpoi_set_icon(iconimg, icon, 'mouseout', icon_size, icon_size, x, y);
    }
    iconimg.onmouseout  = mpoi_mouseout;
    iconimg.onmouseover = mpoi_mouseover;
    iconimg.onclick     = mpoi_onclick;
    domid = iconimg.id = id + '_icon';
    mpoi_idmap[domid] = record;
    record['icon_div'] = iconimg;

    container.appendChild(iconimg);

    // popup
    var popup = document.createElement('div');
    popup.style.position = 'absolute';
    popup.style.left = '0px';
    popup.style.top = '0px';
    popup.style.visibility = 'hidden';
    domid = popup.id = id + '_popup';
    mpoi_idmap[domid] = record;
    record['popup_div'] = popup;

    container.appendChild(popup);

    mpoi_records[id] = record;
    mpoi_idmap[id] = record;

    // mpoi_expand_popup(id);

    if (record['state'] && record['state'] == 'expand') {
        setTimeout('mpoi_expand_popup(' + id + ')', 10);
    }
}

function mpoi_set_icon(imgnode, name, state, width, height, x, y, track) {
    if (!name)
        return;

    x = x - width / 2;
    y = y - height / 2;
    var url = '';
    if ( name.indexOf('http://') != -1 ) {
	    url = name;
    } else {
	    url = 'http://us.i1.yimg.com/us.yimg.com/i/us/map/gr/' + name;

	    if (state == 'mouseout') {
		url += '_s.gif';
	    } 
	    else if (state == 'click') {
		url += '_r.gif';
	    } 
	    else if (state == 'mouseover') {
		url += '_c.gif';
	    } else {
		// unknown state
		return;
	    }
    }
    if (track) {
        url = 'http://us.rd.yahoo.com/maps/mapresults/mpoi/' + track + '/*' + url;

    	var v_ult_params = {};
    	v_ult_params[ULT_KEY_DEST_SPACEID] = g_spaceid;
    	v_ult_params[ULT_KEY_SEC] = get_bfkey_ultsec(track);
    	v_ult_params[ULT_KEY_LINK_TYPE] = get_bfkey_linktype(track);
    	v_ult_params[ULT_KEY_SEC_LINK] = track;
/*
    	v_ult_params[ULT_KEY_SEC_LINK] = ULT_LINK_SMARTVIEW_SUBCAT;
    	v_ult_params[ULT_KEY_SMARTVIEW_SUBCAT] = track;
    	v_ult_params[ULT_KEY_POS] = pos;
*/
        
       	url = map_track_click(url, v_ult_params);
    }
    imgnode.style.left = x + 'px';
    imgnode.style.top = y + 'px';
    imgnode.style.cursor = 'hand';
    imgnode.src = url;
    imgnode.width = width;
    imgnode.height = height;
}

function mpoi_make_el(tag, attrs) {
    var result = document.createElement(tag);
    if (attrs) {
        for (var attr in attrs) {
            if (attr == 'className') {
                result.setAttribute('class', attrs[attr]);
            }
            result.setAttribute(attr, attrs[attr]);
        }
    }
    return result;
}

function mpoi_make_popup(record, state) {
    var c = '';
    // should the title be shown?
    if (state == 'title') {
        c += '<div class="mpoishdw"><table class="mpoitable" border="0" cellpadding="4" cellspacing="0" width="200"><tr>';
        c += '<td class="mpoititle"><small><b>' + record['title'] + '</b></small></td>';
        c += '</tr>';
	c += '<tr><td class="mpoibody"><small class="ymapnote">Click icon for more info</small></td></tr>';
	c += '</table></div>';
    }
    else if (state == 'expand') {
        var id = record['id'];
        c += '<div class="mpoishdw"><table class="mpoitable" border="0" cellpadding="4" cellspacing="0" width="200"><tr valign="top">';
        c += '<td class="mpoititle"><small><b>' + record['title'] + '</b></small></td>';
        c += '<td class="mpoicls" align="right">';
        c += '<a href="javascript:void(0);" onclick="mpoi_close(' + "'" + id + "'" + ')"><img src=http://us.i1.yimg.com/us.yimg.com/i/us/map/gr/cls.gif width=12 height=12 border=0 alt=Close></a>';
	c += '</td></tr><tr><td class="mpoibody" colspan="2"><small>';
        c += record['body'];
        c += '</small></td></tr></table></div>';

    } 
    else if (state == 'origin') {
        var id = record['id'];    
        c += '<div class="mpoishdw"><table class="mpoitable" border="0" cellpadding="4" cellspacing="0" width="200">';
        c += '<tr><td class="mpoiorigin" colspan="2"><small><b>';
        c += record['title'];
        c += '</b></small></td></tr>';
	c += '<tr><td class="mpoibody"><small class="ymapnote">Click icon for more info</small></td></tr>';
        c += '</table></div>';
    }
    else if (state == 'originexpand') {
        var id = record['id'];    
        c += '<div class="mpoishdw"><table class="mpoitable" border="0" cellpadding="4" cellspacing="0" width="200">';
        c += '<tr valign="top"><td class="mpoiorigin"><small><b>';
        c += record['title'];
	c += '<br>';
	c += record['body'];
        c += '</b></small></td><td class="mpoiicon" align="right"><a href="javascript:void(0);" onclick="mpoi_close(' + "'" + id + "'" + ')"><img src=http://us.i1.yimg.com/us.yimg.com/i/us/map/gr/cls.gif width=12 height=12 border=0 alt=Close></a></td></tr>';
	c += '</b></small></td></tr>';
	c += '<tr><td class="mpoimore" colspan="2"><small><b>';
	c += record['more'];
	c += '</b></small></td></tr>';
        c += '</table></div>';
    }

    return c;
}

function mpoi_clear_points() {
    var records = MPOI['records'];
    for (var id in records) {
        var record = records[id];
        var popup = record['popup_div'];
        var div   = record['icon_div'];
        var container = div.parentNode;
        container.removeChild(div);
        container.removeChild(popup);
    }
    MPOI['records'] = {};
    MPOI['idmap'] = {};
    MPOI['last_popup'] = 0;
}

function mpoi_sync_client(imgurl) {
    var mapimg = document.getElementById('map');
    mapimg.src = imgurl;
}

function mpoi_load_content(url) {
    var head = document.getElementsByTagName('head').item(0);
    var s = document.getElementById('mpoi_script_node');
    if (s) {
      var parent = s.parentNode;
      parent.removeChild(s);
    }
    s = document.createElement('script');
    s.src = url;
    s.id = 'mpoi_script_node';
    head.appendChild(s);
}

function mpoi_build_query(form) {
  var qs = '';
  var bfkey = '';
  for (e=0;e < form.elements.length;e++) {
    var el = form.elements[e];
    if (el.name!='') {
      if (el.name=='BFKey' && el.type!='radio') { bfkey = el.value; }
      if (el.type == 'radio') {
	if (!el.checked) { continue; }
        if (el.checked && bfkey!='') { continue; }
      }
      if (el.type == 'checkbox' && !el.checked) { continue; }
      qs+=(qs=='')?'?':'&'
      qs+=el.name+'='+escape(el.value)
      }
    }
  return qs;
}


function mpoi_update_state(form, p_ult_params) {

    var url = loader + mpoi_build_query(form);
    url = map_track_click('http://' + g_domain + '/' + url, p_ult_params);

    if (mpoi_is_supported() && !oBw.sf) {
	mpoi_clear_points();
        form.pan_x.value = 0;
	    form.pan_y.value = 0;
	    mpoi_load_content(url);
	    return false;
    } else {
        form.submit();
        return false;
    }

}

function mpoi_init_ui(pan, zoom, load) {
    if (load)  { loader = load; }
    if (!pan)  { pan = 'mpoi_pan_'; }
    if (!zoom) { zoom = 'mpoi_zoom_'; }
    // register event handlers on the pan controls
    var directions = ['n', 'nw', 'w', 'sw', 's', 'se', 'e', 'ne'];
    for (var i = 0; i < directions.length; i++) {
        var dir = directions[i];
        var id = pan + dir;
        var node = document.getElementById(id);
       if (node) { 
            if (mpoi_is_supported()) {
                node.compass = dir;
                node.onclick = mpoi_pan_ui;
            }
            node.onmouseover = mpoi_handler;
            node.onmouseout = mpoi_handler;
        } else {
            // did not get a pan node
        }
    }

    // register event handlers on the zoom controls
    for (var i = 0; i <= 11; i++) {
        var id = zoom + i;
        var node = document.getElementById(id);
        if (node) {
            if (mpoi_is_supported()) {
                node.mag = i;
                node.onclick = mpoi_zoom_ui;
            }
        } else {
            // did not get a zoom node
        }
    }

    // on the resize handlers
    if (mpoi_is_supported()) {
	var node = document.getElementById('ymaprsz');
	if (node) { node.onclick = mpoi_handler; }
	node = document.getElementById('ymaprszic');
	if (node) { node.onclick = mpoi_handler; }
    }
}

function mpoi_get_width() {
    var width = document.getElementById('map').width;
    return width;
}

function mpoi_get_height() {
    var height = document.getElementById('map').height;
    return height;
}

function mpoi_zoom_ui(event) {
    if (!event) { event = window.event; }

    var src = event.srcElement;
    if (!src) { src = event.currentTarget; }
    while (src) {
        var mag = src.mag;
        if (typeof(mag) != 'undefined') {
            return mpoi_zoom(mag);
        }
        src = src.parentNode;
	}
    return true;
}

function mpoi_pan_ui(event) {
    if (!event) { event = window.event; }
    var src = event.srcElement;
    if (!src) { src = event.currentTarget; }

    if (src) {
        var dir = src.compass;
        if (!dir) { return true; }
        return mpoi_pan_dir(dir);
    } else {
        return true;
    }
}

function mpoi_expand_data(fields, raw) {
    var result = [];
    var raw_len = raw.length;
    var fields_len = fields.length;
    var rec_count = raw_len / fields_len;
    for (var i = 0; i < rec_count; i++) {
        var rec = result[i] = [];
        for (var j = 0; j < fields_len; j++) {
            rec[fields[j]] = unescape(raw[i * fields_len + j]);
        }
    }
    return result;
}

function getZoomLabel(lvl, state, loc) {
	//var lbl;
	//add a left margin to 1-9 zoom level
 	//(lvl<10 && lvl !=0) ? lbl='<b class="ymapzoomlm"> '+ lvl + '</b>' : lbl='<b> '+ lvl + '</b>'; 	
	//var lbl = '';
 	(lvl<10 && lvl !=0) ? lbl= lvl: lbl=''; 	

	if (lvl == 0) {
        switch (loc) {
	   /*
            case 'us': lbl = '<strong>Zoom<br>In</strong>'; break;
            case 'e1': lbl = '<strong>Acercar</strong>'; break;
            case 'cf': lbl = '<strong>Vue rapprochée</strong>'; break;
            case 'ca': lbl = '<strong>Zoom<br>In</strong>'; break;
            default: lbl = '<strong>Zoom<br>In</strong>'; break;
		 */
        }
	} else if (lvl == 2 || lvl == 4 || lvl == 8 || lvl == 10) {
		var view;
        switch (loc) {
            case 'us':  view = new Array(0,0,'street',0,'city',0,0,0,'state',0,0); break;
            case 'e1': view = new Array(0,0,'calle',0,'ciudad',0,0,0,'estado',0,0); break;
            case 'cf': view = new Array(0,0,'rue',0,'ville',0,0,0,'provincial',0,0); break;
            case 'ca': view = new Array(0,0,'street',0,'city',0,0,0,'province',0,0); break;
            default: view = new Array(0,0,'street',0,'city',0,0,0,'state',0,0); break;
        }
		//lbl += ' ' + view[lvl];
		lbl =  view[lvl];
	} else if (lvl == 11) {
        switch (loc) {
	    /*
            case 'us': lbl = '<strong>Zoom<br>Out</strong>'; break;
            case 'e1': lbl = '<strong>Alejar</strong>'; break;
            case 'cf': lbl = '<strong>Vue éloignée</strong>'; break;
            case 'ca': lbl = '<strong>Zoom<br>Out</strong>'; break;
            default: lbl = '<strong>Zoom<br>Out</strong>'; break;
	    */
        }
    }
	if (state == 'on') {
		//alert(state);
	}

	/*
	if (state == 'on') {
		lbl = '<a href="#">' + lbl + '</a>';
	}*/

	return lbl;
}


function updateZoomButtons(lvl, loc) {
 	var arrA = document.getElementById('ymapzoombar').getElementsByTagName('A');	

	for (var i = 1; i < 11; i++) {
		if (i != lvl) {
			arrA[i].className = '';
		} else {
			arrA[i].className = 'on';
		} 
	}

  	if (lvl != 1 && lvl != 0) {
                arrA[0].innerHTML = getZoomLabel(0, 'on', loc);
                //arrA[0].className = '';
        } else {
                //arrA[0].innerHTML = getZoomLabel(0, 'off', loc);
                //arrA[0].className = 'ymapzoomin'; 
                //arrA[1].innerHTML = getZoomLabel(1,'off',loc);  
                arrA[1].className= 'on';   
        } 


	if (lvl != 10 && lvl != 11) {
		//arrA[11].innerHTML = getZoomLabel(11, 'on', loc);
		//arrA[11].className = '';
	} else {
		//arrA[11].innerHTML = getZoomLabel(11, 'off', loc);
		//arrA[11].className = 'ymapzoomout';
		//arrA[10].innerHTML = getZoomLabel(10,'off',loc);
		arrA[10].className= 'on';
	}
}

function mpoi_handler(evt) {
	evt = (evt) ? evt : ((window.event) ? window.event : "");
	if (evt) {
	var o = getTargetObj(evt);
		switch(evt.type) {
			case "mouseover": o.src = o.src.replace("nrm", "sel"); break;
			case "mouseout":  o.src = o.src.replace("sel", "nrm"); break;
            case "click":
                if (o.id == 'ymaprsz') {
					submitMapForm(o);
					return false;
					break;
				}
				if (o.parentNode.id == 'ymaprszic') { //resize icon
					submitMapForm(o.parentNode);
					return false;
					break;	
				}
		}
	}
}

function getTargetObj(evt) {
	var o = (evt.target) ? ( (evt.target.nodeType == 3) ? evt.target.parentNode : evt.target ) : evt.srcElement;
	return o;
}


function submitMapForm(o) { 
    if (o) {
	var form = document.getElementById('mpoi_form');
	if (o.id == 'ymaprsz' || o.id == 'ymaprszic') {
	    var resize = form.resize;
	    if (resize.value != 'l') { resize.value = 'l'; }
	    else { resize.value = 's'; }
	} else {
	    form.compass.value = o.compass;
	}
    }
    form.submit();
}

// this function handles the logic when a category is selected
function mpoi_select_cat(cat) {
    if (mpoi_is_supported()) {
        var form = document.getElementById('mpoi_form');
        if (form.cat.value == cat) {
            form.cat.value = '';
        } else {
            form.cat.value = cat;
        }
        var bf = form.BFKey;
        if (bf) {
            for (var i = 0; i < bf.length; i++) {
                if (bf[i].checked) { bf[i].checked = 0; }
            }
        }
        form.rezoom.value = 1;

    	form.submit();
        return false;
    } else {
        return true;
    }
}
        
// this function handles the logic when a sub category is selected
function mpoi_select_subcat(node, subcat) {
    var form = node.form;
    form.rezoom.value = 1;

    var v_ult_params = {};
    v_ult_params[ULT_KEY_DEST_SPACEID] = get_subcat_destspid(subcat)
    v_ult_params[ULT_KEY_SEC] = get_bfkey_ultsec(subcat);
    v_ult_params[ULT_KEY_LINK_TYPE] = get_bfkey_linktype(subcat);
    v_ult_params[ULT_KEY_SEC_LINK] = subcat;
/*
    v_ult_params[ULT_KEY_SEC_LINK] = ULT_LINK_SMARTVIEW_SUBCAT;
    v_ult_params[ULT_KEY_SMARTVIEW_SUBCAT] = subcat;
*/

    if (mpoi_is_supported()) {
    	form.action = form.action.replace("mapclick", "subcat/" + subcat);

    	form.action = map_track_click(form.action, v_ult_params);

        form.submit();
        return false;
    } else {
    // no rd tracking for these browsers
        var url = 'maps_result' + mpoi_build_query(form) + '#mapcontent';

        url = map_track_click('http://' + g_domain + '/' + url, v_ult_params);

        window.location = url;   
        return true;
    }
}


function map_track_click(p_url, p_ult_params)
{
    if (g_dbg_js)
    {
       var v_dbg = '';
       for (var k in p_ult_params)
       {
           v_dbg += (k + '=[' + p_ult_params[k] + '], ');
       } 
       v_dbg += ('g_domain=[' + g_domain + ']');
       v_dbg += (', g_ult_on=[' + g_ult_on + ']');
       alert(v_dbg);
    }

    if (!g_ult_on || (typeof(p_ult_params) == 'undefined')) {  
		return p_url;
    }

    var v_ult_url = yahoo_linktrack_click(p_url, p_ult_params);
    if (g_dbg_js) 
    {
         alert('ULTed-URL=' + v_ult_url);
    }

	return v_ult_url;
}


function select_list(o){
    if ( o.tagName =="SPAN" ) { 
        if (oBw.ie5){
        document.getElementById('ymapmaptd').style.width="100%";
        }else{
        document.getElementById('ymapmaptd').style.width="500px";//fix ns7
        }
            var id = o.id; 
            var record = MPOI['records'][id];
            if (typeof(record) != 'undefined') {
                var state = record['popup_state'];      
                if (!state || state == 'closed') {
                        var icon = record['icon_div'];
                        icon.style.zIndex = 1000;
			if ( record['isize'] > 20 ) {
			    icon_size = record['isize'];
			} else {
			    icon_size = 20;
			}
			if ( record['hover'] ) {
			    iconurl = record['hover'];
			} else {
			    iconurl = record['icon'];
			}
			mpoi_set_icon(icon, iconurl, 'mouseover', icon_size, icon_size, record['x'], record['y']);
                        var popup = record['popup_div'];
                        var c = mpoi_make_popup(record, 'expand');
			_mpoi_set_popup(popup, c);
                        mpoi_position_popup(record);
                        popup.style.zIndex = 1500;
                        record['popup_state'] = 'expand';
                }

            }

    }
        
}

function deselect_list(o){
    if ( o.tagName =="SPAN" ) {
        if (oBw.ie5){
        document.getElementById('ymapmaptd').style.width="100%";
        }else{
        document.getElementById('ymapmaptd').style.width="500px";//fix ns7
        }
            var id = o.id;
            var record = MPOI['records'][id];
            if (typeof(record) != 'undefined') {
                var state = record['popup_state'];
                if (state == 'title' || state == 'expand') {
                        var icon = record['icon_div'];
                        icon.style.zIndex = 50;
                        mpoi_set_icon(icon, record['icon'], 'mouseout', 16, 16, record['x'], record['y']);
                        var popup = record['popup_div'];
                        popup.style.visibility = 'hidden';
                        popup.style.zIndex = 100;
                        record['popup_state'] = 'closed';
                }
            }
    }
}


function get_bfkey_ultsec(p_bfkey)
{
        if (!p_bfkey)
		return '';
        else if (p_bfkey == 'trfi' || p_bfkey == 'trfc')
                return ULT_SEC_TRAFFIC_DTL;
        else if (p_bfkey.length <= 4 || p_bfkey == 'allres')
                return ULT_SEC_SMARTVIEW_DTL;
        else 
                return ULT_SEC_BIZLOC_DTL;
}

function get_bfkey_linktype(p_bfkey)
{
        if (!p_bfkey)
		return LINKTYPE_NAV;
        else if (p_bfkey == 'trfi' || p_bfkey == 'trfc')
		return LINKTYPE_NAV;
        else if (p_bfkey.length <= 4 || p_bfkey == 'allres')
		return LINKTYPE_NAV;
        else 
                return LINKTYPE_CPM;
}


// This assumes that subcat can only be selected from maps-result page
function get_subcat_destspid(p_bfkey)
{
    if ( g_loc == 'ca' ) {
        return '38264362';
    } else if ( g_loc == 'cf' ) {
        return '35337681';  
    } else if ( g_loc == 'e1' ) {       
        return '37261053';      
    } else {
            if (p_bfkey.length <= 4 || p_bfkey == 'allres') {
                return '96854536'; 
            } else {
                return '59084721';
            }
    }
}
