// Copyright 2006 Phillip Holmstrand 
var loadURLVar,lmObj,lmId;

function dId(eleId) { return document.getElementById(eleId); }

function loadURLHandler() {
	if (loadURLHandler.readyState == 4) {
		if (loadURLHandler.responseText.length <= 1) {
//			alert('Client error, make sure Javascript is enabled.');
			return 0;
		}
		loadURLVar = loadURLHandler.responseText;
	}
}

function loadURL(url, loadToObj) {
	var returnObj = getHTTPObject();
	returnObj.open("GET", url, true);
	returnObj.onreadystatechange = function () { if (returnObj.readyState == 4) { loadToObj.value = returnObj.responseText } };
	returnObj.send(null);
	return returnObj
}

function getQueryVariable(variable) {
	var query = window.location.search.substring(1);
	var vars = query.split("&");
	for (var i=0;i<vars.length;i++) {
		var pair = vars[i].split("=");
		if (pair[0] == variable) {
			return URLDecode(pair[1]);
		}
	} 
	return "";
}

function getHTTPObject() {
	var xmlhttp;
	/*@cc_on
		@if (@_jscript_version >= 5)
			try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (E) {
					xmlhttp = false;
				}
			}
		@else
			xmlhttp = false;
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	return xmlhttp;
}

function populateSelect(selectObj, selectArray, selectValue) {
	var sel = -1;
	var sN = 1;
	for (var i=selectObj.options.length;i>1;i--) {
		selectObj.options.length--;
	}
	for (var i=0;i<selectArray.length;i++) {
		selectObj.options[sN+i] = new Option(selectArray[i].trim(),selectArray[i].trim());
		if (selectObj.options[sN+i].value.toLowerCase().trim().indexOf(selectValue.toLowerCase().trim()) != -1 && sel == -1) { 
			selectObj.options[sN+i].selected = true;
			sel = i;
		}
	}
	return sel;
}

function rS(selectObj) {
	for (var i=0;i<selectObj.options.length;i++)
		if (selectObj.options[i].selected) {
			return i-1;
		}
	return -1;
}

function createMapMarker(m, title, desc, descURL, descIMG, address, address2, lat, lon) {
	desc = desc && desc.length ? address + '<div class="vS"><br clear="all"></div>' + desc : address; 
	if (!descURL || !descURL.trim().length && address.trim().length) {
		address = address.replace('<div>','').replace('</div>', '');
		if (!address2)
			descURL = 'http://maps.google.com/?q=' + escape(address.replace('<br>',','));
		else {
			address2 = address2.replace('<div>','');
			address2 = address2.replace('</div>', '');
			descURL = 'http://maps.google.com/?q=' + escape(address.replace('<br>',',')) + ' to ' + escape(address2.replace('<br>',','));
		}
	}
	if (title) desc = '<b>' + title + '</b><div class="vS"><br></div>' + desc;
//	desc = '<div class="markerText">' + desc + '</div>';
	if (descIMG) {
		var dynImgId = 0;
		desc =  desc + '<img class="descIMG" src="' + descIMG + '" valign="top" vspace=5 hspace=1>';
	} else {
		var dynImgId = Math.round((Math.random()*1000000));
		desc = desc + '<img class="descIMG" id="' + dynImgId.toString() + '" src="/images/blank.png" valign="top" vspace=5 hspace=1 width="150" height="150">';
	}
	if (!descURL.trim().length && !desc.trim().length) {
		return m;
	} else if (!descURL.trim().length) {
		desc = '<div class="markerLabel">' + desc.trim() + '</div>';
	} else {
		desc = '<div class="markerLabel"><a href="' + descURL + '" target="blank" class="marker">' + desc + '</a></div>';
	}
	m.desc = desc; 
//	m.desc += '<div style="display:inline;margin-right:12px;float:right;"><a href="javascript:map.drawZoomAndCenter(new YGeoPoint(' + lat + ',' + lon + '), map.getZoomLevel()-1);">zoom</a></div>';
	m.dynImgId = dynImgId; 
	m.lat = lat; 
	m.lon = lon;
	YEvent.Capture(m, EventsList.MouseClick, function() { openPointWin(m) } ); 
	return m; 
} 

function openPointWin(m) {
	m.openSmartWindow(m.desc); 
	if (m.dynImgId) 
		loadMap(m.dynImgId, m.lat, m.lon)
}

function loadMap(imgId, lat, lon) {
	var zoomed = (map.getZoomLevel() <= 3) ? 0 : ((map.getZoomLevel() <= 7) ? 3 : map.getZoomLevel()-3);
	if (zoomed == 0) {
		dId(imgId).height = 1;
		dId(imgId).width = 150;
		return;
	} else {
		dId(imgId).height = 150;
		dId(imgId).width = 150;		
	}
	var imageURL = 'http://api.local.yahoo.com/MapsService/V1/mapImage?appid=batchGeocode&image_height=150&image_width=150&latitude=' + lat.toString() + '&longitude=' + lon.toString() + '&zoom=' + zoomed.toString() + '&output=json&callback=loadMapEnd';
	lmId = imgId;
	lmObj = new JSONscriptRequest(imageURL);
	lmObj.buildScriptTag();
	lmObj.addScriptTag();
}

function loadMapEnd(data) {
	dId(lmId).src = data.ResultSet.Result;
	lmObj.removeScriptTag();
}

function makeKML(kRS) {
	if (!kRS || !kRS.length) {
		alert('You need to add some data and geocode it first, see steps above.');
		return '';
	}
	
	var kml = '<?xml version="1.0"?>\n<kml xmlns="http://earth.google.com/kml/2.0">\n';
	kml += '<Document>\n';
	kml += '<Style id="A"><IconStyle><scale>0.8</scale><Icon><href>http://maps.google.com/mapfiles/kml/pal4/icon57.png</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle></Style>\n';
	kml += '<Style id="B"><IconStyle><scale>1.0</scale><Icon><href>http://maps.google.com/mapfiles/kml/pal4/icon57.png</href></Icon></IconStyle><LabelStyle><scale>1</scale></LabelStyle></Style>\n';
	kml += '<StyleMap id="C">\n';
	kml += '<Pair><key>normal</key><styleUrl>#A</styleUrl></Pair>\n';
	kml += '<Pair><key>highlight</key><styleUrl>#B</styleUrl></Pair>\n';
	kml += '</StyleMap>\n';

	for (var r=0;r<kRS.length;r++) {
		var rowMap = kRS[r];
		kml += "<Placemark>\n";
		var address = rowMap['l'] ? rowMap['l'] : '';
		kml += "<name>" + htmlEscape((rowMap['t'] && rowMap['t'].length > 0 ? rowMap['t'] : address.replace('<div>','').replace('</div>','').replace('<br>',' ')) ) + "</name>\n";
		var desc = rowMap['d'] ? rowMap['d'] : '';
		var html;
		desc = desc.length ? address + '<br>' + desc : address; 
		if (rowMap['i'] && rowMap['i'].trim().length)
			desc += '<img src="' + rowMap['i'] + '">';
		if (rowMap['u'] && rowMap['u'].trim().length)
			html = desc + '<div><a href="' + rowMap['u'] + '">' + rowMap['u'] + '</a></div>';
		else
			html = desc;
		kml += '<description>' + htmlEscape(html) + '</description>\n';
		kml += '<styleUrl>#C</styleUrl>\n';
		if (rowMap['cl']) {
			rowMap['cl'] = rowMap['cl'].length == 6 ? rowMap['cl'].substr(4,2) + rowMap['cl'].substr(2,2) + rowMap['cl'].substr(0,2) : rowMap['cl'];
			kml += '<Style><IconStyle><color>ff' + rowMap['cl'] + '</color></IconStyle></Style>';
		}
		kml += "<Point><coordinates>" + rowMap['ln'] + "," + rowMap['lt'] + ",0</coordinates></Point>\n";
		kml += "</Placemark>\n";
	}
	kml += "</Document>\n";
	return kml + '</kml>\n';
}

function URLDecode(encoded) {
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   return plaintext;
};

function setCookie(name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}

function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

function deleteCookie(name, path, domain) {
	if (getCookie(name)) {
		document.cookie = name + "=" +
		((path) ? "; path=" + path : "") +
		((domain) ? "; domain=" + domain : "") +
		"; expires=Thu, 01-Jan-70 00:00:01 GMT";
	}
}

function fixDate(date) {
  var base = new Date(0);
  var skew = base.getTime();
  if (skew > 0)
    date.setTime(date.getTime() - skew);
}

var JSON = {
    copyright: '(c)2005 JSON.org',
    license: 'http://www.crockford.com/JSON/license.html',
    stringify: function (v) {
        var a = [];
        function e(s) {
            a[a.length] = s;
        }

        function g(x) {
            var c, i, l, v;

            switch (typeof x) {
            case 'object':
				if (x) {
                    if (x instanceof Array) {
                        e('[');
                        l = a.length;
                        for (i = 0; i < x.length; i += 1) {
                            v = x[i];
                            if (typeof v != 'undefined' &&
                                    typeof v != 'function') {
                                if (l < a.length) {
                                    e(',');
                                }
                                g(v);
                            }
                        }
                        e(']');
                        return;
                    } else if (typeof x.valueOf == 'function') {
                        e('{');
                        l = a.length;
                        for (i in x) {
                            v = x[i];
                            if (typeof v != 'undefined' &&
                                    typeof v != 'function' &&
                                    (!v || typeof v != 'object' ||
                                        typeof v.valueOf == 'function')) {
                                if (l < a.length) {
                                    e(',');
                                }
                                g(i);
                                e(':');
                                g(v);
                            }
                        }
                        return e('}');
                    }
                }
                e('null');
                return;
            case 'number':
                e(isFinite(x) ? +x : 'null');
                return;
            case 'string':
                l = x.length;
                e('"');
                for (i = 0; i < l; i += 1) {
                    c = x.charAt(i);
                    if (c >= ' ') {
                        if (c == '\\' || c == '"') {
                            e('\\');
                        }
                        e(c);
                    } else {
                        switch (c) {
                        case '\b':
                            e('\\b');
                            break;
                        case '\f':
                            e('\\f');
                            break;
                        case '\n':
                            e('\\n');
                            break;
                        case '\r':
                            e('\\r');
                            break;
                        case '\t':
                            e('\\t');
                            break;
                        default:
                            c = c.charCodeAt();
                            e('\\u00' + Math.floor(c / 16).toString(16) +
                                (c % 16).toString(16));
                        }
                    }
                }
                e('"');
                return;
            case 'boolean':
                e(String(x));
                return;
            default:
                e('null');
                return;
            }
        }
        g(v);
        return a.join('');
    },
    parse: function (text) {
        try {
            return !(/[^,:{}[]0-9.-+Eaeflnr-u \n\r\t]/.test(
                    text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
                eval('(' + text + ')');
        } catch (e) {
            return false;
        }
    }
};

function htmlEscape(str){
	str = str.replace(/\&/g,"&amp;");
	str = str.replace(/\</g,"&lt;");
	str = str.replace(/\>/g,"&gt;");
	str = str.replace(/\"/g,"&quot;");
	return str;
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };


function getSize(obj) {
	if (obj.currentStyle) {
		map_width = parseInt(obj.currentStyle.width);
		map_height = parseInt(obj.currentStyle.height);
	} else if (document.defaultView.getComputedStyle) {
		map_width = parseInt(document.defaultView.getComputedStyle(obj, null).width);
		map_height = parseInt(document.defaultView.getComputedStyle(obj, null).height);
	} else {
		map_width = parseInt(obj.style.width);
		map_height = parseInt(obj.style.height);
	}
}

var zooms = new Array();
zooms[0] = "0.000007554547760429087,0.000010758310883909791";
zooms[1] = "0.000015109095521063858,0.000021516621767819582";
zooms[2] = "0.000030218191043511405,0.000043033243535639164";
zooms[3] = "0.00006043638209861587,0.00008606648707127833";
zooms[4] = "0.00012087276428997627,0.00017213297414255666";
zooms[5] = "0.00024174552932190876,0.0003442659482851133";
zooms[6] = "0.000483492098423654,0.0006885318965702266";
zooms[7] = "0.0009669883796684337,0.0013770637931404533";
zooms[8] = "0.0019339936797306179,0.0027541275862809065";
zooms[9] = "0.0038680565424246125,0.005508255172561813";
zooms[10] = "0.007736401535834428,0.011016510345123626";
zooms[11] = "0.015474042502251987,0.022033020690247252";
zooms[12] = "0.03095348819795449,0.044066041380494504";
zooms[13] = "0.06190847973233086,0.08813208276098901";
zooms[14] = "0.04576994545015202,0.08040543440934066";
zooms[15] = "0.04155856202726958,0.007726648351648352";
zooms[15] = "0.05,0.01";

var baseURL = "http://api.maps.yahoo.com/ajax/geocode?appid=batchGeocode&qt=1&id=m";

var cookieDate = new Date();
cookieDate.setTime(cookieDate.getTime() + 365 * 24 * 60 * 60 * 1000);

function yMapsZoomFix() {
	  YMap.prototype._gPxtoZ = function(v){
	   var pct = 1 - v/70;
	   var z = Math.floor(pct*(this._zr.length));
	   if(z == 0) z = 1;
	   return z;
	 };
	 YMap.prototype._gZtoPx = function(v){
	   var pct = 1-v/(this._zr.length);
	   var px = Math.floor(pct*70);
	   return px;
	 };
	
	YMap.prototype.addZoomHandlers = function() {
	   var self = this;
	   document.getElementById(this._ypr+"zn").onclick = function() {
		 var z = self._iz + 1;
		 if (z >= self._zr.length) return false;
		 (self._showZoomShort != true) ?
		 self.slider.setValue(self._gZtoPx(z)):0;
		 self._sZml(z,self._iz);
		 self._iz = z;
	   };
	
	 document.getElementById(this._ypr+"zp").onclick = function() {
	   var z = self._iz -1;
	   if (z < 1) return false;
	   (self._showZoomShort != true) ?
	   self.slider.setValue(self._gZtoPx(z)):0;
	   self._sZml(z,self._iz);
	   self._iz = z;
	   };
	 };
}

function addCommas(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function getStyle(oElm, strCssRule){
    var strValue = "";
    if(document.defaultView && document.defaultView.getComputedStyle){
        strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
    }
    else if(oElm.currentStyle){
        strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
            return p1.toUpperCase();
        });
        strValue = oElm.currentStyle[strCssRule];
    }
    return strValue;
}

function Chr(AsciiNum)
{

	return String.fromCharCode(AsciiNum)

}
function Asc(String)
{

	return String.charCodeAt(0);
}
var UTF8 = {
		// public method for url encoding
		encode : function (string) {
			string = string.replace(/\r\n/g,"\n");
			var utftext = "";
			for (var n = 0; n < string.length; n++) {
				var c = string.charCodeAt(n);
				if (c < 128) {
					utftext += String.fromCharCode(c);
				}
				else if((c > 127) && (c < 2048)) {
					utftext += String.fromCharCode((c >> 6) | 192);
					utftext += String.fromCharCode((c & 63) | 128);
				}
				else {
					utftext += String.fromCharCode((c >> 12) | 224);
					utftext += String.fromCharCode(((c >> 6) & 63) | 128);
					utftext += String.fromCharCode((c & 63) | 128);
				}
			}
	 
			return utftext;
		},
		// public method for url decoding
		decode : function (utftext) {
			var string = "";
			var i = 0;
			var c = c1 = c2 = 0;
	 
			while ( i < utftext.length ) {
				c = utftext.charCodeAt(i);
				if (c < 128) {
					string += String.fromCharCode(c);
					i++;
				}
				else if((c > 191) && (c < 224)) {
					c2 = utftext.charCodeAt(i+1);
					string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
					i += 2;
				}
				else {
					c2 = utftext.charCodeAt(i+1);
					c3 = utftext.charCodeAt(i+2);
					string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
					i += 3;
				}
	 
			}
			return string;
		}
	 
}