var xml_request;var xml_base_url="/xml.scrx";var stop_image_dir="stop_icons/";var vehicle_image_dir="vehicle_icons/";var image_dir="images/";var map=null;var mgr=null;var mgr_markers=[];var last_height=0;var last_width=0;var xml_request;var image_element_property_name="";var map_loaded=false;var encoder=null;var overlays=null;var overlay_rescan_function=null;var mirage=false;var map_controls=[];var controls_on=false;var traffic_overlay=null;var traffic_visible=false;function InitializeOverlays(){if(overlays){GEvent.addListener(map,"moveend",RescanOverlayBounds);RescanOverlayBounds();}};function RescanOverlayBounds(){var bounds=map.getBounds();for(z=0;z<overlays.length;z++){cur_overlay=overlays[z];if(cur_overlay.bounded){if(bounds.intersects(cur_overlay.bounds)){if(!cur_overlay.visible)AddBuildingOverlay(cur_overlay);else{if(cur_overlay.overlay_object.basezoom!=map.getZoom())RedrawBuildingOverlay(cur_overlay);}}else{if(cur_overlay.visible){RemoveBuildingOverlay(cur_overlay);}}}}};function RedrawBuildingOverlay(overlay){if(overlay.visible)RemoveBuildingOverlay(overlay);AddBuildingOverlay(overlay);};function RemoveBuildingOverlay(overlay){overlay.visible=false;map.removeOverlay(overlay.overlay_object);overlay.overlay_object=null;};function AddBuildingOverlay(overlay){var zoom=map.getZoom();if(zoom<overlay.zoom_minimum||zoom>overlay.zoom_maximum)return;var image=overlay.image+"_z"+zoom+".gif";var load_image=new Image();load_image.src=image;var w=load_image.width;var h=load_image.height;overlay.overlay_object=new ImageOverlay(overlay.id,overlay.location,image,new GSize(w,h),zoom,1,"",overlay.opacity);overlay.overlay_object.parent_overlay=overlay;map.addOverlay(overlay.overlay_object);overlay.visible=true;};function SetOverlayOpacity(img,opacity){if(img){opacity=(opacity==100)?99.999:opacity;if(document.all)img.style.filter="alpha(opacity:"+opacity+")";else if(BrowserDetect.browser=="Safari"&&BrowserDetect.version<1.2||BrowserDetect.browser=="Konqueror")img.style.KHTMLOpacity=opacity/100;else if(BrowserDetect.browser=="Mozilla")img.style.MozOpacity=opacity/100;else img.style.opacity=opacity/100;}};function ImageOverlay(imageId,point,image,size,basezoom,zindex,imageMap,opacity){this.imageMap=imageMap||null;this.point=point;this.image=image;this.size=size;this.basezoom=basezoom;this.zindex=zindex||0;this.imageId=imageId;this.opacity=opacity;};ImageOverlay.prototype=new GOverlay();ImageOverlay.prototype.initialize=function(map){var overlayImg=document.createElement("img");overlayImg.style.position="absolute";overlayImg.style.zIndex=this.zindex;map.getPane(G_MAP_MAP_PANE).appendChild(overlayImg);this.imgObj=overlayImg;return this;};ImageOverlay.prototype.redraw=function(force){if(force){var z=map.getZoom();var p=map.fromLatLngToDivPixel(this.point);var scale=Math.pow(2,(z-this.basezoom));var h=this.size.height*scale;var w=this.size.width*scale;this.imgObj.style.left=(p.x-w/2)+"px";this.imgObj.style.top=(p.y-h/2)+"px";if(true){this.imgObj.id=this.imageId;this.imgObj.style.borderWidth="0px";this.imgObj.style.width=w+"px";this.imgObj.style.height=h+"px";this.imgObj.src=this.image;SetOverlayOpacity(this.imgObj,this.opacity);if(this.imageMap)this.imgObj.useMap="#"+this.imageMap+map.getZoom();}else{document.getElementById(this.imageId).style.width=w+"px";document.getElementById(this.imageId).style.height=h+"px";}}};ImageOverlay.prototype.remove=function(){this.imgObj.parentNode.removeChild(this.imgObj);};ImageOverlay.prototype.show=function(){this.imgObj.style.display="";this.visible=true;};ImageOverlay.prototype.hide=function(){this.imgObj.style.display="none";this.visible=false;};var BrowserDetect={init:function(){this.browser=this.searchString(this.dataBrowser)||"An unknown browser";this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||"an unknown version";this.OS=this.searchString(this.dataOS)||"an unknown OS";},searchString:function(data){for(var i=0;i<data.length;i++){var dataString=data[i].string;var dataProp=data[i].prop;this.versionSearchString=data[i].versionSearch||data[i].identity;if(dataString){if(dataString.indexOf(data[i].subString)!= -1)return data[i].identity;}else if(dataProp)return data[i].identity;}},searchVersion:function(dataString){var index=dataString.indexOf(this.versionSearchString);if(index== -1)return;return parseFloat(dataString.substring(index+this.versionSearchString.length+1));},dataBrowser:[{string:navigator.vendor,subString:"Apple",identity:"Safari"},{prop:window.opera,identity:"Opera"},{string:navigator.vendor,subString:"iCab",identity:"iCab"},{string:navigator.vendor,subString:"KDE",identity:"Konqueror"},{string:navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:navigator.userAgent,subString:"Netscape",identity:"Netscape"},{string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"},{string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv"},{string:navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla"}],dataOS:[{string:navigator.platform,subString:"Win",identity:"Windows"},{string:navigator.platform,subString:"Mac",identity:"Mac"},{string:navigator.platform,subString:"Linux",identity:"Linux"}]};BrowserDetect.init();function GetIcon(url){TextIcon=new GIcon();image_to_load=new Image();image_loaded=false;image_to_load.src=url;var w=image_to_load.width;var h=image_to_load.height;TextIcon.iconSize=new GSize(w,h);TextIcon.shadowSize=new GSize(0,0);TextIcon.iconAnchor=new GPoint(Math.floor(w/2),Math.floor(h/2));TextIcon.image=url;return(TextIcon);};function SetEvent(element,event_name,function_text){if(document.all)eval("element."+event_name+"= new Function(\""+function_text+"\");");else element.setAttribute(event_name,function_text);};function LoadRouteFromXML(points){var zoom_array=[];for(i=0;i<points.length;i++){point=points[i];obj=new Object();obj.stop_id=point.getAttribute("stop_id");obj.latitude=parseFloat(point.getAttribute("latitude"));obj.longitude=parseFloat(point.getAttribute("longitude"));obj.set_once=true;obj.is_stop=(point.getAttribute("is_stop")=="1");if(obj.is_stop){obj.image=point.getAttribute("image");obj.name=point.getAttribute("name");obj.is_new_stop=false;}else obj.name="";loc=new GLatLng(parseFloat(obj.latitude),parseFloat(obj.longitude));obj.location=loc;zoom_array.push(loc);stops.push(obj);}return(zoom_array);};function IsNumeric(sText){var ValidChars="0123456789";var IsNumber=true;var Char;for(i=0;i<sText.length&&IsNumber==true;i++){Char=sText.charAt(i);if(ValidChars.indexOf(Char)== -1){IsNumber=false;}}return IsNumber;};function ImageElementObject(mkr){if(image_element_property_name==""){for(var i in mkr){try{if(eval("typeof mkr."+i)=="object"){try{if(eval("typeof mkr."+i+"[0].src")!="undefined"){image_element_property_name=i+"[0]";break;}}catch(e){}}}catch(e){}}}return(image_element_property_name);};function GetImageElement(mkr){return(eval("mkr."+ImageElementObject(mkr)));};function ChangeImage(mkr,image){mkr.image=image;mkr.setImage(image);image_to_load=new Image();image_to_load.src=image;w=image_to_load.width;h=image_to_load.height;old_size=mkr.getIcon().iconSize;if(old_size.width!=w||old_size.height!=h){mkr.getIcon().iconSize=new GSize(w,h);mkr.getIcon().iconAnchor=new GPoint(Math.floor(w/2),Math.floor(h/2));}var obj_name="mkr."+ImageElementObject(mkr);if(document.all){var msFilter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+image+'")';eval(obj_name+".style.filter = msFilter");}eval(obj_name+".src = '"+image+"'");if(old_size.width!=w||old_size.height!=h){eval(obj_name+".style.width = '"+w+"px'");eval(obj_name+".style.height = '"+h+"px'");}};function LoadMap(bounds,load_callback,markers){if(GBrowserIsCompatible()){var has_sidebar=(QueryString("mode")=="history");var size=BrowserSize();var d=document.getElementById("map");var offsetTop=0;if(has_sidebar){d.style.position="absolute";}else{for(var elem=d;elem!=null;elem=elem.offsetParent)offsetTop+=elem.offsetTop;}var height=getWindowHeight()-offsetTop-5;if(has_sidebar)height-=5;if(mirage)height-=7;if(height>0)d.style.height=height+"px";x_margin=10;if(mirage)x_margin+=7;if(has_sidebar){side_bar_width=200;d.style.width=(size[0]-x_margin-side_bar_width)+"px";d.style.left=(side_bar_width+5)+"px";d.style.top="0px";var hb=document.getElementById("side_bar");hb.style.position="absolute";hb.style.width=side_bar_width+"px";hb.style.height=height+"px";hb.style.visibility="visible";}else d.style.width=size[0]-x_margin+"px";map=new GMap2(document.getElementById("map"));var default_zoom=map.getBoundsZoomLevel(bounds);var center=bounds.getCenter();map.setCenter(center,default_zoom);var dispatch=(QueryString("mode")=="dispatch");if(!mirage&& !dispatch){map.addMapType(G_NORMAL_MAP);map.addMapType(G_HYBRID_MAP);map.addMapType(G_PHYSICAL_MAP);map.removeMapType(G_SATELLITE_MAP);map_controls.push(new GLargeMapControl3D());var maptype=new GMenuMapTypeControl();maptype.anchor=new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(120,5));map_controls.push(maptype);var otherOpts={buttonStartingStyle:{background:'#FFF',paddingTop:'4px',paddingLeft:'4px',border:'2px solid #777'},buttonHTML:'<img title="Drag Zoom In" src="images/zoomin.gif">',buttonStyle:{width:'25px',height:'23px'},buttonZoomingHTML:'To zoom, drag a region on the map, or click here to cancel.',buttonZoomingStyle:{background:'#eeeeee',width:'200px',height:'50px'},backButtonHTML:'<img title="Zoom Back Out" src="images/zoomout.gif">',backButtonStyle:{display:'none',marginTop:'5px',width:'25px',height:'23px'},backButtonEnabled:true,overlayRemoveTime:0};if(traffic_overlays_enabled){var opts={hide:true};traffic_overlay=new GTrafficOverlay(opts);map.addOverlay(traffic_overlay);}var drag_control=new DragZoomControl({},otherOpts,{});drag_control.anchor=new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(79,5));map_controls.push(drag_control);map.enableScrollWheelZoom();}else map.disableDoubleClickZoom();if(dispatch)map_controls.push(new GSmallMapControl());mgr=new GMarkerManager(map);InitializeOverlays();MouseOverMap();SetStreetviewSize();if(load_callback!=null)load_callback();}else window.location.href='browser.scrx';map_loaded=true;};function MouseOverMap(){if(!controls_on){controls_on=true;for(r=0;r<map_controls.length;r++){if(map_controls[r].anchor)map.addControl(map_controls[r],map_controls[r].anchor);else map.addControl(map_controls[r]);}document.getElementById("content_parent").style.visibility="visible";}};function MouseLeftMap(){controls_on=false;for(r=0;r<map_controls.length;r++)map.removeControl(map_controls[r]);document.getElementById("content_parent").style.visibility="hidden";};function OnPageLoad(){Initialize();};function getWindowHeight(){if(window.self&&self.innerHeight)return self.innerHeight;if(document.documentElement&&document.documentElement.clientHeight)return document.documentElement.clientHeight;return 0;};function SetMapSize(){var size=BrowserSize();var d=document.getElementById("map");var offsetTop=0;for(var elem=d;elem!=null;elem=elem.offsetParent)offsetTop+=elem.offsetTop;var height=getWindowHeight()-offsetTop-5;if(mirage)height-=7;if(height>0)d.style.height=height+"px";x_margin=10;if(mirage)x_margin+=7;d.style.width=size[0]-x_margin+"px";SetStreetviewSize();};function SetStreetviewSize(){if(!sv_container_width)return;var d=document.getElementById("map");var offsetTop=0;for(var elem=d;elem!=null;elem=elem.offsetParent)offsetTop+=elem.offsetTop;var height=getWindowHeight()-offsetTop-5;var x=sv_container_width;if(height<500)x=250;else if(height>=500&&height<700)x=290;else x=330;x=250;sv_container_width=x;sv_container_height=x;};function BrowserSize(){var myWidth=0,myHeight=0;if(typeof(window.innerWidth)=='number'){myWidth=window.innerWidth;myHeight=window.innerHeight;}else if(document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)){myWidth=document.documentElement.clientWidth;myHeight=document.documentElement.clientHeight;}else if(document.body&&(document.body.clientWidth||document.body.clientHeight)){myWidth=document.body.clientWidth;myHeight=document.body.clientHeight;}var ret=new Array(2);ret[0]=myWidth;ret[1]=myHeight;if(last_height==0){last_width=ret[0];last_height=ret[1];}return(ret);};function GetXML(xml_url){xml_url=xml_url+"&hash="+Math.random();if(window.XMLHttpRequest){xml_request=new XMLHttpRequest();xml_request.onreadystatechange=Update;xml_request.open("GET",xml_url,true);xml_request.send(null);}else if(window.ActiveXObject){xml_request=new ActiveXObject("Microsoft.XMLHTTP");if(xml_request){xml_request.onreadystatechange=Update;xml_request.open("GET",xml_url,true);xml_request.send();}}};function RequestXML(xml_url,callback){xml_request=null;response=null;xml_url=xml_url+"&hash="+Math.random();if(window.XMLHttpRequest){xml_request=new XMLHttpRequest();xml_request.onreadystatechange=callback;xml_request.open("GET",xml_url,true);xml_request.send(null);}else if(window.ActiveXObject){xml_request=new ActiveXObject("Microsoft.XMLHTTP");if(xml_request){xml_request.onreadystatechange=callback;xml_request.open("GET",xml_url,true);xml_request.send();}}};function SetGoogleZoom(arr,remove_outliers,callback){if(arr.length==0)return;var bounds=new GLatLngBounds();if(remove_outliers){var lats=[];var lngs=[];for(t=0;t<arr.length;t++){lats.push(Math.abs(arr[t].lat()));lngs.push(Math.abs(arr[t].lng()));}var lat_std_dev=lats.standardDeviation();var lng_std_dev=lngs.standardDeviation();var lat_mean=lats.mean();var lng_mean=lngs.mean();for(t=0;t<arr.length;t++){diff_lat=Math.abs(lats[t]-lat_mean);diff_lng=Math.abs(lngs[t]-lng_mean);var cutoff=0.5;if(!((diff_lat>(lat_std_dev*cutoff))&&(diff_lng>(lng_std_dev*cutoff))))bounds.extend(arr[t]);}if(bounds.isEmpty()){for(t=0;t<arr.length;t++)bounds.extend(arr[t]);}}else{for(i=0;i<arr.length;i++)bounds.extend(arr[i]);}previous_zoom_level=map.getZoom();var zoom=map.getBoundsZoomLevel(bounds);current_zoom_level=zoom;var center_lat=(bounds.getNorthEast().lat()+bounds.getSouthWest().lat())/2.0;var center_lng=(bounds.getNorthEast().lng()+bounds.getSouthWest().lng())/2.0;var center=new GLatLng(center_lat,center_lng);if(zoom>16){zoom=16;}map.setCenter(center,zoom);force_image_update=true;if(callback)callback();};function QueryString(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 pair[1];}}return("");};function ParentQueryString(variable){var query=window.parent.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 pair[1];}}return("");};function URLEncode(plaintext){var SAFECHARS="0123456789"+"ABCDEFGHIJKLMNOPQRSTUVWXYZ"+"abcdefghijklmnopqrstuvwxyz"+"-_.!~*'()";var HEX="0123456789ABCDEF";var encoded="";for(var i=0;i<plaintext.length;i++){var ch=plaintext.charAt(i);if(ch==" "){encoded+="+";}else if(SAFECHARS.indexOf(ch)!= -1){encoded+=ch;}else{var charCode=ch.charCodeAt(0);if(charCode>255){alert("Unicode Character '"+ch+"' cannot be encoded using standard URL encoding.\n"+"(URL encoding only supports 8-bit characters.)\n"+"A space (+) will be substituted.");encoded+="+";}else{encoded+="%";encoded+=HEX.charAt((charCode>>4)&0xF);encoded+=HEX.charAt(charCode&0xF);}}}return(encoded);};Date.prototype.format=function(format){var returnStr='';var replace=Date.replaceChars;for(var i=0;i<format.length;i++){var curChar=format.charAt(i);if(replace[curChar])returnStr+=replace[curChar].call(this);else returnStr+=curChar;}return returnStr;};Date.replaceChars={shortMonths:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],longMonths:['January','February','March','April','May','June','July','August','September','October','November','December'],shortDays:['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],longDays:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],d:function(){return(this.getDate()<10?'0':'')+this.getDate();},D:function(){return Date.replaceChars.shortDays[this.getDay()];},j:function(){return this.getDate();},l:function(){return Date.replaceChars.longDays[this.getDay()];},N:function(){return this.getDay()+1;},S:function(){return(this.getDate()%10==1&&this.getDate()!=11?'st':(this.getDate()%10==2&&this.getDate()!=12?'nd':(this.getDate()%10==13&&this.getDate()!=1?'rd':'th')));},w:function(){return this.getDay();},z:function(){return "Not Yet Supported";},W:function(){return "Not Yet Supported";},F:function(){return Date.replaceChars.longMonths[this.getMonth()];},m:function(){return(this.getMonth()<11?'0':'')+(this.getMonth()+1);},M:function(){return Date.replaceChars.shortMonths[this.getMonth()];},n:function(){return this.getMonth()+1;},t:function(){return "Not Yet Supported";},L:function(){return "Not Yet Supported";},o:function(){return "Not Supported";},Y:function(){return this.getFullYear();},y:function(){return(''+this.getFullYear()).substr(2);},a:function(){return this.getHours()<12?'am':'pm';},A:function(){return this.getHours()<12?'AM':'PM';},B:function(){return "Not Yet Supported";},g:function(){return this.getHours()==0?12:(this.getHours()>12?this.getHours()-12:this.getHours());},G:function(){return this.getHours();},h:function(){return(this.getHours()<10||(12<this.getHours()<22)?'0':'')+(this.getHours()<10?this.getHours()+1:this.getHours()-12);},H:function(){return(this.getHours()<10?'0':'')+this.getHours();},i:function(){return(this.getMinutes()<10?'0':'')+this.getMinutes();},s:function(){return(this.getSeconds()<10?'0':'')+this.getSeconds();},e:function(){return "Not Yet Supported";},I:function(){return "Not Supported";},O:function(){return(this.getTimezoneOffset()<0?'-':'+')+(this.getTimezoneOffset()/60<10?'0':'')+(this.getTimezoneOffset()/60)+'00';},T:function(){return "Not Yet Supported";},Z:function(){return this.getTimezoneOffset()*60;},c:function(){return "Not Yet Supported";},r:function(){return this.toString();},U:function(){return this.getTime()/1000;}};function GetDayName(day_index,shorten){switch(day_index){case 0:return((shorten)?"Sun":"Sunday");case 1:return((shorten)?"Mon":"Monday");case 2:return((shorten)?"Tue":"Tuesday");case 3:return((shorten)?"Wed":"Wednesday");case 4:return((shorten)?"Thu":"Thursday");case 5:return((shorten)?"Fri":"Friday");case 6:return((shorten)?"Sat":"Saturday");}return("");};function DateDifference(date1,date2){var diff=new Object();diff.ms=Math.abs(date2.getTime()-date1.getTime());diff.days=Math.floor(diff.ms/(1000*60*60*24));diff.ms-=diff.days*(1000*60*60*24);diff.hours=Math.floor(diff.ms/(1000*60*60));diff.ms-=diff.hours*(1000*60*60);diff.mins=Math.floor(diff.ms/(1000*60));diff.ms-=diff.mins*(1000*60);diff.secs=Math.floor(diff.ms/1000);diff.ms-=diff.secs*1000;return(diff);};function CalculateElapsedTime(timestamp){var seconds=0;var minutes=0;var hours=0;var days=0;seconds=Math.abs(parseInt(timestamp));if(seconds>60){minutes=Math.round(seconds/60);if(minutes>60){hours=Math.round(minutes/60);if(hours>24){days=Math.round(hours/24);hours=hours%24;}minutes=minutes%60;}seconds=seconds%60;}var text="";if(days>0)text+=days+"d ";if(hours>0)text+=hours+"h ";if(minutes>0)text+=minutes+"m ";text+=seconds+"s ";return(text);};function numbersOnly(event){var evt=event;var charCode=(evt.charCode)?evt.charCode:((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));if((charCode<45||charCode>57)&&(charCode!=8)&&(charCode!=127)){return false;}else if(evt.ctrlKey){return false;}else return true;};function timeOnly(event){var evt=event;var charCode=(evt.charCode)?evt.charCode:((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));if((charCode<48||charCode>58)&&(charCode!=65)&&(charCode!=80)&&(charCode!=97)&&(charCode!=112)&&(charCode!=8)&&(charCode!=127)&&(charCode!=36)&&(charCode!=37)){window.alert("code: "+charCode);return false;}else if(evt.ctrlKey){return false;}else return true;};function GetPolyline(points,color,weight){var given_small=0.00001;var given_levels=18;var given_zoomFactor=2;var given_opacity=0.8;if(!encoder)encoder=new PolylineEncoder(given_levels,given_zoomFactor,given_small);return(encoder.dpEncodeToGPolyline(points,color,weight,given_opacity));};PolylineEncoder=function(numLevels,zoomFactor,verySmall,forceEndpoints){var i;if(!numLevels){numLevels=18;}if(!zoomFactor){zoomFactor=2;}if(!verySmall){verySmall=0.00001;}if(!forceEndpoints){forceEndpoints=true;}this.numLevels=numLevels;this.zoomFactor=zoomFactor;this.verySmall=verySmall;this.forceEndpoints=forceEndpoints;this.zoomLevelBreaks=new Array(numLevels);for(i=0;i<numLevels;i++){this.zoomLevelBreaks[i]=verySmall*Math.pow(zoomFactor,numLevels-i-1);}};PolylineEncoder.prototype.dpEncode=function(points){var absMaxDist=0;var stack=[];var dists=new Array(points.length);var maxDist,maxLoc,temp,first,last,current;var i,encodedPoints,encodedLevels;var segmentLength;if(points.length>2){stack.push([0,points.length-1]);while(stack.length>0){current=stack.pop();maxDist=0;segmentLength=Math.pow(points[current[1]].lat()-points[current[0]].lat(),2)+Math.pow(points[current[1]].lng()-points[current[0]].lng(),2);for(i=current[0]+1;i<current[1];i++){temp=this.distance(points[i],points[current[0]],points[current[1]],segmentLength);if(temp>maxDist){maxDist=temp;maxLoc=i;if(maxDist>absMaxDist){absMaxDist=maxDist;}}}if(maxDist>this.verySmall){dists[maxLoc]=maxDist;stack.push([current[0],maxLoc]);stack.push([maxLoc,current[1]]);}}}encodedPoints=this.createEncodings(points,dists);encodedLevels=this.encodeLevels(points,dists,absMaxDist);return{encodedPoints:encodedPoints,encodedLevels:encodedLevels,encodedPointsLiteral:encodedPoints.replace(/\\/g,"\\\\")}};PolylineEncoder.prototype.dpEncodeToJSON=function(points,color,weight,opacity){var result;if(!opacity){opacity=0.9;}if(!weight){weight=3;}if(!color){color="#0000ff";}result=this.dpEncode(points);return{color:color,weight:weight,opacity:opacity,points:result.encodedPoints,levels:result.encodedLevels,numLevels:this.numLevels,zoomFactor:this.zoomFactor}};PolylineEncoder.prototype.dpEncodeToGPolyline=function(points,color,weight,opacity){if(!opacity){opacity=0.9;}if(!weight){weight=3;}if(!color){color="#0000ff";}return new GPolyline.fromEncoded(this.dpEncodeToJSON(points,color,weight,opacity));};PolylineEncoder.prototype.dpEncodeToGPolygon=function(pointsArray,boundaryColor,boundaryWeight,boundaryOpacity,fillColor,fillOpacity,fill,outline){var i,boundaries;if(!boundaryColor){boundaryColor="#0000ff";}if(!boundaryWeight){boundaryWeight=3;}if(!boundaryOpacity){boundaryOpacity=0.9;}if(!fillColor){fillColor=boundaryColor;}if(!fillOpacity){fillOpacity=boundaryOpacity/3;}if(fill==undefined){fill=true;}if(outline==undefined){outline=true;}boundaries=new Array(0);for(i=0;i<pointsArray.length;i++){boundaries.push(this.dpEncodeToJSON(pointsArray[i],boundaryColor,boundaryWeight,boundaryOpacity));}return new GPolygon.fromEncoded({polylines:boundaries,color:fillColor,opacity:fillOpacity,fill:fill,outline:outline});};PolylineEncoder.prototype.distance=function(p0,p1,p2,segLength){var u,out;if(p1.lat()===p2.lat()&&p1.lng()===p2.lng()){out=Math.sqrt(Math.pow(p2.lat()-p0.lat(),2)+Math.pow(p2.lng()-p0.lng(),2));}else{u=((p0.lat()-p1.lat())*(p2.lat()-p1.lat())+(p0.lng()-p1.lng())*(p2.lng()-p1.lng()))/segLength;if(u<=0){out=Math.sqrt(Math.pow(p0.lat()-p1.lat(),2)+Math.pow(p0.lng()-p1.lng(),2));}if(u>=1){out=Math.sqrt(Math.pow(p0.lat()-p2.lat(),2)+Math.pow(p0.lng()-p2.lng(),2));}if(0<u&&u<1){out=Math.sqrt(Math.pow(p0.lat()-p1.lat()-u*(p2.lat()-p1.lat()),2)+Math.pow(p0.lng()-p1.lng()-u*(p2.lng()-p1.lng()),2));}}return out;};PolylineEncoder.prototype.createEncodings=function(points,dists){var i,dlat,dlng;var plat=0;var plng=0;var encoded_points="";for(i=0;i<points.length;i++){if(dists[i]!=undefined||i==0||i==points.length-1){var point=points[i];var lat=point.lat();var lng=point.lng();var late5=Math.floor(lat*1e5);var lnge5=Math.floor(lng*1e5);dlat=late5-plat;dlng=lnge5-plng;plat=late5;plng=lnge5;encoded_points+=this.encodeSignedNumber(dlat)+this.encodeSignedNumber(dlng);}}return encoded_points;};PolylineEncoder.prototype.computeLevel=function(dd){var lev;if(dd>this.verySmall){lev=0;while(dd<this.zoomLevelBreaks[lev]){lev++;}return lev;}};PolylineEncoder.prototype.encodeLevels=function(points,dists,absMaxDist){var i;var encoded_levels="";if(this.forceEndpoints){encoded_levels+=this.encodeNumber(this.numLevels-1)}else{encoded_levels+=this.encodeNumber(this.numLevels-this.computeLevel(absMaxDist)-1)}for(i=1;i<points.length-1;i++){if(dists[i]!=undefined){encoded_levels+=this.encodeNumber(this.numLevels-this.computeLevel(dists[i])-1);}}if(this.forceEndpoints){encoded_levels+=this.encodeNumber(this.numLevels-1)}else{encoded_levels+=this.encodeNumber(this.numLevels-this.computeLevel(absMaxDist)-1)}return encoded_levels;};PolylineEncoder.prototype.encodeNumber=function(num){var encodeString="";var nextValue,finalValue;while(num>=0x20){nextValue=(0x20|(num&0x1f))+63;encodeString+=(String.fromCharCode(nextValue));num>>=5;}finalValue=num+63;encodeString+=(String.fromCharCode(finalValue));return encodeString;};PolylineEncoder.prototype.encodeSignedNumber=function(num){var sgn_num=num<<1;if(num<0){sgn_num= ~(sgn_num);}return(this.encodeNumber(sgn_num));};PolylineEncoder.latLng=function(y,x){this.y=y;this.x=x;};PolylineEncoder.latLng.prototype.lat=function(){return this.y;};PolylineEncoder.latLng.prototype.lng=function(){return this.x;};PolylineEncoder.pointsToLatLngs=function(points){var i,latLngs;latLngs=new Array(0);for(i=0;i<points.length;i++){latLngs.push(new PolylineEncoder.latLng(points[i][0],points[i][1]));}return latLngs;};PolylineEncoder.pointsToGLatLngs=function(points){var i,gLatLngs;gLatLngs=new Array(0);for(i=0;i<points.length;i++){gLatLngs.push(new GLatLng(points[i][0],points[i][1]));}return gLatLngs;};function DragZoomControl(opts_boxStyle,opts_other,opts_callbacks){this.globals={draggingOn:false,cornerTopDiv:null,cornerRightDiv:null,cornerBottomDiv:null,cornerLeftDiv:null,mapPosition:null,outlineDiv:null,mapWidth:0,mapHeight:0,mapRatio:0,startX:0,startY:0,borderCorrection:0};this.globals.style={opacity:.2,fillColor:"#000",border:"2px solid blue"};var style=this.globals.style;for(var s in opts_boxStyle){style[s]=opts_boxStyle[s];}var borderStyleArray=style.border.split(' ');style.outlineWidth=parseInt(borderStyleArray[0].replace(/\D/g,''));style.outlineColor=borderStyleArray[2];style.alphaIE='alpha(opacity='+(style.opacity*100)+')';this.globals.backStack=[];this.globals.options={buttonHTML:'zoom ...',buttonStartingStyle:{width:'52px',border:'1px solid black',padding:'2px'},buttonStyle:{background:'#FFF'},backButtonHTML:'zoom back',backButtonStyle:{background:'#FFF',display:'none'},buttonZoomingHTML:'Drag a region on the map',buttonZoomingStyle:{background:'#FF0'},overlayRemoveTime:6000,backButtonEnabled:false,stickyZoomEnabled:false};for(var s in opts_other){this.globals.options[s]=opts_other[s]}if(opts_callbacks==null){opts_callbacks={}}this.globals.callbacks=opts_callbacks;};DragZoomControl.prototype=new GControl();DragZoomControl.prototype.saveMapContext=function(text){if(this.globals.options.backButtonEnabled){this.saveBackContext_(text,true);this.globals.backButtonDiv.style.display='block';}};DragZoomControl.prototype.initButton_=function(buttonContainerDiv){var G=this.globals;var buttonDiv=document.createElement('div');buttonDiv.innerHTML=G.options.buttonHTML;buttonDiv.id='gzoom-control';DragZoomUtil.style([buttonDiv],{cursor:'pointer',zIndex:200});DragZoomUtil.style([buttonDiv],G.options.buttonStartingStyle);DragZoomUtil.style([buttonDiv],G.options.buttonStyle);buttonContainerDiv.appendChild(buttonDiv);return buttonDiv;};DragZoomControl.prototype.initBackButton_=function(buttonContainerDiv){var G=this.globals;var backButtonDiv=document.createElement('div');backButtonDiv.innerHTML=G.options.backButtonHTML;backButtonDiv.id='gzoom-back';DragZoomUtil.style([backButtonDiv],{cursor:'pointer',zIndex:200});DragZoomUtil.style([backButtonDiv],G.options.buttonStartingStyle);DragZoomUtil.style([backButtonDiv],G.options.backButtonStyle);buttonContainerDiv.appendChild(backButtonDiv);return backButtonDiv;};DragZoomControl.prototype.setButtonMode_=function(mode){var G=this.globals;if(mode=='zooming'){G.buttonDiv.innerHTML=G.options.buttonZoomingHTML;DragZoomUtil.style([G.buttonDiv],G.options.buttonStartingStyle);DragZoomUtil.style([G.buttonDiv],G.options.buttonZoomingStyle);}else{G.buttonDiv.innerHTML=G.options.buttonHTML;DragZoomUtil.style([G.buttonDiv],G.options.buttonStartingStyle);DragZoomUtil.style([G.buttonDiv],G.options.buttonStyle);}};DragZoomControl.prototype.initialize=function(map){var G=this.globals;var me=this;var mapDiv=map.getContainer();var buttonContainerDiv=document.createElement("div");DragZoomUtil.style([buttonContainerDiv],{cursor:'pointer',zIndex:150});var buttonDiv=this.initButton_(buttonContainerDiv);var backButtonDiv=this.initBackButton_(buttonContainerDiv);mapDiv.appendChild(buttonContainerDiv);var zoomDiv=document.createElement("div");zoomDiv.id='gzoom-map-cover';zoomDiv.innerHTML='<div id="gzoom-outline" style="position:absolute;display:none;"></div><div id="gzoom-cornerTopDiv" style="position:absolute;display:none;"></div><div id="gzoom-cornerLeftDiv" style="position:absolute;display:none;"></div><div id="gzoom-cornerRightDiv" style="position:absolute;display:none;"></div><div id="gzoom-cornerBottomDiv" style="position:absolute;display:none;"></div>';DragZoomUtil.style([zoomDiv],{position:'absolute',display:'none',overflow:'hidden',cursor:'crosshair',zIndex:101});mapDiv.appendChild(zoomDiv);GEvent.addDomListener(buttonDiv,'click',function(e){me.buttonclick_(e);});GEvent.addDomListener(backButtonDiv,'click',function(e){me.backButtonclick_(e);});GEvent.addDomListener(zoomDiv,'mousedown',function(e){me.coverMousedown_(e);});GEvent.addDomListener(document,'mousemove',function(e){me.drag_(e);});GEvent.addDomListener(document,'mouseup',function(e){me.mouseup_(e);});G.mapPosition=DragZoomUtil.getElementPosition(mapDiv);G.outlineDiv=DragZoomUtil.gE("gzoom-outline");G.buttonDiv=DragZoomUtil.gE("gzoom-control");G.backButtonDiv=DragZoomUtil.gE("gzoom-back");G.mapCover=DragZoomUtil.gE("gzoom-map-cover");G.cornerTopDiv=DragZoomUtil.gE("gzoom-cornerTopDiv");G.cornerRightDiv=DragZoomUtil.gE("gzoom-cornerRightDiv");G.cornerBottomDiv=DragZoomUtil.gE("gzoom-cornerBottomDiv");G.cornerLeftDiv=DragZoomUtil.gE("gzoom-cornerLeftDiv");G.map=map;G.borderCorrection=G.style.outlineWidth*2;this.setDimensions_();this.initStyles_();return buttonContainerDiv;};DragZoomControl.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(3,120));};DragZoomControl.prototype.coverMousedown_=function(e){var G=this.globals;var pos=this.getRelPos_(e);G.startX=pos.left;G.startY=pos.top;DragZoomUtil.style([G.mapCover],{background:'transparent',opacity:1,filter:'alpha(opacity=100)'});DragZoomUtil.style([G.outlineDiv],{left:G.startX+'px',top:G.startY+'px',display:'block',width:'1px',height:'1px'});G.draggingOn=true;G.cornerTopDiv.style.top=(G.startY-G.mapHeight)+'px';G.cornerTopDiv.style.display='block';G.cornerLeftDiv.style.left=(G.startX-G.mapWidth)+'px';G.cornerLeftDiv.style.top=G.startY+'px';G.cornerLeftDiv.style.display='block';G.cornerRightDiv.style.left=G.startX+'px';G.cornerRightDiv.style.top=G.startY+'px';G.cornerRightDiv.style.display='block';G.cornerBottomDiv.style.left=G.startX+'px';G.cornerBottomDiv.style.top=G.startY+'px';G.cornerBottomDiv.style.width='0px';G.cornerBottomDiv.style.display='block';if(G.callbacks.dragstart!=null){G.callbacks.dragstart(G.startX,G.startY);}return false;};DragZoomControl.prototype.drag_=function(e){var G=this.globals;document.onselectstart=function(){return false;};if(G.draggingOn){var pos=this.getRelPos_(e);rect=this.getRectangle_(G.startX,G.startY,pos,G.mapRatio);if(rect.left){addX= -rect.width;}else{addX=0;}if(rect.top){addY= -rect.height;}else{addY=0;}DragZoomUtil.style([G.outlineDiv],{left:G.startX+addX+'px',top:G.startY+addY+'px',display:'block',width:'1px',height:'1px'});G.outlineDiv.style.width=rect.width+"px";G.outlineDiv.style.height=rect.height+"px";G.cornerTopDiv.style.height=((G.startY+addY)-(G.startY-G.mapHeight))+'px';G.cornerLeftDiv.style.top=(G.startY+addY)+'px';G.cornerLeftDiv.style.width=((G.startX+addX)-(G.startX-G.mapWidth))+'px';G.cornerRightDiv.style.top=G.cornerLeftDiv.style.top;G.cornerRightDiv.style.left=(G.startX+addX+rect.width+G.borderCorrection)+'px';G.cornerBottomDiv.style.top=(G.startY+addY+rect.height+G.borderCorrection)+'px';G.cornerBottomDiv.style.left=(G.startX-G.mapWidth+((G.startX+addX)-(G.startX-G.mapWidth)))+'px';G.cornerBottomDiv.style.width=(rect.width+G.borderCorrection)+'px';if(G.callbacks.dragging!=null){G.callbacks.dragging(G.startX,G.startY,rect.endX,rect.endY)}return false;}};DragZoomControl.prototype.mouseup_=function(e){var G=this.globals;if(G.draggingOn){var pos=this.getRelPos_(e);G.draggingOn=false;var rect=this.getRectangle_(G.startX,G.startY,pos,G.mapRatio);if(rect.left)rect.endX=rect.startX-rect.width;if(rect.top)rect.endY=rect.startY-rect.height;this.resetDragZoom_();var nwpx=new GPoint(rect.startX,rect.startY);var nepx=new GPoint(rect.endX,rect.startY);var sepx=new GPoint(rect.endX,rect.endY);var swpx=new GPoint(rect.startX,rect.endY);var nw=G.map.fromContainerPixelToLatLng(nwpx);var ne=G.map.fromContainerPixelToLatLng(nepx);var se=G.map.fromContainerPixelToLatLng(sepx);var sw=G.map.fromContainerPixelToLatLng(swpx);var zoomAreaPoly=new GPolyline([nw,ne,se,sw,nw],G.style.outlineColor,G.style.outlineWidth+1,.4);try{G.map.addOverlay(zoomAreaPoly);setTimeout(function(){G.map.removeOverlay(zoomAreaPoly)},G.options.overlayRemoveTime);}catch(e){}polyBounds=zoomAreaPoly.getBounds();var ne=polyBounds.getNorthEast();var sw=polyBounds.getSouthWest();var se=new GLatLng(sw.lat(),ne.lng());var nw=new GLatLng(ne.lat(),sw.lng());zoomLevel=G.map.getBoundsZoomLevel(polyBounds);center=polyBounds.getCenter();G.map.setCenter(center,zoomLevel);if(G.callbacks.dragend!=null){G.callbacks.dragend(nw,ne,se,sw,nwpx,nepx,sepx,swpx);}if(G.options.stickyZoomEnabled){this.initCover_();if(G.options.backButtonEnabled)this.saveBackContext_(G.options.backButtonHTML,false);G.backButtonDiv.style.display='none';}}};DragZoomControl.prototype.setDimensions_=function(){var G=this.globals;var mapSize=G.map.getSize();G.mapWidth=mapSize.width;G.mapHeight=mapSize.height;G.mapRatio=G.mapHeight/G.mapWidth;DragZoomUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv],{width:G.mapWidth+'px',height:G.mapHeight+'px'});};DragZoomControl.prototype.initStyles_=function(){var G=this.globals;DragZoomUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv],{filter:G.style.alphaIE,opacity:G.style.opacity,background:G.style.fillColor});G.outlineDiv.style.border=G.style.border;};DragZoomControl.prototype.buttonclick_=function(){var G=this.globals;G.backButtonDiv.style.display='none';if(G.mapCover.style.display=='block'){this.resetDragZoom_();if(G.options.backButtonEnabled){this.restoreBackContext_();if(G.backStack.length==0)G.backButtonDiv.style.display='none';}}else{this.initCover_();if(G.options.backButtonEnabled)this.saveBackContext_(G.options.backButtonHTML,false);}};DragZoomControl.prototype.backButtonclick_=function(){var G=this.globals;if(G.options.backButtonEnabled){this.restoreBackContext_();if(G.callbacks['backbuttonclick']!=null){G.callbacks.backbuttonclick(G.methodCall);}}};DragZoomControl.prototype.saveBackContext_=function(text,methodCall){var G=this.globals;var backFrame={};backFrame["center"]=G.map.getCenter();backFrame["zoom"]=G.map.getZoom();backFrame["maptype"]=G.map.getCurrentMapType();backFrame["text"]=G.backButtonDiv.innerHTML;backFrame["methodCall"]=methodCall;G.backStack.push(backFrame);G.backButtonDiv.innerHTML=text;};DragZoomControl.prototype.restoreBackContext_=function(){var G=this.globals;var backFrame=G.backStack.pop();G.map.setCenter(backFrame["center"],backFrame["zoom"],backFrame["maptype"]);G.backButtonDiv.innerHTML=backFrame["text"];G.methodCall=backFrame["methodCall"];if(G.backStack.length==0)G.backButtonDiv.style.display='none';};DragZoomControl.prototype.initCover_=function(){var G=this.globals;G.mapPosition=DragZoomUtil.getElementPosition(G.map.getContainer());this.setDimensions_();this.setButtonMode_('zooming');DragZoomUtil.style([G.mapCover],{display:'block',background:G.style.fillColor});DragZoomUtil.style([G.outlineDiv],{width:'0px',height:'0px'});if(G.callbacks['buttonclick']!=null){G.callbacks.buttonclick();}};DragZoomControl.prototype.getRelPos_=function(e){var pos=DragZoomUtil.getMousePosition(e);var G=this.globals;return{top:(pos.top-G.mapPosition.top),left:(pos.left-G.mapPosition.left)};};DragZoomControl.prototype.getRectangle_=function(startX,startY,pos,ratio){var left=false;var top=false;var dX=pos.left-startX;var dY=pos.top-startY;if(dX<0){dX=dX* -1;left=true;}if(dY<0){dY=dY* -1;top=true;}delta=dX>dY?dX:dY;return{startX:startX,startY:startY,endX:startX+delta,endY:startY+parseInt(delta*ratio),width:delta,height:parseInt(delta*ratio),left:left,top:top}};DragZoomControl.prototype.resetDragZoom_=function(){var G=this.globals;DragZoomUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv],{display:'none',opacity:G.style.opacity,filter:G.style.alphaIE});G.outlineDiv.style.display='none';this.setButtonMode_('normal');if(G.options.backButtonEnabled&&(G.backStack.length>0))G.backButtonDiv.style.display='block';};var DragZoomUtil={};DragZoomUtil.gE=function(sId){return document.getElementById(sId);};DragZoomUtil.getMousePosition=function(e){var posX=0;var posY=0;if(!e)var e=window.event;if(e.pageX||e.pageY){posX=e.pageX;posY=e.pageY;}else if(e.clientX||e.clientY){posX=e.clientX+(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft);posY=e.clientY+(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop);}return{left:posX,top:posY};};DragZoomUtil.getElementPosition=function(element){var leftPos=element.offsetLeft;var topPos=element.offsetTop;var parElement=element.offsetParent;while(parElement!=null){leftPos+=parElement.offsetLeft;topPos+=parElement.offsetTop;parElement=parElement.offsetParent;}return{left:leftPos,top:topPos};};DragZoomUtil.style=function(elements,styles){if(typeof(elements)=='string'){elements=DragZoomUtil.getManyElements(elements);}for(var i=0;i<elements.length;i++){for(var s in styles){elements[i].style[s]=styles[s];}}};DragZoomUtil.getManyElements=function(idsString){var idsArray=idsString.split(',');var elements=[];for(var i=0;i<idsArray.length;i++){elements[elements.length]=DragZoomUtil.gE(idsArray[i])};return elements;};Array.prototype.sumSquared=function(){return this.reduce(function(a,b){return a*a+b});};Array.prototype.variance=function(){var mean=this.mean();if(mean){var sum=this.sum();return(this.length*this.sumSquared()-sum*sum)/(this.length*(this.length-1));}else{return Number.NaN;}};Array.prototype.standardDeviation=function(){return Math.sqrt(this.variance());};Array.prototype.sum=function(){return this.reduce(function(a,b){return a+b;});};Array.prototype.mean=function(){var count=this.count();if(count){return(this.sum()/count);}else{return Number.NaN;}};Array.prototype.reduce=function(f,result){result=result||0;for(var i=0;i<this.length;i++){if(this[i]&&this[i].constructor==Array){result=this[i].reduce(f,result);}else{result=f(this[i],result);}}return result;};Array.prototype.count=function(testFunction){var count=0;for(var i=0;i<this.length;i++){if(this[i].constructor==Array){count+=this[i].count(testFunction);}else{if(testFunction){if(testFunction(this[i])){count+=1;}}else{count+=1;}}}return count;};function drawSliderByVal(slider){var knob=slider.getElementsByTagName('img')[0];var p=(slider.val-slider.min)/(slider.max-slider.min);var x=(slider.scrollWidth-30)*p;knob.style.left=x+"px";};function setSliderByClientX(slider,clientX){var p=(clientX-slider.offsetLeft-15)/(slider.scrollWidth-30);slider.val=(slider.max-slider.min)*p+slider.min;if(slider.val>slider.max)slider.val=slider.max;if(slider.val<slider.min)slider.val=slider.min;drawSliderByVal(slider);slider.onchange(slider.val,slider.num);};function sliderClick(e){var el=sliderFromEvent(e);if(!el)return;setSliderByClientX(el,e.clientX);};function sliderMouseMove(e){var el=sliderFromEvent(e);if(!el)return;if(activeSlider<0)return;setSliderByClientX(el,e.clientX);stopEvent(e);};function sliderFromEvent(e){if(!e&&window.event)e=window.event;if(!e)return false;var el;if(e.target)el=e.target;if(e.srcElement)el=e.srcElement;if(!el.id|| !el.id.match(/slider\d+/))el=el.parentNode;if(!el)return false;if(!el.id|| !el.id.match(/slider\d+/))return false;return el;};function attachSliderEvents(){var divs=document.getElementsByTagName('div');var divNum;for(var i=0;i<divs.length;i++){if(divNum=divs[i].id.match(/\bslider(\d+)\b/)){divNum=parseInt(divNum[1]);divs[i].min=slider[divNum].min;divs[i].max=slider[divNum].max;divs[i].val=slider[divNum].val;divs[i].onchange=slider[divNum].onchange;divs[i].num=divNum;drawSliderByVal(divs[i]);if(!loaded)divs[i].onchange(divs[i].val,divNum);addAnEvent(divs[i],'mousedown',function(e){sliderClick(e);var el=sliderFromEvent(e);if(!el)return;activeSlider=el.num;stopEvent(e);});addAnEvent(divs[i],'mouseup',function(e){activeSlider= -1;stopEvent(e);});addAnEvent(divs[i],'mouseout',function(e){activeSlider= -1;stopEvent(e);});}}};function addAnEvent(el,evname,func){if(el.attachEvent){el.attachEvent("on"+evname,func);}else if(el.addEventListener){el.addEventListener(evname,func,true);}else{el["on"+evname]=func;}};function stopEvent(event){if(event.preventDefault){event.preventDefault();event.stopPropagation();}else{event.returnValue=false;event.cancelBubble=true;}};DateConstants={DAYS:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],DAYS_SHORT:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],MONTHS:["January","February","March","April","May","June","July","August","September","October","November","December"],MONTHS_SHORT:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],MONTHS_LCASE:["january","february","march","april","may","june","july","august","september","october","november","december"],MONTHS_SHORT_LCASE:["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"]};Date.prototype.validDayMonthYear=function(day,month,year){if(isNaN(day)||isNaN(month)||isNaN(year))throw("day, month, and year must all be integer values");return day>0&&day<=Date.prototype.daysInMonth(month,year);};Date.prototype.daysInMonth=function(month,year){switch(month){case 8:case 3:case 5:case 10:{return 30;break;}case 1:{return(Date.prototype.isLeapYear(year)?29:28);break;}default:{return 31;}}};Date.prototype.isLeapYear=function(year){return year%4==0;};Date.prototype.fullYear=function(date){var x=date.getYear();var y=x%100;y+=(y<38)?2000:1900;return y;};Date.prototype.PARSE_REG_EXP_COMMON={LEADING_1_12:"10|11|12|(?:0[1-9])",NO_LEADING_1_12:"10|11|12|(?:[1-9])",BOTH_0_59:"[0-5][0-9]"};Date.prototype.PARSE_REG_EXP={d:"30|31|(?:[0-2][0-9])",D:DateConstants.DAYS_SHORT.join("|"),j:"30|31|(?:[12]?[0-9])",l:DateConstants.DAYS.join("|"),N:"[1-7]",S:"st|nd|rd|th",W:"50|51|52|(?:[1234]?[0-9])",F:DateConstants.MONTHS.join("|"),m:Date.prototype.PARSE_REG_EXP_COMMON.LEADING_1_12,M:DateConstants.MONTHS_SHORT.join("|"),n:Date.prototype.PARSE_REG_EXP_COMMON.NO_LEADING_1_12,t:"28|29|30|31",Y:"[0-9]{4}",y:"[0-9]{2}",a:"am|pm",A:"AM|PM",B:"[0-9]{1,3}",g:Date.prototype.PARSE_REG_EXP_COMMON.NO_LEADING_1_12,G:"20|21|22|23|(?:[1]?[1-9])",h:Date.prototype.PARSE_REG_EXP_COMMON.LEADING_1_12,H:"20|21|22|23|(?:[01]?[1-9])",i:Date.prototype.PARSE_REG_EXP_COMMON.BOTH_0_59,s:Date.prototype.PARSE_REG_EXP_COMMON.BOTH_0_59};Date.prototype.PARSE_REG_EXP.c=Date.prototype.PARSE_REG_EXP.Y+"\-"+Date.prototype.PARSE_REG_EXP.m+"\-"+Date.prototype.PARSE_REG_EXP.d+"T"+Date.prototype.PARSE_REG_EXP.H+":"+Date.prototype.PARSE_REG_EXP.i+":"+Date.prototype.PARSE_REG_EXP.s;String.prototype.extractInt=function(str){var ret="";var matches=str.match(/[0-9]+/ig);if(matches){for(var i=0;i<matches.length;i++){var part="";for(var j=0;j<matches[i].length;j++){var chr=matches[i].charAt(j);if(!(part.length==0&&chr=='0')){part+=chr;}}ret+=part;}}return ret==""?0:parseInt(ret);};Number.prototype.leadingZero=function(number,toLength){return String.prototype.repeat('0',(toLength||2)-number.toString().length)+number.toString();};String.prototype.repeat=function(str,count){var ret='';for(var i=0;i<count;i++)ret+=str;return ret;};function AdvancedDateParse(str,format){var matchIndices=new Object();var now=new Date();var day=now.getDate();var month=now.getMonth();var year=Date.prototype.fullYear(now);var hour=0;var minute=0;var second=0;var meridiem='AM';var pattern='';for(var i=0;i<format.length;i++){var part=format.charAt(i);var matchKey='';switch(part){case 'd':{}case 'j':{matchKey='day';break;}case 'm':case 'F':case 'M':case 'n':{matchKey='month';break;}case 'y':case 'Y':{matchKey='year';break;}case 'g':case 'G':case 'h':case 'H':{matchKey='hour';break;}case 'i':{matchKey='minute';break;}case 's':{matchKey='second';break;}case 'a':case 'A':{matchKey='meridiem';break;}}if(matchKey)matchIndices[matchKey]={index:i+1,format:part};var pre=Date.prototype.PARSE_REG_EXP[part];if(pre)pattern=pattern+"("+pre+")";else pattern=pattern+"("+part+")";}var matches=str.match(new RegExp(pattern,"i"));if(matches){if(matchIndices['day']&&matchIndices['month']&&matchIndices['year']){day=String.prototype.extractInt(matches[matchIndices['day'].index]);if(matchIndices['month'].format=='F')month=DateConstants.MONTHS_LCASE.indexOf(matches[matchIndices['month'].index].toLowerCase());else if(matchIndices['month'].format=='M')month=DateConstants.MONTHS_SHORT_LCASE.indexOf(matches[matchIndices['month'].index].toLowerCase());else month=String.prototype.extractInt(matches[matchIndices['month'].index])-1;if(matchIndices['year'].format=='Y')year=String.prototype.extractInt(matches[matchIndices['year'].index]);else{var yearValue=String.prototype.extractInt(matches[matchIndices['year'].index]);if(yearValue>=69){year=String.prototype.extractInt("19"+Number.prototype.leadingZero(yearValue));}else{year=String.prototype.extractInt("20"+Number.prototype.leadingZero(yearValue));}}if(!Date.prototype.validDayMonthYear(day,month,year))return false;}if(matchIndices['meridiem'])meridiem=matches[matchIndices['meridiem'].index].toUpperCase();if(matchIndices['hour']){hour=String.prototype.extractInt(matches[matchIndices['hour'].index]);if(matchIndices['hour'].format=='g'||matchIndices['hour'].format=='h'){if(meridiem=='AM'){if(hour==12)hour=0;}else{if(hour!=12)hour=hour+12;}}}if(matchIndices['minute'])minute=String.prototype.extractInt(matches[matchIndices['minute'].index]);if(matchIndices['second'])second=String.prototype.extractInt(matches[matchIndices['second'].index]);return new Date(year,month,day,hour,minute,second);}return false;};