var App; if (!App) App = {};
var Analytics; if (!Analytics) Analytics = {};
var Init; if (!Init) Init = {};
var Options; if (!Options) Options = {};
var Interact; if (!Interact) Interact = {};
var Manipulate; if (!Manipulate) Manipulate = {};
var Handlers; if (!Handlers) Handlers = {};


App = {
	
	'Stats' : null,
	
	'ie' : false,
	'ieVersion' : 0,
	'ie6' : false,
	'ie7' : false,
	'ie8' : false,

	'init' : function() {
		
		$("body").pngFix();
		
		App.detectIE();
		
		//GOOGLE MAP INIT
		Init.Gmap(".gmap");
		
		$("input.hint").hint();
		
		/////Copy url////////////////////////////////
		$.clipboardReady(function(){
			$("input.url").each(function() {
				var copyIcon = $("<img src='/statics/icons/cut.png' title=\"Copier l'adresse\" class='copyIcon' />");
				$(this).after(copyIcon).click(function(){ this.select(); });
				copyIcon.css({"cursor":"pointer","position":"relative","top":"3px","left":"5px"}).click(function() {
					$.clipboard($(this).prev("input.url").val());
					$(this).attr("src","/statics/icons/accept.png");
				});
			});
		}, { swfpath: "/statics/js/clipboard.swf" } );
		///////////////////////////////////////////////
		
		/////Side Panel (right)////////////////////////////////
		Init.SidePanel();
		///////////////////////////////////////////////
		
		/////Rating Stars////////////////////////////////
		Init.Stars(".ratingForm");
		///////////////////////////////////////////////
		
		/////Ranking///////////////////////////////////		
		Init.Rank("a.rank");
		///////////////////////////////////////////////
		
		/////Share///////////////////////////////////
		Init.Share("a.share");
		///////////////////////////////////////////////
		
		/////Tag Block///////////////////////////////////
		Init.TagBlock("span.tag a.block");
		///////////////////////////////////////////////
		
		/////Image///////////////////////////////////
		$("div.photo img.articlePhoto").hide();
		///////////////////////////////////////////////
		
		
		/////Comments///////////////////////////////////
		if($("span.article .view-comments a.scroll").length) { Init.ScrollComments("span.article a.comments"); }
		else if($("span.article").length) {
			var related = $("span.article").attr("id");
			Init.Comments("div#"+related+"_comments");
		} else if($("div.film").length) {
			var related = $("div.film").attr("id");
			Init.Comments("div#"+related+"_comments");
		} else if($("div.cinema").length && $("div.cinema").is(".whitebox")) {
			var related = $("div.cinema").attr("id");
			Init.Comments("div#"+related+"_comments");
		}
		///////////////////////////////////////////////
		
		
		/////Forms///////////////////////////////////
		$("#inscripForm").submit(function(e){
			if(!$(this).validate()) { e.preventDefault(); }
		});
		
		if($("select#tags").length) { Init.TagsAutocomplete("select#tags"); }
		
		Init.ContactForm("form.contact");
		
		if($("a.sendMessage").length) {
			$("a.sendMessage").click(function(e){
				$("span.contact-profile").slideToggle("fast");
				$("span.contact-profile div.success, span.contact-profile div.error").remove();
			});
			
			Init.ContactForm(".contact-profile form");
		}
		///////////////////////////////////////////////
		
		
		/////Home page Carousel///////////////////////////////////
		if($(".carousel").length) { $(".carousel").Carousel(); }
		///////////////////////////////////////////////
		
		
		/////Cinema Homepage///////////////////////////////////
		$('#salle').change(function(){ window.location.href="/cinema/salles/"+$(this).val(); })
		$('#ville').change(function(){ window.location.href="/cinema/salles/"+$(this).val(); })
		$('#films').change(function(){ window.location.href="/cinema/films/"+$(this).val(); })
		$('#nouveautes').change(function(){ window.location.href="/cinema/films/"+$(this).val(); })
		
		Init.Schedule(".dates");
		
		
		////Analytics liens////////////////////////////////////
		$("a.stats-related").click(function() {
			if($(this).find("img").length && $(this).next("a.stats-related").length) {
				var label = $(this).next("a.stats-related").text();
			} else if(!$(this).find("img").length) {
				var label = $(this).text();
			} else {
				var label = $(this).attr("href");
			}
			App.Stats.event("Navigation","RelatedArticle",label);
		});
		$("a.stats-external").click(function() {
			App.Stats.event("Navigation","External",$(this).text());
		});
		$("a.stats-tag").click(function() {
			App.Stats.event("Navigation","Tag",$(this).text());
		});
		
	},
	
	'detectIE' : function() {
		if ($.browser.msie) {
			App.ie = true;
			App.ieVersion = parseInt($.browser.version.substr(0,1));
			if(App.ieVersion == 6) { App.ie6 = true; }
			if(App.ieVersion == 7) { App.ie7 = true; }
			if(App.ieVersion == 8) { App.ie8 = true; }
		}
	}
	
};

