var GMapHotels=new Class({canvas:null,gmap:null,points:null,places:null,mc:null,z:null,initialize:function(){this.canvas=$("map_canvas");this.points=[];this.places=[];this.z=1;this.size_elements();this.init_gmap()},init_gmap:function(){this.gmap=new google.maps.Map(this.canvas,{zoom:11,center:new google.maps.LatLng(37.98312,23.74542),mapTypeId:google.maps.MapTypeId.ROADMAP})},size_elements:function(){if(typeof (fs_)!="undefined"){return }var B=window.getSize();var A=$("rethead");A.setStyles({position:"absolute",top:0,left:0,display:"block",width:B.x});var C=A.getSize().y;this.canvas.setStyles({position:"absolute",top:C,left:0,width:B.x,height:B.y-C})},load_points:function(){_load_points();if(this.points.length==0){return }this.clear_markers();var B=null;var A=[];for(var C=0;C<this.points.length;C++){B=new google.maps.Marker({title:this.points[C].name,position:new google.maps.LatLng(this.points[C].lat,this.points[C].lng),icon:new google.maps.MarkerImage("/images/gmap/current_hotel_icon.png"),shadow:new google.maps.MarkerImage("/images/gmap/current_hotel_shadow.png",null,null,new google.maps.Point(15,32))});this.attach_events(B,C,this.points[C]);this.places.push({marker:B,box:null,visible:false,html:""});A.push(B)}this.mc=new MarkerClusterer(this.gmap,A);A=null},trigger_marker_clicks:function(){for(var A=0;A<this.places.length;A++){if(this.places[A].marker.visible==true){google.maps.event.trigger(this.places[A].marker,"click")}else{if(this.places[A].box!=null){this.places[A].box.close()}}}},attach_events:function(B,C,A){google.maps.event.addListener(B,"click",function(){if(this.places[C].visible==true){return }this.places[C].visible=true;var D=new InfoBox(this.gmap,B,C,A);D.setMap(this.gmap);this.places[C].box=D}.bind(this));google.maps.event.addListener(B,"visible_changed",function(){if(B.visible){google.maps.event.trigger(B,"click",B,C,A)}else{if(this.places[C].box!=null){this.places[C].box.close()}}}.bind(this))},clear_markers:function(){for(var A=0;A<this.places.length;A++){if(this.places[A].box!=null){this.places[A].box.setMap(null)}this.places[A].marker.setMap(null)}this.places=[]},get_z_index:function(){return this.z++},gallerize:function(E){if(E.length==0){return }var K=window.getSize();var C=new Element("div");C.setStyles({"background-color":"#000",position:"absolute",top:0,left:0,width:K.x,height:K.y,opacity:0});var F=new Element("div",{"class":"map-gallery"});var G=new Element("div",{"class":"actions"});var H=new Element("a",{href:"#close",html:"x","class":"close"});var I=new Element("a",{href:"#prev",html:"Previous"});var J=new Element("a",{href:"#next",html:"Next"});F.grab(H);G.grab(I);G.grab(J);F.grab(G);var B=new Element("img");$("container").grab(C);var A=new Fx.Tween(C,{property:"opacity",duration:500});A.start(0,0.3).chain(function(){A=null;Asset.image(E[0],{onLoad:function(){B.set("src",E[0]);F.grab(B);$("container").grab(F);F.position()}.bind(this)})}.bind(this));H.addEvent("click",function(){var L=new Fx.Tween(F,{property:"opacity",duration:500});L.start(1,0).chain(function(){C.destroy();F.destroy()})});var D=0;I.addEvent("click",function(){D--;if(D==-1){D=E.length-1}Asset.image(E[D],{onLoad:function(){B.set("src",E[D]);F.position()}})});J.addEvent("click",function(){D++;if(D==E.length){D=0}Asset.image(E[D],{onLoad:function(){B.set("src",E[D]);F.position()}})})}});var InfoBox=new Class({Extends:google.maps.OverlayView,marker:null,arr_pos:null,place:null,dom:null,fade:null,drag:null,was_dragged:null,a_drag:null,span_inf:null,created:null,initialize:function(D,B,C,A){this.map_=D;this.position_=B.getPosition();this.marker=B;this.arr_pos=C;this.place=A;this.dom=new Element("div");this.was_dragged=false;this.created=false;google.maps.OverlayView.apply(this,arguments)},onAdd:function(){var B=new Element("div",{"class":"iw"});B.grab(this.dom);this.div_=B;var A=this.getPanes();A.floatPane.appendChild(this.div_);this.fade=new Fx.Tween(this.div_,{property:"opacity",duration:200});this.set_events();this.drag=new Drag(this.div_,{onStart:function(){this.a_drag.setStyle("display","inline");this.div_.setStyle("opacity",0.5)}.bind(this),onComplete:function(){this.div_.setStyle("opacity",1)}.bind(this)});this.create_dom()},draw:function(){if(this.was_dragged){return }var A=this.getProjection();if(A==null){return }var B=A.fromLatLngToDivPixel(this.marker.getPosition());this.div_.setStyles({top:B.y-(this.div_.getSize().y+45),left:B.x-42});if(!this.created){this.created=true}},onRemove:function(){this.div_.destroy();this.div_=null},setContent:function(A){this.dom.set("html",A);this.draw()},create_dom:function(){if(this.place.curr=="EUR"){this.place.curr="&euro;"}var C=new Element("a",{"class":"close",href:"#close",html:"x"});C.addEvent("click",function(){this.close_with_fade()}.bind(this));this.div_.grab(C);var B=new Element("div",{"class":"quickinfo"});B.grab(new Element("span",{"class":"price",html:'<span class="from">from</span>'+this.place.curr+this.place.from}));var D=new Element("p",{html:this.place.name});var A=new Element("a",{"class":"details",href:"#details",html:"Details"});A.addEvent("click",function(){this.get_place_details()}.bind(this));B.grab(D);B.grab(A);this.dom.grab(B);this.a_drag=new Element("a",{href:"#attach",html:"Attach","class":"attach"});this.a_drag.addEvent("click",function(){this.was_dragged=false;this.a_drag.setStyle("display","none");this.draw();this.pan_map_to_box()}.bind(this));this.div_.grab(this.a_drag)},get_place_details:function(){if(gmh.places[this.arr_pos].html!=""){this.dom.setStyles({width:600,height:"auto"});this.div_.setStyle("z-index",9000+gmh.get_z_index());this.setContent(gmh.places[this.arr_pos].html)}else{var B=this.dom.getSize();this.dom.setStyles({width:B.x,height:B.y});this.dom.set("html",'<img src="/images/ajax-loader-tiny.gif" alt="" />');this.setContent('<img src="/images/ajax-loader-tiny.gif" alt="" />');var A=new Request.JSON({url:"/search-map/get-details/",onSuccess:function(D,G){if(D.errno!=0){this.setContent(D.error)}else{if(D.out.hotel.currency=="EUR"){D.out.hotel.currency="&euro;"}var F=D.out.hotel.info.split(".");var C="";if(F.length>2){C=F[0]+". "+F[1]}else{C=F[0]}var H="";for(var E=0;E<D.out.hotel.images.length;E++){H+="'"+D.out.hotel.images[E]+"',"}if(H!=""){H=H.substr(0,H.length-1)}Asset.image(D.out.hotel.images[0],{onLoad:function(){var I='<div class="map-hotel-details">						<img src="'+D.out.hotel.images[0]+'" alt="" class="main-img" />						<div class="data">							<p class="name">'+D.out.hotel.name+"</p>							<p>"+C+'</p>							<p class="from">Single / night <span class="rate">'+D.out.hotel.currency+D.out.hotel.lowest_single+"</span> Rooms: "+D.out.hotel.total_rooms+'</p>							<p class="actions"><a href="#gallery" onclick="gmh.gallerize(['+H+']);">View Gallery</a><a href="http://www.booking.com/hotel/'+D.out.hotel.url+'?aid=336259&label=map" target="_blank">Book Now</a></p>						</div>						</div>';this.dom.setStyles({width:600,height:"auto"});this.div_.setStyle("z-index",9000+gmh.get_z_index());this.setContent(I);this.pan_map_to_box();gmh.places[this.arr_pos].html=I}.bind(this)})}}.bind(this)}).send("id="+this.place.id)}},close:function(){gmh.places[this.arr_pos].visible=false;gmh.places[this.arr_pos].box=null;this.setMap(null)},close_with_fade:function(){this.fade.start(1,0).chain(function(){gmh.places[this.arr_pos].visible=false;gmh.places[this.arr_pos].box=null;this.setMap(null)}.bind(this))},cancel_events:function(A){A.cancelBubble=true;if(A.stopPropagation){A.stopPropagation()}},set_events:function(){google.maps.event.addDomListener(this.div_,"mousedown",function(A){this.cancel_events(A)}.bind(this));google.maps.event.addDomListener(this.div_,"click",function(A){this.cancel_events(A)}.bind(this));google.maps.event.addDomListener(this.div_,"dblclick",function(A){this.cancel_events(A)}.bind(this));google.maps.event.addDomListener(this.div_,"contextmenu",function(A){this.cancel_events(A)}.bind(this));google.maps.event.addDomListener(this.div_,"mouseover",function(A){this.map_.set("scrollwheel",false)}.bind(this));google.maps.event.addDomListener(this.div_,"mouseout",function(A){this.map_.set("scrollwheel",true)}.bind(this))},pan_map_to_box:function(){var V=this.getMap();var E=V.getBounds();var N=V.getDiv().getSize();var W=E.toSpan();var R=W.lng();var I=W.lat();var K=R/N.x;var H=I/N.y;var G=E.getSouthWest().lng();var O=E.getNorthEast().lng();var U=E.getNorthEast().lat();var B=E.getSouthWest().lat();var X=this.position_;this.pixelOffset_=new google.maps.Size(-42,-(this.div_.getSize().y+45));var F=this.pixelOffset_.width;var D=this.pixelOffset_.height;this.infoBoxClearance_=new google.maps.Size(1,1);var M=this.infoBoxClearance_.width;var L=this.infoBoxClearance_.height;var A=X.lng()+(F-M)*K;var C=X.lng()+(F+this.div_.offsetWidth+M)*K;var Q=X.lat()-(D-L)*H;var J=X.lat()-(D+this.div_.offsetHeight+L)*H;var P=(A<G?G-A:0)+(C>O?O-C:0);var T=(Q>U?U-Q:0)+(J<B?B-J:0);if(!(T===0&&P===0)){var S=V.getCenter();V.panTo(new google.maps.LatLng(S.lat()-T,S.lng()-P))}}});var gmh=null;window.addEvent("domready",function(){gmh=new GMapHotels();gmh.load_points()});
