Class.Singleton=new Class({initialize:function(a,b){return new new Class(a)(b)}});
Cgp=new Class.Singleton({options:{},initialize:function(){this.cineId=this.villeId=false;this.cache=[];this.elementList=[];this.cinemaConf=[];this.villeConf=[];var a=Cookie.read("cgpgeo");a?(a=JSON.decode(a),this.villeId=a.villeId,this.cineId=a.cineId):(navigator.geolocation&&navigator.geolocation.getCurrentPosition(this._setPosition.bind(this),this._geolocip.bind(this),{timeout:3E3}),this._geolocip(),function(){Cgp.villeId||($("geoloc_fermer").setStyle("display","none"),$("localisation-titre")&&
$("localisation-titre").set("html","Choisissez la localité de vos cinémas"),$("changer_ville").fireEvent("click"))}.delay(3E3))},setVilleId:function(a){this.villeId=a;this.cineId=false;this._writeCookie();this._reloadAll();$("mbOverlay")&&$("mbOverlay").fireEvent("click")},setCinemaId:function(a){this.cineId=a;this._writeCookie()},getCineId:function(){return this.cineId?this.cineId:this.getCinemaList()[0].id},getCineIdList:function(){var a=[];this.cineId&&a.push(this.cineId);userObject.getFavoris().each(function(b){b!=
this.cineId&&a.push(b)}.bind(this));return a},addCinema:function(a,b,c,d,e,f,g){this.cinemaConf[a]={id:a,lib:b,lat:c,lon:d,url:e,ville:f,villeId:g,s:false};this.villeConf[g]=f},_setParisByDefault:function(){Cgp.villeId||Cgp.setVilleId(25)},_setPosition:function(a){a&&a.coords?this._geoloc(a.coords):this._geolocip()},_geoloc:function(a){for(var b=null,c=99999999,d=0;d<this.cinemaConf.length;d++)this.cinemaConf[d]&&(testdist=this._getDist(a,this.cinemaConf[d]),testdist<c&&(b=this.cinemaConf[d],c=testdist));
this.setCinemaId(b.id);this.setVilleId(b.villeId)},_getDist:function(a,b){return Math.acos(Math.sin(a.latitude)*Math.sin(b.lat)+Math.cos(a.latitude)*Math.cos(b.lat)*Math.cos(a.longitude-b.lon))},_geolocip:function(){(new Request.JSON({url:"index.php",onSuccess:function(a){Cgp.villeId||Cgp.setVilleId(a)}})).get({sub:"byIp","do":"ajax_geoloc"}).send()},_writeCookie:function(){Cookie.write("cgpgeo",JSON.encode({villeId:this.villeId,cineId:this.cineId}),{duration:365,domain:cookieDomain,path:cookiePath})},
_reloadAll:function(){if(this.villeId)for(var a=0;a<this.elementList.length;a++)typeof this.elementList[a].setVilleId=="function"&&this.elementList[a].setVilleId(this.villeId),this.elementList[a].reload()},getCinemaList:function(){for(var a=[],b=false,c=0;c<this.cinemaConf.length;c++)this.cinemaConf[c]&&this.cinemaConf[c].villeId==this.villeId&&(b=false,this.cinemaId==this.cinemaConf[c].id&&(b=true),a.push({id:this.cinemaConf[c].id,s:b,lib:this.cinemaConf[c].lib}));a.sort(this._sortCinemaList);return a},
_sortCinemaList:function(a,b){if(typeof a=="object")var c=userObject.isFavoriCookie(a.id),d=userObject.isFavoriCookie(b.id),e=a.lib.toLowerCase(),f=b.lib.toLowerCase(),g=a.id;else c=userObject.isFavoriCookie(a),d=userObject.isFavoriCookie(b),e=Cgp.cinemaConf[a].lib.toLowerCase(),f=Cgp.cinemaConf[b].lib.toLowerCase(),g=a;return c&&!d||!c&&d?userObject.isFavoriCookie(g)?-1:1:e<f?-1:e>f?1:0},getHoraires:function(a){var b=a.getFilmId();if(b){var c=this.villeId,d=this.cineId;typeof a.getCineId=="function"&&
(d=a.getCineId());typeof a.getVilleId=="function"&&(c=a.getVilleId());this._isInCache(b)?this._objectSetAndRefresh(a,this.cache[b][c][d]):this._doAjaxRequest(a,b,true,c,d);(b=a.getNextFilmId())&&(this._isInCache(b)||this._doAjaxRequest(a,b,false,c,d))}},_isInCache:function(a){return this.cache[a]&&this.cache[a][this.villeId]&&this.cache[a][this.villeId][this.cineId]},_objectSetAndRefresh:function(a,b){b.cl.sort(this._sortCinemaList);for(date in b.p)if(date==(new Date).format("%Y-%m-%d"))for(vkey in b.p[date]){var c=
0;for(b.p[date][vkey].each(function(a){parseDate=new Date;parseDate.parse(a.h);parseDate.get("Hours")<4&&parseDate.increment("hour",24);if(parseDate.diff(new Date,"minute")>0)a.i="",c++});c>0&&b.p[date][vkey].length>4;)b.p[date][vkey].shift(),c--}a.setCinemas(b.cl);a.setCineId(b.c);a.setHoraires(b.p);a.refresh();eventCard&&eventCard.updateCinemasList()},_doAjaxRequest:function(a,b,c,d,e){var f=new Request.JSON({secure:false,url:"index.php",onSuccess:function(f){this.cache[b]||(this.cache[b]=[]);this.cache[b][d]||
(this.cache[b][d]=[]);this.cache[b][d][e]=f;c&&this._objectSetAndRefresh(a,f)}.bind(this)}),g={"do":"json/horaires",f:b,v:d};g.c=this.getCineIdList();f.get(g)}});
Class.ElementFilm=new Class({data:{},initialize:function(a,b){this.data.html=a;this.data.html.addEvent("click",function(a){if($("content_reserver").getStyle("display")=="block")$("content_reserver").setStyle("display","none");else{$("content_reserver").setStyle("display","block");a=$(a.target).getPosition();a.x-=10;a.y+=25;$("content_reserver").setPosition(a);$("horaires").set("html",'<br/><img src="'+mediaUrl+'v3/img/slide-reserver/loading.gif" alt="chargement..." />');if(b)Cgp.cineId=c.get("id").split("_")[2];
Cgp.getHoraires(this)}}.bind(this));var c=a.getElement(".reserver_button");this.data.filmId=c.get("id").split("_")[1]},getCineId:function(){return typeof fiche_film_cine_id!="undefined"?fiche_film_cine_id:Cgp.cineId},getVilleId:function(){return typeof fiche_film_ville_id!="undefined"?fiche_film_ville_id:Cgp.villeId},getFilmId:function(){return this.data.filmId},getNextFilmId:function(){return false},setCinemas:function(a){this.data.cinemas=a},setCineId:function(a){this.data.cineId=a},setHoraires:function(a){this.data.horaires=
a},reload:function(){$$("#content_reserver_geoloc .geoloc_ville").each(function(a){a.set("html",Cgp.villeConf[this.getVilleId()])}.bind(this));liaisonFilmVille[this.getVilleId()]&&liaisonFilmVille[this.getVilleId()][this.data.filmId]?$(this.data.html).setStyle("display","block"):$(this.data.html).setStyle("display","none")},_genererLien:function(a){return new Element("a",{href:"#",events:{click:function(){Cgp.setCinemaId(a);this.setCineId(a);_closeInfoBlock();Cgp.getHoraires(this);this.reload();return false}.bind(this)},
html:Cgp.cinemaConf[a].lib})},_setCinemaId:function(){},refresh:function(){if(Object.keys(this.data.horaires).length){$$(".geoloc_cinema").each(function(a){a.set("html",Cgp.cinemaConf[this.data.cineId].lib)}.bind(this));var a="",b=new Date;b.parse(b.format("%Y-%m-%d"));var c=0,d;for(d in this.data.horaires){var e=new Date;e.parse(d);e.diff(b)<=0&&(a+="<a onclick=\"_setDate('"+d+'\');_closeInfoBlock();return false;" href="">'+e.format("%A %e %B")+"</a><br>");c++}var c="",f=true,g=b;for(d in this.data.horaires)if(e=
new Date,e.parse(d),e.diff(b)<=0){if(f)g=e;else var l="display:none";f=false;e="";c+='<div  class="prog-date prog-date-'+d+'"  style="clear:left;'+l+'" >';for(var k in this.data.horaires[d]){var i=this.data.horaires[d][k];k!=e&&(c+='<span style="clear:left;float: left;" >Projection en ',i[0].imax&&(c+=" IMAX - "),i[0].d&&(c+=" 3D - "),c+=i[0].v+"</span><br/>",e=k);c+='<span class="reserver_red"> R&eacute;server : </span><span>';for(var j=0;j<i.length;j++){var h=i[j];c+=!h.i||h.i=="c"||h.i=="l"?"<span>"+
h.h+"</span>":'<a href="'+baseUrlProg+h.i+'" title="Réservez la séance de '+h.h+'" rel="nofollow">'+h.h+"</a>";j<i.length-1&&(c+=" | ")}c+="</span><br/>"}c+="</div>"}a='<div style="display:none;" id="reservationDate">'+a+'</div><span style="float:left;clear:left;" id="selected_date">'+g.format("%A %e %B")+'</span><a class="geoloc_jour_change"  onclick="_setDateBlock(this);return false;" href="#"><span class="changer" style="float:left"> changer </span><span class="openList"></span></a>'+c;$("horaires").set("html",
a)}else $("horaires").set("html","");this.data.cinemas.length<=1?$$(".geoloc_cinema_change").each(function(a){a.setStyle("display","none")}):($$(".geoloc_cinema_change").each(function(a){a.removeEvents("click");a.addEvent("click",function(a){a.preventDefault();a=$(a.target).getPosition();a.x-=160;a.y+=25;var b=new Element("div#information_block_content");if(this.data.cinemas){for(var c=0;c<this.data.cinemas.length;c++){var d=this._genererLien(this.data.cinemas[c]);b.adopt(d);b.adopt(new Element("br"))}_displayInfoBlock(b,
a,"cinemaList")}}.bind(this))}.bind(this)),$$(".geoloc_cinema_change").each(function(a){a.setStyle("display","")}));$$("#information_block_content a").length<=1?$$(".geoloc_jour_change").each(function(a){a.setStyle("display","none")}):$$(".geoloc_jour_change").each(function(a){a.setStyle("display","")})}});
Class.ElementBandeau=new Class({data:{},initialize:function(){},getFilmId:function(){return this.filmId},getNextFilmId:function(){return false},setCinemas:function(a){this.data.cinemas=a},setCineId:function(a){this.data.cineId=a},setHoraires:function(a){this.data.horaires=a},reload:function(){$$(".geoloc_ville").each(function(a){a.set("html",Cgp.villeConf[Cgp.villeId])});var a=Cgp.getCinemaList();a.length>1?($("nbCinemaVille").set("html",a.length+" cinémas Gaumont et Pathé "),$("geoloc-display-cinema-list").setStyle("display",
""),$("geoloc-display-cinema-list").removeEvents("click"),$("geoloc-display-cinema-list").addEvent("click",function(b){b.preventDefault();for(var c="",d=0;d<a.length;d++)Cgp.cinemaConf[a[d].id]&&(c+='<a href="'+Cgp.cinemaConf[a[d].id].url+'">'+a[d].lib+"</a><br/>");b=$(b.target).getPosition();b.x-=160;b.y+=25;_displayInfoBlock(c,b,"cinemaListLink")}.bind(this))):(a[0]&&$("nbCinemaVille").set("html",'<a href="'+Cgp.cinemaConf[a[0].id].url+'">'+a[0].lib+"</a>"),$("geoloc-display-cinema-list").setStyle("display",
"none"))},refresh:function(){}});function _displayInfoBlock(a,b,c){c==this.infoBlockType&&$("information_block").getStyle("display")=="block"?$("information_block").setStyle("display","none"):($("information_block").setStyle("display","block"),typeof a=="object"?a.replaces($("information_block_content")):$("information_block_content").set("html",a),$("information_block").setPosition(b));this.infoBlockType=c}function _closeInfoBlock(){$("information_block").setStyle("display","none")}
function _setDateBlock(a){var b=$("reservationDate").get("html"),a=$(a).getPosition();a.x-=130;a.y+=25;_displayInfoBlock(b,a,"date")}function _setDate(a){$$(".prog-date").each(function(a){a.setStyle("display","none")});$$(".prog-date-"+a).each(function(a){a.setStyle("display","block")});var b=new Date;b.parse(a);$("selected_date")&&$("selected_date").set("html",b.format("%A %e %B"))};