/*********************************************
*
* Google Analytics Object
*
**********************************************/

Analytics = function(account) {

	var self = this;
	
	try {
		self.tracker = _gat._getTracker(account);
		self.account = account;
	} catch(err) {}
	
};

Analytics.prototype.tracker = null;
Analytics.prototype.account = null;

Analytics.prototype.setVar = function(visitor) {
	if(!this.tracker) { return; }
	try {
	
		this.tracker._setVar(visitor);
		
	} catch(err) {}
};

Analytics.prototype.track = function(page) {
	if(!this.tracker) { return; }
	try {
	
		if(!page) { this.tracker._trackPageview(); }
		else{ this.tracker._trackPageview(page); }
		
	} catch(err) {}
};

Analytics.prototype.event = function(cat,action,label) {
	if(!this.tracker) { return; }
	try {
	
		this.tracker._trackEvent(cat, action, label);
		
	} catch(err) {}
};

/*********************************************
*
* Cookies
*
**********************************************/

Cookies = {

	'data' : null,
	
	'init' : function(data) {
		Cookies.data = data;
	},
	
	'set' : function(key,value) {
		var img = new Image();
		var date = new Date();
		img.src = "/cookie/set/"+key+".gif?value="+escape(value)+"#"+date.getTime();
		Cookies.data[key] = value;
		var width = img.width-1;
		if(width == 1) { return true; }
		else { return false; }
	},
	
	'get' : function(key) {
		return Cookies.data[key];
	},
	
	'exist' : function(key) {
		if(!Cookies.data[key] && Cookies.data[key] == null) { return false; }
		else { return true; }
	}
	
};


/*********************************************
*
* Common options
*
**********************************************/

Options = {

	"block_comments" : {
		message : "Veuillez remplir les champs requis",
		centerY : true,
		css: {
			backgroundColor:'#FBE3E4',
			color: "#8a1f11",
			border: "solid 1px #FBC2C4",
			width:'250px',
			cursor: 'pointer'
		},
		overlayCSS: {
			cursor: 'pointer'
		}
	},
	
	"qtip_share" : {
		content: {
			text:'<img class="throbber" src="/statics/img/loading_tooltip.gif" alt="Chargement..." />',
			url: '/interact/share.tmpl',
			title: {
			   text: '<h3><img src="/statics/img/layout/heart-gray.gif" style="position:relative; left:-3px;"/> Partager cet article</h3>', button: 'X'
			}
		},
		show: 'click',
		hide: 'unfocus',
		style: { 
			tip: 'topRight',
			name: 'green',
			width: 550,
			border: { radius: 0 }
		},
		position: {
			corner: {
				target: 'bottomMiddle',
				tooltip: 'topRight'
			}
		}
	},
	
	"qtip_reply" : {
		content: {
			text:'<img class="throbber" src="/statics/img/loading_tooltip.gif" alt="Chargement..." />',
			url: '/ajax/reply.tmpl',
			title: {
			   text: 'Répondre au commentaire', button: 'X'
			}
		},
		show: 'click',
		hide: 'unfocus',
		style: { 
			tip: 'topLeft',
			name: 'blue',
			width: 550,
			background:'#ccc',
			border: { radius: 5, color:"#999" },
			title: { background:'#bbb',color:'#000' }
		},
		position: {
			corner: {
				target: 'bottomMiddle',
				tooltip: 'topLeft'
			}
		}
	},
	
	"qtip_abuse" : {
		content: {
			text:'<img class="throbber" src="/statics/img/loading_tooltip.gif" alt="Chargement..." />',
			url: '/ajax/abuse.tmpl',
			title: {
			   text: 'Signaler un abus', button: 'X'
			}
		},
		show: 'click',
		hide: 'unfocus',
		style: { 
			tip: 'topLeft',
			name: 'blue',
			width: 550,
			background:'#e0e0e0',
			border: { radius: 5, color:"#999" },
			title: { background:'#bbb',color:'#000' }
		},
		position: {
			corner: {
				target: 'bottomMiddle',
				tooltip: 'topLeft'
			}
		}
	},
	
	"qtip_rank" : {
		content : "Vote",
		style: { width: 150, name: 'blue', tip: 'bottomLeft' },
		position: {
			corner: {
				target: 'topLeft',
				tooltip: 'bottomLeft'
			},
			adjust: { x:5 }
		}
	}

};

