String.prototype.md5=function(){function j(r,u){var t=(r&65535)+(u&65535);var s=(r>>16)+(u>>16)+(t>>16);return(s<<16)|(t&65535)}function i(r,s){return(r<<s)|(r>>>(32-s))}function n(z,v,u,r,y,w){return j(i(j(j(v,z),j(r,w)),y),u)}function c(v,u,A,z,r,y,w){return n((u&A)|((~u)&z),v,u,r,y,w)}function m(v,u,A,z,r,y,w){return n((u&z)|(A&(~z)),v,u,r,y,w)}function g(v,u,A,z,r,y,w){return n(u^A^z,v,u,r,y,w)}function o(v,u,A,z,r,y,w){return n(A^(u|(~z)),v,u,r,y,w)}function f(B){var A=1732584193;var z=-271733879;var y=-1732584194;var w=271733878;for(var t=0;t<B.length;t+=16){var v=A;var u=z;var s=y;var r=w;A=c(A,z,y,w,B[t+0],7,-680876936);w=c(w,A,z,y,B[t+1],12,-389564586);y=c(y,w,A,z,B[t+2],17,606105819);z=c(z,y,w,A,B[t+3],22,-1044525330);A=c(A,z,y,w,B[t+4],7,-176418897);w=c(w,A,z,y,B[t+5],12,1200080426);y=c(y,w,A,z,B[t+6],17,-1473231341);z=c(z,y,w,A,B[t+7],22,-45705983);A=c(A,z,y,w,B[t+8],7,1770035416);w=c(w,A,z,y,B[t+9],12,-1958414417);y=c(y,w,A,z,B[t+10],17,-42063);z=c(z,y,w,A,B[t+11],22,-1990404162);A=c(A,z,y,w,B[t+12],7,1804603682);w=c(w,A,z,y,B[t+13],12,-40341101);y=c(y,w,A,z,B[t+14],17,-1502002290);z=c(z,y,w,A,B[t+15],22,1236535329);A=m(A,z,y,w,B[t+1],5,-165796510);w=m(w,A,z,y,B[t+6],9,-1069501632);y=m(y,w,A,z,B[t+11],14,643717713);z=m(z,y,w,A,B[t+0],20,-373897302);A=m(A,z,y,w,B[t+5],5,-701558691);w=m(w,A,z,y,B[t+10],9,38016083);y=m(y,w,A,z,B[t+15],14,-660478335);z=m(z,y,w,A,B[t+4],20,-405537848);A=m(A,z,y,w,B[t+9],5,568446438);w=m(w,A,z,y,B[t+14],9,-1019803690);y=m(y,w,A,z,B[t+3],14,-187363961);z=m(z,y,w,A,B[t+8],20,1163531501);A=m(A,z,y,w,B[t+13],5,-1444681467);w=m(w,A,z,y,B[t+2],9,-51403784);y=m(y,w,A,z,B[t+7],14,1735328473);z=m(z,y,w,A,B[t+12],20,-1926607734);A=g(A,z,y,w,B[t+5],4,-378558);w=g(w,A,z,y,B[t+8],11,-2022574463);y=g(y,w,A,z,B[t+11],16,1839030562);z=g(z,y,w,A,B[t+14],23,-35309556);A=g(A,z,y,w,B[t+1],4,-1530992060);w=g(w,A,z,y,B[t+4],11,1272893353);y=g(y,w,A,z,B[t+7],16,-155497632);z=g(z,y,w,A,B[t+10],23,-1094730640);A=g(A,z,y,w,B[t+13],4,681279174);w=g(w,A,z,y,B[t+0],11,-358537222);y=g(y,w,A,z,B[t+3],16,-722521979);z=g(z,y,w,A,B[t+6],23,76029189);A=g(A,z,y,w,B[t+9],4,-640364487);w=g(w,A,z,y,B[t+12],11,-421815835);y=g(y,w,A,z,B[t+15],16,530742520);z=g(z,y,w,A,B[t+2],23,-995338651);A=o(A,z,y,w,B[t+0],6,-198630844);w=o(w,A,z,y,B[t+7],10,1126891415);y=o(y,w,A,z,B[t+14],15,-1416354905);z=o(z,y,w,A,B[t+5],21,-57434055);A=o(A,z,y,w,B[t+12],6,1700485571);w=o(w,A,z,y,B[t+3],10,-1894986606);y=o(y,w,A,z,B[t+10],15,-1051523);z=o(z,y,w,A,B[t+1],21,-2054922799);A=o(A,z,y,w,B[t+8],6,1873313359);w=o(w,A,z,y,B[t+15],10,-30611744);y=o(y,w,A,z,B[t+6],15,-1560198380);z=o(z,y,w,A,B[t+13],21,1309151649);A=o(A,z,y,w,B[t+4],6,-145523070);w=o(w,A,z,y,B[t+11],10,-1120210379);y=o(y,w,A,z,B[t+2],15,718787259);z=o(z,y,w,A,B[t+9],21,-343485551);A=j(A,v);z=j(z,u);y=j(y,s);w=j(w,r)}return[A,z,y,w]}function q(t){var s="0123456789abcdef";var u="";for(var r=0;r<t.length*4;r++){u+=s.charAt((t[r>>2]>>((r%4)*8+4))&15)+s.charAt((t[r>>2]>>((r%4)*8))&15)}return u}function p(t){var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var u="";for(var r=0;r<t.length*32;r+=6){u+=s.charAt(((t[r>>5]<<(r%32))&63)|((t[r>>5+1]>>(32-r%32))&63))}return u}function d(t){var r=((t.length+8)>>6)+1;var u=new Array(r*16);for(var s=0;s<r*16;s++){u[s]=0}for(var s=0;s<t.length;s++){u[s>>2]|=(t.charCodeAt(s)&255)<<((s%4)*8)}u[s>>2]|=128<<((s%4)*8);u[r*16-2]=t.length*8;return u}function h(t){var r=((t.length+4)>>5)+1;var u=new Array(r*16);for(var s=0;s<r*16;s++){u[s]=0}for(var s=0;s<t.length;s++){u[s>>1]|=t.charCodeAt(s)<<((s%2)*16)}u[s>>1]|=128<<((s%2)*16);u[r*16-2]=t.length*16;return u}function l(r){return q(f(d(r)))}function b(r){return q(f(h(r)))}function k(r){return p(f(d(r)))}function e(r){return p(f(h(r)))}function a(r){return q(f(d(r)))}return a(this)};function DragZoomControl(b,c,f){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:0.2,fillColor:"#000",border:"2px solid blue"};var e=this.globals.style;for(var d in b){e[d]=b[d]}var a=e.border.split(" ");e.outlineWidth=parseInt(a[0].replace(/\D/g,""));e.outlineColor=a[2];e.alphaIE="alpha(opacity="+(e.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,rightMouseZoomOutEnabled:false,minDragSize:0};for(var d in c){this.globals.options[d]=c[d]}if(f==null){f={}}this.globals.callbacks=f}DragZoomControl.prototype=new GControl();DragZoomControl.prototype.saveMapContext=function(a){if(this.globals.options.backButtonEnabled){this.saveBackContext_(a,true);this.globals.backButtonDiv.style.display="block"}};DragZoomControl.prototype.initiateZoom=function(){this.buttonclick_()};DragZoomControl.prototype.initiateZoomBack=function(){if(this.globals.options.backButtonEnabled){this.backbuttonclick_()}};DragZoomControl.prototype.initButton_=function(a){var b=this.globals;var c=document.createElement("div");c.innerHTML=b.options.buttonHTML;DragZoomUtil.style([c],{cursor:"pointer",zIndex:200});DragZoomUtil.style([c],b.options.buttonStartingStyle);DragZoomUtil.style([c],b.options.buttonStyle);a.appendChild(c);return c};DragZoomControl.prototype.initBackButton_=function(a){var b=this.globals;var c=document.createElement("div");c.innerHTML=b.options.backButtonHTML;DragZoomUtil.style([c],{cursor:"pointer",zIndex:200});DragZoomUtil.style([c],b.options.buttonStartingStyle);DragZoomUtil.style([c],b.options.backButtonStyle);a.appendChild(c);return c};DragZoomControl.prototype.setButtonMode_=function(b){var a=this.globals;if(b=="zooming"){a.buttonDiv.innerHTML=a.options.buttonZoomingHTML;DragZoomUtil.style([a.buttonDiv],a.options.buttonStartingStyle);DragZoomUtil.style([a.buttonDiv],a.options.buttonZoomingStyle)}else{a.buttonDiv.innerHTML=a.options.buttonHTML;DragZoomUtil.style([a.buttonDiv],a.options.buttonStartingStyle);DragZoomUtil.style([a.buttonDiv],a.options.buttonStyle)}};DragZoomControl.prototype.initialize=function(b){var k=this.globals;var g=this;var l=b.getContainer();var m=document.createElement("div");DragZoomUtil.style([m],{cursor:"pointer",zIndex:150});var j=this.initButton_(m);var c=this.initBackButton_(m);l.appendChild(m);var e=document.createElement("div");var h=["outlineDiv","cornerTopDiv","cornerLeftDiv","cornerRightDiv","cornerBottomDiv"];for(var f=0;f<h.length;f++){var d=h[f];var a=document.createElement("div");DragZoomUtil.style([a],{position:"absolute",display:"none"});e.appendChild(a);k[d]=a}DragZoomUtil.style([e],{position:"absolute",display:"none",overflow:"hidden",cursor:"crosshair",zIndex:101});l.appendChild(e);GEvent.addDomListener(j,"click",function(i){g.buttonclick_(i)});GEvent.addDomListener(c,"click",function(i){g.backbuttonclick_(i)});GEvent.addDomListener(e,"mousedown",function(i){g.coverMousedown_(i)});GEvent.addDomListener(document,"mousemove",function(i){g.drag_(i)});GEvent.addDomListener(document,"mouseup",function(i){g.mouseup_(i)});k.mapPosition=DragZoomUtil.getElementPosition(l);k.buttonDiv=j;k.backButtonDiv=c;k.mapCover=e;k.map=b;k.borderCorrection=k.style.outlineWidth*2;this.setDimensions_();this.initStyles_();k.mapCover.onselectstart=function(){return false};return m};DragZoomControl.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(3,120))};DragZoomControl.prototype.coverMousedown_=function(c){var a=this.globals;var d=this.getRelPos_(c);a.startX=d.left;a.startY=d.top;if(c.which){var b=(c.which!=1)}else{if(c.button){var b=(c.button!=1)}}a.draggingRightMouse=b;DragZoomUtil.style([a.mapCover],{background:"transparent",opacity:1,filter:"alpha(opacity=100)"});DragZoomUtil.style([a.outlineDiv],{left:a.startX+"px",top:a.startY+"px",display:"block",width:"1px",height:"1px"});a.draggingOn=true;a.cornerTopDiv.style.top=(a.startY-a.mapHeight)+"px";a.cornerTopDiv.style.display="block";a.cornerLeftDiv.style.left=(a.startX-a.mapWidth)+"px";a.cornerLeftDiv.style.top=a.startY+"px";a.cornerLeftDiv.style.display="block";a.cornerRightDiv.style.left=a.startX+"px";a.cornerRightDiv.style.top=a.startY+"px";a.cornerRightDiv.style.display="block";a.cornerBottomDiv.style.left=a.startX+"px";a.cornerBottomDiv.style.top=a.startY+"px";a.cornerBottomDiv.style.width="0px";a.cornerBottomDiv.style.display="block";if(a.callbacks.dragstart!=null){a.callbacks.dragstart(a.startX,a.startY)}return false};DragZoomControl.prototype.drag_=function(c){var a=this.globals;if(a.draggingOn){var d=this.getRelPos_(c);var b=this.getRectangle_(a.startX,a.startY,d,a.mapRatio);if(b.left){addX=-b.width}else{addX=0}if(b.top){addY=-b.height}else{addY=0}DragZoomUtil.style([a.outlineDiv],{left:a.startX+addX+"px",top:a.startY+addY+"px",display:"block",width:"1px",height:"1px"});a.outlineDiv.style.width=b.width+"px";a.outlineDiv.style.height=b.height+"px";a.cornerTopDiv.style.height=((a.startY+addY)-(a.startY-a.mapHeight))+"px";a.cornerLeftDiv.style.top=(a.startY+addY)+"px";a.cornerLeftDiv.style.width=((a.startX+addX)-(a.startX-a.mapWidth))+"px";a.cornerRightDiv.style.top=a.cornerLeftDiv.style.top;a.cornerRightDiv.style.left=(a.startX+addX+b.width+a.borderCorrection)+"px";a.cornerBottomDiv.style.top=(a.startY+addY+b.height+a.borderCorrection)+"px";a.cornerBottomDiv.style.left=(a.startX-a.mapWidth+((a.startX+addX)-(a.startX-a.mapWidth)))+"px";a.cornerBottomDiv.style.width=(b.width+a.borderCorrection)+"px";if(a.callbacks.dragging!=null){a.callbacks.dragging(a.startX,a.startY,b.endX,b.endY)}return false}};DragZoomControl.prototype.mouseup_=function(q){var g=this.globals;if(g.draggingOn){var c=this.getRelPos_(q);g.draggingOn=false;var a=this.getRectangle_(g.startX,g.startY,c,g.mapRatio);if(a.left){a.endX=a.startX-a.width}if(a.top){a.endY=a.startY-a.height}this.resetDragZoom_();if(a.width>=g.options.minDragSize&&a.height>=g.options.minDragSize){var n=new GPoint(a.startX,a.startY);var p=new GPoint(a.endX,a.startY);var j=new GPoint(a.endX,a.endY);var h=new GPoint(a.startX,a.endY);var s=g.map.fromContainerPixelToLatLng(n);var d=g.map.fromContainerPixelToLatLng(p);var t=g.map.fromContainerPixelToLatLng(j);var l=g.map.fromContainerPixelToLatLng(h);var o=new GPolyline([s,d,t,l,s],g.style.outlineColor,g.style.outlineWidth+1,0.4);try{g.map.addOverlay(o);setTimeout(function(){g.map.removeOverlay(o)},g.options.overlayRemoveTime)}catch(q){}var m=o.getBounds();var d=m.getNorthEast();var l=m.getSouthWest();var t=new GLatLng(l.lat(),d.lng());var s=new GLatLng(d.lat(),l.lng());if(g.options.rightMouseZoomOutEnabled&&g.draggingRightMouse){var f=g.map.getBounds().toSpan();var b=m.toSpan();var i=Math.max(f.lat()/b.lat(),f.lng()/b.lng());var k=g.map.getZoom()-Math.ceil(Math.log(i,2))}else{var k=g.map.getBoundsZoomLevel(m)}var r=m.getCenter();g.map.setCenter(r,k);if(g.callbacks.dragend!=null){g.callbacks.dragend(s,d,t,l,n,p,j,h)}}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 a=this.globals;var b=a.map.getSize();a.mapWidth=b.width;a.mapHeight=b.height;a.mapRatio=a.mapHeight/a.mapWidth;DragZoomUtil.style([a.mapCover,a.cornerTopDiv,a.cornerRightDiv,a.cornerBottomDiv,a.cornerLeftDiv],{top:"0px",left:"0px",width:a.mapWidth+"px",height:a.mapHeight+"px"})};DragZoomControl.prototype.initStyles_=function(){var a=this.globals;DragZoomUtil.style([a.mapCover,a.cornerTopDiv,a.cornerRightDiv,a.cornerBottomDiv,a.cornerLeftDiv],{filter:a.style.alphaIE,opacity:a.style.opacity,background:a.style.fillColor});a.outlineDiv.style.border=a.style.border};DragZoomControl.prototype.buttonclick_=function(){var a=this.globals;a.backButtonDiv.style.display="none";if(a.mapCover.style.display=="block"){this.resetDragZoom_();if(a.options.backButtonEnabled){this.restoreBackContext_();if(a.backStack.length==0){a.backButtonDiv.style.display="none"}}}else{this.initCover_();if(a.options.backButtonEnabled){this.saveBackContext_(a.options.backButtonHTML,false)}}};DragZoomControl.prototype.backbuttonclick_=function(){var a=this.globals;if(a.options.backButtonEnabled&&a.backStack.length>0){this.restoreBackContext_();if(a.callbacks.backbuttonclick!=null){a.callbacks.backbuttonclick(a.methodCall)}}};DragZoomControl.prototype.saveBackContext_=function(d,a){var b=this.globals;var c={};c.center=b.map.getCenter();c.zoom=b.map.getZoom();c.maptype=b.map.getCurrentMapType();c.text=b.backButtonDiv.innerHTML;c.methodCall=a;b.backStack.push(c);b.backButtonDiv.innerHTML=d};DragZoomControl.prototype.restoreBackContext_=function(){var a=this.globals;var b=a.backStack.pop();a.map.setCenter(b.center,b.zoom,b.maptype);a.backButtonDiv.innerHTML=b.text;a.methodCall=b.methodCall;if(a.backStack.length==0){a.backButtonDiv.style.display="none"}};DragZoomControl.prototype.initCover_=function(){var a=this.globals;a.mapPosition=DragZoomUtil.getElementPosition(a.map.getContainer());this.setDimensions_();this.setButtonMode_("zooming");DragZoomUtil.style([a.mapCover],{display:"block",background:a.style.fillColor});DragZoomUtil.style([a.outlineDiv],{width:"0px",height:"0px"});if(a.callbacks.buttonclick!=null){a.callbacks.buttonclick()}};DragZoomControl.prototype.getRelPos_=function(b){var c=DragZoomUtil.getMousePosition(b);var a=this.globals;return{top:(c.top-a.mapPosition.top),left:(c.left-a.mapPosition.left)}};DragZoomControl.prototype.getRectangle_=function(d,b,h,e){var g=false;var f=false;var c=h.left-d;var a=h.top-b;if(c<0){c=c*-1;g=true}if(a<0){a=a*-1;f=true}delta=c>a?c:a;return{startX:d,startY:b,endX:d+delta,endY:b+parseInt(delta*e),width:delta,height:parseInt(delta*e),left:g,top:f}};DragZoomControl.prototype.resetDragZoom_=function(){var a=this.globals;DragZoomUtil.style([a.mapCover,a.cornerTopDiv,a.cornerRightDiv,a.cornerBottomDiv,a.cornerLeftDiv],{display:"none",opacity:a.style.opacity,filter:a.style.alphaIE});a.outlineDiv.style.display="none";this.setButtonMode_("normal");if(a.options.backButtonEnabled&&(a.backStack.length>0)){a.backButtonDiv.style.display="block"}};var DragZoomUtil={};DragZoomUtil.gE=function(a){return document.getElementById(a)};DragZoomUtil.getMousePosition=function(a){var c=0;var b=0;if(!a){var a=window.event}if(a.pageX||a.pageY){c=a.pageX;b=a.pageY}else{if(a.clientX||a.clientY){c=a.clientX+(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft);b=a.clientY+(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop)}}return{left:c,top:b}};DragZoomUtil.getElementPosition=function(c){var b=c.offsetLeft;var a=c.offsetTop;var d=c.offsetParent;while(d!=null){b+=d.offsetLeft;a+=d.offsetTop;d=d.offsetParent}return{left:b,top:a}};DragZoomUtil.style=function(d,c){if(typeof(d)=="string"){d=DragZoomUtil.getManyElements(d)}for(var a=0;a<d.length;a++){for(var b in c){d[a].style[b]=c[b]}}};DragZoomUtil.getManyElements=function(d){var b=d.split(",");var c=[];for(var a=0;a<b.length;a++){c[c.length]=DragZoomUtil.gE(b[a])}return c};function MarkerManager(d,e){var b=this;b.map_=d;b.mapZoom_=d.getZoom();b.projection_=d.getCurrentMapType().getProjection();e=e||{};b.tileSize_=MarkerManager.DEFAULT_TILE_SIZE_;var a=MarkerManager.DEFAULT_MAX_ZOOM_;if(e.maxZoom!=undefined){a=e.maxZoom}b.maxZoom_=a;b.trackMarkers_=e.trackMarkers;var c;if(typeof e.borderPadding=="number"){c=e.borderPadding}else{c=MarkerManager.DEFAULT_BORDER_PADDING_}b.swPadding_=new GSize(-c,c);b.nePadding_=new GSize(c,-c);b.borderPadding_=c;b.gridWidth_=[];b.grid_=[];b.grid_[a]=[];b.numMarkers_=[];b.numMarkers_[a]=0;GEvent.bind(d,"moveend",b,b.onMapMoveEnd_);b.removeOverlay_=function(f){if(!f.isInfoWindowOpened){d.removeOverlay(f);b.shownMarkers_--}};b.addOverlay_=function(f){if(!f.isInfoWindowOpened){f.isInfoWindowOpened=false;d.addOverlay(f);b.shownMarkers_++}};b.resetManager_();b.shownMarkers_=0;b.shownBounds_=b.getMapGridBounds_()}MarkerManager.DEFAULT_TILE_SIZE_=1024;MarkerManager.DEFAULT_MAX_ZOOM_=17;MarkerManager.DEFAULT_BORDER_PADDING_=100;MarkerManager.MERCATOR_ZOOM_LEVEL_ZERO_RANGE=256;MarkerManager.prototype.resetManager_=function(){var c=this;var a=MarkerManager.MERCATOR_ZOOM_LEVEL_ZERO_RANGE;for(var b=0;b<=c.maxZoom_;++b){c.grid_[b]=[];c.numMarkers_[b]=0;c.gridWidth_[b]=Math.ceil(a/c.tileSize_);a<<=1}};MarkerManager.prototype.clearMarkers=function(){var a=this;a.processAll_(a.shownBounds_,a.removeOverlay_);a.resetManager_()};MarkerManager.prototype.getTilePoint_=function(d,b,c){var a=this.projection_.fromLatLngToPixel(d,b);return new GPoint(Math.floor((a.x+c.width)/this.tileSize_),Math.floor((a.y+c.height)/this.tileSize_))};MarkerManager.prototype.addMarkerBatch_=function(c,g,b){var f=c.getPoint();if(this.trackMarkers_){GEvent.bind(c,"changed",this,this.onMarkerMoved_)}GEvent.addListener(c,"infowindowopen",function(){c.isInfoWindowOpened=true});GEvent.addListener(c,"infowindowclose",function(){c.isInfoWindowOpened=false});var d=this.getTilePoint_(f,b,GSize.ZERO);for(var e=b;e>=g;e--){var a=this.getGridCellCreate_(d.x,d.y,e);a.push(c);d.x=d.x>>1;d.y=d.y>>1}};MarkerManager.prototype.isGridPointVisible_=function(b){var f=this;var d=f.shownBounds_.minY<=b.y&&b.y<=f.shownBounds_.maxY;var a=f.shownBounds_.minX;var c=a<=b.x&&b.x<=f.shownBounds_.maxX;if(!c&&a<0){var e=f.gridWidth_[f.shownBounds_.z];c=a+e<=b.x&&b.x<=e-1}return d&&c};MarkerManager.prototype.onMarkerMoved_=function(e,a,c){var g=this;var i=g.maxZoom_;var d=false;var b=g.getTilePoint_(a,i,GSize.ZERO);var f=g.getTilePoint_(c,i,GSize.ZERO);while(i>=0&&(b.x!=f.x||b.y!=f.y)){var h=g.getGridCellNoCreate_(b.x,b.y,i);if(h){if(g.removeFromArray(h,e)){g.getGridCellCreate_(f.x,f.y,i).push(e)}}if(i==g.mapZoom_){if(g.isGridPointVisible_(b)){if(!g.isGridPointVisible_(f)){g.removeOverlay_(e);d=true}}else{if(g.isGridPointVisible_(f)){g.addOverlay_(e);d=true}}}b.x=b.x>>1;b.y=b.y>>1;f.x=f.x>>1;f.y=f.y>>1;--i}if(d){g.notifyListeners_()}};MarkerManager.prototype.removeMarker=function(c){var f=this;var e=f.maxZoom_;var g=false;var b=c.getPoint();var d=f.getTilePoint_(b,e,GSize.ZERO);while(e>=0){var a=f.getGridCellNoCreate_(d.x,d.y,e);if(a){f.removeFromArray(a,c)}if(e==f.mapZoom_){if(f.isGridPointVisible_(d)){f.removeOverlay_(c);g=true}}d.x=d.x>>1;d.y=d.y>>1;--e}if(g){f.notifyListeners_()}};MarkerManager.prototype.addMarkers=function(d,e,c){var a=this.getOptMaxZoom_(c);for(var b=d.length-1;b>=0;b--){this.addMarkerBatch_(d[b],e,a)}this.numMarkers_[e]+=d.length};MarkerManager.prototype.getOptMaxZoom_=function(a){return a!=undefined?a:this.maxZoom_};MarkerManager.prototype.getMarkerCount=function(b){var a=0;for(var c=0;c<=b;c++){a+=this.numMarkers_[c]}return a};MarkerManager.prototype.addMarker=function(b,f,d){var e=this;var a=this.getOptMaxZoom_(d);e.addMarkerBatch_(b,f,a);var c=e.getTilePoint_(b.getPoint(),e.mapZoom_,GSize.ZERO);if(e.isGridPointVisible_(c)&&f<=e.shownBounds_.z&&e.shownBounds_.z<=a){e.addOverlay_(b);e.notifyListeners_()}this.numMarkers_[f]++};GBounds.prototype.containsPoint=function(a){var b=this;return(b.minX<=a.x&&b.maxX>=a.x&&b.minY<=a.y&&b.maxY>=a.y)};MarkerManager.prototype.getGridCellCreate_=function(a,f,e){var c=this.grid_[e];if(a<0){a+=this.gridWidth_[e]}var b=c[a];if(!b){b=c[a]=[];return b[f]=[]}var d=b[f];if(!d){return b[f]=[]}return d};MarkerManager.prototype.getGridCellNoCreate_=function(a,e,d){var c=this.grid_[d];if(a<0){a+=this.gridWidth_[d]}var b=c[a];return b?b[e]:undefined};MarkerManager.prototype.getGridBounds_=function(a,i,h,f){i=Math.min(i,this.maxZoom_);var b=a.getSouthWest();var e=a.getNorthEast();var g=this.getTilePoint_(b,i,h);var d=this.getTilePoint_(e,i,f);var j=this.gridWidth_[i];if(e.lng()<b.lng()||d.x<g.x){g.x-=j}if(d.x-g.x+1>=j){g.x=0;d.x=j-1}var c=new GBounds([g,d]);c.z=i;return c};MarkerManager.prototype.getMapGridBounds_=function(){var a=this;return a.getGridBounds_(a.map_.getBounds(),a.mapZoom_,a.swPadding_,a.nePadding_)};MarkerManager.prototype.onMapMoveEnd_=function(){var a=this;a.objectSetTimeout_(this,this.updateMarkers_,0)};MarkerManager.prototype.objectSetTimeout_=function(b,c,a){return window.setTimeout(function(){c.call(b)},a)};MarkerManager.prototype.refresh=function(){var a=this;if(a.shownMarkers_>0){a.processAll_(a.shownBounds_,a.removeOverlay_)}a.processAll_(a.shownBounds_,a.addOverlay_);a.notifyListeners_()};MarkerManager.prototype.updateMarkers_=function(){var a=this;a.mapZoom_=this.map_.getZoom();var b=a.getMapGridBounds_();if(b.equals(a.shownBounds_)&&b.z==a.shownBounds_.z){return}if(b.z!=a.shownBounds_.z){a.processAll_(a.shownBounds_,a.removeOverlay_);a.processAll_(b,a.addOverlay_)}else{a.rectangleDiff_(a.shownBounds_,b,a.removeCellMarkers_);a.rectangleDiff_(b,a.shownBounds_,a.addCellMarkers_)}a.shownBounds_=b;a.notifyListeners_()};MarkerManager.prototype.notifyListeners_=function(){GEvent.trigger(this,"changed",this.shownBounds_,this.shownMarkers_)};MarkerManager.prototype.processAll_=function(b,d){for(var a=b.minX;a<=b.maxX;a++){for(var c=b.minY;c<=b.maxY;c++){this.processCellMarkers_(a,c,b.z,d)}}};MarkerManager.prototype.processCellMarkers_=function(b,f,d,e){var a=this.getGridCellNoCreate_(b,f,d);if(a){for(var c=a.length-1;c>=0;c--){e(a[c])}}};MarkerManager.prototype.removeCellMarkers_=function(a,c,b){this.processCellMarkers_(a,c,b,this.removeOverlay_)};MarkerManager.prototype.addCellMarkers_=function(a,c,b){this.processCellMarkers_(a,c,b,this.addOverlay_)};MarkerManager.prototype.rectangleDiff_=function(b,a,d){var c=this;c.rectangleDiffCoords(b,a,function(e,f){d.apply(c,[e,f,b.z])})};MarkerManager.prototype.rectangleDiffCoords=function(b,a,l){var f=b.minX;var m=b.minY;var h=b.maxX;var d=b.maxY;var e=a.minX;var k=a.minY;var g=a.maxX;var c=a.maxY;for(var j=f;j<=h;j++){for(var i=m;i<=d&&i<k;i++){l(j,i)}for(var i=Math.max(c+1,m);i<=d;i++){l(j,i)}}for(var i=Math.max(m,k);i<=Math.min(d,c);i++){for(var j=Math.min(h+1,e)-1;j>=f;j--){l(j,i)}for(var j=Math.max(f,g+1);j<=h;j++){l(j,i)}}};MarkerManager.prototype.removeFromArray=function(e,c,d){var a=0;for(var b=0;b<e.length;++b){if(e[b]===c||(d&&e[b]==c)){e.splice(b--,1);a++}}return a};function ExtInfoWindow(a,b,c,d){this.html_=c;this.marker_=a;this.infoWindowId_=b;this.options_=d==null?{}:d;this.ajaxUrl_=this.options_.ajaxUrl==null?null:this.options_.ajaxUrl;this.callback_=this.options_.ajaxCallback==null?null:this.options_.ajaxCallback;this.maxContent_=this.options_.maxContent==null?null:this.options_.maxContent;this.maximizeEnabled_=this.maxContent_==null?false:true;this.isMaximized_=false;this.borderSize_=this.options_.beakOffset==null?0:this.options_.beakOffset;this.paddingX_=this.options_.paddingX==null?0+this.borderSize_:this.options_.paddingX+this.borderSize_;this.paddingY_=this.options_.paddingY==null?0+this.borderSize_:this.options_.paddingY+this.borderSize_;this.map_=null;this.container_=document.createElement("div");this.container_.style.position="relative";this.container_.style.display="none";this.contentDiv_=document.createElement("div");this.contentDiv_.id=this.infoWindowId_+"_contents";this.contentDiv_.innerHTML=this.html_;this.contentDiv_.style.display="block";this.contentDiv_.style.visibility="hidden";this.wrapperDiv_=document.createElement("div")}ExtInfoWindow.prototype=new GOverlay();ExtInfoWindow.prototype.initialize=function(g){this.map_=g;if(this.maximizeEnabled_){this.maxWidth_=this.map_.getSize().width*0.9;this.maxHeight_=this.map_.getSize().height*0.9}this.defaultStyles={containerWidth:this.map_.getSize().width/2,borderSize:1};this.wrapperParts={tl:{t:0,l:0,w:0,h:0,domElement:null},t:{t:0,l:0,w:0,h:0,domElement:null},tr:{t:0,l:0,w:0,h:0,domElement:null},l:{t:0,l:0,w:0,h:0,domElement:null},r:{t:0,l:0,w:0,h:0,domElement:null},bl:{t:0,l:0,w:0,h:0,domElement:null},b:{t:0,l:0,w:0,h:0,domElement:null},br:{t:0,l:0,w:0,h:0,domElement:null},beak:{t:0,l:0,w:0,h:0,domElement:null},close:{t:0,l:0,w:0,h:0,domElement:null}};if(this.maximizeEnabled_){this.wrapperParts.max={t:0,l:0,w:0,h:0,domElement:null};this.wrapperParts.min={t:0,l:0,w:0,h:0,domElement:null}}for(var d in this.wrapperParts){var a=document.createElement("div");a.id=this.infoWindowId_+"_"+d;a.style.visibility="hidden";document.body.appendChild(a);a=document.getElementById(this.infoWindowId_+"_"+d);var c=this.wrapperParts[d];c.w=parseInt(this.getStyle_(a,"width"),10);c.h=parseInt(this.getStyle_(a,"height"),10);document.body.removeChild(a)}for(var d in this.wrapperParts){if(d=="close"){this.wrapperDiv_.appendChild(this.contentDiv_)}var b=null;if(this.wrapperParts[d].domElement==null){b=document.createElement("div");this.wrapperDiv_.appendChild(b)}else{b=this.wrapperParts[d].domElement}b.id=this.infoWindowId_+"_"+d;b.style.position="absolute";b.style.width=this.wrapperParts[d].w+"px";b.style.height=this.wrapperParts[d].h+"px";b.style.top=this.wrapperParts[d].t+"px";b.style.left=this.wrapperParts[d].l+"px";this.wrapperParts[d].domElement=b}this.map_.getPane(G_MAP_FLOAT_PANE).appendChild(this.container_);this.container_.id=this.infoWindowId_;var e=this.getStyle_(document.getElementById(this.infoWindowId_),"width");this.container_.style.width=(e==null?this.defaultStyles.containerWidth:e);this.map_.getContainer().appendChild(this.contentDiv_);this.contentWidth=this.getDimensions_(this.container_).width;this.contentDiv_.style.width=this.contentWidth+"px";this.contentDiv_.style.position="absolute";this.container_.appendChild(this.wrapperDiv_);if(this.maximizeEnabled_){this.minWidth_=this.getDimensions_(this.container_).width;console.log(this.minWidth_)}if(this.maximizeEnabled_){thisMap=this.map_;thisMaxWidth=this.maxWidth_;thisMaxHeight=this.maxHeight_;thisContainer=this.container_;thisMaxContent=this.maxContent_;if(this.marker_){GEvent.trigger(this.marker_,"extinfowindowbeforeclose")}thisMinWidth=this.container_.style.width;thisMinHeight=this.container_.style.height;GEvent.addDomListener(this.wrapperParts.max.domElement,"click",function(){var h=thisMap.getExtInfoWindow();h.container_.style.width=thisMaxWidth+"px";h.ajaxRequest_(thisMaxContent);if(this.marker_){GEvent.trigger(this.marker_,"extinfowindowclose")}h.isMaximized_=true;h.redraw(true);h.toggleMaxMin_()});GEvent.addDomListener(this.wrapperParts.min.domElement,"click",function(){var h=thisMap.getExtInfoWindow();h.container_.style.width=thisMinWidth;h.container_.style.height=thisMinHeight;if(h.ajaxUrl_!=null){h.ajaxRequest_(this.ajaxUrl_)}else{h.contentDiv_.innerHTML=h.html_}h.isMaximized_=false;h.redraw(true);h.resize();h.toggleMaxMin_()});this.toggleMaxMin_()}var f=["mousedown","dblclick","DOMMouseScroll"];for(d=0;d<f.length;d++){GEvent.bindDom(this.container_,f[d],this,this.onClick_)}GEvent.trigger(this.map_,"extinfowindowopen");if(this.ajaxUrl_!=null){this.ajaxRequest_(this.ajaxUrl_)}};ExtInfoWindow.prototype.onClick_=function(a){if(navigator.userAgent.toLowerCase().indexOf("msie")!=-1&&document.all){window.event.cancelBubble=true;window.event.returnValue=false}else{a.stopPropagation()}};ExtInfoWindow.prototype.remove=function(){if(this.map_.getExtInfoWindow()!=null){GEvent.trigger(this.map_,"extinfowindowbeforeclose");GEvent.clearInstanceListeners(this.container_);if(this.container_.outerHTML){this.container_.outerHTML=""}if(this.container_.parentNode){this.container_.parentNode.removeChild(this.container_)}this.container_=null;GEvent.trigger(this.map_,"extinfowindowclose");this.map_.setExtInfoWindow_(null)}};ExtInfoWindow.prototype.copy=function(){return new ExtInfoWindow(this.marker_,this.infoWindowId_,this.html_,this.options_)};ExtInfoWindow.prototype.redraw=function(f){if(!f||this.container_==null){return}var e=this.contentDiv_.offsetHeight;this.contentDiv_.style.height=e+"px";this.contentWidth=this.getDimensions_(this.container_).width;this.contentDiv_.style.width=this.container_.style.width;this.contentDiv_.style.left=this.wrapperParts.l.w+"px";this.contentDiv_.style.top=this.wrapperParts.tl.h+"px";this.contentDiv_.style.visibility="visible";this.wrapperParts.tl.t=0;this.wrapperParts.tl.l=0;this.wrapperParts.t.l=this.wrapperParts.tl.w;this.wrapperParts.t.w=(this.wrapperParts.l.w+this.contentWidth+this.wrapperParts.r.w)-this.wrapperParts.tl.w-this.wrapperParts.tr.w;this.wrapperParts.t.h=this.wrapperParts.tl.h;this.wrapperParts.tr.l=this.wrapperParts.t.w+this.wrapperParts.tl.w;this.wrapperParts.l.t=this.wrapperParts.tl.h;this.wrapperParts.l.h=e;this.wrapperParts.r.l=this.contentWidth+this.wrapperParts.l.w;this.wrapperParts.r.t=this.wrapperParts.tr.h;this.wrapperParts.r.h=e;this.wrapperParts.bl.t=e+this.wrapperParts.tl.h;this.wrapperParts.b.l=this.wrapperParts.bl.w;this.wrapperParts.b.t=e+this.wrapperParts.tl.h;this.wrapperParts.b.w=(this.wrapperParts.l.w+this.contentWidth+this.wrapperParts.r.w)-this.wrapperParts.bl.w-this.wrapperParts.br.w;this.wrapperParts.b.h=this.wrapperParts.bl.h;this.wrapperParts.br.l=this.wrapperParts.b.w+this.wrapperParts.bl.w;this.wrapperParts.br.t=e+this.wrapperParts.tr.h;this.wrapperParts.beak.l=this.borderSize_+(this.contentWidth/2)-(this.wrapperParts.beak.w/2);this.wrapperParts.beak.t=this.wrapperParts.bl.t+this.wrapperParts.bl.h-this.borderSize_;this.wrapperParts.close.l=this.wrapperParts.tr.l+this.wrapperParts.tr.w-this.wrapperParts.close.w-this.borderSize_;this.wrapperParts.close.t=this.borderSize_;if(this.maximizeEnabled_){this.wrapperParts.max.l=this.wrapperParts.close.l-this.wrapperParts.max.w-5;this.wrapperParts.max.t=this.wrapperParts.close.t;this.wrapperParts.min.l=this.wrapperParts.max.l;this.wrapperParts.min.t=this.wrapperParts.max.t}for(var d in this.wrapperParts){if(d=="close"){this.wrapperDiv_.insertBefore(this.contentDiv_,this.wrapperParts[d].domElement)}var c=null;if(this.wrapperParts[d].domElement==null){c=document.createElement("div");this.wrapperDiv_.appendChild(c)}else{c=this.wrapperParts[d].domElement}c.id=this.infoWindowId_+"_"+d;c.style.position="absolute";c.style.width=this.wrapperParts[d].w+"px";c.style.height=this.wrapperParts[d].h+"px";c.style.top=this.wrapperParts[d].t+"px";c.style.left=this.wrapperParts[d].l+"px";this.wrapperParts[d].domElement=c}var h=this.marker_;var g=this.map_;GEvent.addDomListener(this.wrapperParts.close.domElement,"click",function(){g.closeExtInfoWindow()});var b=this.map_.fromLatLngToDivPixel(this.marker_.getPoint());this.container_.style.position="absolute";var a=this.marker_.getIcon();this.container_.style.left=(b.x-(this.contentWidth/2)-a.iconAnchor.x+a.infoWindowAnchor.x)+"px";this.container_.style.top=(b.y-this.wrapperParts.bl.h-e-this.wrapperParts.tl.h-this.wrapperParts.beak.h-a.iconAnchor.y+a.infoWindowAnchor.y+this.borderSize_)+"px";this.container_.style.display="block";if(this.map_.getExtInfoWindow()!=null){this.repositionMap_()}};ExtInfoWindow.prototype.toggleMaxMin_=function(){if(this.wrapperParts.max.domElement!=null&&this.wrapperParts.min.domElement!=null){if(this.isMaximized_){this.wrapperParts.max.domElement.style.display="none";this.wrapperParts.min.domElement.style.display="block"}else{this.wrapperParts.max.domElement.style.display="block";this.wrapperParts.min.domElement.style.display="none"}}};ExtInfoWindow.prototype.resize=function(){var a=this.contentDiv_.cloneNode(true);a.id=this.infoWindowId_+"_tempContents";a.style.visibility="hidden";a.style.height="auto";document.body.appendChild(a);a=document.getElementById(this.infoWindowId_+"_tempContents");var e=a.offsetHeight;document.body.removeChild(a);this.contentDiv_.style.height=e+"px";var b=this.container_.offsetWidth;var d=this.map_.fromLatLngToDivPixel(this.marker_.getPoint());var c=this.wrapperParts.t.domElement.offsetHeight+this.wrapperParts.l.domElement.offsetHeight+this.wrapperParts.b.domElement.offsetHeight;var g=this.wrapperParts.t.domElement.offsetTop;this.wrapperParts.l.domElement.style.height=e+"px";this.wrapperParts.r.domElement.style.height=e+"px";var f=this.wrapperParts.b.domElement.offsetTop-e;this.wrapperParts.l.domElement.style.top=f+"px";this.wrapperParts.r.domElement.style.top=f+"px";this.contentDiv_.style.top=f+"px";windowTHeight=parseInt(this.wrapperParts.t.domElement.style.height,10);f-=windowTHeight;this.wrapperParts.close.domElement.style.top=f+this.borderSize_+"px";this.wrapperParts.tl.domElement.style.top=f+"px";this.wrapperParts.t.domElement.style.top=f+"px";this.wrapperParts.tr.domElement.style.top=f+"px";this.repositionMap_()};ExtInfoWindow.prototype.repositionMap_=function(){var j=this.map_.fromLatLngToDivPixel(this.map_.getBounds().getNorthEast());var a=this.map_.fromLatLngToDivPixel(this.map_.getBounds().getSouthWest());var h=this.map_.fromLatLngToDivPixel(this.marker_.getPoint());var p=0;var n=0;var l=this.paddingX_;var k=this.paddingY_;var d=this.marker_.getIcon().infoWindowAnchor;var c=this.marker_.getIcon().iconAnchor;var f=this.wrapperParts.t.domElement;var i=this.wrapperParts.l.domElement;var q=this.wrapperParts.b.domElement;var g=this.wrapperParts.r.domElement;var b=this.wrapperParts.beak.domElement;var m=h.y-(-d.y+c.y+this.getDimensions_(b).height+this.getDimensions_(q).height+this.getDimensions_(i).height+this.getDimensions_(f).height+this.paddingY_);if(m<j.y){n=j.y-m}else{var r=h.y+this.paddingY_;if(r>=a.y){n=-(r-a.y)}}var o=Math.round(h.x+this.getDimensions_(this.container_).width/2+this.getDimensions_(g).width+this.paddingX_+d.x-c.x);if(o>j.x){p=-(o-j.x)}else{var e=-(Math.round((this.getDimensions_(this.container_).width/2-this.marker_.getIcon().iconSize.width/2)+this.getDimensions_(i).width+this.borderSize_+this.paddingX_)-h.x-d.x+c.x);if(e<a.x){p=a.x-e}}if(p!=0||n!=0&&this.map_.getExtInfoWindow()!=null){this.map_.panBy(new GSize(p,n))}};ExtInfoWindow.prototype.ajaxRequest_=function(a){var c=this.map_;var b=this.callback_;GDownloadUrl(a,function(e,d){if(c.getExtInfoWindow()!==null){var f=document.getElementById(c.getExtInfoWindow().infoWindowId_+"_contents");if(e==null||d==-1){f.innerHTML='<span class="error">ERROR: The Ajax request failed to get HTML content from "'+a+'"</span>'}else{f.innerHTML=e}if(b!=null){b()}c.getExtInfoWindow().resize()}GEvent.trigger(c,"extinfowindowupdate")})};ExtInfoWindow.prototype.getDimensions_=function(c){var g=this.getStyle_(c,"display");if(g!="none"&&g!=null){return{width:c.offsetWidth,height:c.offsetHeight}}var b=c.style;var f=b.visibility;var d=b.position;var a=b.display;b.visibility="hidden";b.position="absolute";b.display="block";var h=c.clientWidth;var e=c.clientHeight;b.display=a;b.position=d;b.visibility=f;return{width:h,height:e}};ExtInfoWindow.prototype.getStyle_=function(b,c){var e=false;c=this.camelize_(c);if(b.id==this.infoWindowId_&&c=="width"&&b.style.display=="none"){b.style.visibility="hidden";b.style.display=""}var d=b.style[c];if(!d){if(document.defaultView&&document.defaultView.getComputedStyle){var a=document.defaultView.getComputedStyle(b,null);d=a?a[c]:null}else{if(b.currentStyle){d=b.currentStyle[c]}}}if((d=="auto")&&(c=="width"||c=="height")&&(this.getStyle_(b,"display")!="none")){if(c=="width"){d=b.offsetWidth}else{d=b.offsetHeight}}if(b.id==this.infoWindowId_&&c=="width"&&b.style.display!="none"){b.style.display="none";b.style.visibility="visible"}return(d=="auto")?null:d};ExtInfoWindow.prototype.camelize_=function(c){var e=c.split("-"),a=e.length;if(a==1){return e[0]}var d=c.charAt(0)=="-"?e[0].charAt(0).toUpperCase()+e[0].substring(1):e[0];for(var b=1;b<a;b++){d+=e[b].charAt(0).toUpperCase()+e[b].substring(1)}return d};GMap.prototype.ExtInfoWindowInstance_=null;GMap.prototype.ClickListener_=null;GMap.prototype.InfoWindowListener_=null;GMarker.prototype.openExtInfoWindow=function(b,d,a,c){if(b==null){throw"Error in GMarker.openExtInfoWindow: map cannot be null";return false}if(d==null||d==""){throw"Error in GMarker.openExtInfoWindow: must specify a cssId";return false}b.closeInfoWindow();if(b.getExtInfoWindow()!=null){b.closeExtInfoWindow()}if(b.getExtInfoWindow()==null){b.setExtInfoWindow_(new ExtInfoWindow(this,d,a,c));if(b.ClickListener_==null){b.ClickListener_=GEvent.addListener(b,"click",function(e){if(!e&&b.getExtInfoWindow()!=null){b.closeExtInfoWindow()}})}if(b.InfoWindowListener_==null){b.InfoWindowListener_=GEvent.addListener(b,"infowindowopen",function(e){if(b.getExtInfoWindow()!=null){b.closeExtInfoWindow()}})}b.addOverlay(b.getExtInfoWindow())}};GMarker.prototype.closeExtInfoWindow=function(a){if(a.getExtInfoWindow()!=null){a.closeExtInfoWindow()}};GMap2.prototype.getExtInfoWindow=function(){return this.ExtInfoWindowInstance_};GMap2.prototype.setExtInfoWindow_=function(a){this.ExtInfoWindowInstance_=a};GMap2.prototype.closeExtInfoWindow=function(){if(this.getExtInfoWindow()!=null){this.ExtInfoWindowInstance_.remove()}};if(typeof Prototype=="undefined"||!Prototype.Version.match("1.6")){throw ("Prototype-UI library require Prototype library >= 1.6.0")}if(Prototype.Browser.WebKit){Prototype.Browser.WebKitVersion=parseFloat(navigator.userAgent.match(/AppleWebKit\/([\d\.\+]*)/)[1]);Prototype.Browser.Safari2=(Prototype.Browser.WebKitVersion<420)}if(Prototype.Browser.IE){Prototype.Browser.IEVersion=parseFloat(navigator.appVersion.split(";")[1].strip().split(" ")[1]);Prototype.Browser.IE6=Prototype.Browser.IEVersion==6;Prototype.Browser.IE7=Prototype.Browser.IEVersion==7}Prototype.falseFunction=function(){return false};Prototype.trueFunction=function(){return true};var UI={Abstract:{},Ajax:{}};Object.extend(Class.Methods,{extend:Object.extend.methodize(),addMethods:Class.Methods.addMethods.wrap(function(a,b){if(!b){return this}if(!b.hasOwnProperty("methodsAdded")){return a(b)}var c=b.methodsAdded;delete b.methodsAdded;a(b);c.call(b,this);b.methodsAdded=c;return this}),addMethod:function(c,b){var a={};a[c]=b;return this.addMethods(a)},method:function(a){return this.prototype[a].valueOf()},classMethod:function(){$A(arguments).flatten().each(function(a){this[a]=(function(){return this[a].apply(this,arguments)}).bind(this.prototype)},this);return this},undefMethod:function(a){this.prototype[a]=undefined;return this},removeMethod:function(a){delete this.prototype[a];return this},aliasMethod:function(a,b){this.prototype[a]=this.prototype[b];return this},aliasMethodChain:function(b,a){a=a.camelcase();this.aliasMethod(b+"Without"+a,b);this.aliasMethod(b,b+"With"+a);return this}});Object.extend(Number.prototype,{snap:function(a){return parseInt(a==1?this:(this/a).floor()*a)}});Object.extend(String.prototype,{camelcase:function(){var a=this.dasherize().camelize();return a.charAt(0).toUpperCase()+a.slice(1)},makeElement:function(){var a=new Element("div");a.innerHTML=this;return a.down()}});Object.extend(Array.prototype,{empty:function(){return !this.length},extractOptions:function(){return this.last().constructor===Object?this.pop():{}},removeAt:function(b){var a=this[b];this.splice(b,1);return a},remove:function(b){var a;while((a=this.indexOf(b))!=-1){this.removeAt(a)}return b},insert:function(b){var a=$A(arguments);a.shift();this.splice.apply(this,[b,0].concat(a));return this}});Element.addMethods({getScrollDimensions:function(a){return{width:a.scrollWidth,height:a.scrollHeight}},getScrollOffset:function(a){return Element._returnOffset(a.scrollLeft,a.scrollTop)},setScrollOffset:function(a,b){a=$(a);if(arguments.length==3){b={left:b,top:arguments[2]}}a.scrollLeft=b.left;a.scrollTop=b.top;return a},getNumStyle:function(a,b){var c=parseFloat($(a).getStyle(b));return isNaN(c)?null:c},appendText:function(a,b){a=$(a);b=String.interpret(b);a.appendChild(document.createTextNode(b));return a}});document.whenReady=function(a){if(document.loaded){a.call(document)}else{document.observe("dom:loaded",a)}};Object.extend(document.viewport,{getScrollOffset:document.viewport.getScrollOffsets,setScrollOffset:function(a){Element.setScrollOffset(Prototype.Browser.WebKit?document.body:document.documentElement,a)},getScrollDimensions:function(){return Element.getScrollDimensions(Prototype.Browser.WebKit?document.body:document.documentElement)}});(function(){UI.Options={methodsAdded:function(b){b.classMethod($w(" setOptions allOptions optionsGetter optionsSetter optionsAccessor "))},setOptions:function(b){if(!this.hasOwnProperty("options")){this.options=this.allOptions()}this.options=Object.extend(this.options,b||{})},allOptions:function(){var c=this.constructor.superclass,b=c&&c.prototype;return(b&&b.allOptions)?Object.extend(b.allOptions(),this.options):Object.clone(this.options)},optionsGetter:function(){a(this,arguments,false)},optionsSetter:function(){a(this,arguments,true)},optionsAccessor:function(){this.optionsGetter.apply(this,arguments);this.optionsSetter.apply(this,arguments)}};function a(c,d,b){d=$A(d).flatten();if(d.empty()){d=Object.keys(c.allOptions())}d.each(function(f){var e=(b?"set":"get")+f.camelcase();c[e]=c[e]||(b?function(g){return this.options[f]=g}:function(){return this.options[f]})})}})();UI.Carousel=Class.create(UI.Options,{options:{direction:"horizontal",previousButton:".previous_button",nextButton:".next_button",container:".container",scrollInc:"auto",disabledButtonSuffix:"_disabled",overButtonSuffix:"_over"},initialize:function(b,a){this.setOptions(a);this.element=$(b);this.id=this.element.id;this.container=this.element.down(this.options.container).firstDescendant();this.elements=this.container.childElements();this.previousButton=this.options.previousButton==false?null:this.element.down(this.options.previousButton);this.nextButton=this.options.nextButton==false?null:this.element.down(this.options.nextButton);this.posAttribute=(this.options.direction=="horizontal"?"left":"top");this.dimAttribute=(this.options.direction=="horizontal"?"width":"height");this.elementSize=this.computeElementSize();this.nbVisible=this.currentSize()/this.elementSize;var c=this.options.scrollInc;if(c=="auto"){c=Math.floor(this.nbVisible)}[this.previousButton,this.nextButton].each(function(d){if(!d){return}var e=(d==this.nextButton?"next_button":"previous_button")+this.options.overButtonSuffix;d.clickHandler=this.scroll.bind(this,(d==this.nextButton?-1:1)*c*this.elementSize);d.observe("click",d.clickHandler).observe("mouseover",function(){d.addClassName(e)}.bind(this)).observe("mouseout",function(){d.removeClassName(e)}.bind(this))},this);this.updateButtons()},destroy:function($super){[this.previousButton,this.nextButton].each(function(a){if(!a){return}a.stopObserving("click",a.clickHandler)},this);this.element.remove();this.fire("destroyed")},fire:function(b,a){a=a||{};a.carousel=this;return this.element.fire("carousel:"+b,a)},observe:function(a,b){this.element.observe("carousel:"+a,b.bind(this));return this},stopObserving:function(a,b){this.element.stopObserving("carousel:"+a,b);return this},checkScroll:function(a,d){if(a>0){a=0}else{var b=this.elements.last().positionedOffset()[this.posAttribute]+this.elementSize;var c=this.currentSize();if(a+b<c){a+=c-(a+b)}a=Math.min(a,0)}if(d){this.container.style[this.posAttribute]=a+"px"}return a},scroll:function(b){if(this.animating){return this}var a=this.currentPosition()+b;a=this.checkScroll(a,false);b=a-this.currentPosition();if(b!=0){this.animating=true;this.fire("scroll:started");var c=this;this.container.morph("opacity:0.5",{duration:0.2,afterFinish:function(){c.container.morph(c.posAttribute+": "+a+"px",{duration:0.4,delay:0.2,afterFinish:function(){c.container.morph("opacity:1",{duration:0.2,afterFinish:function(){c.animating=false;c.updateButtons().fire("scroll:ended",{shift:b/c.currentSize()})}})}})}})}return this},scrollTo:function(a){if(this.animating||a<0||a>this.elements.length||a==this.currentIndex()||isNaN(parseInt(a))){return this}return this.scroll((this.currentIndex()-a)*this.elementSize)},updateButtons:function(){this.updatePreviousButton();this.updateNextButton();return this},updatePreviousButton:function(){var a=this.currentPosition();var b="previous_button"+this.options.disabledButtonSuffix;if(this.previousButton.hasClassName(b)&&a!=0){this.previousButton.removeClassName(b);this.fire("previousButton:enabled")}if(!this.previousButton.hasClassName(b)&&a==0){this.previousButton.addClassName(b);this.fire("previousButton:disabled")}},updateNextButton:function(){var a=this.currentLastPosition();var b=this.currentSize();var c="next_button"+this.options.disabledButtonSuffix;if(this.nextButton.hasClassName(c)&&a!=b){this.nextButton.removeClassName(c);this.fire("nextButton:enabled")}if(!this.nextButton.hasClassName(c)&&a==b){this.nextButton.addClassName(c);this.fire("nextButton:disabled")}},computeElementSize:function(){return this.elements.first().getDimensions()[this.dimAttribute]},currentIndex:function(){return -this.currentPosition()/this.elementSize},currentLastPosition:function(){if(this.container.childElements().empty()){return 0}return this.currentPosition()+this.elements.last().positionedOffset()[this.posAttribute]+this.elementSize},currentPosition:function(){return this.container.getNumStyle(this.posAttribute)},currentSize:function(){return this.container.parentNode.getDimensions()[this.dimAttribute]},updateSize:function(){this.nbVisible=this.currentSize()/this.elementSize;var a=this.options.scrollInc;if(a=="auto"){a=Math.floor(this.nbVisible)}[this.previousButton,this.nextButton].each(function(b){if(!b){return}b.stopObserving("click",b.clickHandler);b.clickHandler=this.scroll.bind(this,(b==this.nextButton?-1:1)*a*this.elementSize);b.observe("click",b.clickHandler)},this);this.checkScroll(this.currentPosition(),true);this.updateButtons().fire("sizeUpdated");return this}});UI.Ajax.Carousel=Class.create(UI.Carousel,{options:{elementSize:-1,url:null},initialize:function($super,b,a){if(!a.url){throw ("url option is required for UI.Ajax.Carousel")}if(!a.elementSize){throw ("elementSize option is required for UI.Ajax.Carousel")}$super(b,a);this.endIndex=0;this.hasMore=true;this.updateHandler=this.update.bind(this);this.updateAndScrollHandler=function(e,d,c){this.update(d,c);this.scroll(e)}.bind(this);this.runRequest.bind(this).defer({parameters:{from:0,to:Math.ceil(this.nbVisible)-1},onSuccess:this.updateHandler})},runRequest:function(a){this.requestRunning=true;new Ajax.Request(this.options.url,Object.extend({method:"GET"},a));this.fire("request:started");return this},scroll:function($super,a){if(this.animating||this.requestRunning){return this}var d=(-a)/this.elementSize;if(this.hasMore&&d>0&&this.currentIndex()+this.nbVisible+d-1>this.endIndex){var c=this.endIndex+1;var b=Math.ceil(c+this.nbVisible-1);this.runRequest({parameters:{from:c,to:b},onSuccess:this.updateAndScrollHandler.curry(a).bind(this)});return this}else{$super(a)}},update:function(b,a){this.requestRunning=false;this.fire("request:ended");if(!a){a=b.responseJSON}this.hasMore=a.more;this.endIndex=Math.max(this.endIndex,a.to);this.elements=this.container.insert({bottom:a.html}).childElements();return this.updateButtons()},computeElementSize:function(){return this.options.elementSize},updateSize:function($super){var a=this.nbVisible;$super();if(Math.floor(this.nbVisible)-Math.floor(a)>=1&&this.hasMore){if(this.currentIndex()+Math.floor(this.nbVisible)>=this.endIndex){var b=Math.floor(this.currentIndex()+Math.floor(this.nbVisible)-this.endIndex);this.runRequest({parameters:{from:this.endIndex+1,to:this.endIndex+b},onSuccess:this.updateHandler})}}return this},updateNextButton:function($super){var a=this.currentLastPosition();var b=this.currentSize();var c="next_button"+this.options.disabledButtonSuffix;if(this.nextButton.hasClassName(c)&&a!=b){this.nextButton.removeClassName(c);this.fire("nextButton:enabled")}if(!this.nextButton.hasClassName(c)&&a==b&&!this.hasMore){this.nextButton.addClassName(c);this.fire("nextButton:disabled")}}});