﻿
(function(){if(typeof BA==='undefined'){BA={};}
if(typeof BA.Flat==='undefined'){BA.Flat={};}
if(typeof BA.Flat.AjaxResults==='undefined'){BA.Flat.AjaxResults={};}
var loader={};Cuke.apply(loader,{wrapper:null,addTo:function(container)
{this.wrapper=$j("<div class='ba-loader'>"+"<div>"+Cuke.getString("Cuke.Loading")+"</div>"+"<img src='"+Cuke.skin+"img/ajax-loader-beapart-transparent.gif' alt='"+Cuke.getString("Cuke.Loading")+"'/>"+"</div>").appendTo(container).height(container.height()).width(container.width());},remove:function()
{this.wrapper.fadeOut(400,function(){$j(this).remove();});}});var show=function(object,itemsWrapper,dispacthName)
{object.wrapper.show();var page=$j.bbq.getState("page");if(page){object.currPage=parseInt(page,10);}
var sort=$j.bbq.getState("sort");if(sort){object.sort=parseInt(sort,10);}
var url=$j.param.fragment();var itemToShow=object.cache[url];loader.addTo(object.wrapper.parent().parent());if(itemToShow)
{itemsWrapper.children(":visible:not(.ba-loader)").hide();loader.remove();itemToShow.fadeIn();object.container.updateTotalCount(itemToShow.data("totalCount"));if(typeof object.updatePager==="function")
{object.maxPageNumber=itemToShow.data("maxPageNumber");object.updatePager();}
$j("html, body").animate({scrollTop:0},0);}
else
{Cuke.SyncDic.dispatch(dispacthName,{ItemsPerPage:object.itemsPerPage,PageNumber:object.currPage,SortAscending:object.sort>=0,SortProperty:Math.abs(object.sort)});}};var reset=function(object)
{for(url in object.cache)
{object.cache[url].remove();}
object.cache={};object.currPage=1;};Cuke.apply(BA.Flat.AjaxResults,{list:{cache:{},wrapper:null,maxPageNumber:1,itemsPerPage:null,currPage:1,sort:0,type:"list",container:null,init:function(wrapper,page,isLogged,container,itemsPerPage)
{var self=this;this.wrapper=wrapper;this.container=container;this.itemsPerPage=itemsPerPage;this.maxPageNumber=Math.ceil(page.TotalCount/page.DisplayInfo.ItemsPerPage);this.currPage=page.DisplayInfo.PageNumber;BA.FlatThumbnail.bindEventAndLaunchCycleOnFlats(page.DisplayItems,wrapper);this.updatePager();var firstPage=$j(".items .page",this.wrapper).data("totalCount",page.TotalCount).data("maxPageNumber",this.maxPageNumber);this.pushInCache(firstPage);$j(".pager .button",this.wrapper).hover(function(){$j(this).addClass("hover");},function(){$j(this).removeClass("hover");});$j(".pager .prev.button",this.wrapper).click(function()
{var pageNumber=self.currPage-1;if(pageNumber>=1)
{self.currPage=pageNumber;self.pushState();}});$j(".pager .next.button",this.wrapper).click(function()
{var pageNumber=self.currPage+1;if(pageNumber<=self.maxPageNumber)
{self.currPage=pageNumber;self.pushState();}});Cuke.SyncDic.Bind("AjaxResultsListNewPage",function(data,name)
{self.maxPageNumber=Math.ceil(data.TotalCount/data.DisplayInfo.ItemsPerPage);var itemsWrapper=$j(".items",self.wrapper);itemsWrapper.children(":visible").hide();var page=$j("<div class='page'>").appendTo(itemsWrapper).hide().data("totalCount",data.TotalCount).data("maxPageNumber",self.maxPageNumber);for(var i=0;i<data.DisplayItems.length;i++)
{var flat=data.DisplayItems[i];var $html=$j(BA.FlatThumbnail.getHtml(flat,isLogged)).addClass("large");if(i+1!=data.DisplayItems.length)
{$html.addClass("lineSeparator");}
page.append($html);BA.FlatThumbnail.bindEventAndLaunchCycle(flat,page);}
self.updatePager();self.container.updateTotalCount(data.TotalCount);loader.remove();itemsWrapper.css("height","auto");$j("html, body").animate({scrollTop:0},0);page.fadeIn();self.pushInCache(page);});},hide:function()
{this.wrapper.hide();},show:function()
{show(this,$j(".items",this.wrapper),"AjaxResultsListGetPage");},getCurrentState:function()
{return{page:this.currPage,sort:this.sort,displayType:this.type};},pushState:function()
{$j.bbq.pushState(this.getCurrentState());},pushInCache:function(item)
{var url=$j.param.fragment();this.cache[url]=item;var stateUrl=$j.param.fragment("#"+url,this.getCurrentState()).substr(1);if(stateUrl!=url){this.cache[stateUrl]=item;}},updatePager:function()
{if(this.currPage>this.maxPageNumber){this.currPage=this.maxPageNumber;}
$j(".pager .page-info .page-number",this.wrapper).text(this.currPage);$j(".pager .page-info .total-page-count",this.wrapper).text(this.maxPageNumber);if(this.currPage<=1){$j(".pager .prev.button",this.wrapper).hide();}
else{$j(".pager .prev.button",this.wrapper).show();}
if(this.currPage>=this.maxPageNumber){$j(".pager .next.button",this.wrapper).hide();}
else{$j(".pager .next.button",this.wrapper).show();}}},map:{cache:{},itemsPerPage:3000,currPage:1,sort:0,type:"map",container:null,init:function(wrapper,isLogged,container)
{var self=this;this.wrapper=wrapper;this.container=container;Cuke.SyncDic.Bind("AjaxResultsMapNewPage",function(data,name)
{self.wrapper.children(":visible").hide();var mapWrapper=$j("<div class='map'>").appendTo(self.wrapper);mapWrapper.data("totalCount",data.TotalCount);var ggMap=BA.Google.GoogleMap;ggMap.generateMap(mapWrapper,"Paris",450,450,11);var infoPoints=self.getInfoPoints(data.DisplayItems);for(var i=0;i<infoPoints.length;i++)
{var point=infoPoints[i];ggMap.addMarkerLatLng(point.latitude,point.longitude,point,function(m,p)
{var waiting={title:"",content:"<img src='"+Cuke.skin+"img/loader.gif' alt='loading' />"};ggMap.openInfoWindow(m,[waiting]);var infoTabs=[];for(var i=0;i<p.flats.length;i++)
{var flat=p.flats[i];var jHtml=$j(BA.FlatThumbnail.getHtml(flat,isLogged));var htmlWrapper=$j("<div>").append(jHtml.hide());mapWrapper.append(htmlWrapper);jHtml.css({'width':jHtml.width()+'px','height':jHtml.height()+'px'});htmlWrapper.remove();jHtml.show();var infoTab={title:"- "+flat.FlatID+" -",content:htmlWrapper.html()};infoTabs.push(infoTab);}
ggMap.openInfoWindow(m,infoTabs,function()
{BA.FlatThumbnail.bindEventAndLaunchCycleOnFlats(p.flats,mapWrapper);});});}
ggMap.autoZoom();loader.remove();self.container.updateTotalCount(data.TotalCount);var url=$j.param.fragment();self.cache[url]=mapWrapper;});},hide:function()
{this.wrapper.hide();},show:function()
{show(this,this.wrapper,"AjaxResultsMapGetPage");},pushState:function()
{$j.bbq.pushState({page:this.currPage,sort:this.sort,displayType:this.type});},getInfoPoints:function(flats)
{infoPoints=[];var groupFlatUnderMeters=4;for(var i=0;i<flats.length;i++)
{var flat=flats[i];var pointFound=null;for(var idx=0;idx<infoPoints.length;idx++)
{var point=infoPoints[idx];var lat1=point.latitude;var lat2=flat.Latitude;var long1=point.longitude;var long2=flat.Longitude;var areEquals=lat1==lat2&&long1==long2;if(!areEquals)
{var kEarthRadiusKms=6376.5;var lat1InRad=lat1*(Math.PI/180.0);var long1InRad=long1*(Math.PI/180.0);var lat2InRad=lat2*(Math.PI/180.0);var long2InRad=long2*(Math.PI/180.0);var dLongitude=long2InRad-long1InRad;var dLatitude=lat2InRad-lat1InRad;var a=Math.pow(Math.sin(dLatitude/2.0),2.0)+Math.cos(lat1InRad)*Math.cos(lat2InRad)*Math.pow(Math.sin(dLongitude/2.0),2.0);var c=2.0*Math.atan2(Math.sqrt(a),Math.sqrt(1.0-a));var distance=kEarthRadiusKms*c;if(distance*1000<=groupFlatUnderMeters)
{pointFound=point;break;}}
else
{pointFound=point;break;}}
if(pointFound===null)
{var newPoint={latitude:flat.Latitude,longitude:flat.Longitude,flats:[flat]};infoPoints.push(newPoint);}
else
{pointFound.flats.push(flat);}}
return infoPoints;}},wrapper:null,isLogged:false,totalItemsCount:0,itemsCountRessource:null,init:function(wrapper,currPageUrl,isLogged,page,itemsCountRessource,itemsPerPage)
{if($j.param.fragment())
{var hashparams=$j.bbq.getState();var queryparams=$j.deparam.querystring();for(var name in hashparams)
{queryparams[name]=hashparams[name];}
var queryString="";for(var pName in queryparams)
{if(queryString!=""){queryString+="&";}
queryString+=pName+"="+queryparams[pName];}
window.location.href=currPageUrl+queryString;}
var self=this;this.wrapper=wrapper.css({position:"relative"});this.isLogged=isLogged;this.totalItemsCount=page.TotalCount;this.itemsCountRessource=itemsCountRessource;this.list.init($j(".display-container .result-list",wrapper).css({position:"relative"}),page,isLogged,this,itemsPerPage);this.map.init($j(".display-container .result-map",wrapper).css({position:"relative"}),isLogged,this);var queryparams=$j.deparam($j.param.querystring());var display=queryparams["displayType"];if(display=="map"){this.setDisplayType(queryparams["displayType"]);}
$j(window).bind('hashchange',function(event)
{self.setDisplayType($j.bbq.getState("displayType"));});$j(".display-type input:radio",wrapper).click(function()
{var dType=$j(this).val();if(dType=="1")
{self.map.pushState();}
else
{self.list.pushState();}});},reset:function()
{reset(this.list);reset(this.map);$j(window).trigger("hashchange");},setDisplayType:function(value)
{if(value=="map")
{var rMap=$j(".display-type input:radio[value=1]",this.wrapper);if(rMap.attr("checked")===false)
{rMap.attr("checked","checked");}
this.list.hide();this.map.show();}
else
{var rList=$j(".display-type input:radio[value=0]",this.wrapper);if(rList.attr("checked")===false)
{rList.attr("checked","checked");}
this.list.show();this.map.hide();}},updateTotalCount:function(totalCount)
{Cuke.SyncDic.dispatch("AjaxResultsTotalCountChanged",totalCount);var displayContainer=$j(".display-container",this.wrapper);var noflat=$j(".no-flat-text",this.wrapper);var countText=$j(".count-container .count-text",this.wrapper);if(totalCount>0)
{noflat.hide();displayContainer.show();countText.text(totalCount+" "+(totalCount==1?Cuke.getString(this.itemsCountRessource):Cuke.getString(this.itemsCountRessource+"s")));}
else
{displayContainer.hide();noflat.show();countText.text(totalCount+" "+Cuke.getString(this.itemsCountRessource));}}});})();