/*********************************************
*
* Templates
*
**********************************************/

Templates = {
	
	"sendByMail" : 'Bonjour,\nVoici une adresse intéressante :\n\n{title}\n{url}',
	
	"comment" : '<span class="comment" id="x{xid}"><a href="#" class="bump rank" rel="x{xid}"><img src="/statics/img/layout/bump.gif"></a><div class="avatar">{avatar}</div><p class="author fleft"> {author}<br>Commenté le {dateFormat}</p><div class="comment"><p class="nomargin">{text}</p><span class="small"><a href="#" class="reply">Répondre</a> - <a href="#" class="abuse">Signaler un abus</a></span></div></span>',
	
	"reply" : '<span class="comment reply" id="x{xid}"><a href="#" class="bump rank" rel="x{xid}"><img src="/statics/img/layout/bump.gif"></a><div class="avatar">{avatar}</div><p class="author fleft"> {author}<br>Commenté le {dateFormat}</p><div class="comment"><p class="nomargin">{text}</p><span class="small"><a href="#" class="reply">Répondre</a> - <a href="#" class="abuse">Signaler un abus</a></span></div></span>',
	
	"hiddenPost" : '<div class="article-hidden"><p><a href="{permalink}" class="title">{title}</a> (Article masqué)</p><p class="nomargin small">Voulez-vous réactiver le ou les tags {tags}?</p><div class="original"><div class="article-container"><span class="article" id="{nid}">{original}</span></div></div></div><div class="small-spacer"></div>',
	
	"comments" : function(related,callback,opts) {
		if(!callback) callback = function(){};
		if(!opts) var opts = {};
		var url = "/ajax/comments.tmpl?related="+related;
		if(opts.page) { url += "&p="+parseInt(opts.page); }
		if(opts.nbr) { url += "&nbr="+parseInt(opts.nbr); }
		$.get(url,callback);
	},
	
	"render" : function(text,values) {
		var re_cache = {};
		var tmpl = text.replace(/%7B/ig,'{').replace(/%7D/ig,'}');
		$.each(values, function(k,v) {
			tmpl = tmpl.replace( new RegExp('{'+k+'}', 'gm'), v );	
		});
		
		return tmpl;

	}
};

/*********************************************
*
* Quick Init
*
**********************************************/


Init.ContactForm = function(selector) {
	
	$(selector).submit(function(e) {
		e.preventDefault();
		var form = $(this);
		
		form.find("div.success").remove();
		form.find("div.error").remove();
		
		if(form.validate()) {
			form.block({centerY:true});
			$.post("/ajax/contact.txt",form.serialize(),function(data) {
				form.unblock();
				if(data == "DONE") {
					if(form.find("input[name=username]").length) {
						App.Stats.event("Contact","Send",form.find("input[name=username]").val());
					}
					else { App.Stats.event("Contact","Send","General"); }
					
					form.prepend("<div class='success'>Votre message a été envoyé</div>");
					form.find("input[type=text], textarea").val("");
				} else {
					form.prepend("<div class='error'>"+data+"</div>");
				}
			});
		}
	});

};

Init.Post = function(selector) {
	
	var post = $(selector);
	
	if(post.find("a.rank").length) { Init.Rank(post.find("a.rank")); }
	if(post.find("a.share").length) { Init.Share(post.find("a.share")); }
	if(post.find(".view-comments a.comments").length) { Init.ScrollComments(post.find(".view-comments a.comments")); }
	if(post.find(".tags span.tag a.block").length) { Init.TagBlock(post.find("span.tag a.block")); }

};

Init.TagsAutocomplete = function(selector) {
	if($(selector).length && !$(selector).next("ul.fbck").length) {
		$(selector).fcbkcomplete({
			json_url: "/ajax/tags.fbck",
			cache:false,
			filter_case: false,
			filter_hide: false,
			firstselected: true,
			filter_selected: true,
			newel: true,
			complete_text: "Entrez des tags..."
		});
	}
};

Init.SidePanel = function() {

	function selectLink(link) {
		$("#right .tabs li a").removeClass("selected");
		$(link).addClass("selected");
	}
	
	function loadContent(section) {
		var url = {
			'lastComments' : "/ajax/staticComments.tmpl?p=1&nbr=15&sort=date",
			'lastNews' : "/ajax/news.tmpl?p=1&nbr=8&sort=date&image=small&categories=true",
			'mostCommentedNews' : "/ajax/news.tmpl?p=1&nbr=8&sort=comments&image=small&categories=true",
			'tagCloud' : "/ajax/tagCloud.tmpl",
			'twitterFeed' : "/ajax/twitter.tmpl"
		};
		if(url[section]) {
			$("#right .content").block().load(url[section]);
			Cookies.set("sidePanel",section);
		}
	}

	$("#right .tabs a.lastComments").click(function(e) {
		e.preventDefault();
		selectLink(this);
		loadContent("lastComments");
		App.Stats.event("Navigation","SidePanel (Droite)","Derniers commentaires");
	});
	
	$("#right .tabs a.lastNews").click(function(e) {
		e.preventDefault();
		selectLink(this);
		loadContent("lastNews");
		App.Stats.event("Navigation","SidePanel (Droite)","Dernières nouvelles");
	});
	
	$("#right .tabs a.mostCommentedNews").click(function(e) {
		e.preventDefault();
		selectLink(this);
		loadContent("mostCommentedNews");
		App.Stats.event("Navigation","SidePanel (Droite)","Articles plus commentés");
	});
	
	$("#right .tabs a.tagCloud").click(function(e) {
		e.preventDefault();
		selectLink(this);
		loadContent("tagCloud");
		App.Stats.event("Navigation","SidePanel (Droite)","Tag Cloud");
	});
	
	$("#right .tabs a.twitterFeed").click(function(e) {
		e.preventDefault();
		selectLink(this);
		loadContent("twitterFeed");
		App.Stats.event("Navigation","SidePanel (Droite)","Twitter Feed");
	});
	
	if(Cookies.exist("sidePanel")) {
		selectLink($("#right .tabs a."+Cookies.get("sidePanel")));
	loadContent(Cookies.get("sidePanel"));
	}
	else {
		selectLink($("#right .tabs a.twitterFeed"));
		loadContent("twitterFeed");
	}

};


Init.Gmap = function(selector) {
	
	if ($(selector).length) { 
		$(window).unload(function(e) { GUnload(); }) 
		$(window).load(function() {
			  if (GBrowserIsCompatible()) {
				var html = $(selector).find(".infoWindow").html();
				
				var latlong = $(selector).attr("rel").split("|");
				
				var map = new GMap2($(selector).get(0));
				map.setCenter(new GLatLng(latlong[0],latlong[1]), 16);
				//map.setUIToDefault();
				//map.addControl(new GLargeMapControl());
				//map.addControl(new GMapTypeControl());
				map.removeMapType(G_NORMAL_MAP);
				map.removeMapType(G_SATELLITE_MAP);
				map.removeMapType(G_HYBRID_MAP);
				map.setMapType(G_NORMAL_MAP);
				
				var point = new GLatLng(latlong[0],latlong[1]);
				map.addOverlay(new GMarker(point));
				
				/*
				if (html.length) {
					map.openInfoWindowHtml(map.getCenter(), html);
				}
				*/
				
		
			  }
		});
	}
	
};


Init.Schedule = function(selector) {
	
		$(selector).find("a").click(function(e){
				e.preventDefault();
				var date = $(selector).find("a.bold").text();
				$(selector).find("a.bold").text($(selector).find("a.bold").attr("title"));
				$(selector).find("a.bold").attr("title",date);
				$(selector).find("a").removeClass("bold");
				
				date = $(this).addClass("bold").text();
				$(this).text($(this).attr("title"));
				$(this).attr("title",date);
				
				$(selector).next(".schedules").block();
				var id = $(selector).parents(".whitebox").attr("id");
				if (id.substr(0,1) == "c") { var param = "&cid="+id.substr(1); }
				if (id.substr(0,1) == "f") { var param = "&fid="+id.substr(1); }
				$.get("/ajax/horaires.tmpl?date="+escape($(this).attr("rel"))+param ,function(data) {
					$(selector).next(".schedules").html(data);
					$(selector).next(".schedules").unblock();
				});
			}
		);
	
}

/*********************************************
*
* Carousel
*
**********************************************/
jQuery.fn.extend({

	"Carousel" : function() {
		if(this.length && this.find(".items").length) {
			var car = this;
			var currentIndex = 0;
			var items = [];
			var isAnimating = false;
			
			function prev() {
				if(!isAnimating) {
					var index = (currentIndex == 0) ? Math.floor((items.length-1)/3):(currentIndex - 1);
					var html = getItems(index);
					isAnimating = true;
					
					car.find(".items").eq(1).css({"position":"relative","top":"-145px","opacity":"","filter":""}).html(car.find(".items").eq(0).html());
					car.find(".items").eq(0).css({"position":"relative","top":"-145px","opacity":"","filter":""}).html(html);
					
					car.find(".items").eq(0).animate({"top":"0px","opacity":1},1000);
					car.find(".items").eq(1).animate({"top":"0px","opacity":0},1000,function() {
						$(this).html("").css({"opacity":"","filter":""});
						isAnimating = false;
					});
					
					currentIndex = index;
					
					App.Stats.event("Navigation","Carousel (Accueil)","Up");
				}
			}
			
			function next() {
				if(!isAnimating) {
					var index = (currentIndex == Math.floor((items.length-1)/3)) ? 0:(currentIndex + 1);
					
					var html = getItems(index);
					isAnimating = true;
					
					car.find(".items").eq(0).css({"position":"relative","top":"0px","opacity":"","filter":""});
					car.find(".items").eq(1).css({"position":"relative","top":"0px","opacity":"","filter":""}).html(html);
					car.find(".items").eq(0).animate({"top":"-145px","opacity":0},1000,function() {
						car.find(".items").eq(0).css({"opacity":"","filter":"","top":"0px"}).html(car.find(".items").eq(1).html());
						car.find(".items").eq(1).html("").css({"opacity":"","filter":"","top":"0px"});
						isAnimating = false;
					});
					car.find(".items").eq(1).animate({"top":"-145px","opacity":1},1000);
					
					currentIndex = index;
					
					App.Stats.event("Navigation","Carousel (Accueil)","Down");
				}
			}
			
			function getItems(index) {
				var html = "";
				for(var i = (index*3); i < (index*3)+3; i++) {
					//document.title = document.title + " - " + i;
					html += "<div class='featured-secondary-item'>"+items[i].html()+"</div>";
				}
				return html;
			}
			
			car.find(".scrollbar").mouseover(function(e) {
			
				var relativeY = e.pageY - $(this).offset().top;
				$(this).css("cursor","pointer");
				
			}).mouseout(function(e) {
			
				$(this).css("cursor","pointer");
				
			}).css("cursor","pointer").click(function(e) {
				e.preventDefault();

				var relativeY = e.pageY - $(this).offset().top;
				if(relativeY >= 0 && relativeY <= 100) { prev(); } //Précédent
				else if(relativeY >= 115 && relativeY <= 215) { next(); } // Suivant
				
			});
			
			car.find(".items .featured-secondary-item").each(function() {
				items.push($(this).clone());
				$(this).remove();
			});
			
			car.find(".items").eq(0).html(getItems(currentIndex));
		}
		return this;
	}


});