/** @static */
var gAvatarUrl = "http://friends.ave-comics.com/avatar/";
/** @static */
var gSiteUrl = "http://www.avecomics.com/test/avecomics2012/";
/** @static */
var gFriendUrl = "http://www.avecomics.com/friends/friend.php";
/** @static */
//var gFriendCoverComicsUrl = "http://friends.ave-comics.com/storage/cover/";
//http://www.avecomics.com/cover/2055/a-biblical-epic-kingdoms-T1.jpg
var gFriendCoverComicsUrl = "http://www.avecomics.com/cover/";
/** @static */
var gFacebookAppId = '193301018863';
/** @static */
var gFacebookChannelUrl = 'http://www.avecomics.com/channel.html';
/** @static */
var gNewsLetterUrl = "http://www.avecomics.com/friends/store/newsletter.php";
/** @static */
var gLostMyPasswordUrl = "http://www.avecomics.com/friends/store/password.php";
/** @static */
var gTomodachiCoverUrl = "http://tomodachi.avecomics.com/metacomics/cover.php";
/** @static */
var gPubUrl = "?pattern=get_pub&app_lang=en&name=fr_2_big_2010&app_store=0";
/** @static */
var gUserInfosUrl = "?pattern=get_user_info&token=";
/** @static */
var gSearchProductUrl = "?pattern=search_product&app_store=0&data=";
/** @static */
var gOtherTitleUrl = "?pattern=other_title_2&app_store=0&data=";
/** @static */
var gLastBuyUrl = "?pattern=product_last_bought_on_store&app_store=0&offset=0&limit=";
/** @static */
var gTopUrl = "?pattern=top_100_2&app_store=0&offset=0&top_window=1 month&app_lang=fr&use_lang=true&limit=";
/** @static */
var gAlsoLikeUrl = "?pattern=if_you_love_it_2&app_store=0&limit=5";
/** @static */
var gSameAuthorUrl = "?pattern=same_author_2&app_store=0&limit=5";
/** @static */
var gSameEditorUrl = "?pattern=same_editor_2&app_store=0&limit=5";
/** @static */
var gGetAllAuthorsUrl = "?pattern=get_all_authors_on_store&app_store=0";
/** @static */
var gGetAllEditorsUrl = "?pattern=get_all_editors_on_store&app_store=0";
/** @static */
var gGetAllKeywordsUrl = "?pattern=get_all_keywords_on_store&app_store=0";
/** @static */
var gGetComicsWithKeywords = "?pattern=product_with_key_word_2&app_store=0&data="
/** @static */
var gGetComicsWithEditors = "?pattern=product_with_editor&app_store=0&data="
/** @static */
var gAddToCaddyUrl = "?pattern=add_to_caddy";
/** @static */
var gAddToCaddyForPresentUrl = "?pattern=add_to_caddy_for_present";
/** @static */
var gRemoveFromCaddyUrl = "?pattern=remove_from_caddy";
/** @static */
var gRemoveFromCaddyForPresentUrl = "?pattern=remove_from_caddy_for_present";
/** @static */
var gUpdateCaddyUser = "?pattern=update_user_caddy_id";
/** @static */
var gUseCouponCaddy = "?pattern=use_coupon";
/** @static */
var gShopComplexUrl = "http://friends.ave-comics.com/ShopComplex/ShopComplex.php";
/** @static */
var gGetMediaUrl = "http://friends.ave-comics.com/friend.php?pattern=getmedia&parameters=";
/** @static */
var gRegisterUrl = "http://www.avecomics.com/friends/store/registration.php";
/** @static */
var gUdpateProfilUrl = "?pattern=update_profile&token=";
/** @static */
var gUploadAvatarUrl = "?pattern=upload_avatar&token=";
/** @static */
var gChangePwdUrl = "?pattern=change_pwd&token=";
/** @static */
var gPageOk = "http://www.avecomics.com";
/** @static */
var gPageNoOk = "http://www.avecomics.com";
/** @static */
var gStoreId = 0;
/** @static */
var gCoverResolutionString = "205";
/** @static */
var gCoverResolutionStringLastBuy = "50";
/** @static */
var gCoverResolutionStringPopUp = "50";
/** @static */
var gCoverResolutionStringAlsoLike = "80";
/** @static */
var gCoverResolutionStringPrewiewPage = "100";
/** @static */
var gCoverQuality = "";
/** @static */
var gCoverResolutionStringForDetail = "320_480";
/** @static */
var gDebug = false;
/** @static */
var gPatternComicsFeatured = "top_nouveautes_2";
/** @static */
var gPatternComicsTopHundred = "top_100_2";
/** @static */
var gPatternComicsWithCsvIds = "get_products_with_ids";
/** @static */
var gPatternProductWithKeywords = "product_with_key_word_2";
/** @static */
var gPatternTopSellMonth = "top_sell_month_2";
/** @static */
var gPatternProductInPrice = "product_in_price_2";
/** @static */
var gCoverMaxHeight = 280;
/** @static */
var gCoverMaxWidth = 205;
/** @static */
var gCoverCollectionMaxHeight = 220;
/** @static */
var gCoverCollectionMaxWidth = 145;
/** @static */
var gMaxCovers = 12;
/** @static */
var gMaxCoversSelection = 12;
/** @static */
var gMaxCoversTopHundred = 100;
/** @static */
var gLocaleId = 1;
/** @static */
var gLocaleString = "fr";
/** @static */
var gUseLang = true;
/** @static */
var gPubTimeLoop = 12000;
/** @static */
var gSelectionKeyWord = 81;
/** @static */
var gComicDetailCoverSize = 150;
/** @static */
var gSectionHome = "HOME";
/** @static */
var gSectionLibrary = "LIBRARY";
/** @static */
var gSectionPoints = "POINTS";
/** @static */
var gSectionGifts = "GIFTS"
/** @static */
var gSectionSearch = "SEARCH";
/** @static */
var gCoverWaitImagePath = "images/cover.jpeg";
/** @static */
var fbAppKey= "e37b65d1bcdddd1114e6374c7f7d3f62";
/** @static */
var gLimitComicsLastBuy = 3;
/** @static */
var gLimitComicsTop = 3;
/** @static */
var gDateOfssetTop = "1 month";
/** @static */
var gCurrency = "euros";
/** @static */
var gOffsetSelection = 0;
/** @static */
var gOffsetLastBuy = 0;
//http://friends.ave-comics.com/friend.php?pattern=product_last_bought_on_store&app_store=0
/** @static */
var gAvatarUrl = "http://friends.ave-comics.com/avatar/";
/** @static */
var gSiteUrl = "http://www.avecomics.com/";
/** @static */
var gFriendUrl = "http://www.avecomics.com/friends/friend.php";
/** @static */
//var gFriendCoverComicsUrl = "http://friends.ave-comics.com/storage/cover/";
//http://www.avecomics.com/cover/2055/a-biblical-epic-kingdoms-T1.jpg
var gFriendCoverComicsUrl = "http://www.avecomics.com/cover/";
/** @static */
var gFacebookAppId = '193301018863';
/** @static */
var gFacebookChannelUrl = 'http://www.avecomics.com/channel.html';
/** @static */
var gNewsLetterUrl = "http://www.avecomics.com/friends/store/newsletter.php";
/** @static */
var gLostMyPasswordUrl = "http://www.avecomics.com/friends/store/password.php";
/** @static */
var gTomodachiCoverUrl = "http://tomodachi.avecomics.com/metacomics/cover.php";
/** @static */
var gPubUrl = "?pattern=get_pub&app_lang=en&name=fr_2_big_2010&app_store=0";
/** @static */
var gUserInfosUrl = "?pattern=get_user_info&token=";
/** @static */
var gSearchProductUrl = "?pattern=search_product&app_store=0&data=";
/** @static */
var gOtherTitleUrl = "?pattern=other_title_2&app_store=0&data=";
/** @static */
var gLastBuyUrl = "?pattern=product_last_bought_on_store&app_store=0&offset=0&limit=";
/** @static */
var gTopUrl = "?pattern=top_100_2&app_store=0&offset=0&top_window=1 month&app_lang=fr&use_lang=true&limit=";
/** @static */
var gAlsoLikeUrl = "?pattern=if_you_love_it_2&app_store=0&limit=5";
/** @static */
var gSameAuthorUrl = "?pattern=same_author_2&app_store=0&limit=5";
/** @static */
var gSameEditorUrl = "?pattern=same_editor_2&app_store=0&limit=5";
/** @static */
var gGetAllAuthorsUrl = "?pattern=get_all_authors_on_store&app_store=0";
/** @static */
var gGetAllEditorsUrl = "?pattern=get_all_editors_on_store&app_store=0";
/** @static */
var gGetAllKeywordsUrl = "?pattern=get_all_keywords_on_store&app_store=0";
/** @static */
var gGetComicsWithKeywords = "?pattern=product_with_key_word_2&app_store=0&data="
/** @static */
var gGetComicsWithEditors = "?pattern=product_with_editor&app_store=0&data="
/** @static */
var gAddToCaddyUrl = "?pattern=add_to_caddy";
/** @static */
var gAddToCaddyForPresentUrl = "?pattern=add_to_caddy_for_present";
/** @static */
var gRemoveFromCaddyUrl = "?pattern=remove_from_caddy";
/** @static */
var gRemoveFromCaddyForPresentUrl = "?pattern=remove_from_caddy_for_present";
/** @static */
var gUpdateCaddyUser = "?pattern=update_user_caddy_id";
/** @static */
var gUseCouponCaddy = "?pattern=use_coupon";
/** @static */
var gShopComplexUrl = "http://friends.ave-comics.com/ShopComplex/ShopComplex.php";
/** @static */
var gGetMediaUrl = "http://friends.ave-comics.com/friend.php?pattern=getmedia&parameters=";
/** @static */
var gRegisterUrl = "http://www.avecomics.com/friends/store/registration.php";
/** @static */
var gUdpateProfilUrl = "?pattern=update_profile&token=";
/** @static */
var gUploadAvatarUrl = "?pattern=upload_avatar&token=";
/** @static */
var gChangePwdUrl = "?pattern=change_pwd&token=";
/** @static */
var gPageOk = "http://www.avecomics.com";
/** @static */
var gPageNoOk = "http://www.avecomics.com";
/** @static */
var gStoreId = 0;
/** @static */
var gCoverResolutionString = "205";
/** @static */
var gCoverResolutionStringLastBuy = "50";
/** @static */
var gCoverResolutionStringPopUp = "50";
/** @static */
var gCoverResolutionStringAlsoLike = "80";
/** @static */
var gCoverResolutionStringPrewiewPage = "100";
/** @static */
var gCoverQuality = "";
/** @static */
var gCoverResolutionStringForDetail = "320_480";
/** @static */
var gDebug = false;
/** @static */
var gPatternComicsFeatured = "top_nouveautes_2";
/** @static */
var gPatternComicsTopHundred = "top_100_2";
/** @static */
var gPatternComicsWithCsvIds = "get_products_with_ids";
/** @static */
var gPatternProductWithKeywords = "product_with_key_word_2";
/** @static */
var gPatternTopSellMonth = "top_sell_month_2";
/** @static */
var gPatternProductInPrice = "product_in_price_2";
/** @static */
var gCoverMaxHeight = 280;
/** @static */
var gCoverMaxWidth = 205;
/** @static */
var gCoverCollectionMaxHeight = 220;
/** @static */
var gCoverCollectionMaxWidth = 145;
/** @static */
var gMaxCovers = 12;
/** @static */
var gMaxCoversSelection = 12;
/** @static */
var gMaxCoversTopHundred = 100;
/** @static */
var gLocaleId = 1;
/** @static */
var gLocaleString = "fr";
/** @static */
var gUseLang = true;
/** @static */
var gPubTimeLoop = 12000;
/** @static */
var gSelectionKeyWord = 81;
/** @static */
var gComicDetailCoverSize = 150;
/** @static */
var gSectionHome = "HOME";
/** @static */
var gSectionLibrary = "LIBRARY";
/** @static */
var gSectionPoints = "POINTS";
/** @static */
var gSectionGifts = "GIFTS"
/** @static */
var gSectionSearch = "SEARCH";
/** @static */
var gCoverWaitImagePath = "images/cover.jpeg";
/** @static */
var fbAppKey= "e37b65d1bcdddd1114e6374c7f7d3f62";
/** @static */
var gLimitComicsLastBuy = 3;
/** @static */
var gLimitComicsTop = 3;
/** @static */
var gDateOfssetTop = "1 month";
/** @static */
var gCurrency = "euros";
/** @static */
var gOffsetSelection = 0;
/** @static */
var gOffsetLastBuy = 0;
//http://friends.ave-comics.com/friend.php?pattern=product_last_bought_on_store&app_store=0
/** @class */
var ArraySlideShow = function() {
    this.nbrImagesPerSlide = 5;
    this.imagesSrc = new Array();
    this.onNextAction = "";
    this.onPreviousAction = "";
    this.slideWidth = 0;
        
    if (ArraySlideShow.caller != ArraySlideShow.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

ArraySlideShow.instance = null;

ArraySlideShow.getInstance = function() {
    if (this.instance == null) {
        this.instance = new ArraySlideShow();
    }
    return this.instance;
};

ArraySlideShow.prototype.addImagesSrc = function(pImagesSrc) {
	this.imagesSrc = pImagesSrc;
	$("#arraySlideShow_wrapper").empty();
	$("#arraySlideShow_wrapper").css("left", "0px");
	var html = '';
	for (var i=0; i < pImagesSrc.length; i++) {
  		html += '<div class="arraySlideShow_divImg">'+			
					'<img id="'+pImagesSrc[i].productId+'" src="'+pImagesSrc[i].src+'" />'+
				'</div>';
	};
	$("#arraySlideShow_wrapper").append(html);
	this.loadImages();
};

ArraySlideShow.prototype.setSlideShowWithImagesToDiv = function(pImagesSrc, pDiv, pStartPosition) {
	this.imagesSrc = pImagesSrc;
	this.slideWidth = $(pDiv).width();
	$(pDiv).append(this.generateHTML());
	$("#arraySlideShow_container, .arraySlideShow_nav").css("width", this.slideWidth+"px");
	this.setEvents();
	this.loadImages();
};
ArraySlideShow.prototype.loadImages = function() {
	var self = this;
	var indexImgLoaded = 0;
	for (var i=0; i < this.imagesSrc.length; i++) {
	  var image = new Image();
	  image.src = this.imagesSrc[i].src;
	  image.onload = function() {
	  	indexImgLoaded++
	  	if(indexImgLoaded == self.imagesSrc.length) {
	  		self.imagesLoaded();
	  	}
	  };
	}
};

ArraySlideShow.prototype.imagesLoaded = function() {
	this.hideWaiting();
	$("#arraySlideShow_wrapper").fadeIn();
};

ArraySlideShow.prototype.showWaiting = function() {
	$("#arraySlideShow_wrapper").hide();
	var left = (this.slideWidth/2)-25;
	//var top = ($("#arraySlideShow_container").height()/2)-25;
	var top = 40;
	$("#arraySlideShow_container").append("<div class=\"arraySlideShow_wait\" style=\"left: "+left+"px;top: "+top+"px;\" ></div>");
};

ArraySlideShow.prototype.hideWaiting = function() {
	$(".arraySlideShow_wait").remove();
};

ArraySlideShow.prototype.generateHTML = function() {
	var html = "<div id=\"arraySlideShow_container\">"+
					'<div class="arraySlideShow_nav"><div class="arraySlideShow_prev"></div><div class="arraySlideShow_next"></div></div>'+
					'<div id="arraySlideShow_wrapper">';
	for (var i=0; i < this.imagesSrc.length; i++) {
	  html += '<div class="arraySlideShow_divImg">'+			
				'<img id="'+this.imagesSrc[i].productId+'" src="'+this.imagesSrc[i].src+'" />'+
			  '</div>';
	};
	html += "</div></div>";
	return html;
};

ArraySlideShow.prototype.setEvents = function() {
	var self = this;
	$(".arraySlideShow_next").click(function() {
		self.next();
	});
	$(".arraySlideShow_prev").click(function() {
		self.previous();
	});
};

ArraySlideShow.prototype.next = function(pAnim) {
	var self = this;
	$("#arraySlideShow_wrapper").animate({left:'-='+(this.slideWidth+5)}, 300, 'easeOutCubic', function() {
		self.showWaiting();
		self.onNextAction();
	});
};

ArraySlideShow.prototype.previous = function(pAnim) {
	var self = this;
	$("#arraySlideShow_wrapper").animate({left:'+='+(this.slideWidth+5)}, 300, 'easeOutCubic', function() {
		self.showWaiting();
		self.onPreviousAction();
	});
};

/** @class */
var Caddy = function() {
    if (Caddy.caller != Caddy.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }

	this.productIds = new Array();
	this.caddyId = -1;
	this.caddyLine = -1;
	this.caddyXml = null;
	this.currency = "EUR";
	this.payementMode = "CMCIC";
	this.totalAll = 0;
};

Caddy.instance = null;
Caddy.getInstance = function() {
    if (this.instance == null) {
        this.instance = new Caddy();
    }
    return this.instance;
};

Caddy.prototype.addToCaddy = function(pProductId, pCallback, pShowTip, pQtipTarget) {
	var self = this;
	this.productIds.push(pProductId);
	var token = gUser ? gUser.token : "";
	var url = gFriendUrl+gAddToCaddyUrl+"&token="+token+"&product_id="+pProductId+"&caddy_id="+this.caddyId+"&app_store=0";
	var callback = function(pData) {
		var node = pData.getElementsByTagName("add_to_caddy")[0];
		var xmlText = node.firstChild.nodeValue;
		xmlText = unescape( xmlText );
		var xmlCaddy =  new DOMParser().parseFromString( xmlText ,"text/xml" );
		self.parseCaddy(xmlCaddy.getElementsByTagName("caddy")[0]);
		if(pShowTip) {
			if(pShowTip == 'popPup') {
				showPopUpProductAddToCaddy();
			}
			else {
				showProductAddToCaddy(pQtipTarget);
			}
		}
		if(pCallback)pCallback();
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

Caddy.prototype.addToCaddyForPresent = function(pProductId, pCallback, pQtipTarget) {
	var self = this;
	this.productIds.push(pProductId);
	var token = gUser ? gUser.token : "";
	var url = gFriendUrl+gAddToCaddyForPresentUrl+"&token="+token+"&product_id="+pProductId+"&caddy_id="+this.caddyId+"&app_store=0&mail=test";
	var callback = function(pData) {
		var node = pData.getElementsByTagName("add_to_caddy_for_present")[0];
		var xmlText = node.firstChild.nodeValue;
		xmlText = unescape( xmlText );
		var xmlCaddy =  new DOMParser().parseFromString( xmlText ,"text/xml" );
		self.parseCaddy(xmlCaddy.getElementsByTagName("caddy")[0]);
		showProductAddToCaddy(pQtipTarget);
		if(pCallback)pCallback();
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

Caddy.prototype.removeFromCaddy = function(pProductId, pCallback) {
	var self = this;
	var index = -1;
	for(var i = 0; i<this.productIds.length; i++) {
		if(this.productIds[i] == pProductId) {
			index = i;
		}
	}
	if(index != -1){
		this.productIds.splice(index, 1);
	}
	this.productIds.slice(pProductId);
	var token = gUser ? gUser.token : "";
	var url = gFriendUrl+gRemoveFromCaddyUrl+"&token="+token+"&product_id="+pProductId+"&caddy_id="+this.caddyId+"&app_store=0&quantity=-1";
	var callback = function(pData) {
		var node = pData.getElementsByTagName("remove_from_caddy")[0];
		var xmlText = node.firstChild.nodeValue;
		xmlText = unescape( xmlText );
		var xmlCaddy =  new DOMParser().parseFromString( xmlText ,"text/xml" );
		self.parseCaddy(xmlCaddy.getElementsByTagName("caddy")[0]);
		if(pCallback)pCallback();
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

Caddy.prototype.removeFromCaddyForPresent = function(pProductId, pCallback) {
	var self = this;
	var index = -1;
	for(var i = 0; i<this.productIds.length; i++) {
		if(this.productIds[i] == pProductId) {
			index = i;
		}
	}
	if(index != -1){
		this.productIds.splice(index, 1);
	}
	this.productIds.slice(pProductId);
	var token = gUser ? gUser.token : "";
	var url = gFriendUrl+gRemoveFromCaddyForPresentUrl+"&token="+token+"&product_id="+pProductId+"&caddy_id="+this.caddyId+"&app_store=0&quantity=-1";
	var callback = function(pData) {
		var node = pData.getElementsByTagName("remove_from_caddy_for_present")[0];
		var xmlText = node.firstChild.nodeValue;
		xmlText = unescape( xmlText );
		var xmlCaddy =  new DOMParser().parseFromString( xmlText ,"text/xml" );
		self.parseCaddy(xmlCaddy.getElementsByTagName("caddy")[0]);
		if(pCallback)pCallback();
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

Caddy.prototype.parseCaddy = function(pXmlCaddy) {
	this.caddyXml = pXmlCaddy;
	this.caddyId = pXmlCaddy.getAttribute("id");
	this.productIds = Xml.getInstance().evaluateXPath(pXmlCaddy, "//caddy/product_caddy/@product_id");
	$(".cart span > span").remove();
	$(".cart span").append('<span style="margin-left: 2px;">('+this.productIds.length+')</span>');
};

Caddy.prototype.parseCaddyError = function(pXmlCaddyError) {
	var error = pXmlCaddyError.getAttribute("value");
	var message = ""; 
	switch (error) {
		case "COUPON_NO_COMPACTIBLE_WITH_CART":
			message = "Ce coupon n'est pas compatible avec votre panier";
			break;
		case "CART_CONTENT_NOT_ALLOWED_PRODUCT":
			message = "Ce coupon n'est pas compatible avec votre panier";
			break;
		case "INVALID_COUPON":
			message = "Ce coupon n'est pas un coupon valide";
			break;
		case "COUPON_NOT_AUTHORIZED":
			message = "Ce coupon n'est pas autorisé";
			break;
		case "COUPON_ALREADY_USED":
			message = "Ce coupon est déjà utilisé";
			break;
		case "CART_NOT_FOUND":
			message = "Caddy non trouvé, s'il vous plaît recharger la page";
			break;
		case "COUPON_IS_OUT_OF_DATE":
			message = "Ce coupon est obsolète";
			break;	
		case "NO_EXIST_COUPON":
			message = "Ce coupon n'existe pas";
			break;
		case "INVALIDE_PARAMS":
			message = "Paramètres invalides";
			break;
	
		default:
			message = "Erreur";
			break;
	}
	showCouponError(message);
};

Caddy.prototype.setCurrency = function(pCurrency) {
	this.currency = pCurrency;
};

Caddy.prototype.setPayementMode = function(pPayementMode) {
	this.payementMode = pPayementMode;
};

Caddy.prototype.getCaddyTable = function() {
	var ret = "";
	if(this.caddyXml) {
		var caddy=this.caddyXml;
		var productsCaddy = caddy.getElementsByTagName("product_caddy");
		var priceTag = "euros";
		var priceSymb = "€";
		switch (this.currency){
			case "EUR":
				priceTag = "euros";
				priceSymb = "€";
				break;
			case "USD":
				priceTag = "dollars";
				priceSymb = "$";
				break;
			case "GPB":
				priceTag = "pounds";
				priceSymb = "£";
				break;
			case "points":
				priceTag = "points";
				priceSymb = "";
				break;
			default:
				priceTag = "euros";
				priceSymb = "€";
				break;
		}
		this.totalAll = 0;
		for(var i= 0; i<productsCaddy.length; i++) {
			var total = parseInt(productsCaddy[i].getAttribute("quantity"))*parseFloat(productsCaddy[i].getAttribute(priceTag));
			this.totalAll = parseFloat(this.totalAll) + parseFloat(total);
			this.totalAll = parseFloat(this.totalAll).toFixed(2);
			if(this.currency == "points") {
				this.totalAll = parseInt(this.totalAll);
			}
			ret += 	"<tr>"+
					"<td>"+productsCaddy[i].getAttribute("name")+"</td>"+
					"<td>"+productsCaddy[i].getAttribute("quantity")+"</td>"+
					"<td><div class=\"divCaddyManage\" id=\""+productsCaddy[i].getAttribute("product_id")+"\"><span class=\"spanCaddyPlus\"></span><span class=\"spanCaddyMoins\"></span></div></td>"+
					"<td>"+productsCaddy[i].getAttribute(priceTag)+priceSymb+"</td>"+
					"<td>"+total+priceSymb+"</td>"+
					"</tr>";	
		}
		//ret += "<tr><td colspan=\"5\" style=\"color: red;\">Total = "+totalAll+"</td></tr>";
	}
	return ret;
};

Caddy.prototype.getTotalCaddyText = function() {
	var priceSymb = "€";
	switch (this.currency){
		case "EUR":
			priceSymb = "€";
			break;
		case "USD":
			priceSymb = "$";
			break;
		case "GPB":
			priceSymb = "£";
			break;
		case "points":
			priceSymb = "";
			break;
		default:
			priceSymb = "€";
			break;
	}
	return "Total = "+this.totalAll+priceSymb;
};

Caddy.prototype.validate = function() {
	if($('input:checkbox[name=checkCGV]').is(":checked")) {
		var url = gShopComplexUrl+"?paymentMode="+this.payementMode+"&caddyId="+this.caddyId+"&pageOk="+gPageOk+"&pageKo="+gPageNoOk+"&currency="+this.currency+"&language=fr";
		window.location.href = url;
	}
};

Caddy.prototype.flush = function() {
	this.productIds = new Array();
	this.caddyId = -1;
	this.caddyLine = -1;
	this.caddyXml = null;
};

Caddy.prototype.sendCoupon = function(pCallback) {
	var self = this;
	var coupon = $("#inputCaddyCoupons").val();
	if(coupon != "" && this.caddyId != -1) {
		var token = gUser ? gUser.token : "";
		var url = gFriendUrl+gUseCouponCaddy+"&token="+token+"&caddy_id="+this.caddyId+"&app_store=0&coupon="+coupon;
		var callback = function(pData) {
			var node = pData.getElementsByTagName("use_coupon_operation")[0];
			var xmlText = node.firstChild.nodeValue;
			xmlText = unescape( xmlText );
			var xmlCaddy =  new DOMParser().parseFromString( xmlText ,"text/xml" );
			if(xmlCaddy.getElementsByTagName("error").length > 0) {
				self.parseCaddyError(xmlCaddy.getElementsByTagName("error")[0]);
			}
			else {
				self.parseCaddy(xmlCaddy.getElementsByTagName("caddy")[0]);
				$("#inputCaddyCoupons").val('');
				if(pCallback)pCallback();
			}
		};
		Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
	}
};


Caddy.prototype.updateCaddyUser = function() {
	var token = gUser ? gUser.token : "";
	var url = gFriendUrl+gUpdateCaddyUser+"&token="+token+"&caddy_id="+this.caddyId+"&app_store=0";
	var callback = function(pData) {
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

Caddy.prototype.addCard = function(elem) {
	var idProduct = this.getIdProductForCard(elem);
	this.addToCaddy(idProduct, null, true, elem);
};

Caddy.prototype.addCardForPresent = function(elem) {
	var idProduct = this.getIdProductForCard(elem);
	this.addToCaddyForPresent(idProduct, null, true, elem);
};

Caddy.prototype.getIdProductForCard = function(elem) {
	var idElem = $(elem).attr('id');
	var idProduct = -1;
	switch(idElem) {
		case "buyButtonPointCard1":
			idProduct = 124;
		break;
		case "offerButtonPointCard1":
			idProduct = 124;
		break;
		case "buyButtonPointCard2":
			idProduct = 127;
		break;
		case "offerButtonPointCard2":
			idProduct = 127;
		break;
		case "buyButtonPointCard3":
			idProduct = 129;
		break;
		case "offerButtonPointCard3":
			idProduct = 129;
		break;
		case "buyButtonPointCard4":
			idProduct = 130;
		break;
		case "offerButtonPointCard4":
			idProduct = 130;
		break;
	}
	return idProduct;
};

Caddy.prototype.isFreeCaddy = function() {
	return this.totalAll == 0 ? true : false;
};
/** @class */
var Collections = function() {
    this.comicsObject = null;
    this.productIds = new Array();
	if (Collections.caller != Collections.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

Collections.instance = null;

Collections.getInstance = function() {
    if (this.instance == null) {
        this.instance = new Collections();
    }
    return this.instance;
};

Collections.prototype.getUserCollections = function() {
	this.sendGetUserInfos();
};

Collections.prototype.sendGetUserInfos = function() {
	var self = this;
	var url = gFriendUrl+gUserInfosUrl+gUser.token;
	var callback = function(pData) {
		self.returnOfGetUserInfos(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};

Collections.prototype.returnOfGetUserInfos = function(pXmlData) {
	var xmlUserInfos = this.extractUserInfosFromXml(pXmlData);
	
	var productNodesIds = Xml.getInstance().evaluateXPath(xmlUserInfos, "//user/products/product/@product_id");
	var prodIds = new Array();
	for(var i=0; i < productNodesIds.length; i++) {
		prodIds.push(productNodesIds[i].nodeValue);
	}
	if(prodIds.length > 0) {
		this.sendGetComicsWithIds(prodIds);
	}
	
	
	
	/*if(NavigationManager.getInstance().currentSection == gSectionLibrary) {
		this.productNodesIds = Xml.getInstance().evaluateXPath(xmlUserInfos, "//user/products/product/@product_id");
		var comicsIds = this.extractProductIdsFromNodeWithLimit(this.currentCoverStartIndex, this.productNodesIds);
		var prodIds = new Array();
		for(var i=0; i < this.productNodesIds.length; i++) {
			prodIds.push(this.productNodesIds[i].nodeValue);
		}
		gUser.comicsIds = prodIds;
		if(comicsIds.length > 0) {
			this.sendGetComicsWithIds(comicsIds);
		}
	}
	else {
		var productNodesIds = Xml.getInstance().evaluateXPath(xmlUserInfos, "//user/products/product/@product_id");
		var comicsIds = this.extractProductIdsFromNodeWithLimit(this.currentCoverStartIndex, productNodesIds);
		var prodIds = new Array();
		for(var i=0; i < productNodesIds.length; i++) {
			prodIds.push(productNodesIds[i].nodeValue);
		}
		gUser.comicsIds = prodIds;
	}
	if(xmlUserInfos.getElementsByTagName("caddy").length > 0) {
		Caddy.getInstance().caddyXml = xmlUserInfos.getElementsByTagName("caddy")[0];
		Caddy.getInstance().parseCaddy(Caddy.getInstance().caddyXml);
	}
	comicsNodesIds = null;*/
};

Collections.prototype.extractUserInfosFromXml = function(pXmlData) {
	if(!window.ActiveXObject){
		var textComics = Xml.getInstance().evaluateBigNode(pXmlData, 'get_info_user');
		return new DOMParser().parseFromString( textComics ,"text/xml" );
	}
	else {
		var textComics = Xml.getInstance().evaluateBigNode(pXmlData, 'get_info_user');
		var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(textComics);
		return xmlDoc;
	}
};

Collections.prototype.sendGetComicsWithIds = function(pProducts, pCallback) {
	var self = this;
	var productsCsv = Utils.getInstance().productIdsToCsv(pProducts);
	this.productIds = pProducts;
	var url = gFriendUrl;
	var reqData = new RequestData();
	reqData.pack_ids = productsCsv;
	reqData.app_store = gStoreId;
	data = reqData.getData(gPatternComicsWithCsvIds);
	var callback = function(pData) {
		self.returnOfGetComicsWithIds(pData, pProducts, pCallback);
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, true);
};

Collections.prototype.returnOfGetComicsWithIds = function(pXmlData, pProducts, pCallback) {
	this.comicsObject = this.extractComicsFromXml(pXmlData);
	var collections = ComicsUtilsJSON.getInstance().getCollectionsFromProducts(this.comicsObject);
	setCollections(this.sortCollections(collections));
};

Collections.prototype.extractComicsFromXml = function(pXmlData) {
	var textComics = Xml.getInstance().evaluateBigNode(pXmlData, 'getstoreproduct');
	var jsonObject = xml2Json(new DOMParser().parseFromString( textComics ,"text/xml" ));
	textComics = null;
	return jsonObject;
};

Collections.prototype.getComicsForCollectionId = function(pIdCollection) {
	var comicsJson = ComicsUtilsJSON.getInstance().getComicsForCollectionIdFromJsonObject(this.comicsObject, pIdCollection);
	var comicsIds = ComicsUtilsJSON.getInstance().getIdsFromComicsJsonObject(comicsJson);
	var comics = this.addComics(this.comicsObject, comicsIds, gCoverCollectionMaxWidth);
	setCoversForCollection(comics, pIdCollection);
};

Collections.prototype.addComics = function(pJsonObject, pComicsIds, pResolution) {
	var comicsToShow = new Array();
	$(pComicsIds).each(function(indexC) {
		var comic = new Comic();
		comic.title = ComicsUtilsJSON.getInstance().getTitleWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.productId = ComicsUtilsJSON.getInstance().getProductIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.coverId = ComicsUtilsJSON.getInstance().getCoverIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.coverWidth = ComicsUtilsJSON.getInstance().getCoverWidthWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.coverHeight = ComicsUtilsJSON.getInstance().getCoverHeightWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.keywords = ComicsUtilsJSON.getInstance().getKeywordsWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.authors = ComicsUtilsJSON.getInstance().getAuthorsWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.editor = ComicsUtilsJSON.getInstance().getEditorWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.collection = ComicsUtilsJSON.getInstance().getCollectionWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.language = ComicsUtilsJSON.getInstance().getLanguageWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.nombreDePages = ComicsUtilsJSON.getInstance().getNombrePagesWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.rating = ComicsUtilsJSON.getInstance().getRatingWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.price = ComicsUtilsJSON.getInstance().getPriceWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.aveId = ComicsUtilsJSON.getInstance().getAveIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.previewId = ComicsUtilsJSON.getInstance().getPreviewIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.screenVersion = ComicsUtilsJSON.getInstance().getScreenVersionWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.beginDate = ComicsUtilsJSON.getInstance().getBeginDateWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.published = ComicsUtilsJSON.getInstance().getPublishedWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.publicationDate = ComicsUtilsJSON.getInstance().getPublicationDateWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.sumUp = ComicsUtilsJSON.getInstance().getSumUpWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.previewPages = ComicsUtilsJSON.getInstance().getPreviewPagesIdsFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.id = pComicsIds[indexC];
		comic.coverUrl = Utils.getInstance().getCoverUrl(comic.id, pResolution); 
			//gTomodachiCoverUrl+"?id="+comic.id+"&width="+pResolution;//+"&quality="+gCoverQuality;
		comicsToShow.push(comic);
	});
	return comicsToShow;
};

Collections.prototype.sortCollections = function(pCollections) {
	pCollections.sort(function(x, y) {
		var a = String(x.name).toUpperCase();
		var b = String(y.name).toUpperCase();
		if(a > b)
			return 1;
		if(a < b)
			return -1;
		return 0;
	});
	return pCollections;
};/** @class */
var PubManager = function() {
	this.pubs = new Array();
	this.pubIndex = 0;
	this.lastPubsToShow = new Array();
	this.pubsShowing = new Array();
};

PubManager.prototype.sendGetBigPubs = function() {
	var self = this;
	var url = gFriendUrl+gPubUrl;
	var data = null;
	var callback = function(pData) {
		self.parseGetPubsReturn(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, false);
};

PubManager.prototype.parseGetPubsReturn = function(pXmlDoc) {
	var imagesUrls = Xml.getInstance().evaluateXPath(pXmlDoc, "//row/url_image/text()");
	var productIds = Xml.getInstance().evaluateXPath(pXmlDoc, "//row/id_product/text()");
	for(var i=0;i<imagesUrls.length;i++) {
		this.pubs.push({
				url: imagesUrls[i].nodeValue,
				productId: productIds[i].nodeValue
		});
	}
	setPubsImagesWithUrls(this.getPubsToShow());
};

PubManager.prototype.getNextPub = function() {
	if(this.pubIndex == this.pubs.length -1) {
		this.pubIndex = 0;
	}
	else {
		this.pubIndex++;
	}
	return this.pubs[this.pubIndex];
};

PubManager.prototype.getPubsToShow = function() {
	if(this.pubsShowing.length > 0) {
		this.lastPubsToShow = this.pubsShowing;
	}
	var pubs = new Array();
	for(var i=0;i<this.pubs.length;i++) {
		pubs.push(this.getNextPub());
	}
	this.pubsShowing = pubs;
	return pubs;
};

PubManager.prototype.getLastPubsUrls = function() {
	return this.lastPubsToShow;
};
/** @class */
var CoverPanel = function() {
    if (CoverPanel.caller != CoverPanel.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

CoverPanel.instance = null;

CoverPanel.getInstance = function() {
    if (this.instance == null) {
        this.instance = new CoverPanel();
    }
    return this.instance;
};

CoverPanel.prototype.positionOnCover = function(pCoverDiv) {
	$("#divCoverPanel").css("top", (pCoverDiv.position().top+pCoverDiv.height()-97)+"px");
	$("#divCoverPanel").css("left", (pCoverDiv.position().left+3)+"px");
	$("#divCoverPanel").css("width", pCoverDiv.width()+"px");
	$("#divCoverPanel").css("height", "100px");
};

CoverPanel.prototype.setInformations = function() {
	$("#divCoverPanel").empty();
	$("#divCoverPanel").append("<span>COVER PANEL</span>");
};

CoverPanel.prototype.show = function() {
	$("#divCoverPanel").stop(true, true);
	$("#divCoverPanel").show();
	$("#divCoverPanel").animate({opacity: '1'}, 500);
};

CoverPanel.prototype.hide = function() {
	$("#divCoverPanel").stop(true, true);
	$("#divCoverPanel").animate({opacity: '0'}, 500, function() {
		$("#divCoverPanel").hide();
	});
};


/** @class */
var Xml = function() {
    if (Xml.caller != Xml.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

Xml.instance = null;

Xml.getInstance = function() {
    if (this.instance == null) {
        this.instance = new Xml();
    }
    return this.instance;
};

Xml.prototype.evaluateXPath = function(aNode, aExpr) {
	var result = null;
	var found = [];  
	var res;
	if(window.ActiveXObject) {
		result = aNode.selectNodes(aExpr);
		for (var i=0;i<result.length;i++)
		{
			found.push(result[i]);
		}
	}
	else {
		var xpe = new XPathEvaluator();  
		var nsResolver = xpe.createNSResolver(aNode.ownerDocument == null ?  aNode.documentElement : aNode.ownerDocument.documentElement);
		result = xpe.evaluate(aExpr, aNode, nsResolver, 0, null);
		while (res = result.iterateNext()) {
			found.push(res);  
		}
	}
	return found;
};

Xml.prototype.evaluateBigNode = function(pXmlData, pExpr) {
	if(window.DOMParser) {
		var content = '';
		var tmp = pXmlData.getElementsByTagName(pExpr).item(0).firstChild;
		if(tmp.textContent)	// Pour Mozilla et les autres.
		{
			// Limite de 4096k sous Firefox par noeud.
			tmp = pXmlData.getElementsByTagName(pExpr).item(0).childNodes;
			for( var i = 0 ; i < tmp.length ; i++ )
			{
				content += tmp.item(i).textContent;
			}
		}
		else	content = tmp.text;
		
		return content;
	}
	else {
		var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(pXmlData.xml); 
		return (this.evaluateXPath(xmlDoc, "//"+pExpr));
	}
};
/** @class */
var Ajax = function() {
    
	this.currentRequests = new Array();
	
	if (Ajax.caller != Ajax.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

Ajax.instance = null;

Ajax.getInstance = function() {
    if (this.instance == null) {
        this.instance = new Ajax();
    }
    return this.instance;
};

Ajax.prototype.sendAjax = function(pType, pUrl, pData, pAsync, pSuccessFunction, pWithWait, pIsAbortable) {
	var req = $.ajax({
        type: pType,
		url: pUrl,
		data: pData,
		async: pAsync,
		success: function(data) {
			pSuccessFunction(data);
		}
	});
	req.isAbortable = pIsAbortable;
	this.currentRequests.push(req);
};

Ajax.prototype.abortAllrequests = function() {
	for ( var i = 0; i < this.currentRequests.length; i++) {
		if(this.currentRequests[i].isAbortable) {
			this.currentRequests[i].abort();
			this.currentRequests.splice(i, 1);
		}
	}
};
/** @class */
var SelectionComics = function() {
	this.patterns = new Array(gPatternProductWithKeywords, gPatternComicsFeatured, gPatternTopSellMonth);
	this.currentPatternIndex = 0;
	this.productIds = new Array();
	this.callbackSelectionAcquired = null;
};

SelectionComics.prototype.sendGetSelection = function() {
	var self = this;
	var url = gFriendUrl;
	var reqData = new RequestData();
	reqData.app_store = gStoreId;
	data = reqData.getData(this.patterns[this.currentPatternIndex], gOffsetSelection);
	var callback = function(pData) {
		self.returnOfGetSelection(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, true);
};

SelectionComics.prototype.returnOfGetSelection = function(pData) {
	var comicsIds = new Array();
	var comicsNodesIds = Xml.getInstance().evaluateXPath(pData, "//row/product_id/text()");
	for(var i=0; i< comicsNodesIds.length; i++) {
		if(!Utils.getInstance().inArray(this.productIds, comicsNodesIds[i].nodeValue)) {
			comicsIds.push(comicsNodesIds[i].nodeValue);
			this.productIds.push(comicsNodesIds[i].nodeValue);
		}
	}

	if(comicsIds.length > 0) {
		gStore.sendGetComicsWithIds(comicsIds);
	}
	else {
		this.sendGetNextPattern();
	}
	comicsNodesIds = null;
};

SelectionComics.prototype.sendGetNextPattern = function() {
	this.currentPatternIndex++;
	if(this.patterns[this.currentPatternIndex]) {
		gOffsetSelection = 0;
		this.sendGetSelection();
	}
	else {
		this.flushSelection();
		hideWaitCover();
	}
};
SelectionComics.prototype.flushSelection = function() {
	this.productIds = new Array();
	this.currentPatternIndex = 0;
};
/** @class */
var LogConsole = function() {
    if (LogConsole.caller != LogConsole.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

LogConsole.instance = null;

LogConsole.getInstance = function() {
    if (this.instance == null) {
        this.instance = new LogConsole();
    }
    return this.instance;
};

LogConsole.prototype.log = function(pMessage) {
	if(gDebug) {
		console.log(pMessage);
	}
};
var COVER_VIEW_SELECTION = 0;
var COVER_VIEW_TOP = 1;
var COVER_VIEW_ALPHA = 2;
var COVER_VIEW_DATE = 3;
var COVER_VIEW_COLLECTIONS = 4;

/** @class */
var CoverView = function() {
    
	this.currentCoverView = "";
	
	if (CoverView.caller != CoverView.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

CoverView.instance = null;

CoverView.getInstance = function() {
    if (this.instance == null) {
        this.instance = new CoverView();
    }
    return this.instance;
};

CoverView.prototype.setCurrentViewWithComics = function(pView, pComics) {
	switch (pView) {
	case COVER_VIEW_SELECTION:
		this.setSelectionView(pComics);
		break;
	case COVER_VIEW_TOP:
		this.setTopView(pComics);
		break;
	case COVER_VIEW_ALPHA:
	
		break;
	
	case COVER_VIEW_DATE:
		
		break;
		
	case COVER_VIEW_COLLECTIONS:
		this.setCollectionView(pComics);
		break;

	default:
		break;
	}
};

CoverView.prototype.setSelectionView = function(pComics) {
	var mxCover = gMaxCovers;
	if(pComics.length < gMaxCovers) {
		mxCover = pComics.length;
	}
	var images = new Array();
	$(pComics).each(function(indexC) {
		var div = null;
		var minCol = Utils.getInstance().getTiniestCoverCol(300+(indexC*300));
		if(minCol) {
			div = minCol;
		}
		else {
			if(indexC < mxCover / 3) {
				div = $("#coversCol1");
			}
			if(indexC  >=  mxCover / 3 && indexC < (mxCover / 3)*2){
				div = $("#coversCol2");
			}
			if(indexC >= (mxCover / 3)*2) {
				div = $("#coversCol3");
			}
		}
		//isComic in user assets
		var inUserAsset = false;
		if(gUser) {
			inUserAsset = ComicsUtils.getInstance().isComicInUserAsset(pComics[indexC].productId);
		}		
		//callback for stop loading since the last image was loaded
		var callback = null;
		if(currentSelectionPosition == 1 && indexC == pComics.length - 1) {
			callback = function () {
				setSideHeight();
				gGetNextComicsOnScrollBottom = true;
			};
		}
		var hrefComics = "http://www.avecomics.com/fr_fr/bd/"+pComics[indexC].productId+"/"+Utils.getInstance().getTitleForUrl(pComics[indexC].title)+".html";
		div.append("<div id=\"divCover_"+pComics[indexC].id+"\" class=\"divCover\"></div>");
		//div.append("<a id=\"hrefCover_"+pComics[indexC].id+"\" href=\""+hrefComics+"\" onclick=\"return false;\"></a>");
		$("#divCover_"+pComics[indexC].id).append("<a id=\"hrefCover_"+pComics[indexC].id+"\" href=\""+hrefComics+"\" onclick=\"return false;\"></a>");
		$("#divCover_"+pComics[indexC].id).append("<div id=\"coverTips_"+pComics[indexC].id+"\" class=\"coverTips\" style=\"width: 205px;\"></div>");
		if(!inUserAsset) {
			$("#coverTips_"+pComics[indexC].id).append(
				'<div class="titleCoverTips">'+pComics[indexC].title+'</div>'+
				"<div class=\"btnsCoverTips\"><div class=\"previewButtonCoverTips buttonComicTips\">Aperçu</div>"+
				"<div class=\"buyButtonCoverTips buttonComicTips\">Acheter</div></div>"
			);
		}
		else {
			$("#coverTips_"+pComics[indexC].id).append(
				'<div class="titleCoverTips">'+pComics[indexC].title+'</div>'+
				"<div class=\"btnsCoverTipsSolo\"><div class=\"previewButtonCoverTips buttonComicTips\">Lire</div>"
			);
		}
		var imageAlt = Utils.getInstance().stripAccents(pComics[indexC].title);
		var image = Utils.getInstance().loadCoverImage(pComics[indexC].coverUrl, $("#hrefCover_"+pComics[indexC].id), null, null, callback, null, null, imageAlt);
		images.push(image);
		image.id = pComics[indexC].id;
		image.onclick = function() {
			setComicDetailWithComic(gStore.getComicWithId(image.id));
			highlightCurrentComic(image);
		};
		$("#divCover_"+pComics[indexC].id).mouseenter(function() {
			showCoverTips($($(this).find('img')[0]).attr('id'));
		});
		$("#divCover_"+pComics[indexC].id).mouseleave(function() {
			hideCoverTips($($(this).find('img')[0]).attr('id'));
		});		
	});
	$(".previewButtonCoverTips").click(function() {
		previewTipsClicked($(this));
	});
	$(".buyButtonCoverTips").click(function() {
		buyTipsClicked($(this));
	});
};

CoverView.prototype.setTopView = function(pComics) {
	var indexLine = 1;
	$("#topCovers").append(
			"<div class=\"topLineCovers\" id=\"topLine_"+indexLine+"\"></div>"+
			"<div class=\"topLineNumbers\" id=\"topLineNumbers_"+indexLine+"\"></div>"
	);
	$(pComics).each(function(indexC) {
		if((indexC/(3*indexLine) >= 1)) {
			indexLine++;
			var classCover = "topLineCovers";
			var classNumber = "topLineNumbers";
			if(indexC == pComics.length-1) {
				classCover = "topLineCoversLast";
				classNumber = "topLineNumbersLast";
			}
			$("#topCovers").append(
					"<div class=\""+classCover+"\" id=\"topLine_"+indexLine+"\"></div>"+
					"<div class=\""+classNumber+"\" id=\"topLineNumbers_"+indexLine+"\"></div>"
			);
		}
		var number = indexC+1;
		$("#topLineNumbers_"+indexLine).append("<span>"+Utils.getInstance().padNumber(number)+"</span>");
		
		var imageAlt = Utils.getInstance().stripAccents(pComics[indexC].title);
		var image = Utils.getInstance().loadCoverImage(pComics[indexC].coverUrl+"&height=255", $("#topLine_"+indexLine), null, null, null, null, null, imageAlt);
		image.id = pComics[indexC].id;
		image.onclick = function() {
			setComicDetailWithComic(gStore.getComicWithId(image.id));
		};
	});
};

CoverView.prototype.setCollectionView = function(pCollections) {
	for ( var i = 0; i < pCollections.length; i++) {
		$("#collectionsCovers").append("<span id=\"span_"+pCollections[i].id+"\" class=\"labelCollection\">"+pCollections[i].name+"</span><img id=\"img_"+pCollections[i].id+"\" class=\"arrow\" src=\"http://www.avecomics.com/fr_fr/images/arrow.png\" /><br /><br /><div class=\"divCollectionCovers\" id=\"collection_"+pCollections[i].id+"\"></div>");
		$("#span_"+pCollections[i].id+", #img_"+pCollections[i].id).click(function() {
			var idCollection  = $(this).attr("id");
			idCollection = idCollection.split("_")[1];
			$("#collection_"+idCollection).append("<div class=\"collectionWait\"></div>");
			//$(".divCollectionCovers").empty();
			Collections.getInstance().getComicsForCollectionId(idCollection);
		});
		$("#collectionsCovers").append("<div class=\"clear\"></div><div class=\"sepColl\"></div><br />");
	}
};

CoverView.prototype.setAlphaView = function(pComics) {
	
};

CoverView.prototype.setDateView = function(pComics) {
	
};
/** @class */
var EditorsAjax = function() {
    this.editors = new Array();

	if (EditorsAjax.caller != EditorsAjax.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

EditorsAjax.instance = null;

EditorsAjax.getInstance = function() {
    if (this.instance == null) {
        this.instance = new EditorsAjax();
    }
    return this.instance;
};

EditorsAjax.prototype.getAllEditors = function() {
	this.editors = new Array();
	var self = this;
	var url = gFriendUrl+gGetAllEditorsUrl;
	var callback = function(pData) {
		self.parseEditors(pData);
		addDataToFilterTwo(self.editors);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};

EditorsAjax.prototype.parseEditors = function(pData) {
	var rows = Xml.getInstance().evaluateXPath(pData, "/response/result/row");
	for(var i=0 ; i < rows.length ; i++) {
		this.editors.push({
			id: Xml.getInstance().evaluateXPath(rows[i], "id/text()")[0].nodeValue,
			name: Xml.getInstance().evaluateXPath(rows[i], "name/text()")[0].nodeValue,
		});
	}
};

EditorsAjax.prototype.getComicsForEditorsId = function(pId, pCallback) {
	var self = this;
	gStore.flush();
	var url = gFriendUrl+gGetComicsWithEditors+pId;
	var callback = function(pData) {
		gStore.callbackForCover = pCallback;
		if(NavigationManager.getInstance().currentSection == gSectionLibrary) {
			gStore.returnOfGetProductIds(pData, gUser.comicsIds);
		}
		else {
			gStore.returnOfGetProductIds(pData);	
		}
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

EditorsAjax.prototype.getEditorsByToken = function() {
	this.editors = new Array();
	var self = this;
		var url = gFriendUrl+"?pattern=get_editor_list&token="+gUser.token+"&app_store=0&app_lang="+gLocaleString+"&use_lang=true";
	var callback = function(pData) {
		self.parseEditors(pData);
		addDataToFilterTwo(self.editors);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};
/** @class */
var CoverFlowComic = function() {
    this.imagesSrc = new Array();
    this.imageWidth =180;
    this.index = 0;
    this.onNextAction = null;
    this.onPreviousAction = null;
    this.startPosition = 0;
    
    if (CoverFlowComic.caller != CoverFlowComic.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

CoverFlowComic.instance = null;

CoverFlowComic.getInstance = function() {
    if (this.instance == null) {
        this.instance = new CoverFlowComic();
    }
    return this.instance;
};

CoverFlowComic.prototype.setCoverFlowWithImagesToDiv = function(pImagesSrc, pDiv, pStartPosition) {
	this.index = 0;
	this.startPosition = pStartPosition;
	$(pDiv).empty();
	this.imagesSrc = pImagesSrc;
	$(pDiv).append(this.generateHTML());
	this.showWaiting();
	this.setEvents();
	this.setStartPosition(pStartPosition);
	this.loadImages();
};

CoverFlowComic.prototype.setStartPosition = function(pPosition) {
	for (var i=0; i < parseInt(pPosition); i++) {
	  this.next(false);
	}
};

CoverFlowComic.prototype.loadImages = function() {
	var self = this;
	var indexImgLoaded = 0;
	for (var i=0; i < this.imagesSrc.length; i++) {
	  var image = new Image();
	  image.src = this.imagesSrc[i];
	  image.onload = function() {
	  	indexImgLoaded++
	  	if(indexImgLoaded == self.imagesSrc.length) {
	  		self.imagesLoaded();
	  	}
	  };
	}
};

CoverFlowComic.prototype.imagesLoaded = function() {
	$(".coverFlow_wait").remove();
	$("#coverFlow_wrapper").fadeIn();
	calculateScrollDetails();
};

CoverFlowComic.prototype.showWaiting = function() {
	$("#coverFlow_main").append("<div class=\"coverFlow_wait\"></div>");
};

CoverFlowComic.prototype.generateHTML = function() {
	var widthWrapper = 200 * this.imagesSrc.length;
	
	var html = "";
	html += '<div id="coverFlow_main">';
	
	//header nav
	/*html += '<div class="coverFlow_navigation">'+
				'<span class="coverFlow_prev"><img class="coverFlow_imagesNav" src="fr_fr/images/fancy_nav_left.png"/></span>'+
				'<span class="coverFlow_next"><img class="coverFlow_imagesNav" src="fr_fr/images/fancy_nav_right.png"/></span>'+
			'</div>';

	html += '<div class="clear"></div>';*/
	
	html += '<div id="coverFlow_wrapper" style="display: none;width: '+widthWrapper+'px;left: '+((324/2)-(150/2))+'px">';
	for(var i = 0 ; i < this.imagesSrc.length ; i++) {
		var currentHigh = i == 0 ? "coverFlow_highlight" : "";
		html += '<div class="coverFlow_divImg">'+
					'<div class="coverFlow_mask_left coverFlow_mask '+currentHigh+'"></div>'+
					'<img src="'+this.imagesSrc[i]+'" />'+
				'</div>';
	}
	html += '</div></div>';
	return html;
};

CoverFlowComic.prototype.setEvents = function() {
	var self = this;
	$(".coverFlow_prev, .coverFlow_mask_right").unbind();
	$(".coverFlow_prev, .coverFlow_mask_right").click(function() {
		if(self.index - 1 >= 0) {
			self.previous(true);
		}
	});
	$(".coverFlow_next, .coverFlow_mask_left").unbind();
	$(".coverFlow_next, .coverFlow_mask_left").click(function() {
		if(self.index + 1 < self.imagesSrc.length) {
			self.next(true);
		}
	});
};

CoverFlowComic.prototype.next = function(pAnim) {
	var self = this;
	var animTime = pAnim ? 300 : 0;
	var currentMask = $($("#coverFlow_wrapper").find('.coverFlow_divImg')[this.index]).find(".coverFlow_mask")[0];
	this.index++;
	var maskToHight = $($("#coverFlow_wrapper").find('.coverFlow_divImg')[this.index]).find(".coverFlow_mask")[0];
	$(currentMask).removeClass('coverFlow_mask_left').addClass('coverFlow_mask_right').removeClass("coverFlow_highlight");
	$(currentMask).animate({opacity:'1'}, animTime, 'easeOutCubic');
	$(maskToHight).animate({opacity:'0'}, animTime, 'easeOutCubic').addClass("coverFlow_highlight");
	$("#coverFlow_wrapper").animate({left:'-='+(this.imageWidth+10)}, animTime, 'easeOutCubic', function() {
		if(pAnim) {
			self.onNextAction();
		}
	});
	this.setEvents();
};

CoverFlowComic.prototype.previous = function(pAnim) {
	var self = this;
	var animTime = pAnim ? 300 : 0;
	var currentMask = $($("#coverFlow_wrapper").find('.coverFlow_divImg')[this.index]).find(".coverFlow_mask")[0];
	this.index--;
	var maskToHight = $($("#coverFlow_wrapper").find('.coverFlow_divImg')[this.index]).find(".coverFlow_mask")[0];
	$(currentMask).removeClass('coverFlow_mask_right').addClass('coverFlow_mask_left').removeClass("coverFlow_highlight");
	$(currentMask).animate({opacity:'1'}, animTime, 'easeOutCubic');
	$(maskToHight).animate({opacity:'0'}, animTime, 'easeOutCubic').addClass("coverFlow_highlight");
	$("#coverFlow_wrapper").animate({left:'+='+(this.imageWidth+10)}, animTime, 'easeOutCubic', function() {
		if(pAnim) {
			self.onPreviousAction();	
		}
	});
	this.setEvents();
};

/** @class */
var ComicsUtils = function() {
    if (ComicsUtils.caller != ComicsUtils.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

ComicsUtils.instance = null;

ComicsUtils.getInstance = function() {
    if (this.instance == null) {
        this.instance = new ComicsUtils();
    }
    return this.instance;
};

ComicsUtils.prototype.isComicInUserAsset = function(pComicProductId) {
	var test = false;
	if(gUser) {
		for(var i = 0; i<gUser.comicsIds.length; i++){
			if(pComicProductId == gUser.comicsIds[i])
			 	test = true;
		}
	}
	return test;
};

ComicsUtils.prototype.getTitlesFromXml = function(pXml) {
	var titles = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c/@t");
	var ret = new Array();
	$(titles).each(function(indexT) {
		ret.push(titles[indexT].nodeValue);
	});
	return ret;
};

ComicsUtils.prototype.getCoverIdWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c[@i="+pId+"]/@c")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getCoverWidthWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c[@i="+pId+"]/@w")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getCoverHeightWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c[@i="+pId+"]/@h")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getEditorWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c[@i="+pId+"]/@e")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getCollectionWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c[@i="+pId+"]/@cl")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getLanguageWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c[@i="+pId+"]/@l")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getNombrePagesWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c[@i="+pId+"]/@np")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getPriceWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/ps/p[@o="+pId+"]/@e")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getAveIdWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/avs/a[@c="+pId+"]/@i")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getPreviewIdWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/avs/a[@c="+pId+"]/@pw")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getScreenVersionWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/avs/a[@c="+pId+"]/@vw")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getBeginDateWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/ps/p[@o="+pId+"]/@bd")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getPublishedWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/ps/p[@o="+pId+"]/@p")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getPublicationDateWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c[@i="+pId+"]/@pd")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getInAppIdWithIdFromXml = function(pXml, productId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/ss/s[@p="+productId+"]/@s")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getSumUpWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c[@i="+pId+"]/@s")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getRatingWithIdFromXml = function(pXml, pId) {
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/ocs/oc[@c="+pId+"]/@r")[0];
	return value ? value.nodeValue : "";
};

ComicsUtils.prototype.getKeywordsWithIdFromXml = function(pXml, pId) {
	var ret = new Array();
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/kcs/kc[@c="+pId+"]/@k")[0];
	if(value) {
		var tabKeys = value.nodeValue.split(";");
		for(var i=0;i<tabKeys.length;i++) {
			ret.push(tabKeys[i]);
		}
	}
	return ret;
};

ComicsUtils.prototype.getAuthorsWithIdFromXml = function(pXml, pId) {
	var ret = new Array();
	var value = Xml.getInstance().evaluateXPath(pXml, "/p_l/acs/ac[@c="+pId+"]/@ad")[0];
	var value2 = Xml.getInstance().evaluateXPath(pXml, "/p_l/acs/ac[@c="+pId+"]/@as")[0];
	var value3 = Xml.getInstance().evaluateXPath(pXml, "/p_l/acs/ac[@c="+pId+"]/@ac")[0];
	if(value) {
		var tabKeys = value.nodeValue.split(";");
		for(var i=0;i<tabKeys.length;i++) {
			if(!Utils.getInstance().inArray(ret, tabKeys[i]))
				ret.push(tabKeys[i]);
		}
	}
	if(value2) {
		tabKeys = value2.nodeValue.split(";");
		for(var i=0;i<tabKeys.length;i++) {
			if(!Utils.getInstance().inArray(ret, tabKeys[i]))
				ret.push(tabKeys[i]);
		}
	}
	if(value3) {
		tabKeys = value3.nodeValue.split(";");
		for(var i=0;i<tabKeys.length;i++) {
			if(!Utils.getInstance().inArray(ret, tabKeys[i]))
				ret.push(tabKeys[i]);
		}
	}
	return ret;
};

ComicsUtils.prototype.getTitleWithIdFromXml = function(pXml, pId) {
	var title = Xml.getInstance().evaluateXPath(pXml, "/p_l/cs/c[@i="+pId+"]/@t")[0];
	return title ? title.nodeValue : "";
};

ComicsUtils.prototype.getProductIdWithIdFromXml = function(pXml, pId) {
	var productId = Xml.getInstance().evaluateXPath(pXml, "/p_l/ps/p[@o="+pId+"]/@i")[0];
	return productId ? productId.nodeValue : "";
};

ComicsUtils.prototype.getIdsWithProductIdsFromXml = function(pXml, pProductIds) {
	var ids = new Array();
	if(pProductIds.length > 0) {		
		$(pProductIds).each(function(indexP) {
			var id = Xml.getInstance().evaluateXPath(pXml, "/p_l/ps/p[@i="+pProductIds[indexP]+"]/@o")[0];
			if(id) {
				ids.push(parseInt(id.nodeValue));
			}
		});
	}
	else {
		var res = Xml.getInstance().evaluateXPath(pXml, "/p_l/ps/p/@i");
		var pIds = new Array();
		for (var i in res)
			pIds.push(res[i].value);
		ids = this.getIdsWithProductIdsFromXml(pXml, pIds);
	}
	return ids;
};

ComicsUtils.prototype.getAuthorsFromProducts = function(pXml) {
	var ret = new Array();
	var ids = Xml.getInstance().evaluateXPath(pXml, "/p_l/as/a/@i");
	var names = Xml.getInstance().evaluateXPath(pXml, "/p_l/as/a/@n");
	if(ids.length > 0 && names.length > 0) {
		for (var i in ids) {
			var tmp = {
				id: ids[i] ? ids[i].value : "",
				name: names[i] ? names[i].value : ""
			};
			ret.push(tmp);
		}
	}
	return ret;
};

ComicsUtils.prototype.getEditorsFromProducts = function(pXml) {
	var ret = new Array();
	var ids = Xml.getInstance().evaluateXPath(pXml, "/p_l/es/e/@i");
	var names = Xml.getInstance().evaluateXPath(pXml, "/p_l/es/e/@n");
	if(ids.length > 0 && names.length > 0) {
		for (var i in ids) {
			var tmp = {
				id: ids[i] ? ids[i].value : "",
				name: names[i] ? names[i].value : ""
			};
			ret.push(tmp);
		}
	}
	return ret;
};

ComicsUtils.prototype.getKeywordsFromProducts =  function(pXml) {
	var ret = new Array();
	var ids = Xml.getInstance().evaluateXPath(pXml, "/p_l/ks/k/@i");
	var words = Xml.getInstance().evaluateXPath(pXml, "/p_l/ks/k/@w");
	var languages = Xml.getInstance().evaluateXPath(pXml, "/p_l/ks/k/@l");
	if(ids.length > 0 && words.length > 0 && languages.length > 0) {
		for (var i in ids) {
			var tmp = {
				id: ids[i] ? ids[i].value : "",
				word: words[i] ? words[i].value : "",
				language: languages[i] ? languages[i].value : ""
			};
			ret.push(tmp);
		}
	}
	return ret;
};

ComicsUtils.prototype.getCollectionsFromProducts =  function(pXml) {
	var ret = new Array();
	var ids = Xml.getInstance().evaluateXPath(pXml, "/p_l/cls/cl/@i");
	var names = Xml.getInstance().evaluateXPath(pXml, "/p_l/cls/cl/@n");
	var coverIds = Xml.getInstance().evaluateXPath(pXml, "/p_l/cls/cl/@c");
	var coverWidths = Xml.getInstance().evaluateXPath(pXml, "/p_l/cls/cl/@w");
	var coverHeights = Xml.getInstance().evaluateXPath(pXml, "/p_l/cls/cl/@h");
	
	if(ids.length > 0 && coverIds.length > 0 && coverWidths.length > 0 && coverHeights.length > 0) {
		for (var i in ids) {
			var tmp = {
				id: ids[i] ? ids[i].value : "",
  				name: names[i] ? names[i].value : "",
  				coverId: coverIds[i] ? coverIds[i].value : "",
  				coverWidth: coverWidths[i] ? coverWidths[i].value : "",
  				coverHeight: coverHeights[i] ? coverHeights[i].value : ""
			};
			ret.push(tmp);
		}
	}
	return ret;
};

ComicsUtils.prototype.getLanguagesFromProducts = function(pXml) {
	var ret = new Array();
	var ids = Xml.getInstance().evaluateXPath(pXml, "/p_l/ls/l/@i");
	var names = Xml.getInstance().evaluateXPath(pXml, "/p_l/ls/l/@n");
	var codes = Xml.getInstance().evaluateXPath(pXml, "/p_l/ls/l/@c");
	
	if(ids.length > 0 && names.length > 0 && codes.length > 0) {
		for (var i in ids) {
			var tmp = {
				id: ids[i] ? ids[i].value : "",
  				name: names[i] ? names[i].value : "",
  				code: codes[i] ? codes[i].value : ""
			};
			ret.push(tmp);
		}
	}
	return ret;
};

ComicsUtils.prototype.returnComicsByPublishDate = function(pComics) {
	pComics.sort(function(x, y) {
		var a = String(x.publicationDate).toUpperCase();
		var b = String(y.publicationDate).toUpperCase();
		if(a < b)
			return 1;
		if(a > b)
			return -1;
		return 0;
	});
	return pComics;
};

ComicsUtils.prototype.sortComicsByAlpha = function(pAsc) {
	pComics.sort(function(x, y) {
		var a = String(x.title).toUpperCase();
		var b = String(y.title).toUpperCase();
		if(pAsc) {
			if(a < b)
				return 1;
			if(a > b)
				return -1;
			return 0;
		}
		else {
			if(a > b)
				return 1;
			if(a < b)
				return -1;
			return 0;
		}
		
	});
	return pComics;
};

ComicsUtils.prototype.sortComicsByPrice = function(pAsc) {
	pComics.sort(function(x, y) {
		var a = parseFloat(x.price);
		var b = parseFloat(y.price);
		if(pAsc) {
			if(a < b)
				return 1;
			if(a > b)
				return -1;
			return 0;
		}
		else {
			if(a > b)
				return 1;
			if(a < b)
				return -1;
			return 0;
		}
		
	});
	return pComics;
};


ComicsUtils.prototype.sortComicsByCollectionPosition = function(pComics) {
	pComics.sort(function(x, y) {
		var a = parseInt(x.comicTrack);
		var b = parseInt(y.comicTrack);
		if(a > b)
			return 1;
		if(a < b)
			return -1;
		return 0;
	});
	pComics.sort(function(x, y) {
		var a = parseInt(x.collectionPosition);
		var b = parseInt(y.collectionPosition);
		if(a > b)
			return 1;
		if(a < b)
			return -1;
		return 0;
	});
	return pComics;
};

ComicsUtils.prototype.getCoversArray = function(pComics, pSize) {
	var tab = new Array();
	for (var i=0; i < pComics.length; i++) {
	  tab.push(Utils.getInstance().getCoverUrl(pComics[i].id, pSize));
	}
	return tab;
};

ComicsUtils.prototype.getComicPositionInArray = function(pComic, pComics) {
	var position = 0;
	var id = pComic.id;
	for (var i=0; i < pComics.length; i++) {
	  if(id == pComics[i].id) {
	  	position = i;
	  }
	};
	return position;
};
/** @class */
var AuthorsAjax = function() {
    this.authors = new Array();

	if (AuthorsAjax.caller != AuthorsAjax.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

AuthorsAjax.instance = null;

AuthorsAjax.getInstance = function() {
    if (this.instance == null) {
        this.instance = new AuthorsAjax();
    }
    return this.instance;
};

AuthorsAjax.prototype.getAllAuthors = function() {
	this.authors = new Array();
	var self = this;
	var url = gFriendUrl+gGetAllAuthorsUrl;
	var callback = function(pData) {
		self.parseAuthors(pData);
		addDataToFilterThree(self.authors);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};

AuthorsAjax.prototype.parseAuthors = function(pData) {
	var authorsRows = Xml.getInstance().evaluateXPath(pData, "/response/result/row");
	for(var i=0 ; i < authorsRows.length ; i++) {
		this.authors.push({
			id: Xml.getInstance().evaluateXPath(authorsRows[i], "id/text()")[0].nodeValue,
			name: Xml.getInstance().evaluateXPath(authorsRows[i], "name/text()")[0].nodeValue,
		});
	}
};

AuthorsAjax.prototype.getComicsForAuthorsId = function(pId, pCallback) {
	var self = this;
	gStore.flush();
	var url = gFriendUrl+gGetComicsWithAuthors+pId;
	var callback = function(pData) {
		gStore.callbackForCover = pCallback;
		gStore.returnOfGetProductIds(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

AuthorsAjax.prototype.getAuthorsByToken = function() {
	this.authors = new Array();
	var self = this;
	var url = gFriendUrl+"?pattern=get_artist_list&token="+gUser.token+"&app_store=0&app_lang="+gLocaleString+"&use_lang=true";
	var callback = function(pData) {
		self.parseAuthors(pData);
		addDataToFilterThree(self.authors);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};
/** @class */
var Profil = function() {
    this.error = false;
	if (Profil.caller != Profil.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

Profil.instance = null;

Profil.getInstance = function() {
    if (this.instance == null) {
        this.instance = new Profil();
    }
    return this.instance;
};

Profil.prototype.showUserInfos = function() {
	if(gUser) {
		$("#profilNickName").val(gUser.nickname);
		$("#profilPhoneModel").val(decodeURI(gUser.deviceName));
		$("#profilCountry").val(gUser.countryCode);
		$("#profilFirstName").val(gUser.firstName);
		$("#profilLastName").val(gUser.lastName);
		$("#profilPhone").val(gUser.phone);
		$("#profilAddress").val(gUser.street);
		$("#profilZip").val(gUser.zip);
		$("#profilCity").val(gUser.city);
		if(gUser.avatar) {
			$("#avatarProfil").attr('src', gAvatarUrl+gUser.avatar);
		}
		if(gUser.acceptSpam == 1) {
			$("#profilCheckboxNewsletter").attr("checked", "true");
		} 
		else {
			$("#profilCheckboxNewsletter").removeAttr("checked");
		}
		$("#profilBirthDate").datepicker("setDate", gUser.birth);
	}
};

Profil.prototype.validateUpdateUserProfil = function() {
	this.error = false;
	var nickname = this.checkInput($("#profilNickName"));
	var birthDate = $("#profilBirthDate").val();
	var phoneModel = $("#profilPhoneModel").val();
	var country = $("#profilCountry").val();
	var allowSpam = $('input:checkbox[name=profilCheckboxNewsletter]').is(":checked");
	var firstName = $("#profilFirstName").val();
	var lastName = $("#profilLastName").val();
	var deviceName = $("#profilPhoneModel").val();
	var phone = $("#profilPhone").val();
	var street = $("#profilAddress").val();
	var zip = $("#profilZip").val();
	var city = $("#profilCity").val();
	
	if(!this.error) {
		$("#profilError").text('');
		this.sendUpdateProfil(firstName, lastName, deviceName, street, zip, city, phone, nickname, allowSpam, country, birthDate)
	}
};

Profil.prototype.checkInput = function(pInput) {
	var ret = false;
	if(pInput.val() == "") {
		if($(".qtip").length == 0) {
			var position = {
				my : 'top center',
				at : 'bottom center',
				target : pInput	
			};
			var hideEvent = "focus";
			Utils.getInstance().showQtipOnTarget("Champ requis", pInput, position, hideEvent);
		}
		this.error = true;
	}
	else {
		ret = pInput.val()
	}
	return ret;
};

Profil.prototype.sendUpdateProfil = function(pFirstName, pLastName, pDeviceName, pStreet, pZip, pCity, pPhoneNumber, pNickName, pAllowSpam, pCountryCode, pBirthDate) {
	var self = this;
	Ajax.getInstance().abortAllrequests();
	var url = gFriendUrl+gUdpateProfilUrl+gUser.token+"&nickname="+pNickName+"&allowSpam="+pAllowSpam+"&country_code="+pCountryCode+"&birth_day="+pBirthDate+"&first_name="+pFirstName+"&last_name="+pLastName+"&newsletter="+pAllowSpam+"&device_name="+pDeviceName+"&phone="+pPhoneNumber+"&street="+pStreet+"&zip="+pZip+"&city="+pCity;
	var callback = function(pData) {
		var auth = new Authentication();
		auth.sendGetUserInfos(gUser.token);
		showProfilUpdated();
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

Profil.prototype.sendChangePassword = function(pOld, pNew, pNewConfirm) {
	Ajax.getInstance().abortAllrequests();
	var md5Pass1 = MD5(pOld);
	var md5Pass2 = MD5(pNew);
	var md5Pass3 = MD5(pNewConfirm);
	var oldP = md5Pass1+":"+md5Pass1;
	var newP = md5Pass2+":"+md5Pass3;
	var url = gFriendUrl+gChangePwdUrl+gUser.token+"&new_pwd="+newP+"&old_pwd="+oldP;
	var callback = function(pData) {
		var xml = new DOMParser().parseFromString( pData ,"text/xml" );
		var resp = xml.getElementsByTagName('change_pwd')[0].childNodes[0].nodeValue;
		if(resp == "true") {
			showPasswordChange();
		}
		else {
			showPasswordChange("Erreur lors du changement de mot de passe");
		}
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};/** @class */
var Register = function() {
    this.error = false;
	if (Register.caller != Register.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

Register.instance = null;

Register.getInstance = function() {
    if (this.instance == null) {
        this.instance = new Register();
    }
    return this.instance;
};

Register.prototype.validateRegister = function() {
	this.error = false;
	var nickname = this.checkInput($("#registerNickName"));
	var email = this.checkInput($("#registerEmail"));
	var password = this.checkInput($("#registerPassword"));
	var passwordConfirm = this.checkInput($("#registerPasswordConfirm"));
	var birthDate = $("#registerBirthDate").val();
	var phoneModel = $("#registerPhoneModel").val();
	var country = $("#registerCountry").val();
	var gender = $('input:radio[name=radioGender]:checked').val();
	var allowSpam = $('input:checkbox[name=registerCheckboxNewsletter]').is(":checked");
	if(!this.error) {
		if(this.checkEmail(email)) {
			if(this.checkPassword(password, passwordConfirm)) {
				$("#registerError").text('');
				if(this.checkConditions()) {
					this.sendRegister(nickname, email, passwordConfirm, allowSpam, country, birthDate);
				}
			}
		}
	}
};

Register.prototype.checkPassword = function(pPass, pPassConfirm) {
	var ret = false;
	if(pPass == pPassConfirm) {
		ret = true;
	}
	else {
		//$("#registerError").text("La confirmation de votre mot de passe ne correspond pas.");
		var position = {
			my : 'top center',
			at : 'bottom center',
			target : $("#registerPasswordConfirm")	
		};
		var hideEvent = "focus";
		Utils.getInstance().showQtipOnTarget("La confirmation de votre mot de passe ne correspond pas.", $("#registerPasswordConfirm"), position, hideEvent);
	}
	return ret;
};

Register.prototype.checkInput = function(pInput) {
	var ret = false;
	if(pInput.val() == "") {
		if($(".qtip").length == 0) {
			var position = {
				my : 'top center',
				at : 'bottom center',
				target : pInput	
			};
			var hideEvent = "focus";
			Utils.getInstance().showQtipOnTarget("Champ requis", pInput, position, hideEvent);
		}
		this.error = true;
	}
	else {
		ret = pInput.val()
	}
	return ret;
};

Register.prototype.checkEmail = function(pVal) {
	var ret = false;
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(pVal)) {
		var position = {
			my : 'top center',
			at : 'bottom center',
			target : $("#registerEmail")	
		};
		var hideEvent = "focus";
		Utils.getInstance().showQtipOnTarget("_SG.emailNotValid_", $("#registerEmail"), position, hideEvent);
	}
	else {
		ret = true;
	}
	return ret;
};

Register.prototype.checkConditions = function() {
	var ret = false;
	if($('input:checkbox[name=registerCheckboxConditions]').is(":checked")) {
		ret = true;
	}
	else {
		var position = {
			my : 'top center',
			at : 'bottom center',
			target : $('input:checkbox[name=registerCheckboxConditions]')	
		};
		var hideEvent = "focus";
		Utils.getInstance().showQtipOnTarget("Champ requis", $('input:checkbox[name=registerCheckboxConditions]'), position, hideEvent);
	}
	return ret;
};

Register.prototype.sendRegister = function(pNickName, pEmail, pPassword, pAllowSpam, pCountryCode, pBirthDate) {
	var self = this;
	Ajax.getInstance().abortAllrequests();
	pPassword = MD5(pPassword);
	var url = gRegisterUrl+"?nickname="+pNickName+"&email="+pEmail+"&pass="+pPassword+"&allowSpam="+pAllowSpam+"&country="+pCountryCode+"&birthday="+pBirthDate+"&app_store=0&app_lang=fr";
	var callback = function(pData) {
		self.flush();
		showAccountCreated();
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

Register.prototype.flush = function() {
	$("#registerNickName").val('');
	$("#registerEmail").val('');
	$("#registerPassword").val('');
	$("#registerPasswordConfirm").val('');
	$("#registerBirthDate").val('');
	$("#registerPhoneModel").val('');
	$("#registerCountry").val('');
	$('input:radio[name=radioGender]:checked').val('');
	$('input:checkbox[name=registerCheckboxNewsletter]').attr('checked', false);
	$('input:checkbox[name=registerCheckboxConditions]').attr('checked', false);
	
};
/** @class */
var KeywordsAjax = function() {
    this.keywords = new Array();

	if (KeywordsAjax.caller != KeywordsAjax.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

KeywordsAjax.instance = null;

KeywordsAjax.getInstance = function() {
    if (this.instance == null) {
        this.instance = new KeywordsAjax();
    }
    return this.instance;
};

KeywordsAjax.prototype.getAllKeywords = function() {
	this.keywords = new Array();
	var self = this;
	var url = gFriendUrl+gGetAllKeywordsUrl;
	var callback = function(pData) {
		self.parseKeywords(pData);
		addDataToFilterOne(gStore.filterKeywordsByLocale(self.keywords));
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};

KeywordsAjax.prototype.parseKeywords = function(pData, pForUser) {
	LogConsole.getInstance().log(pData);
	var rows = Xml.getInstance().evaluateXPath(pData, "/response/result/row");
	for(var i=0 ; i < rows.length ; i++) {
		if(!pForUser) {
			this.keywords.push({
				id: Xml.getInstance().evaluateXPath(rows[i], "id/text()")[0].nodeValue,
				word: Xml.getInstance().evaluateXPath(rows[i], "word/text()")[0].nodeValue,
				language: Xml.getInstance().evaluateXPath(rows[i], "lang_id/text()")[0].nodeValue
			});
		}
		else {
			this.keywords.push({
				id: Xml.getInstance().evaluateXPath(rows[i], "id/text()")[0].nodeValue,
				word: Xml.getInstance().evaluateXPath(rows[i], "name/text()")[0].nodeValue,
				language: 1
			});
		}
	}
};

KeywordsAjax.prototype.getComicsForKeywordsId = function(pId, pCallback) {
	var self = this;
	gStore.flush();
	var url = gFriendUrl+gGetComicsWithKeywords+pId+"&app_lang="+gLocaleString+"&use_lang=true";
	var callback = function(pData) {
		gStore.callbackForCover = pCallback;
		if(NavigationManager.getInstance().currentSection == gSectionLibrary) {
			gStore.returnOfGetProductIds(pData, gUser.comicsIds);
		}
		else {
			gStore.returnOfGetProductIds(pData);	
		}
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

KeywordsAjax.prototype.getKeywordsByToken = function() {
	this.keywords = new Array();
	var self = this;
	var url = gFriendUrl+"?pattern=get_genre_list&token="+gUser.token+"&app_store=0&app_lang=fr";
	var callback = function(pData) {
		self.parseKeywords(pData, true);
		addDataToFilterOne(gStore.filterKeywordsByLocale(self.keywords));
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};

var gUser = null;
var gStore = null;

var gGetNextComicsOnScrollBottom = true;
var currentComics = new Array();

var gTimeoutCoveTips = null;

var gTopBarTopPosition = "";

/**Comic detail position**/
var gSideLeftComicDetailTopPos = 0;
var gSideTopPos = 0;
var gComicDetailFollowEnabled = false;
var gSideFollowEnabled = false;
var gSideToggle = false;
var gSideTopPosition = 0;
var gSideTopPositionOnOpen = 0;
var gSideMarginTop= 0;

/**Filters values**/
var filterOneValue = -1;
var filterTwoValue = -1;
var filterThreeValue = -1;
var currentComicsWithFilterOne = new Array();
var currentComicsWithFilterTwo = new Array();
var currentComicsWithFilterThree = new Array();
var currentKeywordId = -1;
var currentEditorId = -1;

/**Pubs**/
var intervalPub = null;
var pubManager = null;
var switchBool = false;

/**Comics Selection**/
var currentSelectionPosition = 1;

/**CoverPanem**/
var timeoutCoverPanel = null;

/**Callback login**/
var callbackLogin = null;

var _statPlayer = "0";

// hack to preserve html from comic detail for lionbars
var theComicHTML = "";


var scrolledToBottomFunction = null;

var History = window.History;

var ratingCurrentValue = 0;

gPasswordInputsForIe = new Array();
gIsIE = false;
gIsSafari = false;

gLoginForRegister = false;
/**
* @function
*/
$(document).ready(function() {
	$("#coversCols").hide();
	checkBrowser();
	
	initFacebookSDK();
	gStore = new Store();
	
	theComicHTML = $("#theComic").html();
	
	window.onresize = function(event) {
		resizeWindowEvent();
	};
	
	$("#formUploadAvatarOk").click(function() {
		$("#formUploadAvatarProfil").submit();
	});	
	
	$("#changeAvatar").click(function() {
		showUploadAvatar();
	});
	
	$("#sendFacebook").click(function() {
		sendFacebookClicked();
	});
	
	$("#toggleFooter").click(function() {
		toggleFooter();
	});
	
	$("#lostMyPassword").click(function() {
		lostMyPassword();
	});
	
	$("#backToTop").click(function() {
		scrollToTop();
	});
	
	$("#searchComic").blur(function() {
		if($(this).val() == "") {
			selectionClicked();
		}
	});
	
	$("#smilesSelection").click(function() {
		sendGetSmilesSelection();
	});
	
	$("#newsletterSubscribe").click(function() {
		showNewsLetterPopup();
	});
	
	$("#formNewsLetterSubmit").click(function() {
		subscribeNewsLetterOk();
	});
	
	$("#formChangePwdSubmit").click(function() {
		submitChangePassword();
	});
	
	$("#formNewsLetterCancel, #formChangePwdCancel").click(function(event) {
		hidePopUp();
	});
	
	$("#goToHomeLayer").click(function() {
		History.pushState({state:"Home"}, "Home", "http://www.avecomics.com/"+"");
	});
	
	$("#cguLink, #cguLink2").click(function() {
		History.pushState({state:"CGU"}, "CGU", "http://www.avecomics.com/"+""+"cgu/");
	});
	
	$("#cgvLink, #cgvLink2").click(function() {
		History.pushState({state:"CGV"}, "CGV", "http://www.avecomics.com/"+""+"cgv/");
	});
	
	$("#legalLink").click(function() {
		History.pushState({state:"Legal"}, "Legal", "http://www.avecomics.com/"+""+"legal/");
	});
	
	History.Adapter.bind(window,'statechange',function(){ 
		var State = History.getState();
		urlStateChange(State);
	});
	
	$("#logoDiv").click(function() {
		History.pushState({state:"Home"}, "Home", "http://www.avecomics.com/"+"");
	});
	
	$("#aLogin").click(function() {
		History.pushState({state:"Library"}, "Library", "http://www.avecomics.com/"+""+"library/");
	});
	
	$("#aRegister").click(function() {
		History.pushState({state:"Register"}, "Register", "http://www.avecomics.com/"+""+"register");
	});
	
	$("#userProfil").click(function() {
		History.pushState({state:"Profil"}, "Profil", "http://www.avecomics.com/"+""+"profil");
	});
	
	$("#caddyLoginButton").click(function() {
		caddyLoginClicked();
	});
	
	$("#connectKDO").click(function() {
		kdoLoginClicked();
	});
	
	$("#registerKDO, #caddyCreateAccountButton").click(function() {
		History.pushState({state:"Register"}, "Register", "http://www.avecomics.com/"+""+"register/");
	});
	
	$("#disconnect").click(function() {
		disconnect();
	});
	
	$("#formLoginSubmit").click(function() {
		logOkClicked();
	});
	
	$("#formLoginCancel").click(function() {
		hidePopUp();
	});
	
	$("#changePwd").click(function() {
		showDialogChangePwd();
	});
	
	$(".home").click(function() {
		History.pushState({state:"Home"}, "Home", "http://www.avecomics.com/"+"");
	});
	
	$(".library").click(function() {
		History.pushState({state:"Library"}, "Library", "http://www.avecomics.com/"+""+"library/");
	});
	
	$(".cart").click(function() {
		History.pushState({state:"Cart"}, "Cart", "http://www.avecomics.com/"+""+"cart/");
	});
	
	$(".community").click(function() {
		var position = {
			my : 'top center',
			at : 'bottom center',
			target : $(".community")	
		};
		var hideEvent = "mouseleave unfocus";
		Utils.getInstance().showQtipOnTarget("Bientôt disponible", $(".community"), position, hideEvent);
	});
	
	$(".points").click(function() {
		History.pushState({state:"Points"}, "Points", "http://www.avecomics.com/"+""+"points/");
	});
	
	$(".codes").click(function() {
		History.pushState({state:"Gifts"}, "Gifts", "http://www.avecomics.com/"+""+"gifts/");
	});
	
	$("#validPayementButton").click(function() {
		validateCaddy();
	});
	
	$('input:radio[name=radioCurrency]').change(function() {
		radioCurrenciesChanged();
	});
	
	$('input:radio[name=radioPayement]').change(function() {
		radioPayementChanged();
	});
	
	$('input:radio[name=radioPointsCurrency]').change(function() {
		radioPointsCurrencyChanged();
	});

	$("#buyButtonPointCard1, #buyButtonPointCard2, #buyButtonPointCard3, #buyButtonPointCard4").click(function() {
		addCardToCaddy($(this));
	});
	
	$("#offerButtonPointCard1, #offerButtonPointCard2, #offerButtonPointCard3, #offerButtonPointCard4").click(function() {
		addCardToCaddyForPresent($(this));
	});
	
	$("#toggleSlide").click(function() {
		if(!gSideToggle) {
			History.pushState({state:"Detail"}, "Detail", ComicDetail.getInstance().getProductUrl());
			//openSide();
		}
		else {
			History.pushState({state:"Comic"}, "Comic", "http://www.avecomics.com/"+"");
		}
	});
	
	$("#refreshLastBuy").click(function() {
		gOffsetLastBuy = 0;
		getLastBuyComics();
	});
	
	$("#seeMoreTop").click(function() {
		topHundredClicked();
	});
	
	$(".registerValidate").click(function() {
		registerSubmited();
	});
	
	$(".profilValidate").click(function() {
		updateProfilSubmited();
	});
	
	$("#registerBirthDate, #profilBirthDate").datepicker({ changeYear: true, changeMonth: true , dateFormat: 'yy-mm-dd' });
	
	$("#ifYouloveItSpan").click(function() {
		gStore.offsetAlsoLike = 0;
		$("#alsoLikeDiv span").removeClass("selectedAlsoLike").addClass("alsoLikeSpanNotSelected");
		$(this).addClass("selectedAlsoLike leftButton").removeClass("alsoLikeSpanNotSelected");
		$("#alsoLikeImgs").empty();
		showSpinnerAlsoLike();
		ComicDetail.getInstance().sendGetAlsoLike();
	});
	
	$("#sameAuthorSpan").click(function() {
		gStore.offsetAlsoLike = 0;
		$("#alsoLikeDiv span").removeClass("selectedAlsoLike").addClass("alsoLikeSpanNotSelected");
		$(this).addClass("selectedAlsoLike centerButton").removeClass("alsoLikeSpanNotSelected");
		$("#alsoLikeImgs").empty();
		showSpinnerAlsoLike();
		ComicDetail.getInstance().sendGetSameAuthor();
	});
	
	$("#sameEditorSpan").click(function() {
		gStore.offsetAlsoLike = 0;
		$("#alsoLikeDiv span").removeClass("selectedAlsoLike").addClass("alsoLikeSpanNotSelected");
		$(this).addClass("selectedAlsoLike rightButton").removeClass("alsoLikeSpanNotSelected");
		$("#alsoLikeImgs").empty();
		showSpinnerAlsoLike();
		ComicDetail.getInstance().sendGetSameEditor();
	});
	
	$("#buttonCaddyCouponsOk").click(function() {
		Caddy.getInstance().sendCoupon(function(){setCaddyView();});
	});
	
	$("#previewPages").click(function() {
		avePlayer_openScreenPlayer();
	});
	
	/*$("#pubs").mouseenter(function() {
		$("#pubNavLeft").show();
		$("#pubNavRight").show();
	});
	
	$("#pubs").mouseleave(function() {
		$("#pubNavLeft").hide();
		$("#pubNavRight").hide();
	});
	
	$("#pubNavLeft").click(function(){
		var pubsUrl = pubManager.getLastPubsUrls();
		if(pubsUrl.length > 0) {
			setPubsImagesWithUrls(pubsUrl);
		}
	});
	
	$("#pubNavRight").click(function() {
		setPubsImagesWithUrls(pubManager.getPubsUrlToShow());
		runLoopPub();
	});*/
	/*window.onscroll = function(evt) {
		Utils.getInstance().scrolled(evt);
	};*/
	
	$(window).scroll(function (evt) {
		Utils.getInstance().scrolled(evt);
		var y = $(this).scrollTop();
		topBarPos = $("#navigation").offset().top - parseFloat($('#navigation').css('marginTop').replace(/auto/,0));
		if($("#navigation").hasClass("fixedNavigation")){
			if (y < gTopBarTopPosition) {
				$('#navigation').removeClass('fixedNavigation');
				$('#header').css("margin-bottom","0px")
				$('#header').css("margin-top","0px");
			}
		}
		else {
			if (y >= topBarPos) {
				gTopBarTopPosition = topBarPos;
				$('#navigation').addClass('fixedNavigation');
				$('#header').css("margin-bottom","-38px");
				$('#header').css("margin-top","38px");
			}
		}		
	});
	
	initLangFilterEvents();
	setNewsLetter();
	getPubs();
	getTopComics();
	getLastBuyComics();
	resizeWindowEvent();
	
	setNavigationLayout(gSectionHome);
	setNavigationCallbacks(gSectionHome);
	
	//getFiltersValues();
	
	scrolledToBottomFunction = function() {getNextSelectionComics();};
	
	$("#contentFilters").hide();
	//$("#comicDetail").hide();
	
	//set initial position of comicDetail
	//gTopBarTopPosition = $("#navigation").offset().top - parseFloat($('#navigation').css('marginTop').replace(/auto/,0));
	gSideLeftComicDetailTopPos = $("#header").offset().top + $("#header").height()/* + $("#sidePub").height()*/;
	gSideTopPos = $("#header").offset().top + $("#header").height();
	//getUrlAndPushState();	
});

var urlStateChange = function(pState) { 
	scrollToTop();
	disableComicDetailFollowPageTop();
	switch(pState.title) {
		case "Home":
			homeClicked();
			break;
		case "Library":
			libraryClicked();
			break;
		case "Product":
			getProductPage();
			scrollToSideTop();
			openSide();
			break;
		case "Comic":
			scrollToSideTop();
			closeSide();
			break;
		case "Detail":
			scrollToSideTop();
			openSide();
			break;
		case "Cart":
			cartClicked();
			break;
		case "Points":
			pointsClicked();
			break;
		case "Gifts":
			giftsClicked();
			break;
		case "Register":
			registerClicked();
			break;
		case "Profil":
			profilCliked();
			break;
		case "CGU":
			cguClicked();
			break;
		case "CGV":
			cgvClicked();
			break;
		case "Legal":
			legalClicked();
			break;
		case "Search":
			//searchComicSubmitted();
			break;
	}
};

var getUrlAndPushState = function() {
	var state = Utils.getInstance().getUrlVars()[0];
	if(state) {
		if(state == "http://www.avecomics.com/"+""+"library" || state == "http://www.avecomics.com/"+""+"library/") {
			History.setTitle("Library");
			libraryClicked();
		}
		else if(state.indexOf("http://www.avecomics.com/"+""+"bd/") != -1 || state.indexOf("http://www.avecomics.com/"+"bd/") != -1 ) {
			getProductPage();
			openSide();
		}
		else if(state.indexOf("http://www.avecomics.com/"+""+"details/") != -1) {
			getDetailPage();
			openSide();
		}
		else if(state == "http://www.avecomics.com/"+""+"gifts" || state == "http://www.avecomics.com/"+""+"gifts/") {
			giftsClicked();
		}
		else if(state == "http://www.avecomics.com/"+""+"points" || state == "http://www.avecomics.com/"+""+"points/") {
			pointsClicked();
		}
		else if(state == "http://www.avecomics.com/"+""+"home" || state == "http://www.avecomics.com/"+""+"home/") {
			History.pushState({state:"Home"}, "Home", "http://www.avecomics.com/"+"");
		}
		else if(state == "http://www.avecomics.com/"+""+"cart" || state == "http://www.avecomics.com/"+""+"cart/") {
			cartClicked();
		}
		else if(state == "http://www.avecomics.com/"+""+"cgu" || state == "http://www.avecomics.com/"+""+"cgu/") {
			cguClicked();
		}
		else if(state == "http://www.avecomics.com/"+""+"cgv" || state == "http://www.avecomics.com/"+""+"cgv/") {
			cgvClicked();
		}
		else if(state == "http://www.avecomics.com/"+""+"legal" || state == "http://www.avecomics.com/"+""+"legal/") {
			legalClicked();
		}
		else if(state == "http://www.avecomics.com/"+""+"register" || state == "http://www.avecomics.com/"+""+"register/") {
			registerClicked();
		}
		else if(state == "http://www.avecomics.com/"+""+"profil" || state == "http://www.avecomics.com/"+""+"profil/") {
			profilCliked();
		}
		else if(state.indexOf("http://www.avecomics.com/"+""+"cat-bd/") != -1 || state.indexOf("http://www.avecomics.com/"+"cat-bd/") != -1 ) {
			getCategoryBd();
		}
		else if(state.indexOf("http://www.avecomics.com/"+""+"editeur-bd/") != -1 || state.indexOf("http://www.avecomics.com/"+"editeur-bd/") != -1 ) {
			getEditorBd();
		}
		else if(state == "insc" ) {
			History.setTitle("Library");
			libraryClicked(Utils.getInstance().getUrlVars()[1]);
		}
		else {
			homeClicked();
		}
		
		
		
		//~ switch(state) {
			//~ case "home":
				//~ //History.pushState({state:"Home"}, "Home", "http://beta.avecomics.com");
				//~ /*History.setTitle("Home");
				//~ urlStateChange(History.getState());*/
				//~ break;
			//~ case gSiteUrl+"/library":
				//~ History.setTitle("Library");
				//~ libraryClicked();
				//~ break;
			//~ case gSiteUrl+"/library/":
				//~ History.setTitle("Library");
				//~ libraryClicked();
				//~ break;
			//~ case "cart":
				//~ History.setTitle("Cart");
				//~ urlStateChange(History.getState());
				//~ break;
			//~ case "points":
				//~ History.setTitle("Points");
				//~ urlStateChange(History.getState());
				//~ break;
			//~ case "gifts":
					//~ History.setTitle("Gifts");
					//~ urlStateChange(History.getState());
					//~ break;
			//~ case gSiteUrl+"/bd/":
				//~ //History.pushState({state:"Product"}, "Product", "http://beta.avecomics.com/bd/"+Utils.getInstance().getProductIdFromUrl()+"/product.html");
				//~ getProductPage();
				//~ openSide();
				//~ break;
			//~ case "search":
				//~ $("#searchComic").val(unescape(Utils.getInstance().getUrlVars()['query']));
				//~ //searchComicSubmitted();
				//~ History.pushState({state:"Search"}, "Search", "?state=search&query="+Utils.getInstance().getUrlVars()['query']);
				//~ break;
			//~ default:
				//~ History.pushState({state:"Home"}, "Home", "http://beta.avecomics.com");
				//~ /*History.setTitle("Home");
				//~ urlStateChange(History.getState());*/
				//~ //homeClicked();
				//~ break;
		//~ }
	}
	else {
		History.pushState({state:"Home"}, "Home", "http://www.avecomics.com/"+"");
		/*History.setTitle("Home");
		urlStateChange(History.getState());*/
	}
};

var loginClicked = function(pUsername) {
	callbackLogin = function(){
		hidePopUp();
		libraryClicked();
		showUserConnected();
		gLoginForRegister = false;
		$("#logEmail").val('');
		$("#lostMyPassword").show();
	};
	if(!gUser) {
		if(pUsername) {
			gLoginForRegister = true;
			var username = Utils.getInstance().getUrlVars()['username'];
			username = username.replace("%40", "@");
			$("#logEmail").val(username);
			$("#lostMyPassword").hide();
		}
		showLoginDialog();
	}
};

var caddyLoginClicked = function() {
	callbackLogin = function(){
		hidePopUp();
		showUserConnected();
		setCaddyView();
		Caddy.getInstance().updateCaddyUser();
	};
	showLoginDialog();
};

var kdoLoginClicked = function() {
	callbackLogin = function(){
		hidePopUp();
		showUserConnected();
		setGetGiftView();
	};
	showLoginDialog();
};

var homeClicked = function() {
	Ajax.getInstance().abortAllrequests();
	$("#comicDetail").hide();
	$("#collectionsCovers").hide();
	$("#twitterWidget").show();
	$(".nav1Element").removeClass('selected');
	$(".home").addClass('selected');
	setNavigationLayout(gSectionHome);
	setNavigationCallbacks(gSectionHome);
	selectionClicked();
};

var libraryClicked = function(pUsername) {
	Ajax.getInstance().abortAllrequests();
	if (gUser) {
		$("#comicDetail").hide();
		$("#collectionsCovers").hide();
		$("#twitterWidget").show();
		$("#newsletter").hide();
		$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
		$("#contentFilters").hide();
		$(".nav1Element").removeClass('selected');
		$(".library").addClass('selected');
		setNavigationLayout(gSectionLibrary);
		setNavigationCallbacks(gSectionLibrary);
		quickSearchClicked();
	}
	else {
		loginClicked(pUsername);
	}
};

var cartClicked = function() {
	Ajax.getInstance().abortAllrequests();
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#collectionsCovers").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$("#divCoverPanel").hide();
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav1Element").removeClass('selected');
	$(".cart").addClass('selected');
	gMaxCovers = gMaxCoversTopHundred;
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	setNavigationLayout();
	setNavigationCallbacks();
	
	$("#waitCoverDiv").hide();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsSmilesView").hide()
	$("#gift").hide();
	$("#cgu").hide();
	$("#cgv").hide();
	$("#legal").hide();
	$("#getGift").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#pointsView").hide();
	$("#caddyView").fadeIn();
	
	
	setCaddyView();
};

var pointsClicked = function() {
	Ajax.getInstance().abortAllrequests();
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#collectionsCovers").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$("#divCoverPanel").hide();
	$(".nav2Element").removeClass('selected');
	$("#navigation21").addClass('selected');
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav1Element").removeClass('selected');
	$(".points").addClass('selected');
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	setNavigationLayout(gSectionPoints);
	setNavigationCallbacks(gSectionPoints);
	setPointsView();
};

var pointsSmilesClicked = function() {
	Ajax.getInstance().abortAllrequests();
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#collectionsCovers").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$("#divCoverPanel").hide();
	$(".nav2Element").removeClass('selected');
	$("#navigation22").addClass('selected');
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav1Element").removeClass('selected');
	$(".points").addClass('selected');
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	setPointsSmilesView();
};

var giftsClicked = function() {
	Ajax.getInstance().abortAllrequests();
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#collectionsCovers").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$("#divCoverPanel").hide();
	$(".nav2Element").removeClass('selected');
	$("#navigation21").addClass('selected');
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav1Element").removeClass('selected');
	$(".codes").addClass('selected');
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	setNavigationLayout(gSectionGifts);
	setNavigationCallbacks(gSectionGifts);
	setGiftView();
};

var getGiftClicked = function() {
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#collectionsCovers").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$("#divCoverPanel").hide();
	$(".nav2Element").removeClass('selected');
	$("#navigation22").addClass('selected');
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav1Element").removeClass('selected');
	$(".codes").addClass('selected');
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	setGetGiftView();
};

var registerClicked = function() {
	Ajax.getInstance().abortAllrequests();
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#collectionsCovers").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$("#divCoverPanel").hide();
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav1Element").removeClass('selected');
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	setNavigationLayout();
	setNavigationCallbacks();
	setRegisterView();
};

var profilCliked = function() {
	Ajax.getInstance().abortAllrequests();
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#collectionsCovers").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$("#divCoverPanel").hide();
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav1Element").removeClass('selected');
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	setNavigationLayout();
	setNavigationCallbacks();
	setProfilView();
};

var cguClicked = function() {
	Ajax.getInstance().abortAllrequests();
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#collectionsCovers").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$("#divCoverPanel").hide();
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav1Element").removeClass('selected');
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	setNavigationLayout();
	setNavigationCallbacks();
	setCguView();
};

var cgvClicked = function() {
	Ajax.getInstance().abortAllrequests();
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#collectionsCovers").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$("#divCoverPanel").hide();
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav1Element").removeClass('selected');
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	setNavigationLayout();
	setNavigationCallbacks();
	setCgvView();
};

var legalClicked = function() {
	Ajax.getInstance().abortAllrequests();
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#collectionsCovers").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$("#divCoverPanel").hide();
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav1Element").removeClass('selected');
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	setNavigationLayout();
	setNavigationCallbacks();
	setLegalView();
};

var selectionClicked = function() {
	$("#comicDetail").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	$("#newsletter").show();
	$("#contentFilters").hide();
	$("#divCoverPanel").show();
	gGetNextComicsOnScrollBottom = true;
	scrolledToBottomFunction = function() {getNextSelectionComics();};
	$(".nav2Element").removeClass('selected');
	$("#navigation21").addClass('selected');
	$("#coverPattern").text("DERNIERES PUBLICATIONS");
	gOffsetSelection = 0;
	gMaxCovers = gMaxCoversSelection;
	emptyCoversCols();
	gStore.flush();
	gStore.sendGetSelection();
	getLastBuyComics();
	flushFiltersData();
	flushSearchInput();
	currentSelectionPosition = 1;
	getFiltersValues();
	showWaitCover();
};

var tourClicked = function() {
	$("#comicDetail").hide();
	$("#divCoverPanel").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	$("#newsletter").hide();
	$(".nav2Element").removeClass('selected');
	$("#navigation22").addClass('selected');
	$("#contentFilters").show();
	flushFiltersData();
	$(".filter").lionbars({destroy: true});
	$(".filter").lionbars({classes: "filterColors"});
	scrolledToBottomFunction = function() {getNextComics();};
};

var topHundredClicked = function() {
	$("#comicDetail").hide();
	$("#divCoverPanel").show();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	$("#newsletter").hide();
	$("#contentFilters").hide();	
	gGetNextComicsOnScrollBottom = false;
	$(".nav2Element").removeClass('selected');
	$("#navigation23").addClass('selected');
	$("#coverPattern").text("TOP 100");
	gMaxCovers = gMaxCoversTopHundred;
	emptyCoversCols();
	gStore.flush();
	gStore.sendGetTopHundred();
	flushFiltersData();
	flushSearchInput();
	currentSelectionPosition = 3;
	showWaitCover();
};

var quickSearchClicked = function() {
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#divCoverPanel").hide();
	$("#contentFilters").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	$(".nav2Element").removeClass('selected');
	$("#navigation21").addClass('selected');
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	emptyCoversCols();
	gGetNextComicsOnScrollBottom = true;
	scrolledToBottomFunction = function() {getNextComics();};
	gStore.flush();
	gStore.sendGetUserInfos();
	flushFiltersData();
	flushSearchInput();
	getFiltersValues();
	currentSelectionPosition = 1;
	showWaitCover();
};

var collectionsClicked = function() {
	$("#newsletter").hide();
	$("#comicDetail").hide();
	$("#contentFilters").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").show();
	closeSide(function() {
		disableSideFollowPageTop();
	});
	disableSideFollowPageTop();
	gGetNextComicsOnScrollBottom = false;
	$(".nav2Element").removeClass('selected');
	$("#navigation23").addClass('selected');
	gMaxCovers = gMaxCoversTopHundred;
	emptyCoversCols();
	flushFiltersData();
	flushSearchInput();
	currentSelectionPosition = 3;
	Collections.getInstance().getUserCollections();
	showWaitCover();
	//setCoversWithCollection(gStore.getComicsByCollections());
};

var sendGetSmilesSelection = function() {
	scrolledToBottomFunction = function() {sendGetNextSmilesComics();};
	gGetNextComicsOnScrollBottom = true;
	gOffsetSelection = 0;
	gMaxCovers = gMaxCoversSelection;
	emptyCoversCols();
	gStore.flush();
	showWaitCover();
	gStore.sendGetSmilesSelection();
};

var setSideHeight = function() {
	var viewportheight = 0;
	if (typeof window.innerHeight != 'undefined')
	{
		viewportheight = window.innerHeight;
	}
	//$("#sideLeft").css("height", viewportheight+"px");
	//$("#side").css("height", $("#content").height()+20+"px");
	if(!gSideToggle) {
		var height = document.documentElement.clientHeight + $("#sidePub").height();
		//$("#sideLeft").css('height',height+"px");
	}
	//$("#sideLeft").css("height", viewportheight+"px");
	//$("#side").css("height", viewportheight+"px");
};

var scrolledToBottom = function() {
	scrolledToBottomFunction();
};

var getNextSelectionComics = function() {
	if(gGetNextComicsOnScrollBottom && !gSideToggle) {
		showWaitCover();
		gStore.sendGetNextFeaturedComics();
		gGetNextComicsOnScrollBottom = false;
	}
};

var sendGetNextSmilesComics = function() {
	if(gGetNextComicsOnScrollBottom && !gSideToggle) {
		showWaitCover();
		gStore.sendGetNextSmilesComics();
		gGetNextComicsOnScrollBottom = false;
	}
};

var getNextComics = function() {
	if(gGetNextComicsOnScrollBottom && !gSideToggle) {
		showWaitCover();
		gStore.sendGetNextComics();
		gGetNextComicsOnScrollBottom = false;
	}
};

/***************************************************************************************/

/*************************************COMIC DETAIL**************************************/
var setComicDetailWithComic = function(pComic, pCoverFlowLoaded) {
	//$("#sideLeft").hide();
	if($(".lb-content").length > 0 && !ComicDetail.getInstance().coverFlowLoaded) {
		$("#theComic").empty();
		$("#theComic").append(theComicHTML);
	}
	setTheComicEvents();
	gSideFollowEnabled = true;
	window.scrollTo(0,Utils.getInstance().getScrollPosY()+1);
	window.scrollTo(0,Utils.getInstance().getScrollPosY()-1);
	$("#alsoLikeDiv span").removeClass("selectedAlsoLike").addClass("alsoLikeSpanNotSelected");
	$("#ifYouloveItSpan").removeClass("alsoLikeSpanNotSelected").addClass("selectedAlsoLike");
	ComicDetail.getInstance().setComic(pComic, pCoverFlowLoaded);
	$("#alsoLikeImgs").empty();
	$("#comicDetail").fadeIn();
	$("#twitterWidget").hide();
	$("#lastBuyComics, #topComics, #followUsDiv, #sidePub").hide();
	manageComicDetailTopPosition();
	//setMarginTopComicDetailPosition();
};

var setCoverComicDetail = function(pSrc) {
	$("#comicDetailCover").empty();
	$("#comicDetailCoverReflection").empty();
	var callbackReflection = function() {
		//$("#comicDetailCoverReflection").css("top",$("#comicDetailCover").height()-6+"px");
		//$("#divMaskReflection").css("top",$("#comicDetailCover").height()-5+"px");
		$("#sideLeft").show();
	};
	var imageAlt = Utils.getInstance().stripAccents(ComicDetail.getInstance().currentComic.title);
	var image = Utils.getInstance().loadCoverImage(pSrc, $("#comicDetailCover"), null, null, null, null, null, imageAlt);
	$(image).hide();
	$(image).addClass("comicDetailCover");
};

var setPreviousCoverComicDetail = function(pSrc) {
	$("#comicDetailPreviousCover").empty();
	//var image = Utils.getInstance().loadCoverImage(pSrc, $("#comicDetailPreviousCover"), 150, 150, null, $("#divMaskLeft"));
};

var setNextCoverComicDetail = function(pSrc) {
	$("#comicDetailNextCover").empty();
	//var image = Utils.getInstance().loadCoverImage(pSrc, $("#comicDetailNextCover"), 150, 150, null, $("#divMaskRight"));
};

var setTitleComicDetail = function(pTitle){
	$("#divTitleComicDetail").empty();
	$("#divTitleComicDetail").append(pTitle);
};

var setAuthorsComicDetail = function(pAuthors){
	$("#divAuthorsComicDetail").empty();
	var authorsIds = new Array();
	for(var i = 0 ; i < pAuthors.length ; i++) {
		if(!Utils.getInstance().inArray(authorsIds, pAuthors[i].id)) {
			var url = Utils.getInstance().getAuthorLink(pAuthors[i].name);
			$("#divAuthorsComicDetail").append("<a href=\""+url+"\" onclick=\"return false;\" class=\"searchLink\">"+pAuthors[i].name+"</a>");
			authorsIds.push(pAuthors[i].id);
		}
	}
	
	if(authorsIds.length < 3) {
		
	}
	else {
		$("#divAuthorsComicDetail").append("<br /><span class=\"plusDetail\">plus</span>");
		$("#divAuthorsComicDetail .plusDetail").click(function() {
			if($(this).text() == "plus") {
				$("#divAuthorsComicDetail").removeClass("wrapEllip").addClass("wrapNoEllip");
				$(this).text("moins");
			}
			else {
				$("#divAuthorsComicDetail").removeClass("wrapNoEllip").addClass("wrapEllip");
				$(this).text("plus");
			}
		});
	}
	
	updateSearchLinks();
};

var setEditorsComicDetail = function(pEditors) {
	$("#editor").empty();
	var url = Utils.getInstance().getEditorLink(pEditors[0].name);
	$("#editor").append("<span class=\"labelDetail\">Editeur : </span><a href=\""+url+"\" onclick=\"return false;\" class=\"searchLink\">"+pEditors[0].name+"</a>");
	updateSearchLinks();
};

var setSumUpComicDetail = function(pSum){
	$("#divSumUpComicDetail").empty();
	$("#divSumUpComicDetail").append(pSum);
	$("#divSumUpComicDetail").ellipsis();
};

var setPriceComicDetail = function(pPrice){
	$("#priceOne").empty();
	$("#priceTwo").empty();
	$("#priceThree").empty();
	$("#pricePoints").empty();
	var priceArr = Utils.getInstance().priceToArray(pPrice);
	$("#priceOne").append(priceArr[0]);
	$("#priceTwo").append(priceArr[1]);
	$("#priceThree").append(priceArr[2]);
	$("#pricePoints").append("OU <span class=\"pointsPrice\">"+ComicDetail.getInstance().currentComic.price["points"]+"</span> <span class=\"priceCurrency\">Points</span>");
};

var setGenreComicDetail = function(pGenre){
	$("#genre").empty();
	var keywordsIds = new Array();
	for(var i = 0 ; i < pGenre.length ; i++) {
		//$("#genre").append("<a href=\"#\" onclick=\"return false;\" class=\"searchLink\">"+pGenre[i].word+"</a>");
		if(!Utils.getInstance().inArray(keywordsIds, pGenre[i].id)) {
			if(i == 0) {
				$("#genre").append(pGenre[i].word);
			}
			else {
				$("#genre").append(", "+pGenre[i].word);
			}
			keywordsIds.push(pGenre[i].id);
		}
	}
	//updateSearchLinks();
};

var setLangueComicDetail = function(pLangue){
	$("#langue").empty();
	$("#langue").append("<span class=\"labelDetail\">Langue : </span>"+pLangue.name);
};

var setParamsPlayer = function(pComic, pInUserAssets) {
	//if(pComic.aveId) {
		var obj = $("object"),
			l = "fr",
			pa=0,
			p=pComic.productId,
			m="choice",
			u=pInUserAssets ? gUser.username : "",
			t=pInUserAssets ? gUser.token : "",	
			d="if_you_love_it",
			pp=pComic.previewPages,
			f=pComic.price[gCurrency] == 0 ? "true" : "false",
			/*button=url image
			button_width=
			button_height=*/
			pr=pInUserAssets ? false : true;
		/*if(pInUserAssets) {
			$("#paramsPlayer1").attr("value", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&u="+u+"&t="+t+"&pr="+pr+"&pp="+pp+"&f="+f);
			$("#paramsPlayer2").attr("flashvars", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&u="+u+"&t="+t+"&pr="+pr+"&pp="+pp+"&f="+f);
		}
		else {
			$("#paramsPlayer1").attr("value", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&pr="+pr+"&pp="+pp+"&f="+f);
			$("#paramsPlayer2").attr("flashvars", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&u="+u+"&t="+t+"&pr="+pr+"&pp="+pp+"&f="+f);
		}*/
		$("object").remove();
		
		var width = gIsIE ? "483" : "481";
		var height = gIsIE ? "364" : "362";
		
		var ind='<object id="screenPlayer" type="application/x-shockwave-flash" data="http://www.avecomics.com/2011/player/player.swf"';
	    ind+='" width="'+width+'" height="'+height+'">';
	    ind+='<param name="quality" value="high" />';
	    ind+='<param name="bgcolor" value="#000000" />';
	    ind+='<param name="allowFullScreen" value="true" />';
	    ind+='<param name="allowScriptAccess" value="always" />';
		ind+='<param name="wmode" value="transparent" />';
	    if(pInUserAssets) {
			ind+='<param id="screenVars" name="flashVars" value=';
			ind+='"p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&u='+u+'&t='+t+'&pr='+pr+'&pp='+pp+'&f='+f+'"/>'
			//ind+='"p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&u='+u+'&t='+t+'&pr='+pr+'" />';
		
			ind+='<embed id="screenVars2" width="'+width+'" height="'+height+'"';
			ind+='flashvars="p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&u='+u+'&t='+t+'&pr='+pr+'&pp='+pp+'&f='+f+'"' ;
			//ind+='flashvars="p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&u='+u+'&t='+t+'&pr='+pr+'"' ;
			/*$("#screenVars").attr("value", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&u="+u+"&t="+t+"&pr="+pr);
			$("#screenVars2").attr("flashvars", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&u="+u+"&t="+t+"&pr="+pr);*/
		}
		else {
			ind+='<param id="screenVars" name="flashVars" value=';
			ind+='"p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&pr='+pr+'&pp='+pp+'&f='+f+'" />';
			//ind+='"p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&pr='+pr+'" />';
		
			ind+='<embed id="screenVars2" width="481" height="362"';
			ind+='flashvars="p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&u='+u+'&t='+t+'&pr='+pr+'&pp='+pp+'&f='+f+'"' ;
			//ind+='flashvars="p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&pr='+pr+'"' ;
		
			/*$("#screenVars").attr("value", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&pr="+pr);
			$("#screenVars2").attr("flashvars", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&pr="+pr);*/
		}
    
    
	    ind+=' type="application/x-shockwave-flash" '+
			'allowfullscreen="true" '+
			'allowscriptaccess="always" '+
			'quality="high" '+
			'name="aveReader" '+
			'src="http://www.avecomics.com/2011/player/player.swf"/>';
	    ind+='</object>';
		
		$("#avePlayer").append(ind);
		$("#avePlayer").show();
		$("#previewPages").hide();
	/*}
	else {
		$("#avePlayer").hide();
		$("#previewPages").show();
	}*/
};

//retour player
var avePlayer_buyProduct = function() {
	addCurrentComicToCaddy(true);
};
var avePlayer_facebook = function() {
	var url = encodeURI(ComicDetail.getInstance().getProductUrl());
	window.open("http://www.facebook.com/sharer.php?u="+url+"&t="+ComicDetail.getInstance().currentComic.title,"Facebook","menubar=no, status=no, scrollbars=no, menubar=no, width=800, height=600");
};
var avePlayer_twitter = function() {
	var url = encodeURI(ComicDetail.getInstance().getProductUrl());
	var text = encodeURI(ComicDetail.getInstance().currentComic.title+" sur AveComics ! ");
	window.open("http://twitter.com/share?url="+url+"&text="+text,"Twitter","menubar=no, status=no, scrollbars=no, menubar=no, width=800, height=600");
};
var avePlayer_export = function() {};
var avePlayer_updatePageEP = function() {};
var avePlayer_openScreenPlayer = function(pComic)
{
	avePlayer_closeScreenPlayer();
	var comic = pComic;
	if(!pComic) {
		comic = ComicDetail.getInstance().currentComic;
	}
	var inUserAssets = ComicsUtils.getInstance().isComicInUserAsset(comic.productId);

	var	l = "fr",
	pa=0,
	p=comic.productId,
	m="screen",
	u=inUserAssets ? gUser.username : "",
	t=inUserAssets ? gUser.token : "",	
	d="if_you_love_it",
	pr=inUserAssets ? false : true;

	var popup=document.createElement("div");
	popup.id = "player-box";

	var regParam="";
	if( navigator.userAgent.indexOf( "MSIE" ) >= 0 ) { // ie
		// prevent IE to store SWF in cache --> all external interface handlers are lost if set
		regParam="?reg="+new Date().getTime();
	}
	var ind='<object id="screenPlayer" type="application/x-shockwave-flash" data="http://www.avecomics.com/2011/player/player.swf"';
	ind+='" width="100%" height="100%">';
	ind+='<param name="quality" value="high" />';
	ind+='<param name="bgcolor" value="#000000" />';
	ind+='<param name="allowFullScreen" value="true" />';
	ind+='<param name="allowScriptAccess" value="always" />';
	if(inUserAssets) {
		ind+='<param id="screenVars" name="flashVars" value=';
		ind+='"p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&u='+u+'&t='+t+'&pr='+pr+'" />';
	
		ind+='<embed id="screenVars2" width="100%" height="100%"';
		ind+='flashvars="p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&u='+u+'&t='+t+'&pr='+pr+'"' ;
		/*$("#screenVars").attr("value", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&u="+u+"&t="+t+"&pr="+pr);
		$("#screenVars2").attr("flashvars", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&u="+u+"&t="+t+"&pr="+pr);*/
	}
	else {
		ind+='<param id="screenVars" name="flashVars" value=';
		ind+='"p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&pr='+pr+'" />';
	
		ind+='<embed id="screenVars2" width="100%" height="100%"';
		ind+='flashvars="p='+p+'&l='+l+'&d='+d+'&pa='+pa+'&m='+m+'&pr='+pr+'"' ;
	
		/*$("#screenVars").attr("value", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&pr="+pr);
		$("#screenVars2").attr("flashvars", "p="+p+"&l="+l+"&d="+d+"&pa="+pa+"&m="+m+"&pr="+pr);*/
	}


	ind+=' type="application/x-shockwave-flash" '+
		'allowfullscreen="true" '+
		'allowscriptaccess="always" '+
		'quality="high" '+
		'name="aveReader" '+
		'src="http://www.avecomics.com/2011/player/player.swf"/>';
	ind+='</object>';
	popup.innerHTML=ind;
	_pageEP = 0;
	document.body.appendChild(popup);
	_statPlayer = '1';
};

var avePlayer_closeScreenPlayer = function()
{
    if(_statPlayer == '1')
    {
        if(document.getElementById("player-box"))
        {
            var player = document.getElementById("player-box");
            document.body.removeChild(player);
            //document.body.style.overflow = 'auto';
        }
    }
    else if(_statPlayer == '2')
    {
        Shadowbox.close();
    }
};

var setButtonsText = function(pInUserAssets, pIsFree) {
	if(pInUserAssets) {
		$("#previewButton").text("Lire");
		$("#buyButton").hide();
		//$("#price, #pricePoints").hide();
	}
	else {
		$("#previewButton").text("Aperçu");
		$("#buyButton").show();
		if(pIsFree) {
			$("#buyButton").text("Gratuit");
			$("#price, #pricePoints").hide();
		}
		else {
			$("#buyButton").text("Acheter");
			$("#price, #pricePoints").show();
		}
	}
};

var setRatingComicDetail = function(pRating) {
	$("#setRating").find('img').each(function() {
		$(this).attr("src", "http://www.avecomics.com/fr_fr/images/star-empty-blue-solo.png");
	});
	if(pRating) {
		/*switch (pRating) {
			case "0":
				//$(".fullRating").css("left", "-100px");
				break;
			case "1":
				$(".fullRating").css("left", "-80px");
				break;
			case "2":
				$(".fullRating").css("left", "-60px");
				break;
			case "3":
				$(".fullRating").css("left", "-40px");
				break;
			case "4":
				$(".fullRating").css("left", "-20px");
				break;
			case "5":
				$(".fullRating").css("left", "0px");
				break;
			default:
				$(".fullRating").css("left", "-100px");
				break;
		}*/
		ratingCurrentValue = pRating;
		for(var i=0; i<pRating; i++) {
			$($("#setRating").find('img')[i]).attr("src", "http://www.avecomics.com/fr_fr/images/star-full-blue-solo.png");
		}
	}else {
		//$(".fullRating").css("left", "-100px");
		ratingCurrentValue = 0;
	}
};

var setRatingEnter = function(index, elem) {
	if(ratingCurrentValue < index) {
		ratingCurrentValue = index;
		for(var i=0; i<index; i++) {
			$($(elem).parent().find("img")[i]).attr("src", "http://www.avecomics.com/fr_fr/images/star-full-blue-solo.png");
		}
	}
	else {
		ratingCurrentValue = index;
		for(var i=index; i<$(elem).parent().find("img").length; i++) {
			$($(elem).parent().find("img")[i]).attr("src", "http://www.avecomics.com/fr_fr/images/star-empty-blue-solo.png");
		}
	}
};



var addCurrentComicToCaddy = function(pIsFlashCall) {
	ComicDetail.getInstance().addComicToCaddy(pIsFlashCall);
};

var addCurrentComicToCaddyForPresent = function() {
	ComicDetail.getInstance().addComicToCaddyForPresent();
};

var addCardToCaddy = function(elem) {
	Caddy.getInstance().addCard(elem);
};

var addCardToCaddyForPresent = function(elem) {
	Caddy.getInstance().addCardForPresent(elem);
};

var enableComicDetailFollowPageTop = function(pCurrentScroll){
	gComicDetailFollowEnabled = true;
	manageComicDetailTopPosition(pCurrentScroll);
};

var disableComicDetailFollowPageTop = function(){
	gComicDetailFollowEnabled = false;
	manageComicDetailTopPosition();
};

var stopComicDetailFollowPageTop = function(pOnTop) {
	$("#sideLeft").css('position', 'absolute');
	$("#sideLeft").css('top',pOnTop+'px');
};

var manageComicDetailTopPosition = function(pCurrentScroll) {
	var marginTop = $("#top").height() + $("#header").height() - $("#navigation").height();
	if($("#lastBuyComics").is(':visible')) {
		marginTop = $("#top").height() + $("#header").height() + $("#topComics").height() - $("#navigation").height();
	}
		if(gComicDetailFollowEnabled) {
			$("#sideLeft").css('position', 'fixed');
			$("#sideLeft").css('margin-top','-'+marginTop+'px');
			$("#sideLeft").css('top','');
			if(!$("#lastBuyComics").is(':visible')) {
				$("#sidePub").hide();
			}
		}
		else if(!gComicDetailFollowEnabled){
			$("#sideLeft").css('position', 'absolute');
			$("#sideLeft").css('margin-top','0px');
			$("#sideLeft").css('top',"0px");
			/*if(!$("#lastBuyComics").is(':visible')) {
				$("#sidePub").show();
			}*/
		}
	
	
	//gSideLeftComicDetailTopPos = $("#sideLeft").position().top;
};

var setMarginTopComicDetailPosition = function() {
	var currentScroll = $(document).scrollTop();
	var offset = $("#header").offset().top + $("#header").height();
	$("#sideLeft").css('top',currentScroll-offset+'px');
	gSideLeftComicDetailTopPos = currentScroll;
};

var enableSideFollowPageTop = function(){
	gSideFollowEnabled = true;
	//manageSidePosition();
};

var disableSideFollowPageTop = function(){
	gSideFollowEnabled = false;
	setSideHeight();
	//manageSidePosition();
};

var stopSideFollowPageTop = function(pOnTop) {
	$("#side").css('position', 'absolute');
	$("#side").css('top',pOnTop+'px');
};

var manageSidePosition = function() {
	var marginTop = $("#top").height() + $("#header").height() ;
	if(gSideFollowEnabled) {
		$("#side").css('position', 'fixed');
		$("#side").css('margin-top','-'+marginTop+'px');
		$("#side").css('top','');
	}
	else {
		$("#side").css('position', 'absolute');
		$("#side").css('margin-top',"0px");
		$("#side").css('top',$("#header").height()+"px");
	}
};

var setFacebookComments = function(pComic) {
	$("#facebookComments").empty();
	var url = "http://www.avecomics.com/"+""+"bd/"+pComic.productId+"/"+Utils.getInstance().getTitleFromComicForUrl(pComic)+".html";
	var comments = '<fb:comments href="'+url+'" num_posts="2" width="400"></fb:comments>';
	$("#facebookComments").append(comments);
	if(FB) {
		FB.XFBML.parse();
	}
};

var setAlsoLike = function(pComics) {
	$(".alsoLikeSpinner").remove();
	if(pComics) {
		$(".alsoLikeNoComics").remove();
		var imagesSrc = new Array();
		for(var i=0; i<pComics.length; i++) {
			var source =  Utils.getInstance().getCoverUrl(pComics[i].id, gCoverResolutionStringAlsoLike); 
				//gTomodachiCoverUrl+"?id="+pComics[i].id+"&width="+gCoverResolutionStringAlsoLike;//+"&quality="+gCoverQuality;
			/*var image = Utils.getInstance().loadCoverImage(src, $("#alsoLikeImgs"), null, null);
			image.id = pComics[i].productId;*/
			imagesSrc.push({src: source, productId: pComics[i].productId});
		}
		if($("#alsoLikeImgs").is(":empty")) {
			ArraySlideShow.getInstance().setSlideShowWithImagesToDiv(imagesSrc, $("#alsoLikeImgs"));
			ArraySlideShow.getInstance().onNextAction = function() {
				gStore.offsetAlsoLike = gStore.offsetAlsoLike + 5;
				ComicDetail.getInstance().sendCurrentRequest();
			};
			ArraySlideShow.getInstance().onPreviousAction = function() {
				if(gStore.offsetAlsoLike - 5 >= 0) {
					gStore.offsetAlsoLike = gStore.offsetAlsoLike - 5;
					ComicDetail.getInstance().sendCurrentRequest();
				}
				else {
					ComicDetail.getInstance().sendCurrentRequest();
				}
			};
		}
		else {
			ArraySlideShow.getInstance().addImagesSrc(imagesSrc);
		}
		updateAlsoLikeEvents();
	}
	else if(gStore.offsetAlsoLike > 0) {
		gStore.offsetAlsoLike = 0;
		ComicDetail.getInstance().sendCurrentRequest();
	}
	else {
		gStore.offsetAlsoLike = 0;
		$("#arraySlideShow_container").remove();
		$("#alsoLikeImgs").append('<span class="alsoLikeNoComics">Aucune BD pour le moment</span>');
	}
};

var setOtherTitle = function(pComics) {
	$(".otherTitleSpinner").remove();
	$("#otherTitleImgs").empty();
	if(pComics) {
		//var imagesSrc = new Array(Utils.getInstance().getCoverUrl(ComicDetail.getInstance().currentComic.id, gComicDetailCoverSize));
		for(var i=0; i<pComics.length; i++) {
			var src =  Utils.getInstance().getCoverUrl(pComics[i].id, gCoverResolutionStringAlsoLike);
			//imagesSrc.push(Utils.getInstance().getCoverUrl(pComics[i].id, gComicDetailCoverSize));
			var imageAlt = Utils.getInstance().stripAccents(pComics[i].title);
			var image = Utils.getInstance().loadCoverImage(src, $("#otherTitleImgs"), null, null, null, null, null, imageAlt);
			image.id = pComics[i].productId;
		}
		updateOtherTitleEvents();
		$("#otherTitleDiv").fadeIn();
		if(!ComicDetail.getInstance().coverFlowLoaded) {
			pComics.unshift(ComicDetail.getInstance().currentComic);
			pComics = ComicsUtils.getInstance().sortComicsByCollectionPosition(pComics);
			var position = ComicsUtils.getInstance().getComicPositionInArray(ComicDetail.getInstance().currentComic, pComics);
			var imagesSrc = ComicsUtils.getInstance().getCoversArray(pComics, gComicDetailCoverSize);
			CoverFlowComic.getInstance().setCoverFlowWithImagesToDiv(imagesSrc, $("#comicDetailCover"), position);
			CoverFlowComic.getInstance().onNextAction = function() {
				setComicDetailWithComic(pComics[CoverFlowComic.getInstance().index], true);
				calculateScrollDetails();
			};
			CoverFlowComic.getInstance().onPreviousAction = function() {
				setComicDetailWithComic(pComics[CoverFlowComic.getInstance().index], true);
				calculateScrollDetails();
			};
			ComicDetail.getInstance().coverFlowLoaded = true;
		}
	}
	else {
		$("#otherTitleDiv").hide();
		$(".comicDetailCover").fadeIn(400, function() {
			calculateScrollDetails();
		});
	}
};
	
var setPreviewPages = function(pPreviewPagesCsv) {
	$("#previewPages").empty();
	var previewPages = Utils.getInstance().extractValueFromCsv(pPreviewPagesCsv);
	for(var i = 0 ; i<previewPages.length ; i++) {
		var src = gGetMediaUrl+previewPages[i];
		var image = Utils.getInstance().loadCoverImage(src, $("#previewPages"), gCoverResolutionStringPrewiewPage, gCoverResolutionStringPrewiewPage, null, null, true);
		image.width = parseInt(gCoverResolutionStringPrewiewPage);
		image.height = parseInt(gCoverResolutionStringPrewiewPage)+50;
	}
	$("#previewPages").append("<div class=\"clear\"></div><div id=\"launchPreview\">Voir l'aperçu pleine page</div>");
};

/*************************************************************************************/

/*************************************TOP COVERS**************************************/
var setTopCoversWithComics = function(pComics) {
	hideWaitCover();
	hideOverlay();
	$("#topCovers").empty();
	$("#collectionsCovers").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#pointsSmilesView").hide();
	$("#coversCols").hide();
	$("#gift").hide();
	$("#cgu").hide();
	$("#cgv").hide();
	$("#legal").hide();
	$("#getGift").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#topCovers").show();
	CoverView.getInstance().setCurrentViewWithComics(COVER_VIEW_TOP, pComics);
	addCurrentComics(pComics);
};
/*************************************************************************************/

/*************************************COVER COLS**************************************/
var emptyCoversCols = function() {
	$("#coversCol1").empty();
	$("#coversCol2").empty();
	$("#coversCol3").empty();
};

var setCoversWithComics = function(pComics) {
	hideWaitCover();
	hideOverlay();
	$("#collectionsCovers").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#gift").hide();
	$("#cgu").hide();
	$("#cgv").hide();
	$("#legal").hide();
	$("#getGift").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#pointsSmilesView").hide();
	$("#topCovers").hide();
	$("#coversCols").show();
	CoverView.getInstance().setCurrentViewWithComics(COVER_VIEW_SELECTION, pComics);
	addCurrentComics(pComics);
	if(NavigationManager.getInstance().currentSection == gSectionSearch) {
		$("#contentFilters").hide();
		NavigationManager.getInstance().setSearchResultsText();
	}
};

var setCollections = function(pCollections) {
	hideWaitCover();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#gift").hide();
	$("#cgu").hide();
	$("#cgv").hide();
	$("#legal").hide();
	$("#getGift").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#pointsSmilesView").hide();
	$("#collectionsCovers").empty();
	$("#collectionsCovers").show();
	CoverView.getInstance().setCurrentViewWithComics(COVER_VIEW_COLLECTIONS, pCollections);
};

var setCoversForCollection = function(pComics, pIdCollection) {
	currentComics = new Array();
	$(".divCollectionCovers").empty();
	$("#collection_"+pIdCollection).append("<div class=\"collectionWait\"></div>");
	for ( var i = 0; i < pComics.length; i++) {		
		currentComics.push(pComics[i]);
		var imageAlt = Utils.getInstance().stripAccents(pComics[i].title);
		var image = Utils.getInstance().loadCoverImage(pComics[i].coverUrl, $("#collection_"+pIdCollection), null, null, null, null, null, imageAlt);
		image.id = pComics[i].id;
		$(image).click(function() {
			setComicDetailWithComic(Utils.getInstance().getComicWithIdFromComics(pComics, $(this).attr('id')));
		});
	}
	gStore.sendGetOtherTitles(pComics[0].id, pIdCollection, pComics[0].language);
};

var addCoversWithComicsForCollection = function(pComics, pCollectionId) {
	$(".collectionWait").remove();
	for ( var j = 0; j < pComics.length; j++) {
		var isExist = false;
		for ( var i = 0; i < currentComics.length; i++) {
			if(currentComics[i].id == pComics[j].id) {
				isExist = true;
			}
		}
		if(!isExist) {
			var isInUserAssets = ComicsUtils.getInstance().isComicInUserAsset(pComics[j].productId);
			//$("#collection_"+pCollectionId).append('<div id="collection_'+pCollectionId+'_divNotBought_'+j+'"><span class="imageCollectionNotBoughtMask"></span></div>');
			var imageAlt = Utils.getInstance().stripAccents(pComics[j].title);
			var image = Utils.getInstance().loadCoverImage(pComics[j].coverUrl, $("#collection_"+pCollectionId), null, null, null, null, null, imageAlt);
			if(!isInUserAssets) {
				image.className = "imageCollectionNotBought";
			}
			image.id = pComics[j].id;
			$(image).click(function() {
				setComicDetailWithComic(Utils.getInstance().getComicWithIdFromComics(currentComics, $(this).attr('id')));
			});
			currentComics.push(pComics[j]);
		}
	}
};

var highlightCurrentComic = function(pImg) {
	/*showCoverLayer();
	$("#divCoverHighLight").hide();
	$("#divCoverHighLight").empty();
	Utils.getInstance().loadCoverImage(pImg.src, $("#divCoverHighLight"), gCoverMaxWidth+50, gCoverMaxHeight+50);
	$("#divCoverHighLight").css("top", pImg.offsetTop-25+"px");
	$("#divCoverHighLight").css("left", pImg.offsetLeft-25+"px");
	$("#divCoverHighLight").show();*/
};

var hideHighlightCurrentComic = function() {
	$("#divCoverHighLight").hide();
	$("#divCoverHighLight").empty();
};

var showCoverLayer = function() {
	/*$("#coversCols").append("<div class=\"opacityLayer\"></div>");
	$(".opacityLayer").css("top", $("#coversCols").offsetTop);
	$(".opacityLayer").css("left", $("#coversCols").offsetLeft);
	$(".opacityLayer").css("width", $("#coversCols").width());
	$(".opacityLayer").css("height", $("#coversCol1").height());
	$(".opacityLayer").click(function() {
		hideCoverLayer();
		hideHighlightCurrentComic();
	});
	$(".opacityLayer").show();*/
};

var hideCoverLayer = function() {
	$(".opacityLayer").remove();
};
/*************************************************************************************/

/************************************WAIT COVER***************************************/
var showWaitCover = function() {
	$("#waitCoverDiv").show();
	setSideHeight();
};

var hideWaitCover = function() {
	$("#waitCoverDiv").hide();
	setSideHeight();
};
/*************************************************************************************/

/************************************SEARCH INPUT*************************************/
var searchComicSubmitted = function() {
	var value = $("#searchComic").val();
	var comicsTemp = new Array();
	if(value != "") {
		$(".nav1Element").removeClass('selected');
		$("#divCoverPanel").hide();
		gGetNextComicsOnScrollBottom = true;
		scrolledToBottomFunction = function() {getNextComics();};
		emptyCoversCols();
		gStore.flush();
		gStore.sendSearchProduct(value);
		showOverlay();
		closeSide();
		setNavigationLayout(gSectionSearch);
		setNavigationCallbacks(gSectionSearch);
		//History.pushState({state:"Search"}, "Search", "?state=search&query="+escape(value));
	}
	else {
		selectionClicked();
	}
};

var flushSearchInput = function() {
	$("#searchComic").val('');
};
/*************************************************************************************/

/************************************DATA LIST****************************************/
var addCurrentComics = function(pComics) {
	for (var i=0; i < pComics.length; i++) {
	  //$("#currentComics").append("<option value=\""+pComics[i].title+"\">");
	}
};
/*************************************************************************************/

/************************************NEWSLETTER***************************************/
var setNewsLetter = function() {
	//Utils.getInstance().loadCoverImage("images/newsletter-banner.png", $("#imgNewsLetterDiv"));
};
/*************************************************************************************/

/************************************FILTERS******************************************/
var flushFiltersData = function() {
	filterOneValue = -1;
	filterTwoValue = -1;
	filterThreeValue = -1;
	currentComicsWithFilterOne = new Array();
	currentComicsWithFilterTwo = new Array();
	currentComicsWithFilterThree = new Array();
	currentKeywordId = -1;
	currentEditorId = -1;
};

var addDataToFilterOne = function(pData) {
	$("#filter1").lionbars({destroy: true});
	$("#olFilter1").empty();
	$("#olFilter1").append("<li id=\"-1\">Tout</li>");
	pData.sort(function(x, y) {
		var a = String(x.word).toUpperCase();
		var b = String(y.word).toUpperCase();
		if(a > b)
			return 1;
		if(a < b)
			return -1;
		return 0;
	});
	for (var i=0; i < pData.length; i++) {
	  $("#olFilter1").append("<li id=\""+pData[i].id+"\">"+pData[i].word+"</li>");
	}
	
	$("#filter1").lionbars({classes: "filterColors"});
	$("#olFilter1 > li").click(function() {
		$(this).siblings().removeClass("selected");
		$(this).addClass("selected");
		var id = $(this).attr('id');
		liFilterOneClicked(id);
	});
};

var addDataToFilterTwo = function(pData) {
	$("#filter2").lionbars({destroy: true});
	$("#olFilter2").empty();
	$("#olFilter2").append("<li id=\"-1\">Tout</li>");
	pData.sort(function(x, y) {
		var a = String(x.name).toUpperCase();
		var b = String(y.name).toUpperCase();
		if(a > b)
			return 1;
		if(a < b)
			return -1;
		return 0;
	});
	for (var i=0; i < pData.length; i++) {
	  $("#olFilter2").append("<li id=\""+pData[i].id+"\">"+pData[i].name+"</li>");
	}
	$("#filter2").lionbars({classes: "filterColors"});
	$("#olFilter2 > li").click(function() {
		$(this).siblings().removeClass("selected");
		$(this).addClass("selected");
		var id = $(this).attr('id');
		liFilterTwoClicked(id);
	});
};

var addDataToFilterThree = function(pData) {
	$("#filter3").lionbars({destroy: true});
	$("#olFilter3").empty();
	$("#olFilter3").append("<li id=\"-1\">Tout</li>");
	pData.sort(function(x, y) {
		var a = String(x.name).toUpperCase();
		var b = String(y.name).toUpperCase();
		if(a > b)
			return 1;
		if(a < b)
			return -1;
		return 0;
	});
	for (var i=0; i < pData.length; i++) {
	  $("#olFilter3").append("<li id=\""+pData[i].id+"\">"+pData[i].name+"</li>");
	}
	
	$("#filter3").lionbars({classes: "filterColors"});
	$("#olFilter3 > li").click(function() {
		$(this).siblings().removeClass("selected");
		$(this).addClass("selected");
		var id = $(this).attr('id');
		liFilterThreeClicked(id);
	});
};

var liFilterOneClicked = function(pId) {
	flushFiltersData();
	filterOneValue = pId;
	gGetNextComicsOnScrollBottom = false;
	emptyCoversCols();
	//if(NavigationManager.getInstance().currentSection != gSectionLibrary) {
		
	if(pId != "-1") {
		sendGetComicsForKeywordsId(pId);
	}
	else {
		
	}
	/*}
	else {
		currentComicsWithFilterOne = gStore.filterComicsByKeywordsId(pId);
		setCoversWithComics(currentComicsWithFilterOne);
		addDataToFilterTwo(gStore.getEditorsFromComics(currentComicsWithFilterOne));
		addDataToFilterThree(gStore.getAuthorsFromComics(currentComicsWithFilterOne));
	}*/
};

var sendGetComicsForKeywordsId = function(pId) {
	var callback = function(pComics) {
		currentComicsWithFilterOne = pComics;
		currentKeywordId = pId;
		setCoversWithComics(currentComicsWithFilterOne);
		addDataToFilterTwo(gStore.getEditorsFromComics(currentComicsWithFilterOne));
		addDataToFilterThree(gStore.getAuthorsFromComics(currentComicsWithFilterOne));
	};
	KeywordsAjax.getInstance().getComicsForKeywordsId(pId, callback);
};

var liFilterTwoClicked = function(pId) {
	filterTwoValue = pId;
	gGetNextComicsOnScrollBottom = false;
	emptyCoversCols();
	//if(NavigationManager.getInstance().currentSection != gSectionLibrary) {
		if(pId != "-1") {
			sendGetComicsForEditorsId(pId);
		}
		else {
			sendGetComicsForKeywordsId(filterOneValue);
		}
	/*}
	else {
		if(currentComicsWithFilterOne.length > 0) {
			currentComicsWithFilterTwo = gStore.filterComicsByEditorId(pId, currentComicsWithFilterOne);
			setCoversWithComics(currentComicsWithFilterTwo);
			addDataToFilterThree(gStore.getAuthorsFromComics(currentComicsWithFilterTwo));
		}
		else {
			currentComicsWithFilterTwo = gStore.filterComicsByEditorId(pId, gStore.comics);
		}
		setCoversWithComics(currentComicsWithFilterTwo);
		addDataToFilterThree(gStore.getAuthorsFromComics(currentComicsWithFilterTwo));
	}*/
};

var sendGetComicsForEditorsId = function(pId) {
	var callback = function(pComics) {
		if(currentComicsWithFilterOne.length > 0) {
			currentComicsWithFilterTwo = gStore.filterComicsByKeywordsId(currentKeywordId, pComics);
		}
		else {
			currentComicsWithFilterTwo = pComics;
		}
		setCoversWithComics(currentComicsWithFilterTwo);
		addDataToFilterThree(gStore.getAuthorsFromComics(currentComicsWithFilterTwo));
	};
	EditorsAjax.getInstance().getComicsForEditorsId(pId, callback);
};

var liFilterThreeClicked = function(pId) {
	filterThreeValue = pId;
	gGetNextComicsOnScrollBottom = false;
	emptyCoversCols();
	if(currentComicsWithFilterTwo.length > 0) {
		currentComicsWithFilterThree = gStore.filterComicsByAuthorId(pId, currentComicsWithFilterTwo);
	}
	else if(currentComicsWithFilterOne.length > 0){
		currentComicsWithFilterThree = gStore.filterComicsByAuthorId(pId, currentComicsWithFilterOne);
	}
	else {
		//currentComicsWithFilterThree = gStore.filterComicsByAuthorId(pId, gStore.comics);
		
	}
	//currentComicsWithFilterThree = gStore.filterComicsByAuthorId(pId, currentComicsWithFilterTwo);
	setCoversWithComics(currentComicsWithFilterThree);
};
/*************************************************************************************/

/************************************PUBS*********************************************/
var getPubs = function() {
	/*pubManager = new PubManager();
	pubManager.sendGetBigPubs();*/
	//runLoopPub();
	
	$('#pub1, #pub2, #pub3').click(function() {
		var img = $(this).find('img:visible')[0];
		clickPubCallback(img);
	})
	
	$('#pub1').cycle({
			fx: 'fade',
			autostop: false,
			timeout: gPubTimeLoop
		});
		//setTimeout(function() {
			$('#pub2').cycle({
				fx: 'fade',
				autostop: false,
				timeout: gPubTimeLoop
			});
		//}, 1500);
		
		//setTimeout(function() {
			$('#pub3').cycle({
				fx: 'fade',
				autostop: false,
				timeout: gPubTimeLoop
			});
		//}, 2500);
};

var flushPubs = function() {
	$("#pub1").empty();
	$("#pub2").empty();
	$("#pub3").empty();
	$("#pub4").empty();
	$("#pub5").empty();
	$("#pub6").empty();
};

var clickPubCallback = function(pImg) {
	var productId = $(pImg).attr('id');
	if(productId != -1) {
		History.pushState({state:"Product"}, "Product", "http://www.avecomics.com/"+""+"bd/"+productId+"/product.html");	
	}
};

var getProductPage = function() {
	var productId = Utils.getInstance().getProductIdFromUrl();//Utils.getInstance().getUrlVars()['p'];
	getComicsWithProductId(productId);
};

var getDetailPage = function() {
	var productId = Utils.getInstance().getProductIdFromUrlDetail();//Utils.getInstance().getUrlVars()['p'];
	getComicsWithProductId(productId);
};

var getComicsWithProductId = function(productId) {
	if(productId) {
		gGetNextComicsOnScrollBottom = false;
		var callback = function(pComics){
			setComicDetailWithComic(gStore.getComicWithId(pComics[0].id));
		};
		gStore.sendGetComicsWithIds(new Array(productId), callback);
	}
	else {
		History.pushState({state:"Home"}, "Home", "http://www.avecomics.com/"+"");
	}
};

var getCategoryBd = function() {
	var keywordId = Utils.getInstance().getCategoryKeywordFromUrl();
	if(keywordId) {
		emptyCoversCols();
		gGetNextComicsOnScrollBottom = true;
		scrolledToBottomFunction = function() {getNextComics();};
		KeywordsAjax.getInstance().getComicsForKeywordsId(keywordId);
	}
	else {
		History.pushState({state:"Home"}, "Home", "http://www.avecomics.com/"+"");
	}
};

var getEditorBd = function() {
	var editor = Utils.getInstance().getEditorFromUrl();
	if(editor) {
		$("#searchComic").val(editor);
		searchComicSubmitted();
		History.pushState({state:"Search"}, "Search", $(this).attr("href"));
	}
	else {
		History.pushState({state:"Home"}, "Home", "http://www.avecomics.com/"+"");
	}
};

var setPubsImagesWithUrls = function(pPubs) {
	$('#pub1, #pub2, #pub3').hide();
	var images = new Array();
	var indexContainer = 1;
	for ( var i = 0; i < pPubs.length; i++) {
		if(indexContainer > 3) {
			indexContainer = 1;
		}
		var pId = pPubs[i].productId;
		images.push({
			src: pPubs[i].url,
			productId : pId,
			container: $("#pub"+indexContainer),
			clickEvent: function() {
				clickPubCallback();
			}
		});
		indexContainer++;
	}
	
	Utils.getInstance().loadImagesArray(images,341, 201, function() {
		$('#pub1, #pub2, #pub3').show();
		$('#pub1').cycle({
			fx: 'fade',
			autostop: false,
			timeout: gPubTimeLoop
		});
		//setTimeout(function() {
			$('#pub2').cycle({
				fx: 'fade',
				autostop: false,
				timeout: gPubTimeLoop
			});
		//}, 1500);
		
		//setTimeout(function() {
			$('#pub3').cycle({
				fx: 'fade',
				autostop: false,
				timeout: gPubTimeLoop
			});
		//}, 2500);
		
	});
	
};

var runLoopPub = function() {
	if(intervalPub)clearInterval(intervalPub);
	intervalPub = setInterval(function() {
		//setPubsImagesWithUrls(pubManager.getPubsToShow());
	},gPubTimeLoop);
};
/*************************************************************************************/

/************************************COVER PANEL**************************************/
var showCoverPanelWithComicImg = function(pImg) {
	if(timeoutCoverPanel) {
		clearTimeout(timeoutCoverPanel);
	}
	timeoutCoverPanel = setTimeout(function() {
		/*CoverPanel.getInstance().positionOnCover(pImg);
		CoverPanel.getInstance().show();
		CoverPanel.getInstance().setInformations();*/
	}, 1000);
	
};

var hideCoverPanel = function() {
	CoverPanel.getInstance().hide();
};

var setQtipForCoversImg = function(pImg) {
	/*var idCover = pImg.attr('id');
	var pComic = gStore.getComicWithId(idCover);
	
	var authors = gStore.getAuthorsFromComics(new Array(pComic));
	var authorsStr = authors[0].name;
	var language = gStore.getLanguageFromId(pComic.language);
	
	var html = 	"<div id=\"popupComicCover_"+idCover+"\" class=\"left\"></div>"+
				"<div class=\"left popupDetails\"><span class=\"popupTitle\">"+pComic.title+"</span><br />"+
				"<span class=\"popupAuthors\">"+authorsStr+"</span><br />"+
				"<span class=\"popupLang\">"+language.name+"</span></div><br /><div class=\"clear\"></div>"+
				"<hr>"+
				"<div class=\"bottomPopup\">Favoris</div><div class=\"bottomPopup\">Commenter</div>"+
				"<div class=\"bottomPopup\"></div><div class=\"bottomPopup\"></div><div class=\"bottomPopup\"></div>";
	
	$(pImg).qtip(
			{
			content: {
				text: html
			},
			show: {
				event: "mouseover",
				delay: 1000
			},
			hide: {
				fixed: true,
				event: "mouseout"
			},
			position: {
				at: "right center",
				my: "left center"
			},
			style: {
				tip: {
					corner: "leftMiddle"
				},
				classes: 'popUp ui-tooltip-shadow'
			},
			events: {
			  render: function(event, api) {
					var srcImg = gTomodachiCoverUrl+"?id="+pComic.id+"&width="+gCoverResolutionStringPopUp+"&quality="+gCoverQuality;
					Utils.getInstance().loadCoverImage(srcImg, $("#popupComicCover_"+idCover), null, null);
			  }
		   }
		}
	);*/
};

var getQtipTextContent = function(pImg) {
	var idComic = pImg.attr('id');
	return idComic;
};
/*************************************************************************************/

/************************************CADDY********************************************/

var setCaddyView = function() {
	if(Caddy.getInstance().productIds.length > 0) {
		$("#emptyCart").hide();
		$("#cartWithProduct").show();
		if(gUser) {
			$("#payementMode").show();
			$("#noAccount").hide();
		}
		else {
			$("#payementMode").hide();
			$("#noAccount").show();
		}
		$("#tableCaddyProducts > tbody").empty();
		$("#tableCaddyProducts > tbody").append(Caddy.getInstance().getCaddyTable());
		$("#totalCaddy").text(Caddy.getInstance().getTotalCaddyText());
		if(Caddy.getInstance().isFreeCaddy()) {
			$("#radiosPayementyMode").hide();
		}
		else {
			$("#radiosPayementyMode").show();
		}
		
		$(".spanCaddyPlus").click(function() {
			var id = $(this).parent().attr("id");
			Caddy.getInstance().addToCaddy(id, function(){setCaddyView();}, false);	
		});
		$(".spanCaddyMoins").click(function() {
			var id = $(this).parent().attr("id");
			Caddy.getInstance().removeFromCaddy(id, function(){setCaddyView();});
		});
		$(".cart span > span").remove();
		$(".cart span").append('<span style="margin-left: 2px;">('+Caddy.getInstance().productIds.length+')</span>');
		
		if(gUser) {
			$("#userPoints").show();
			$("#spanUserPoints").text(gUser.points + " Points");
		}
		else {
			$("#userPoints").hide();
		}
	}
	else {
		$("#cartWithProduct").hide();
		$("#emptyCart").show();
	}
}; 

var radioCurrenciesChanged = function() {
	$('input:radio[name=radioCurrency]').each(function() {
		$(this).parent().removeClass("currencySelected");
		$(this).parent().addClass("currencySelectedNotSelected");
	});
	$('input:radio[name=radioCurrency]:checked').parent().removeClass("currencySelectedNotSelected");
	$('input:radio[name=radioCurrency]:checked').parent().addClass("currencySelected");
	Caddy.getInstance().setCurrency($('input:radio[name=radioCurrency]:checked').val());
	setCaddyView();
};

var radioPayementChanged = function() {
	Caddy.getInstance().setPayementMode($('input:radio[name=radioPayement]:checked').val());
	setCaddyView();
};

var radioPointsCurrencyChanged = function() {
	$('input:radio[name=radioPointsCurrency]').each(function() {
		$(this).parent().removeClass("currencySelected");
		$(this).parent().addClass("currencySelectedNotSelected");
	});
	$('input:radio[name=radioPointsCurrency]:checked').parent().removeClass("currencySelectedNotSelected");
	$('input:radio[name=radioPointsCurrency]:checked').parent().addClass("currencySelected");
	Caddy.getInstance().setCurrency($('input:radio[name=radioPointsCurrency]:checked').val());
	Utils.getInstance().setCardsCurrency($('input:radio[name=radioPointsCurrency]:checked').val());
};

var validateCaddy = function() {
	Caddy.getInstance().validate();
};

var showPopUpProductAddToCaddy = function() {
	var message = $('<p />', { text: "Produit ajouté au panier" }),
		okButton = $('<button/>', { text: "Ok", click: function() { hidePopUp(); }, 'class': 'buttonOk right'}); 
	$('<div />').qtip(
	  {
			content : {
				text : message.add(okButton),
				title : "Panier"
			},
			position : {
				my : 'center',
				at : 'center', // Center it...
				target : $(window)
			},
			show : {
				ready : true,
				modal : {
					on : true,
					blur : false
				}
			},
			hide : true,
			style : 'ui-tooltip-rounded ui-tooltip-dialogue'
		});
};

var showProductAddToCaddy = function(target) {
	$(".cart span > span").remove();
	$(".cart span").append('<span style="margin-left: 2px;">('+Caddy.getInstance().productIds.length+')</span>');
	
	var message = $('<p />', { text: "Produit ajouté au panier" });
	//var target = pIsForPresent ? $("#offerButton") : $("#buyButton");
    if( target.qtip) {
		target.qtip("destroy");
    }
	target.qtip({
       overwrite: false, // Make sure we only render one tooltip
       content: {
          text: message
       },
       position: {
		   my: 'top center',
		   at: 'bottom center',
		   target: target
       },
       show: {
	       event: false, // Don't show it on a regular event
	       ready: true, // Show it when ready (rendered)
	       effect: function() { $(this).stop(0,1).fadeIn(400); }, // Matches the hide effect
	       delay: 0
       },
       hide: {
    	  target: $(window),
    	  event: 'scroll unfocus',
          delay: 100,
          distance: 5
       },
       style: {
    	  classes: "ui-tooltip-tipsy cartTip",
          tip: true
       },
       events: {
	       render: function(event, api) {
	       }
       }
    });
    //$('#buyButton').qtip('show');
};

/*************************************************************************************/

/************************************POINTS*******************************************/
var setPointsView = function() {
	$("#waitCoverDiv").hide();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsSmilesView").hide()
	$("#gift").hide();
	$("#cgu").hide();
	$("#cgv").hide();
	$("#legal").hide();
	$("#getGift").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#pointsView").fadeIn();
};

var setPointsSmilesView = function() {
	$("#waitCoverDiv").hide();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#gift").hide();
	$("#cgu").hide();
	$("#cgv").hide();
	$("#legal").hide();
	$("#getGift").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#pointsSmilesView").fadeIn();
};
/*************************************************************************************/

/************************************GIFTS********************************************/
var setGiftView = function() {
	$("#waitCoverDiv").hide();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#pointsSmilesView").hide();
	$("#getGift").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#gift").fadeIn();
};

var setGetGiftView = function() {
	$("#waitCoverDiv").hide();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#pointsSmilesView").hide();
	$("#gift").hide();
	$("#cgu").hide();
	$("#cgv").hide();
	$("#legal").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#inputCodeKDO").val('');
	if(gUser) {
		$("#KDONotConnected").hide();
		$("#KDOConnected").show();
	}
	else {
		$("#KDOConnected").hide();
		$("#KDONotConnected").show();
	}
	$("#getGift").fadeIn();
};

/*************************************************************************************/

/************************************REGISTER*****************************************/
var setRegisterView = function() {
	$("#waitCoverDiv").hide();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#pointsSmilesView").hide();
	$("#gift").hide();
	$("#getGift").hide();
	$("#cgu").hide();
	$("#cgv").hide();
	$("#legal").hide();
	$("#register").fadeIn();
};
/*************************************************************************************/

var setProfilView = function() {
	$("#waitCoverDiv").hide();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#pointsSmilesView").hide();
	$("#gift").hide();
	$("#getGift").hide();
	$("#cgu").hide();
	$("#cgv").hide();
	$("#legal").hide();
	$("#register").hide();
	$("#profil").fadeIn();
	Profil.getInstance().showUserInfos();
	initUploadAvatar();
};

var setCguView = function() {
	$("#waitCoverDiv").hide();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#pointsSmilesView").hide();
	$("#gift").hide();
	$("#getGift").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#cgu").fadeIn();
};
var setCgvView = function() {
	$("#waitCoverDiv").hide();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#pointsSmilesView").hide();
	$("#gift").hide();
	$("#getGift").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#cgu").hide();
	$("#cgv").fadeIn();
};
var setLegalView = function() {
	$("#waitCoverDiv").hide();
	$("#topCovers").hide();
	$("#coversCols").hide();
	$("#caddyView").hide();
	$("#pointsView").hide();
	$("#pointsSmilesView").hide();
	$("#gift").hide();
	$("#getGift").hide();
	$("#register").hide();
	$("#profil").hide();
	$("#cgu").hide();
	$("#cgv").hide();
	$("#legal").fadeIn();
};

/************************************LAST BUY*****************************************/
var setLastBuyComics = function(pComicsLastBuy) {
	var lastScrollTop = $("#lastBuyComicList").find('.lb-wrap').scrollTop();
	$("#lastBuyComicList").lionbars({
		destroy: true
	});
	if(gOffsetLastBuy == 0) {
		$("#lastBuyComicList").empty();
	}
	$("#nextLastBuyDiv").remove();
	for(var i=0; i< pComicsLastBuy.length; i++) {
		if(pComicsLastBuy[i].comic) {
			var index = $(".lastBuyComic").length + 1;
			var sinceDateText = "Il y a ";
			if(pComicsLastBuy[i].date == " Moins d'une minute") {
				sinceDateText = "";
			}
			$("#lastBuyComicList").append(
					"<div class=\"lastBuyComic\" id=\""+pComicsLastBuy[i].comic.productId+"\">"+
						"<div id=\"lastBuyImg_"+index+"\" class=\"left\"></div>"+
						"<div class=\"left\ lastBuyText\">"+
							"<span>"+pComicsLastBuy[i].comic.title+"</span><br />"+
							"<span><a href=\"#\" onclick=\"return false;\">Aperçu</span></a><br />"+
							"<span class=\"sinceDate\">"+sinceDateText+pComicsLastBuy[i].date+
							" depuis "+pComicsLastBuy[i].store+"</span><br />"+
						"</div><br />"+
						"<div class=\"clear\"></div>"+
						"<hr class=\"sepList\" />"+
					"</div>"
				);
				var imageAlt = Utils.getInstance().stripAccents(pComicsLastBuy[i].comic.title);
			Utils.getInstance().loadCoverImage(pComicsLastBuy[i].comic.coverUrl, $("#lastBuyImg_"+index), null, null, null, null, null, imageAlt);
		}
	}
	$("#lastBuyComicList").append('<div id="nextLastBuyDiv">PLUS</div>');
	$(".lastBuyComic").click(function(event) {
		lastBuyComicClicked($(this));
	});
	$("#nextLastBuyDiv").click(function() {
		getNextLastBuyComics();
	});
	if($("#lastBuyComicList").find(".lb-wrap").length == 0) {
		$("#lastBuyComicList").lionbars();
	}
	var scrolltop = 100*($(".lastBuyComic").length);
	$("#lastBuyComicList").find('.lb-wrap').scrollTop(lastScrollTop);
	$("#lastBuyComicList").find('.lb-wrap').animate({scrollTop:scrolltop}, 2000, 'easeOutCubic');
};

var setTopComics = function(pComicsTop) {
	$("#topList").empty();
	for(var i=0; i< pComicsTop.length; i++) {
		$("#topList").append(
			"<div class=\"topComic\" id=\""+pComicsTop[i].comic.productId+"\">"+
				"<div id=\"topImg_"+i+"\" class=\"left\"></div>"+
				"<div class=\"left\ topText\">"+
					"<span>"+pComicsTop[i].comic.title+"</span><br />"+
					"<span><a href=\"#\" onclick=\"return false;\">Aperçu</span></a><br />"+
				"</div><br />"+
				"<div class=\"clear\"></div>"+
				"<hr class=\"sepList\" />"+
			"</div>"
		);
		var imageAlt = Utils.getInstance().stripAccents(pComicsTop[i].comic.title);
		Utils.getInstance().loadCoverImage(pComicsTop[i].comic.coverUrl, $("#topImg_"+i), null, null, null, null, null, imageAlt);
	}
	$(".topComic").click(function(event) {
		lastBuyComicClicked($(this));
	});
};

var lastBuyComicClicked = function(pElement) {
	var productId = pElement.attr('id');
	History.pushState({state:"Product"}, "Product", "http://www.avecomics.com/"+""+"bd/"+productId+"/product.html");
	backToTop();
};

var getLastBuyComics = function() {
	gOffsetLastBuy = 0;
	gStore.sendGetLastBuy();
};

var getNextLastBuyComics = function() {
	gStore.sendGetNextLastBuy();
};

var getTopComics = function() {
	gStore.sendGetTop();
};
/*************************************************************************************/

/************************************UTHORS*****************************************/
var sendGetAllAuthors = function() {
	AuthorsAjax.getInstance().getAllAuthors();
};

var sendGetAuthorsByToken = function() {
	AuthorsAjax.getInstance().getAuthorsByToken();
};
/*************************************************************************************/

/************************************EDITORS*****************************************/
var sendGetAllEditors = function() {
	EditorsAjax.getInstance().getAllEditors();
};

var sendGetEditorsByToken = function() {
	EditorsAjax.getInstance().getEditorsByToken();
};
/*************************************************************************************/

/************************************KEYWORDS*****************************************/
var sendGetAllKeywords = function() {
	KeywordsAjax.getInstance().getAllKeywords();
};

var sendGetKeywordsByToken = function() {
	KeywordsAjax.getInstance().getKeywordsByToken();
};
/*************************************************************************************/

var showLoginDialog = function() {
	closeSide();
	//$("#logDiv").show();
if(!gUser) {
var message = /*$('<p />', { text: "Connexion" }),*/
	/*inputLogin = $("#logEmail"),
	inputPassword = $("#logPassword"),*/
	formLogin = $("#formLogin")/*,
	ok = $('<button />', { 
		text: 'Ok',
		click: function() { logOkClicked(); }
	}),
	cancel = $('<button />', {
		text: 'Annuler',
		click: function() { hidePopUp(); }
	})*/;
	
	
$('<div />').qtip(
  {
		content : {
			text : /*message.add(inputLogin).add(inputPassword)*/message.add(formLogin)/*.add(ok).add(cancel)*/,
			title : "Connexion"
		},
		position : {
			my : 'center',
			at : 'center', // Center it...
			target : $(window)
		// ... in the window
		},
		show : {
			ready : true, // Show it straight away
			modal : {
				on : true, // Make it modal (darken the rest of the page)...
				blur : false
			// ... but don't close the tooltip when clicked
			}
		},
		hide : true, // We'll hide it maunally so disable hide events
		style : 'ui-tooltip-rounded ui-tooltip-dialogue',
		events : {
			hide: function(event, api) { 
				if(!gUser) {
					History.back();
				}
			},
			render: function(event, api) {
				$("#logPassword").val('');
				$("#logEmail").focus();
			}
		}
	});
}
	
};

var logOkClicked = function() {
	$("#logDiv .inputStateError").removeClass("inputStateError");
	var userMail = $("#logEmail").val();
	var userPassword = $("#logPassword").val();
	if (userMail!= "" && userPassword != "") {
		var auth = new Authentication();
		auth.connect(userMail, userPassword, callbackLogin);
	}
	else {
		if (userMail == "") {
			//$("#logEmail").addClass("inputStateError");
		}
		if (userPassword == "") {
			//$("#logPassword").addClass("inputStateError");
		}
	}
};

var disconnect = function() {
	Caddy.getInstance().flush();
	$(".cart span > span").remove();
	$(".cart span").append('<span style="margin-left: 2px;">('+Caddy.getInstance().productIds.length+')</span>');
	$("#nickname").text('');
	$("#logins").show();
	$("#profilConnected").hide();
	var auth = new Authentication();
	auth.disconnect();
	gUser = null;
	History.pushState({state:"Home"}, "Home", "http://www.avecomics.com/"+"");
};

var showUserConnected = function() {
	$("#nickname").text(gUser.nickname);
	$("#userPointsTop").text(gUser.points+" Points");
	$("#logins").hide();
	$("#profilConnected").show();
};

var setNavigationLayout = function(pSection) {
	$("#navigation2Actions").empty();
	$("#navigation2Actions").append(NavigationManager.getInstance().getNavigationLayout(pSection));
};

var setNavigationCallbacks = function(pSection) {
	var callbacks = NavigationManager.getInstance().getNavigationCallbacks(pSection);
	$("#navigation21").click(callbacks[0]);
	$("#navigation22").click(callbacks[1]);
	$("#navigation23").click(callbacks[2]);
};

var showOverlay = function() {
	$("body").append("<div class=\"opacityLayer\"></div>");
	$(".opacityLayer").css("top", "0");
	$(".opacityLayer").css("left", "0");
	$(".opacityLayer").css("width", $("body").width());
	$(".opacityLayer").css("height", $("body").height());
};

var hideOverlay = function() {
	$(".opacityLayer").remove();
};

var backToTop = function() {
	window.scrollTo(0,0);
};

var scrollToSideTop = function() {
	var top = $("#side").offset().top - $("#navigation").height();
	window.scrollTo(0,top);
};

var scrollToTop = function() {
	window.scrollTo(0,0);
};

var openSide = function() {
	if(!gSideToggle) {
		$("#side").animate({
				marginLeft: "-=540px"
			}, {duration: 1000, easing: "easeOutQuart", complete: function() { 
				$("#sideLeft").css('position', 'absolute');
				$("#sideLeft").css('top','0');
				$("#sideLeft").css('margin-top','0');
				//enableSideFollowPageTop(); 
				$("#sidePub").hide();
				setTheComicEvents();
			}
		});
		addLayerUnderSide();
		gComicDetailFollowEnabled = false;
		gSideTopPosition = $("#sideLeft").offset().top;
		gSideTopPositionOnOpen = $("#sideLeft").offset().top;
		gSideMarginTop = $("#sideLeft").css("margin-top");
		if(Utils.getInstance().getScrollPosY() > gSideLeftComicDetailTopPos) {
			scrollToSideTop();
			stopComicDetailFollowPageTop($("#sideLeft").offset().top - $("#navigation").height());
		}
		//$("#sideLeft").css('height', $("#side").height()+'px');
		gSideToggle = true;
		$("#toggleSlide img").attr("src", "http://www.avecomics.com/fr_fr/images/open.png");
		//destroyLionBars();
		$(".marginDetails").lionbars({
			destroy: true
		});
		$(".marginDetails").attr('style','');
	}
};

var closeSide = function(pCallback) {
	if(gSideToggle) {
		gSideToggle = false;
		gSideFollowEnabled = false;
		manageSidePosition();
		$("#side").animate({
				marginLeft: "+=540px"
			}, {duration: 1000, easing: "easeOutQuart", complete: function() { 
				//manageComicDetailTopPosition();
				gSideFollowEnabled = true;
				if(pCallback){
					pCallback();
				}	
				setSideHeight();
				calculateScrollDetails();
				//window.scrollTo(0,gSideTopPositionOnOpen);
			}}
		);
		/*if(parseInt(gSideTopPosition) ==  parseInt($("#side").offset().top)+10) {
			window.scrollTo(0,gSideTopPositionOnOpen);
		}*/
		$("#sideLeft").css("margin-top", "-457px");
		//$("#sideLeft").css('height',document.documentElement.clientHeight+"px");
		/*if(Utils.getInstance().getScrollPosY() < $("#header").offset().top + $("#header").height()) {
			$("#sideLeft").css('margin-top',"-"+$("#sideLeft").offset().top+"px");
		}
		/*if(Utils.getInstance().getScrollPosY() + $("#sidePub").height() > gSideLeftComicDetailTopPos) {
			stopComicDetailFollowPageTop(gSideTopPosition);
		}
		else {
			stopComicDetailFollowPageTop(gSideTopPosition);
		}*/
		stopComicDetailFollowPageTop(gSideTopPosition);
		$("#toggleSlide img").attr("src", "http://www.avecomics.com/fr_fr/images/close.png");
	}
};

var resizeWindowEvent = function() {
	var clientHeight = document.documentElement.clientHeight;
	if(!gSideToggle && gSideFollowEnabled) {
		//$("#sideLeft").css("height", clientHeight-20+"px");
	}
	else {
		//$("#sideLeft").css("height", "100%");
	}
	calculateScrollDetails();
};

var updateSearchLinks = function() {
	$(".searchLink").unbind();
	$(".searchLink").click(function() {
		$("#searchComic").val($(this).text());
		searchComicSubmitted();
		History.pushState({state:"Search"}, "Search", $(this).attr("href"));
	});
};

var updateAlsoLikeEvents = function() {
	$("#alsoLikeImgs img").click(function() {
		var id = $(this).attr('id');
		History.pushState({state:"Product"}, "Product", "http://www.avecomics.com/"+""+"bd/"+id+"/product.html");
	});
};

var updateOtherTitleEvents = function() {
	$("#otherTitleImgs img").click(function() {
		var id = $(this).attr('id');
		History.pushState({state:"Product"}, "Product", "http://www.avecomics.com/"+""+"bd/"+id+"/product.html");
	});
};

var initLangFilterEvents = function() {
	$('#langFilter, #langFilterTop').click(function(event) {
      var self = $(this);
      /*
       * Top-level menus will be placed below the menu item, all others
       * will be placed to the right of each other, top aligned.
       */
      position =  { my: 'botom middle', at: 'middle bottom' };
      var textContent = "";
      var clickFunction = null;
      if(self.attr('id') == 'langFilter') {
    	  textContent = "<img id=\"allLang\" class=\"imgLangFilter\" src=\"http://www.avecomics.com/fr_fr/images/All.jpg\" /><br /><img id=\"frenchLang\" class=\"imgLangFilter\" src=\"http://www.avecomics.com/fr_fr/images/flag.png\" /><br /><img id=\"spanishLang\" class=\"imgLangFilter\" src=\"http://www.avecomics.com/fr_fr/images/spanish.png\" /><br /><img id=\"englishLang\" class=\"imgLangFilter\" src=\"http://www.avecomics.com/fr_fr/images/english.png\" />"
    	  clickFunction = function(){
    		  changeStoreLanguage($(this));
    	  };
      }
      else {
    	  textContent = "<img id=\"frenchLang\" class=\"imgLangFilter\" src=\"http://www.avecomics.com/fr_fr/images/flag.png\" /><br /><img id=\"spanishLang\" class=\"imgLangFilter\" src=\"http://www.avecomics.com/fr_fr/images/spanish.png\" /><br /><img id=\"englishLang\" class=\"imgLangFilter\" src=\"http://www.avecomics.com/fr_fr/images/english.png\" />"
    	  clickFunction = function(){
    		  changeSiteLanguage($(this));
    	  };
      }
      // Create the tooltip
      self.qtip({
         overwrite: false, // Make sure we only render one tooltip
         content: {
            text:  textContent
         },
         position: $.extend(true, position, { 
            // We'll make sure the menus stay visible by shifting/flipping them back into the viewport
            viewport: $(window), adjust: { method: 'shift flip' }
         }),
         show: {
            event: event.type, // Make sure to sue the same event as above
            ready: true
         },
         hide: {
            delay: 100,
            fixed: true // Make sure we can interact with the qTip by setting it as fixed
         },
         style: {
            classes: 'ui-tooltip-tipsy', // Basic styles
            tip: false // We don't want a tip... it's a menu duh!
         },
         events: {
            toggle: function(event, api) {
               api.elements.target.toggleClass('active', event.type === 'tooltipshow');
            },
            render: function(event, api) {
	           $('.imgLangFilter').click(clickFunction);
	        }
         }
      });
	});
};

var changeStoreLanguage = function(element) {
	var id = element.attr('id');
	switch (id) {
	case "frenchLang":
		gLocaleString = "fr";
		gUseLang = true;
		$("#langFilterImg").attr('src', "http://www.avecomics.com/fr_fr/images/flag.png");
		break;

	case "spanishLang":
		gLocaleString = "es";
		gUseLang = true;
		$("#langFilterImg").attr('src', "http://www.avecomics.com/fr_fr/images/spanish.png");
		break;
		
	case "englishLang":
		gLocaleString = "en";
		gUseLang = true;
		$("#langFilterImg").attr('src', "http://www.avecomics.com/fr_fr/images/english.png");
		break;
		
	case "allLang":
		gUseLang = false;
		$("#langFilterImg").attr('src', "http://www.avecomics.com/fr_fr/images/All.jpg");
		break;
		
	default:
		break;
	}
	emptyCoversCols();
	gStore.flush();
	gOffsetSelection = 0;
	flushFiltersData();
	flushSearchInput();
	gStore.reloadCurrentPattern();
};

var changeSiteLanguage = function(element) {
	var id = element.attr('id');
	var siteLocale = "";
	switch (id) {
	case "frenchLang":
		siteLocale = "fr";
		break;

	case "spanishLang":
		siteLocale = "en";
		break;
		
	case "englishLang":
		siteLocale = "en";
		break;
	}
	if(id == "spanishLang") {
		window.location.href = "http://www.avecomics.com/es";
	}
	else {
		window.location.href = "http://www.avecomics.com/"+siteLocale+"/";
	}
};

var setTheComicEvents = function() {
	$("#previewButton, #buyButton, #offerButton, #divSumUpComicDetailSeeMore, .starRatingSolo, #setRating").unbind();
	$("#previewButton").click(function() {
		//openSide();
		History.pushState({state:"Detail"}, "Detail", ComicDetail.getInstance().getProductUrl());
	});
	
	$("#buyButton").click(function() {
		addCurrentComicToCaddy();
	});
	
	$("#offerButton").click(function() {
		addCurrentComicToCaddyForPresent();
	});
	
	$("#divSumUpComicDetailSeeMore").click(function() {
		showComicSumUp();
	});
	
	$(".starRatingSolo").mouseenter(function() {
		if(ComicsUtils.getInstance().isComicInUserAsset(ComicDetail.getInstance().currentComic.productId)) {
			var index = $(this).index()+1;
			setRatingEnter(index, $(this));
		}
	});
	
	$(".starRatingSolo").click(function() {
		if(ComicsUtils.getInstance().isComicInUserAsset(ComicDetail.getInstance().currentComic.productId)) {
			ComicDetail.getInstance().currentComic.rating = ratingCurrentValue;
		}
	});
	
	$("#setRating").mouseleave(function() {
		if(ComicsUtils.getInstance().isComicInUserAsset(ComicDetail.getInstance().currentComic.productId)) {
			setRatingComicDetail(ComicDetail.getInstance().currentComic.rating);
		}
	});
};

var destroyLionBars = function() {
	if($(".lb-content").length > 0) {
		var content = $(".lb-content").html();
		$("#theComic").empty();
		$("#theComic").append(content);
		setTheComicEvents();
	}
};

var initFacebookSDK = function() {
	window.fbAsyncInit = function() {
		FB.init({
	      appId      : gFacebookAppId, // App ID
	      channelUrl : gFacebookChannelUrl, // Channel File
	      status     : true, // check login status
	      cookie     : true, // enable cookies to allow the server to access the session
	      oauth      : true, // enable OAuth 2.0
	      xfbml      : true  // parse XFBML
	    });
		var auth = new Authentication();
		auth.checkCoockie(function() {
			showUserConnected();
			gStore.sendGetUserInfos();
		});
		getUrlAndPushState();
		FB.Event.subscribe('auth.login', facebookAuthResponse);
	  };
	  // Load the SDK Asynchronously
	  (function(d){
	     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
	     js = d.createElement('script'); js.id = id; js.async = true;
	     js.src = "//connect.facebook.net/en_US/all.js";
	     d.getElementsByTagName('head')[0].appendChild(js);
	   }(document));
};

var getFacebookLoginStatus = function() {
	if(FB == "undefined") {
		FB.getLoginStatus(function(response) {
			if (!response.authResponse) {
				disconnect();
			}
		});
	}
};

var facebookLogout = function() {
	if(FB) {
		FB.logout();
	}
};

var getFacebookUserInformations = function(pCallback) {
	if(FB) {
		FB.api('/me', function(response) {
	       var name = response.name;
	       var email = response.email;
	       pCallback(name, email);
	     });
	}
};

var facebookAuthResponse = function(response) {
	if (response.authResponse) {
		var fbUid = response.authResponse.userID;
		getFacebookUserInformations(function(name, email) {
			/*callbackLogin = function() {
				hidePopUp();
				libraryClicked();
				showUserConnected();
			};*/
			var auth = new Authentication();
			auth.facebookConnect(fbUid, name, email, callbackLogin);
		});
	} else {
		// no user session available, someone you dont know
	}
};

var showCouponError = function(pMessage) {
	Utils.getInstance().showQtipOnTarget(pMessage, $("#inputCaddyCoupons"));
};

var showComicSumUp = function() {
	var position = {
		my : 'bottom center',
		at : 'top center',
		target : $("#divSumUpComicDetail")	
	};
	var hideEvent = "mouseleave unfocus";
	Utils.getInstance().showQtipOnTarget(ComicDetail.getInstance().currentComic.sumUp, $("#divSumUpComicDetailSeeMore"), position, hideEvent);
};

var getFiltersValues = function() {
	if(NavigationManager.getInstance().currentSection == gSectionLibrary) {
		sendGetEditorsByToken();
		sendGetAuthorsByToken();
		sendGetKeywordsByToken();
	}
	else {
		sendGetAllAuthors();
		sendGetAllEditors();
		sendGetAllKeywords();
	}
};

var addLayerUnderSide = function() {
	$("body").append("<div id=\"layerUnderSide\"></div>");
	$("#layerUnderSide").css("top", $("#content").offset().top);
	$("#layerUnderSide").css("width", "100%");
	$("#layerUnderSide").css("height", $("#content").height());
	$("#layerUnderSide").click(function() {
		History.pushState({state:"Comic"}, "Comic", "http://www.avecomics.com/"+"");
		$(this).remove();
	});
};

var showSpinnerAlsoLike = function() {
	$("#alsoLikeImgs").append("<div class=\"alsoLikeSpinner\"><img src=\"http://www.avecomics.com/fr_fr/images/ajax-loader.gif\"/></div>")
};

var registerSubmited = function() {
	Register.getInstance().validateRegister();
};

var updateProfilSubmited = function() {
	Profil.getInstance().validateUpdateUserProfil();
};

var showAccountCreated = function() {
	var message = $('<p />', { text: "Un email de validation à été envoyé sur votre adresse mail contenant un lien de confirmation de votre inscription. Cette étape est nécessaire pour finaliser la création de votre compte." }),
		okButton = $('<button/>', { text: "Ok", click: function() { hidePopUp(); }, 'class': 'buttonOk right'}); 
	$('<div />').qtip(
	  {
			content : {
				text : message.add(okButton),
				title : "Inscription quasiment terminée"
			},
			position : {
				my : 'center',
				at : 'center', // Center it...
				target : $(window)
			},
			show : {
				ready : true,
				modal : {
					on : true,
					blur : false
				}
			},
			hide : true,
			style : 'ui-tooltip-rounded ui-tooltip-dialogue'
		});
};

var hideAccountCreatedDialog = function() {
	$(".qtip").qtip('hide');
	$('#qtip-overlay').hide();
};


var setCoverTips = function(elem) {
	var width = $(elem).width();
	var top = $(elem).offset().top;
	var left = $(elem).offset().left;
	var height = $(elem).height();
	var topPos = top + height - 60;
	var id = $(elem).attr('id');
	//style=\"position: absolute; left: "+left+"px; top: "+topPos+"px; width:"+width+"px;\"
	$(elem).parent().parent().css("height", height+"px");
	$(elem).parent().parent().append("<div id=\"coverTips_"+id+"\" class=\"coverTips\" style=\"width: "+width+"px;\"></div>");
	$("#coverTips_"+id).append(
		"<div class=\"btnsCoverTips\"><div id=\"previewButtonCoverTips\" class=\"previewButtonCoverTips buttonComicTips\">Aperçu</div>"+
		"<div id=\"buyButtonCoverTips\" class=\"previewButtonCoverTips buttonComicTips\">Acheter</div></div>"
	);
	
	/*$("#coverTips_"+id).mouseenter(function() {
		$("#coverTips_"+id).stop(true, true).show();
	});
	
	$("#coverTips_"+id).mouseleave(function() {
		//$("#coverTips_"+id).stop(true, true).fadeOut();
	});*/
};

var showCoverTips = function(id) {
	gTimeoutCoveTips = setTimeout(function() {
		$("#coverTips_"+id).stop(true, true).fadeIn();
	}, 200);
};

var hideCoverTips = function(id) {
	clearTimeout(gTimeoutCoveTips);
	$("#coverTips_"+id).stop(true, true).fadeOut();
};

var previewTipsClicked = function(elem) {
	var id = $($(elem).parent().parent().parent().find('img')[0]).attr('id');
	avePlayer_openScreenPlayer(gStore.getComicWithId(id));
};

var buyTipsClicked = function(elem) {
	var id = $($(elem).parent().parent().parent().find('img')[0]).attr('id');
	Caddy.getInstance().addToCaddy(gStore.getComicWithId(id).productId, null, true, $(elem));
};

var showNewsLetterPopup = function() {
	var popUp = new NewsLetterPopUp();
	popUp.show();
};

var hidePopUp = function() {
	$(".qtip").qtip('hide');
	$('#qtip-overlay').hide();
};

var subscribeNewsLetterOk = function() {
	if($("#newsLetterEmail").val() != "") {
		var email = $("#newsLetterEmail").val();
		var url = gNewsLetterUrl+"?subscribe="+email+"&app_store=0&app_lang=fr";
		var callback = function(pData) {
			if(pData == "OK") {
				$("#returnMessage").text("Votre inscription à la newsletter est enregistrée");
			}else {
				$("#returnMessage").text("Une erreur s'est produite, s'il vous plaît réessayer");
			}
		};
		Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
	}
};

var lostMyPassword = function(){
	if($("#logEmail").val() != "") {
		var auth = new Authentication();
		auth.sendLostPassword($("#logEmail").val());
	}
	else {
		var position = {
			my : 'top center',
			at : 'bottom center',
			target : $("#logEmail")	
		};
		var hideEvent = "focus";
		Utils.getInstance().showQtipOnTarget("Email requis", $("#logEmail")	, position, hideEvent);
	}
};

var showPasswordSent = function() {
	var message = $('<p />', { text: "Un nouveau mot de passe à été envoyé sur votre adresse mail." }),
		okButton = $('<button/>', { text: "Ok", click: function() { hidePopUp(); }, 'class': 'buttonOk right'}); 
	$('<div />').qtip(
	  {
			content : {
				text : message.add(okButton),
				title : "Mot de passe envoyé"
			},
			position : {
				my : 'center',
				at : 'center', // Center it...
				target : $(window)
			},
			show : {
				ready : true,
				modal : {
					on : true,
					blur : false
				}
			},
			hide : true,
			style : 'ui-tooltip-rounded ui-tooltip-dialogue'
		});
};

var showProfilUpdated = function() {
	var message = $('<p />', { text: "Votre profil a été mis à jour." }),
		okButton = $('<button/>', { text: "Ok", click: function() { hidePopUp(); }, 'class': 'buttonOk right'}); 
	$('<div />').qtip(
	  {
			content : {
				text : message.add(okButton),
				title : "Profil mis à jour"
			},
			position : {
				my : 'center',
				at : 'center', // Center it...
				target : $(window)
			},
			show : {
				ready : true,
				modal : {
					on : true,
					blur : false
				}
			},
			hide : true,
			style : 'ui-tooltip-rounded ui-tooltip-dialogue'
		});
};

var showDialogChangePwd = function() {
	var popUp = new PasswordChangePopUp();
	popUp.show();
};

var submitChangePassword = function() {
	var bValid = false;
	if($("#newPassword").val() != $("#newPasswordConfirm").val()) {
		var position = {
			my : 'top center',
			at : 'bottom center',
			target : $("#newPasswordConfirm")	
		};
		var hideEvent = "focus";
		Utils.getInstance().showQtipOnTarget("Le mot de passe de confirmation de concorde pas", $("#newPasswordConfirm"), position, hideEvent);
	}
	else {
		Profil.getInstance().sendChangePassword($("#oldPassword").val(), $("#newPassword").val(), $("#newPasswordConfirm").val());
	}
};

var showPasswordChange = function(pText) {
	hidePopUp();
	var message = $('<p />', { text: pText ? pText : "Votre mot de passe a été changé" }),
		okButton = $('<button/>', { text: "Ok", click: function() { hidePopUp(); }, 'class': 'buttonOk right'}); 
	$('<div />').qtip(
	  {
			content : {
				text : message.add(okButton),
				title : "Nouveau mot de passe"
			},
			position : {
				my : 'center',
				at : 'center', // Center it...
				target : $(window)
			},
			show : {
				ready : true,
				modal : {
					on : true,
					blur : false
				}
			},
			hide : true,
			style : 'ui-tooltip-rounded ui-tooltip-dialogue'
		});
};


var toggleFooter = function() {
	if($("#toggleFooter").hasClass("close")) {
		$("#toggleFooter").attr('src', 'http://www.avecomics.com/fr_fr/images/arrow-up.png');
		$(".width").css("height", "auto");
		$("#toggleFooter").removeClass("close").addClass("open");
	}
	else {
		$("#toggleFooter").attr('src', 'http://www.avecomics.com/fr_fr/images/arrow-down.png');
		$(".width").css("height", "0px");
		$("#toggleFooter").removeClass("open").addClass("close");
	}
};


var sendFacebookClicked = function() {
	FB.ui({
		method: 'send',
		name: 'Share Avecomics',
		link: 'http://www.avecomics.com',
	});
};

var checkBrowser = function() {
	var showBanner = false;
	if(BrowserDetect.browser == "Explorer") {
		gIsIE = true;
		if(BrowserDetect.version < 9) {
			$("#bannerBadBrowser").text("POUR UNE MEILLEUR EXPERIENCE VEUILLEZ METTRE A JOUR VOTRE NAVIGATEUR EN VERSION 9");
			showBanner = true;
		}
	}
	if(BrowserDetect.browser == "Mozilla") {
		if(BrowserDetect.version < 4) {
			$("#bannerBadBrowser").text("POUR UNE MEILLEUR EXPERIENCE VEUILLEZ METTRE A JOUR VOTRE NAVIGATEUR EN VERSION 4");
			showBanner = true;
		}
	}
	if(BrowserDetect.browser == "Safari") {
		gIsSafari = true;
		if(BrowserDetect.version < 5) {
			$("#bannerBadBrowser").text("POUR UNE MEILLEUR EXPERIENCE VEUILLEZ METTRE A JOUR VOTRE NAVIGATEUR EN VERSION 5.1");
			showBanner = true;
		}
	}
	if(BrowserDetect.browser == "Chrome") {
		if(BrowserDetect.version < 15) {
			$("#bannerBadBrowser").text("POUR UNE MEILLEUR EXPERIENCE VEUILLEZ METTRE A JOUR VOTRE NAVIGATEUR EN VERSION 15");
			showBanner = true;
		}
	}
	if(showBanner) {
		$("#bannerBadBrowser").show();
	}
	else {
		$("#bannerBadBrowser").hide();
	}
};

var showUploadAvatar = function() {
	var popUp = new UploadAvatarPoPup();
	popUp.show();
};

var initUploadAvatar = function() {
	var url = gFriendUrl+gUploadAvatarUrl+gUser.token;
	var timeStamp = new Date().getTime();
	var name = gUser.username+timeStamp;
	$("#formUploadAvatarProfil").attr('action', url);
	$("#uploadAvatarProfilName").val(name);
	$("#formUploadAvatarProfil").submit(function() {
		$("#loadingUploadAvatar").show();
		$("#uploadAvatarProfiltarget").load(function() {
			if($(this).contents().find("body").html() == "OK done") {
				var auth = new Authentication();
				auth.sendGetUserInfos(gUser.token, function() {
					$("#avatarProfil").attr('src', gAvatarUrl+gUser.avatar);				
					$("#loadingUploadAvatar").hide();
					hidePopUp();
				});
			}
			else {
				$("#loadingUploadAvatar").hide();
				$("#returnMessage").text('Mauvaise taille ou type de fichier');
			}
		});
	});
};

var calculateScrollDetails = function() {
	$(".marginDetails").lionbars({destroy: true});
	$(".marginDetails").attr('style','');
	var visibleHeight = document.documentElement.clientHeight;
	var height = $("#navigation").height()+$(".comicDetailSideSepBar").height()+$("#divCoverComicDetail").height()+$(".marginDetails").height();
	var height2 = $("#navigation").height()+$(".comicDetailSideSepBar").height()+$("#divCoverComicDetail").height();
	if(height > visibleHeight) {
		$(".marginDetails").css("height", (visibleHeight - height2 - 15)+"px");
		if($(".marginDetails").find(".lb-wrap").length == 0 && !gSideToggle) {
			$(".marginDetails").lionbars();
		}
	}
	setTheComicEvents();
};
/** @class */
var Authentication = function() {
	this.callbackConnect = null;
};

Authentication.prototype.connect = function(pUser, pPassword, pCallback) {
	var self = this;
	this.callbackConnect = pCallback;
	var md5Pass = MD5(pPassword);
	var login = pUser.substr(0, pUser.indexOf("@")) + "*-at*" + pUser.substr(pUser.indexOf("@") + 1, pUser.length);
	var url = gFriendUrl;
	var pattern = "connect";
	if(gLoginForRegister) {
		pattern = "register";
	}
	var data = {
		pattern: pattern,
		username: login,
		password: md5Pass
	};
	var callback = function(pData) {
		if(pData.getElementsByTagName('error').length > 0) {
			alert(pData.getElementsByTagName('error')[0].childNodes[0].nodeValue);
		}
		else {
			self.setUserInfos(pData);	
			self.sendGetUserInfos(Xml.getInstance().evaluateXPath(pData, "/response/result/row/session_id/text()")[0].nodeValue);		
		}
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, false);
};

Authentication.prototype.facebookConnect = function(fbUid, fbName, fbEmail, pCallback) {
	var self = this;
	this.callbackConnect = pCallback;
	var email = fbEmail.substr(0, fbEmail.indexOf("@")) + "*-at*" + fbEmail.substr(fbEmail.indexOf("@") + 1, fbEmail.length);
	var url = gFriendUrl;//+"?pattern=facebookConnect&fbUID="+fbUid+"&fbNAME="+fbName+"&fbMAIL="+email;
	var data = {
		pattern: "facebookConnect",
		fbUID: fbUid,
		fbNAME: fbName,
		fbMAIL: email
	};
	var callback = function(pData) {
		if(pData.getElementsByTagName('error').length > 0) {
			alert(pData.getElementsByTagName('error')[0].childNodes[0].nodeValue);
		}
		else {
			self.setUserInfos(pData);			
		}
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, false);
};

Authentication.prototype.disconnect = function() {
	$.cookie("avecomics", "", { expires: -10000, path: '/' });
	if(gUser.type == "FACEBOOK"){
		facebookLogout();
	}
};

Authentication.prototype.sendGetUserInfos = function(pToken, pCallback) {
	var self = this;
	var url = gFriendUrl+gUserInfosUrl+pToken;
	var callback = function(pData) {
		var text = Xml.getInstance().evaluateBigNode(pData, 'get_info_user');
		self.setUserInfos2(xml2Json(new DOMParser().parseFromString( text ,"text/xml" )));
		if(pCallback) {
			pCallback();
		}	
	};
	Ajax.getInstance().sendAjax("POST", url, null, true, callback, false, false);
};

Authentication.prototype.setUserInfos2 = function(pJsonObject) {
	gUser.avatar = pJsonObject["user"]["@attributes"]["avatar"];
	gUser.nickname = pJsonObject["user"]["@attributes"]["nickname"];
	gUser.acceptSpam = pJsonObject["user"]["@attributes"]["newsletter"];
	gUser.birth = pJsonObject["user"]["@attributes"]["birth_day"];
	if(gUser.birth) {
		gUser.birth = gUser.birth.split(" ")[0];
	}
	gUser.firstName = pJsonObject["user"]["@attributes"]["first_name"];
	gUser.lastName = pJsonObject["user"]["@attributes"]["last_name"];
	gUser.deviceName = pJsonObject["user"]["@attributes"]["device_name"];
	gUser.countryCode = pJsonObject["user"]["@attributes"]["country_code"];
	gUser.points = pJsonObject["user"]["@attributes"]["nb_credits"];
	gUser.phone = pJsonObject["user"]["@attributes"]["phone"];
	gUser.street = pJsonObject["user"]["@attributes"]["street"];
	gUser.zip = pJsonObject["user"]["@attributes"]["zip"];
	gUser.city = pJsonObject["user"]["@attributes"]["city"];
	
	var cookieExpiration = "";
	if($('input:checkbox[name=rememberMeCheck]').is(":checked")) {
		cookieExpiration = 30;
	}
	if(gUser.type != "FACEBOOK"){	
		$.cookie("avecomics", $.JSON.encode(gUser), { expires: cookieExpiration, path: '/' });
	}
};

Authentication.prototype.setUserInfos = function(pXmlData) {
	gUser = new User();
	gUser.type = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/user_type/text()")[0].nodeValue;
	gUser.username = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/username/text()")[0].nodeValue;
	gUser.token = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/session_id/text()")[0].nodeValue;
	gUser.id = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/id/text()")[0].nodeValue;
	if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/nickname/text()").length > 0) {
		gUser.nickname = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/nickname/text()")[0].nodeValue;
	}
	if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/email/text()").length > 0) {
		gUser.email = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/email/text()")[0].nodeValue;
	}
	if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/accept_spam/text()").length > 0) {
		gUser.acceptSpam = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/accept_spam/text()")[0].nodeValue;
	}
	if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/birth_day/text()").length > 0) {
		gUser.birth = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/birth_day/text()")[0].nodeValue;
		gUser.birth = gUser.birth.split(" ")[0];
	}
	if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/first_name/text()").length > 0) {
		gUser.firstName = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/first_name/text()")[0].nodeValue;
	}
	if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/last_name/text()").length > 0) {
		gUser.lastName = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/last_name/text()")[0].nodeValue;
	}
	if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/device_name/text()").length > 0) {
		gUser.deviceName = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/device_name/text()")[0].nodeValue;
	}
	if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/country_code/text()").length > 0) {
		gUser.countryCode = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/country_code/text()")[0].nodeValue;
	}
	if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/gender/text()").length > 0) {
		gUser.gender = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/gender/text()")[0].nodeValue;
	}
	if(gUser.type != "FACEBOOK"){
		if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/country_code/text()").length > 0) {
			gUser.countryCode = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/country_code/text()")[0].nodeValue;
		}
	}
	if(Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/nb_credits/text()").length > 0) {
		gUser.points = Xml.getInstance().evaluateXPath(pXmlData, "/response/result/row/nb_credits/text()")[0].nodeValue;
	}
	
	this.callbackConnect();
};

Authentication.prototype.checkCoockie = function(pCallback) {
	var cookie = $.cookie("avecomics");
	this.callbackConnect = pCallback;
	if (cookie) {
		gUser = $.JSON.decode(cookie);
		this.callbackConnect();
		if(gUser.type == "FACEBOOK"){
			getFacebookLoginStatus();
		}
	}
	return cookie ? true : false;
};

Authentication.prototype.sendLostPassword = function(pEmail) {
	if(pEmail) {
		var url = gLostMyPasswordUrl;
		var data = {
			app_store: 0,
			app_lang: "fr",
			email: pEmail
		};
		var callback = function(pData) {
			showPasswordSent();
		};
		Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, false);
	}
};

/** @class */
var ComicsUtilsJSON = function() {
    if (ComicsUtilsJSON.caller != ComicsUtilsJSON.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

ComicsUtilsJSON.instance = null;

ComicsUtilsJSON.getInstance = function() {
    if (this.instance == null) {
        this.instance = new ComicsUtilsJSON();
    }
    return this.instance;
};

ComicsUtilsJSON.prototype.getTitlesFromJsonObject = function(pJsonObject) {
	var ret = new Array();
	if(pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			ret.push(pJsonObject.p_l.cs.c[i]["@attributes"].t);
		}
	}
	else {
		ret.push(pJsonObject.p_l.cs.c["@attributes"].t);
	}
	
	return ret;
};

ComicsUtilsJSON.prototype.getCoverIdWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var cTemp = pJsonObject.p_l.cs.c[i];
			if (cTemp["@attributes"].i == pId) {
				value = cTemp["@attributes"].c;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].c;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getCoverWidthWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var cTemp = pJsonObject.p_l.cs.c[i];
			if (cTemp["@attributes"].i == pId) {
				value = cTemp["@attributes"].w;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].w;
	}
	return value;
};

ComicsUtilsJSON.prototype.getCoverHeightWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var cTemp = pJsonObject.p_l.cs.c[i];
			if (cTemp["@attributes"].i == pId) {
				value = cTemp["@attributes"].h;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].h;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getEditorWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var cTemp = pJsonObject.p_l.cs.c[i];
			if (cTemp["@attributes"].i == pId) {
				value = cTemp["@attributes"].e;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].e;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getCollectionWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var cTemp = pJsonObject.p_l.cs.c[i];
			if (cTemp["@attributes"].i == pId) {
				value = cTemp["@attributes"].cl;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].cl;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getComicsForCollectionIdFromJsonObject = function(pJsonObject, pIdCollection) {
	var value = new Array();
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var cTemp = pJsonObject.p_l.cs.c[i];
			if (cTemp["@attributes"].cl == pIdCollection) {
				value.push(cTemp);
			}
		}
	} else {
		value.push(pJsonObject.p_l.cs.c);
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getLanguageWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
		var cTemp = pJsonObject.p_l.cs.c[i];
		if (cTemp["@attributes"].i == pId) {
			value = cTemp["@attributes"].l;
		}
	}
	return value;
};

ComicsUtilsJSON.prototype.getNombrePagesWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var cTemp = pJsonObject.p_l.cs.c[i];
			if (cTemp["@attributes"].i == pId) {
				value = cTemp["@attributes"].np;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].np;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getPriceWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.ps.p.length) {
		for ( var i = 0; i < pJsonObject.p_l.ps.p.length; i++) {
			var pTemp = pJsonObject.p_l.ps.p[i];
			if (pTemp["@attributes"].o == pId) {
				value = {
						"euros": pTemp["@attributes"].e,
						"dollars": pTemp["@attributes"].u,
						"pounds":  pTemp["@attributes"].g,
						"points":pTemp["@attributes"].pt
				};
			}
		}
	} else {
		value = {
				"euros":  pJsonObject.p_l.ps.p["@attributes"].e,
				"dollars":  pJsonObject.p_l.ps.p["@attributes"].u,
				"pounds":  pJsonObject.p_l.ps.p["@attributes"].g,
				"points":pJsonObject.p_l.ps.p["@attributes"].pt
		};
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getAveIdWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.avs.a.length) {
		for ( var i = 0; i < pJsonObject.p_l.avs.a.length; i++) {
			var pTemp = pJsonObject.p_l.avs.a[i];
			if (pTemp["@attributes"].c == pId) {
				value = pTemp["@attributes"].i;
			}
		}
	} else {
		value = pJsonObject.p_l.avs.a["@attributes"].i;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getPreviewIdWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.avs.a.length) {
		for ( var i = 0; i < pJsonObject.p_l.avs.a.length; i++) {
			var pTemp = pJsonObject.p_l.avs.a[i];
			if (pTemp["@attributes"].c == pId) {
				value = pTemp["@attributes"].pw;
			}
		}
	} else {
		value = pJsonObject.p_l.avs.a["@attributes"].pw;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getScreenVersionWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.avs.a.length) {
		for ( var i = 0; i < pJsonObject.p_l.avs.a.length; i++) {
			var pTemp = pJsonObject.p_l.avs.a[i];
			if (pTemp["@attributes"].c == pId) {
				value = pTemp["@attributes"].vw;
			}
		}
	} else {
		value = pJsonObject.p_l.avs.a["@attributes"].vw;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getBeginDateWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.ps.p.length) {
		for ( var i = 0; i < pJsonObject.p_l.ps.p.length; i++) {
			var pTemp = pJsonObject.p_l.ps.p[i];
			if (pTemp["@attributes"].o == pId) {
				value = pTemp["@attributes"].bd;
			}
		}
	} else {
		value = pJsonObject.p_l.ps.p["@attributes"].bd;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getPublishedWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.ps.p.length) {
		for ( var i = 0; i < pJsonObject.p_l.ps.p.length; i++) {
			var pTemp = pJsonObject.p_l.ps.p[i];
			if (pTemp["@attributes"].o == pId) {
				value = pTemp["@attributes"].p;
			}
		}
	} else {
		value = pJsonObject.p_l.ps.p["@attributes"].p;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getPublicationDateWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var pTemp = pJsonObject.p_l.cs.c[i];
			if (pTemp["@attributes"].i == pId) {
				value = pTemp["@attributes"].pd;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].pd;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getInAppIdWithIdFromJsonObject = function(pJsonObject, productId) {
	var value = "";
	if (pJsonObject.p_l.ss.s.length) {
		for ( var i = 0; i < pJsonObject.p_l.ss.s.length; i++) {
			var pTemp = pJsonObject.p_l.ss.s[i];
			if (pTemp["@attributes"].p == productId) {
				value = pTemp["@attributes"].s;
			}
		}
	} else {
		value = pJsonObject.p_l.ss.s["@attributes"].s;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getSumUpWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var pTemp = pJsonObject.p_l.cs.c[i];
			if (pTemp["@attributes"].i == pId) {
				value = pTemp["@attributes"].s;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].s;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getRatingWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";	
	if (pJsonObject.p_l.ocs.oc.length) {
		for ( var i = 0; i < pJsonObject.p_l.ocs.oc.length; i++) {
			var pTemp = pJsonObject.p_l.ocs.oc[i];
			if (pTemp["@attributes"].c == pId) {
				value = pTemp["@attributes"].r;
			}
		}
	} else {
		value = pJsonObject.p_l.ocs.oc["@attributes"].r;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getKeywordsWithIdFromJsonObject = function(pJsonObject, pId) {
	var ret = new Array();
	var value = "";
	try{
		if (pJsonObject.p_l.kcs.kc.length) {
			for ( var i = 0; i < pJsonObject.p_l.kcs.kc.length; i++) {
				var pTemp = pJsonObject.p_l.kcs.kc[i];
				if (pTemp["@attributes"].c == pId) {
					value = pTemp["@attributes"].k;
				}
			}
		} else {
			value = pJsonObject.p_l.kcs.kc["@attributes"].k;
		}
		if(value != "") {
			var tabKeys = value.split(";");
			for(var i=0;i<tabKeys.length;i++) {
				ret.push(tabKeys[i]);
			}
		}
	}
	catch(e) {
		return ret;
	}
	return ret;
};

ComicsUtilsJSON.prototype.getAuthorsWithIdFromJsonObject = function(pJsonObject, pId) {
	var ret = new Array();
	var value = "";
	var value2 = "";
	var value3 = "";
	if (pJsonObject.p_l.acs.ac.length) {
		for ( var i = 0; i < pJsonObject.p_l.acs.ac.length; i++) {
			var pTemp = pJsonObject.p_l.acs.ac[i];
			if (pTemp["@attributes"].c == pId) {
				value = pTemp["@attributes"].ad;
				value2 = pTemp["@attributes"].as;
				value3 = pTemp["@attributes"].ac;
			}
		}
	} else {
		value = pJsonObject.p_l.acs.ac["@attributes"].ad;
		value2 = pJsonObject.p_l.acs.ac["@attributes"].as;
		value3 = pJsonObject.p_l.acs.ac["@attributes"].ac;
	}

	if(value) {
		var tabKeys = value.split(";");
		for(var i=0;i<tabKeys.length;i++) {
			if(!Utils.getInstance().inArray(ret, tabKeys[i]))
				ret.push(tabKeys[i]);
		}
	}
	if(value2) {
		tabKeys = value2.split(";");
		for(var i=0;i<tabKeys.length;i++) {
			if(!Utils.getInstance().inArray(ret, tabKeys[i]))
				ret.push(tabKeys[i]);
		}
	}
	if(value3) {
		tabKeys = value3.split(";");
		for(var i=0;i<tabKeys.length;i++) {
			if(!Utils.getInstance().inArray(ret, tabKeys[i]))
				ret.push(tabKeys[i]);
		}
	}
	return ret;
};

ComicsUtilsJSON.prototype.getTitleWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";	
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var pTemp = pJsonObject.p_l.cs.c[i];
			if (pTemp["@attributes"].i == pId) {
				value = pTemp["@attributes"].t;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].t;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getProductIdWithIdFromJsonObject = function(pJsonObject, pId) {
	var value = "";	
	if (pJsonObject.p_l.ps.p.length) {
		for ( var i = 0; i < pJsonObject.p_l.ps.p.length; i++) {
			var pTemp = pJsonObject.p_l.ps.p[i];
			if (pTemp["@attributes"].o == pId) {
				value = pTemp["@attributes"].i;
			}
		}
	} else {
		value = pJsonObject.p_l.ps.p["@attributes"].i;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getIdsWithProductIdsFromJsonObject = function(pJsonObject, pProductIds) {
	var ids = new Array();
	if(pProductIds.length > 0) {		
		for ( var indexP = 0; indexP < pProductIds.length; indexP++) {
			var id = "";
			if (pJsonObject.p_l.ps.p.length) {
				for ( var i = 0; i < pJsonObject.p_l.ps.p.length; i++) {
					var pTemp = pJsonObject.p_l.ps.p[i];
					if (pTemp["@attributes"].i == pProductIds[indexP]) {
						id = pTemp["@attributes"].o;
					}
				}
			} else {
				id = pJsonObject.p_l.ps.p["@attributes"].o;
			}
			if(id != "") {
				ids.push(parseInt(id));
			}
		}
	}
	else {
		var res = new Array();
		if (pJsonObject.p_l.ps.p.length) {
			for ( var i = 0; i < pJsonObject.p_l.ps.p.length; i++) {
				var pTemp = pJsonObject.p_l.ps.p[i];
				res.push(pTemp["@attributes"].i);
			}
		} else {
			res.push(pJsonObject.p_l.ps.p["@attributes"].i);
		}
		var pIds = new Array();
		for (var i in res)
			pIds.push(res[i]);
		ids = this.getIdsWithProductIdsFromJsonObject(pJsonObject, pIds);
	}
	return ids;
};

ComicsUtilsJSON.prototype.getAuthorsFromProducts = function(pJsonObject) {
	var ret = new Array();
	var ids = new Array();
	if(pJsonObject.p_l.as) {
		if (pJsonObject.p_l.as.a.length) {
			for ( var i = 0; i < pJsonObject.p_l.as.a.length; i++) {
				var pTemp = pJsonObject.p_l.as.a[i];
				ids.push(pTemp["@attributes"].i);

			}
		} else {
			ids.push(pJsonObject.p_l.as.a["@attributes"].i);
		}
		
		var names = new Array();
		if (pJsonObject.p_l.as.a.length) {
			for ( var i = 0; i < pJsonObject.p_l.as.a.length; i++) {
				var pTemp = pJsonObject.p_l.as.a[i];
				names.push(pTemp["@attributes"].n);
		
			}
		} else {
			names.push(pJsonObject.p_l.as.a["@attributes"].n);
		}
		if(ids.length > 0 && names.length > 0) {
			for (var i in ids) {
				var tmp = {
					id: ids[i] ? ids[i] : "",
					name: names[i] ? names[i] : ""
				};
				ret.push(tmp);
			}
		}
	}
	return ret;
};

ComicsUtilsJSON.prototype.getEditorsFromProducts = function(pJsonObject) {
	var ret = new Array();
	var ids = new Array();
	if(pJsonObject.p_l.es) {
		if (pJsonObject.p_l.es.e.length) {
			for ( var i = 0; i < pJsonObject.p_l.es.e.length; i++) {
				var pTemp = pJsonObject.p_l.es.e[i];
				ids.push(pTemp["@attributes"].i);
		
			}
		} else {
			ids.push(pJsonObject.p_l.es.e["@attributes"].i);
		}
		
		var names = new Array();
		if (pJsonObject.p_l.es.e.length) {
			for ( var i = 0; i < pJsonObject.p_l.es.e.length; i++) {
				var pTemp = pJsonObject.p_l.es.e[i];
				names.push(pTemp["@attributes"].n);
		
			}
		} else {
			names.push(pJsonObject.p_l.es.e["@attributes"].n);
		}
		
		if(ids.length > 0 && names.length > 0) {
			for (var i in ids) {
				var tmp = {
					id: ids[i] ? ids[i] : "",
					name: names[i] ? names[i] : ""
				};
				ret.push(tmp);
			}
		}
	}
	return ret;
};

ComicsUtilsJSON.prototype.getKeywordsFromProducts =  function(pJsonObject) {
	var ret = new Array();
	var ids = new Array();
	if(pJsonObject.p_l.ks) {
		if (pJsonObject.p_l.ks.k.length) {
			for ( var i = 0; i < pJsonObject.p_l.ks.k.length; i++) {
				var pTemp = pJsonObject.p_l.ks.k[i];
				ids.push(pTemp["@attributes"].i);
			}
		} else {
			ids.push(pJsonObject.p_l.ks.k["@attributes"].i);
		}
		
		var words = new Array();
		if (pJsonObject.p_l.ks.k.length) {
			for ( var i = 0; i < pJsonObject.p_l.ks.k.length; i++) {
				var pTemp = pJsonObject.p_l.ks.k[i];
				words.push(pTemp["@attributes"].w);
			}
		} else {
			words.push(pJsonObject.p_l.ks.k["@attributes"].w);
		}
		
		var languages = new Array();
		if (pJsonObject.p_l.ks.k.length) {
			for ( var i = 0; i < pJsonObject.p_l.ks.k.length; i++) {
				var pTemp = pJsonObject.p_l.ks.k[i];
				languages.push(pTemp["@attributes"].l);
			}
		} else {
			languages.push(pJsonObject.p_l.ks.k["@attributes"].l);
		}
		
		if(ids.length > 0 && words.length > 0 && languages.length > 0) {
			for (var i in ids) {
				var tmp = {
					id: ids[i] ? ids[i] : "",
					word: words[i] ? words[i] : "",
					language: languages[i] ? languages[i] : ""
				};
				ret.push(tmp);
			}
		}
	}
	return ret;
};

ComicsUtilsJSON.prototype.getCollectionsFromProducts =  function(pJsonObject) {
	var ret = new Array();
	var ids = new Array();
	if(pJsonObject.p_l.cls.cl) {
		if (pJsonObject.p_l.cls.cl.length) {
			for ( var i = 0; i < pJsonObject.p_l.cls.cl.length; i++) {
				var pTemp = pJsonObject.p_l.cls.cl[i];
				ids.push(pTemp["@attributes"].i);
			}
		} else {
			ids.push(pJsonObject.p_l.cls.cl["@attributes"].i);
		}
		
		var names = new Array();
		if (pJsonObject.p_l.cls.cl.length) {
			for ( var i = 0; i < pJsonObject.p_l.cls.cl.length; i++) {
				var pTemp = pJsonObject.p_l.cls.cl[i];
				names.push(pTemp["@attributes"].n);
			}
		} else {
			names.push(pJsonObject.p_l.cls.cl["@attributes"].n);
		}
		
		var coverIds = new Array();
		if (pJsonObject.p_l.cls.cl.length) {
			for ( var i = 0; i < pJsonObject.p_l.cls.cl.length; i++) {
				var pTemp = pJsonObject.p_l.cls.cl[i];
				coverIds.push(pTemp["@attributes"].c);
			}
		} else {
			coverIds.push(pJsonObject.p_l.cls.cl["@attributes"].c);
		}
		
		var coverWidths = new Array();
		if (pJsonObject.p_l.cls.cl.length) {
			for ( var i = 0; i < pJsonObject.p_l.cls.cl.length; i++) {
				var pTemp = pJsonObject.p_l.cls.cl[i];
				coverWidths.push(pTemp["@attributes"].w);
			}
		} else {
			coverWidths.push(pJsonObject.p_l.cls.cl["@attributes"].w);
		}
		
		var coverHeights = new Array();
		if (pJsonObject.p_l.cls.cl.length) {
			for ( var i = 0; i < pJsonObject.p_l.cls.cl.length; i++) {
				var pTemp = pJsonObject.p_l.cls.cl[i];
				coverHeights.push(pTemp["@attributes"].h);
			}
		} else {
			coverHeights.push(pJsonObject.p_l.cls.cl["@attributes"].h);
		}
		
		if(ids.length > 0 && coverIds.length > 0 && coverWidths.length > 0 && coverHeights.length > 0) {
			for (var i in ids) {
				var tmp = {
					id: ids[i] ? ids[i] : "",
	  				name: names[i] ? names[i] : "",
	  				coverId: coverIds[i] ? coverIds[i] : "",
	  				coverWidth: coverWidths[i] ? coverWidths[i] : "",
	  				coverHeight: coverHeights[i] ? coverHeights[i] : ""
				};
				ret.push(tmp);
			}
		}
	}
	return ret;
};

ComicsUtilsJSON.prototype.getLanguagesFromProducts = function(pJsonObject) {
	var ret = new Array();
	var ids = new Array();
	if(pJsonObject.p_l.ls) {
		if (pJsonObject.p_l.ls.l.length) {
			for ( var i = 0; i < pJsonObject.p_l.ls.l.length; i++) {
				var pTemp = pJsonObject.p_l.ls.l[i];
				ids.push(pTemp["@attributes"].i);
			}
		} else {
			ids.push(pJsonObject.p_l.ls.l["@attributes"].i);
		}
			
		
		var names = new Array();
		if (pJsonObject.p_l.ls.l.length) {
			for ( var i = 0; i < pJsonObject.p_l.ls.l.length; i++) {
				var pTemp = pJsonObject.p_l.ls.l[i];
				names.push(pTemp["@attributes"].n);
			}
		} else {
			names.push(pJsonObject.p_l.ls.l["@attributes"].n);
		}
		
		var codes = new Array();
		if (pJsonObject.p_l.ls.l.length) {
			for ( var i = 0; i < pJsonObject.p_l.ls.l.length; i++) {
				var pTemp = pJsonObject.p_l.ls.l[i];
				codes.push(pTemp["@attributes"].c);
			}
		} else {
			codes.push(pJsonObject.p_l.ls.l["@attributes"].c);
		}
		
		if(ids.length > 0 && names.length > 0 && codes.length > 0) {
			for (var i in ids) {
				var tmp = {
					id: ids[i] ? ids[i] : "",
	  				name: names[i] ? names[i] : "",
	  				code: codes[i] ? codes[i] : ""
				};
				ret.push(tmp);
			}
		}
	}
	return ret;
};

ComicsUtilsJSON.prototype.getPreviewPagesIdsFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var pTemp = pJsonObject.p_l.cs.c[i];
			if (pTemp["@attributes"].i == pId) {
				value = pTemp["@attributes"].p;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].p;
	}
	
	return value;
};


ComicsUtilsJSON.prototype.getDominantColorFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var pTemp = pJsonObject.p_l.cs.c[i];
			if (pTemp["@attributes"].i == pId) {
				value = pTemp["@attributes"].p;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].p;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getCollectionPositionFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var pTemp = pJsonObject.p_l.cs.c[i];
			if (pTemp["@attributes"].i == pId) {
				value = pTemp["@attributes"].clt;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].clt;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.getComicTrackFromJsonObject = function(pJsonObject, pId) {
	var value = "";
	if (pJsonObject.p_l.cs.c.length) {
		for ( var i = 0; i < pJsonObject.p_l.cs.c.length; i++) {
			var pTemp = pJsonObject.p_l.cs.c[i];
			if (pTemp["@attributes"].i == pId) {
				value = pTemp["@attributes"].ct;
			}
		}
	} else {
		value = pJsonObject.p_l.cs.c["@attributes"].ct;
	}
	
	return value;
};

ComicsUtilsJSON.prototype.returnComicsByPublishDate = function(pComics) {
	pComics.sort(function(x, y) {
		var a = String(x.publicationDate).toUpperCase();
		var b = String(y.publicationDate).toUpperCase();
		if(a < b)
			return 1;
		if(a > b)
			return -1;
		return 0;
	});
	return pComics;
};


ComicsUtilsJSON.prototype.getIdsFromComicsJsonObject = function(pComicsJson) {
	var value = new Array();
	for ( var i = 0; i < pComicsJson.length; i++) {
		value.push(pComicsJson[i]["@attributes"].i);
	}
	return value;
};

ComicsUtilsJSON.prototype.getComicsFromJsonObject = function(pJsonObject, pComicsIds) {
	var self = this;
	var comicsToShow = new Array();
	$(pComicsIds).each(function(indexC) {
		var comic = new Comic();
		comic.title = self.getTitleWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.productId = self.getProductIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.coverId = self.getCoverIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.coverWidth = self.getCoverWidthWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.coverHeight = self.getCoverHeightWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.keywords = self.getKeywordsWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.authors = self.getAuthorsWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.editor = self.getEditorWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.collection = self.getCollectionWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.language = self.getLanguageWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.nombreDePages = self.getNombrePagesWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.rating = self.getRatingWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.price = self.getPriceWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.aveId = self.getAveIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.previewId = self.getPreviewIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.screenVersion = self.getScreenVersionWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.beginDate = self.getBeginDateWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.published = self.getPublishedWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.publicationDate = self.getPublicationDateWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.collectionPosition = self.getCollectionPositionFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.comicTrack = self.getComicTrackFromJsonObject(pJsonObject, pComicsIds[indexC]);
		//comic.inAppId = self.getInAppIdWithIdFromJsonObject(pJsonObject, comic.productId);
		comic.sumUp = self.getSumUpWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.previewPages = self.getPreviewPagesIdsFromJsonObject(pJsonObject, pComicsIds[indexC]);
		
		comic.id = pComicsIds[indexC];
		//comic.coverUrl = gFriendCoverComicsUrl+pComicsIds[indexC]+"_"+gCoverResolutionString+".jpg";
		//comic.coverUrl = gFriendCoverComicsUrl+pComicsIds[indexC]+"/"+Utils.getInstance().getTitleFromComicForUrl(comic)+".jpg";
		comic.coverUrl = Utils.getInstance().getCoverUrl(comic.id, pResolution);  
			//gTomodachiCoverUrl+"?id="+comic.id+"&width="+pResolution;//"&quality="+gCoverQuality;
		comicsToShow.push(comic);
	});
	return comicsToShow;
};
/** @class */
var ComicPopUp = function() {
    if (ComicPopUp.caller != ComicPopUp.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }

	this.currentComic = null;
};

ComicPopUp.instance = null;

ComicPopUp.getInstance = function() {
    if (this.instance == null) {
        this.instance = new ComicPopUp();
    }
    return this.instance;
};

ComicPopUp.prototype.setComic = function(pComic) {
	this.currentComic = pComic;
};

ComicPopUp.prototype.show = function(pComic) {
	$("#comicPopUp").show();
};

ComicPopUp.prototype.close = function(pComic) {
	$("#comicPopUp").hide();
};

ComicPopUp.prototype.generateHtml = function(pComic) {
	$("#comicPopUp").remove();
	var html = "<div id=\"comicPopUp\" class=\"comicPopUp\">ComicPopUp</div>";
	$("body").append(html);
};

/** @class */
var NavigationManager = function() {
	var currentSection = gSectionHome;
	
    if (NavigationManager.caller != NavigationManager.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

NavigationManager.instance = null;

NavigationManager.getInstance = function() {
    if (this.instance == null) {
        this.instance = new NavigationManager();
    }
    return this.instance;
};

NavigationManager.prototype.getNavigationCallbacks = function(pSection) {
	var callbacks = new Array();
	this.currentSection = pSection;
	switch (pSection) {
		case gSectionHome:
			callbacks.push(function() { selectionClicked(); });
			callbacks.push(function() { tourClicked(); });
			callbacks.push(function() { topHundredClicked(); });
			break;
		case gSectionLibrary:
			callbacks.push(function() { quickSearchClicked(); });
			callbacks.push(function() { tourClicked(); });
			callbacks.push(function() { collectionsClicked(); });
			break;
		case gSectionPoints:
			callbacks.push(function() { pointsClicked(); });
			if("fr" == "fr") {
				callbacks.push(function() { pointsSmilesClicked(); });
			}
			break;
		case gSectionGifts:
			callbacks.push(function() { giftsClicked(); });
			callbacks.push(function() { getGiftClicked(); });
			break;
		case gSectionSearch:
			break;
		default:
			break;
	
	}
	return callbacks;
};

NavigationManager.prototype.getNavigationLayout = function(pSection) {
	var layout = "";
	switch (pSection) {
		case gSectionHome:
			layout = "<div class=\"nav2Element selected\" id=\"navigation21\"><span>Sélection</span></div><div class=\"nav2Element\" id=\"navigation22\"><span >Parcourir</span></div><div class=\"nav2Element\" id=\"navigation23\"><span>Top 100</span></div>";
			break;
		case gSectionLibrary:
			layout = "<div class=\"nav2Element selected\" id=\"navigation21\"><span>Aperçu</span></div><div class=\"nav2Element\" id=\"navigation22\"><span >Parcourir</span></div><div class=\"nav2Element\" id=\"navigation23\"><span>Collections</span></div>";
			break;
		case gSectionPoints:
				if("fr" == "fr") {
					layout = "<div class=\"nav2Element selected\" id=\"navigation21\"><span>Points Avecomics</span></div><div class=\"nav2Element\" id=\"navigation22\"><span >Points SMILE'S</span></div>";
				}
				else {
					layout = "<div class=\"nav2Element selected\" id=\"navigation21\"><span>Points Avecomics</span></div>";
				}
				
			break;
		case gSectionGifts:
			layout = "<div class=\"nav2Element selected\" id=\"navigation21\"><span>Offrir un cadeau</span></div><div class=\"nav2Element\" id=\"navigation22\"><span >Recevoir un cadeau</span></div>";
			break;
		default:
			layout = "";
			break;
	}
	return layout;
};

NavigationManager.prototype.setSearchResultsText = function() {
	$("#navigation2Actions").empty();
	var nbrResults = gStore.productNodesIds.length;
	var strSearch = $("#searchComic").val();
	$("#navigation2Actions").append('<span class="searchResults">Resultats de la recherche : '+nbrResults+' bd pour "'+strSearch+'"</span>');
};
/** @class */
var Store = function() {
	this.comics = new Array();
	this.authors = new Array();
	this.editors = new Array();
	this.keywords = new Array();
	this.collections = new Array();
	this.languages = new Array();
	this.productNodesIds = new Array();
	this.productNodesIdsUser = new Array();
	this.currentCoverStartIndex = 0;
	this.currentCoverStartIndexUser = 0;
	this.filteredComics = new Array();
	this.lastBuyComicsInfos = new Array();
	this.topComicsInfos = new Array();
	this.currentPattern = "";
	this.callbackForCover = null;
	this.offsetAlsoLike = 0;
	
	this.selectionComics = new SelectionComics();
};

Store.prototype.sendGetUserInfos = function() {
	var self = this;
	var url = gFriendUrl+gUserInfosUrl+gUser.token;
	var callback = function(pData) {
		self.returnOfGetUserInfos(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};

Store.prototype.returnOfGetUserInfos = function(pXmlData) {
	var xmlUserInfos = this.extractUserInfosFromXml(pXmlData);
	if(NavigationManager.getInstance().currentSection == gSectionLibrary) {
		this.productNodesIds = Xml.getInstance().evaluateXPath(xmlUserInfos, "//user/products/product/@product_id");
		var comicsIds = this.extractProductIdsFromNodeWithLimit(this.currentCoverStartIndex, this.productNodesIds);
		var prodIds = new Array();
		for(var i=0; i < this.productNodesIds.length; i++) {
			prodIds.push(this.productNodesIds[i].nodeValue);
		}
		gUser.comicsIds = prodIds;
		if(comicsIds.length > 0) {
			this.sendGetComicsWithIds(comicsIds);
		}
	}
	else {
		var productNodesIds = Xml.getInstance().evaluateXPath(xmlUserInfos, "//user/products/product/@product_id");
		var comicsIds = this.extractProductIdsFromNodeWithLimit(this.currentCoverStartIndex, productNodesIds);
		var prodIds = new Array();
		for(var i=0; i < productNodesIds.length; i++) {
			prodIds.push(productNodesIds[i].nodeValue);
		}
		gUser.comicsIds = prodIds;
	}
	if(xmlUserInfos.getElementsByTagName("caddy").length > 0) {
		Caddy.getInstance().caddyXml = xmlUserInfos.getElementsByTagName("caddy")[0];
		Caddy.getInstance().parseCaddy(Caddy.getInstance().caddyXml);
	}
	comicsNodesIds = null;
};

Store.prototype.sendGetComics = function(pPattern) {
	var self = this;
	var url = gFriendUrl;
	this.currentPattern = pPattern;
	var data = null;
	var reqData = new RequestData();
	reqData.data = gSelectionKeyWord;
	reqData.app_store = gStoreId;
	data = reqData.getData(pPattern, gOffsetSelection);
	var callback = function(pData) {
		self.returnOfGetProductIds(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, true);
};

Store.prototype.sendGetSelection = function() {
	//this.sendGetComics(gPatternProductWithKeywords);
	this.selectionComics.flushSelection();
	this.selectionComics.sendGetSelection();
};

Store.prototype.sendGetFeatured = function() {
	this.sendGetComics(gPatternComicsFeatured);
};

Store.prototype.sendGetTopHundred = function() {
	this.sendGetComics(gPatternComicsTopHundred);
	this.callbackForCover = function(pComics) {
		setTopCoversWithComics(pComics);
	};
};

Store.prototype.sendGetSmilesSelection = function() {
	this.sendGetComics(gPatternProductInPrice);
};

Store.prototype.returnOfGetProductIds = function(pXmlData, pComicsIdFilter) {
	this.productNodesIds = new Array();
	var comicsNodesIds = Xml.getInstance().evaluateXPath(pXmlData, "//row/product_id/text()");
	if(pComicsIdFilter) {
		for(var i=0; i< comicsNodesIds.length; i++) {
			if(Utils.getInstance().inArray(pComicsIdFilter, comicsNodesIds[i].nodeValue)) {
				this.productNodesIds.push(comicsNodesIds[i]);
			}
		}
	}
	else {
		this.productNodesIds = comicsNodesIds;
	}
	var comicsIds = this.extractProductIdsFromNodeWithLimit(this.currentCoverStartIndex, this.productNodesIds);

	if(comicsIds.length > 0) {
		this.sendGetComicsWithIds(comicsIds);
	}
	else {
		hideWaitCover();
		hideCoverLayer();
	}
	if(NavigationManager.getInstance().currentSection == gSectionSearch) {
		NavigationManager.getInstance().setSearchResultsText();
	}
	comicsNodesIds = null;
	return comicsIds;
};

Store.prototype.returnOfGetLastBuy = function(pXmlData) {
	var comicsNodesIds = Xml.getInstance().evaluateXPath(pXmlData, "//row/product_id/text()");
	var comicsIds = new Array();

	var comicsNodesStore = Xml.getInstance().evaluateXPath(pXmlData, "//row/store/text()");
	var comicsNodesInApp = Xml.getInstance().evaluateXPath(pXmlData, "//row/in_app/text()");
	var comicsNodesDate = Xml.getInstance().evaluateXPath(pXmlData, "//row/date/text()");
	for(var i=0; i< comicsNodesIds.length; i++) {
		if(i<gLimitComicsLastBuy) {
			this.lastBuyComicsInfos.push({
				store: Utils.getInstance().getStoreStringFromStoreValAndInApp(comicsNodesStore[i].nodeValue, comicsNodesInApp[i].nodeValue),
				date: Utils.getInstance().getDateStringSinceNow(comicsNodesDate[i].nodeValue)
			});
			comicsIds.push(comicsNodesIds[i].nodeValue);
		}
	}
	if(comicsIds.length > 0) {
		this.sendGetComicsWithIdsForLastBuy(comicsIds);
	}
	comicsNodesIds = null;
};

Store.prototype.returnOfGetTop = function(pXmlData) {
	var comicsNodesIds = Xml.getInstance().evaluateXPath(pXmlData, "//row/product_id/text()");
	var comicsIds = new Array();
	for(var i=0; i< comicsNodesIds.length; i++) {
		if(i<gLimitComicsTop) {
			comicsIds.push(comicsNodesIds[i].nodeValue);
		}
	}
	if(comicsIds.length > 0) {
		this.sendGetComicsWithIdsForTop(comicsIds);
	}
	comicsNodesIds = null;
};

Store.prototype.returnOfGetAlsoLike = function(pXmlData) {
	var comicsNodesIds = Xml.getInstance().evaluateXPath(pXmlData, "//row/product_id/text()");
	var comicsIds = new Array();
	for(var i=0; i< comicsNodesIds.length; i++) {
		comicsIds.push(comicsNodesIds[i].nodeValue);
	}
	if(comicsIds.length > 0) {
		this.sendGetComicsWithIdsForAlsoLike(comicsIds);
	}
	else {
		setAlsoLike(null);
	}
	comicsNodesIds = null;
};

Store.prototype.returnOfGetOtherTitleForDetail = function(pXmlData) {
	var comicsNodesIds = Xml.getInstance().evaluateXPath(pXmlData, "//row/product_id/text()");
	var comicsIds = new Array();
	for(var i=0; i< comicsNodesIds.length; i++) {
		comicsIds.push(comicsNodesIds[i].nodeValue);
	}
	if(comicsIds.length > 0) {
		this.sendGetComicsWithIdsForOtherTitleForDetail(comicsIds);
	}
	else {
		setOtherTitle(null);
	}
	comicsNodesIds = null;
};

Store.prototype.sendGetComicsWithIdsForLastBuy = function(pProducts) {
	var self = this;
	var productsCsv = Utils.getInstance().productIdsToCsv(pProducts);
	var url = gFriendUrl;
	var reqData = new RequestData();
	reqData.pack_ids = productsCsv;
	reqData.app_store = gStoreId;
	data = reqData.getData(gPatternComicsWithCsvIds);
	
	var callback = function(pData) {
		self.returnOfGetComicsWithIdsForLastBuy(pData, pProducts);
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, true);
};

Store.prototype.sendGetComicsWithIdsForTop = function(pProducts) {
	var self = this;
	var productsCsv = Utils.getInstance().productIdsToCsv(pProducts);
	var url = gFriendUrl;
	var reqData = new RequestData();
	reqData.pack_ids = productsCsv;
	reqData.app_store = gStoreId;
	data = reqData.getData(gPatternComicsWithCsvIds);
	
	var callback = function(pData) {
		self.returnOfGetComicsWithIdsForTop(pData, pProducts);
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, true);
};

Store.prototype.sendGetComicsWithIdsForAlsoLike = function(pProducts) {
	var self = this;
	var productsCsv = Utils.getInstance().productIdsToCsv(pProducts);
	var url = gFriendUrl;
	var reqData = new RequestData();
	reqData.pack_ids = productsCsv;
	reqData.app_store = gStoreId;
	data = reqData.getData(gPatternComicsWithCsvIds);
	
	var callback = function(pData) {
		self.returnOfGetComicsWithIdsForAlsoLike(pData, pProducts);
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, true);
};

Store.prototype.sendGetComicsWithIdsForOtherTitleForDetail = function(pProducts) {
	var self = this;
	var productsCsv = Utils.getInstance().productIdsToCsv(pProducts);
	var url = gFriendUrl;
	var reqData = new RequestData();
	reqData.pack_ids = productsCsv;
	reqData.app_store = gStoreId;
	data = reqData.getData(gPatternComicsWithCsvIds);
	
	var callback = function(pData) {
		self.returnOfGetComicsWithIdsForOtherTitleForDetail(pData, pProducts);
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, true);
};

Store.prototype.sendGetComicsWithIds = function(pProducts, pCallback) {
	var self = this;
	var productsCsv = Utils.getInstance().productIdsToCsv(pProducts);
	var url = gFriendUrl;
	var reqData = new RequestData();
	reqData.pack_ids = productsCsv;
	reqData.app_store = gStoreId;
	data = reqData.getData(gPatternComicsWithCsvIds);
	var callback = function(pData) {
		self.returnOfGetComicsWithIds(pData, pProducts, pCallback);
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, true);
};

Store.prototype.returnOfGetComicsWithIds = function(pXmlData, pProducts, pCallback) {
	var xmlComics = this.extractComicsFromXml(pXmlData);
	//var jsonComics  = this.extractComicsFromXml(pXmlData);
	//var comicsIds = ComicsUtils.getInstance().getIdsWithProductIdsFromXml(xmlComics, pProducts);
	var comicsIds = ComicsUtilsJSON.getInstance().getIdsWithProductIdsFromJsonObject(xmlComics, pProducts);
	var comicsToShow = this.addComics(xmlComics, comicsIds, gCoverResolutionString, true);
	this.addAuthors(xmlComics);
	this.addEditors(xmlComics);
	this.addKeywords(xmlComics);
	this.addCollections(xmlComics);
	this.addLanguages(xmlComics);
//	setCoversWithComics(ComicsUtils.getInstance().returnComicsByPublishDate(comicsToShow));
	if(this.callbackForCover) {
		this.callbackForCover(comicsToShow);
		this.callbackForCover = null;
	}
	else {
		setCoversWithComics(ComicsUtilsJSON.getInstance().returnComicsByPublishDate(comicsToShow));
	}
	/*if(NavigationManager.getInstance().currentSection == gSectionLibrary) {
		addDataToFilterOne(this.filterKeywordsByLocale(this.keywords));
		addDataToFilterTwo(this.editors);
		addDataToFilterThree(this.authors);
	}*/
	xmlComics = null;
	if(pCallback) {
		pCallback(comicsToShow);
	}
};

Store.prototype.returnOfGetComicsWithIdsForLastBuy = function(pXmlData, pProducts) {
	var xmlComics = this.extractComicsFromXml(pXmlData);
	var comicsIds = ComicsUtilsJSON.getInstance().getIdsWithProductIdsFromJsonObject(xmlComics, pProducts);
	var comicsToShow = this.addComics(xmlComics, comicsIds, gCoverResolutionStringLastBuy, false);
	for(var i=0; i< gLimitComicsLastBuy; i++) {
		this.lastBuyComicsInfos[i].comic = comicsToShow[i];
	}
	xmlComics = null;
	setLastBuyComics(this.lastBuyComicsInfos);
};

Store.prototype.returnOfGetComicsWithIdsForTop = function(pXmlData, pProducts) {
	var xmlComics = this.extractComicsFromXml(pXmlData);
	var comicsIds = ComicsUtilsJSON.getInstance().getIdsWithProductIdsFromJsonObject(xmlComics, pProducts);
	var comicsToShow = this.addComics(xmlComics, comicsIds, gCoverResolutionStringLastBuy, false);
	for(var i=0; i< gLimitComicsTop; i++) {
		this.topComicsInfos.push({comic : comicsToShow[i]});
	}
	xmlComics = null;
	setTopComics(this.topComicsInfos);
};

Store.prototype.returnOfGetComicsWithIdsForAlsoLike = function(pXmlData, pProducts) {
	var xmlComics = this.extractComicsFromXml(pXmlData);
	var comicsIds = ComicsUtilsJSON.getInstance().getIdsWithProductIdsFromJsonObject(xmlComics, pProducts);
	var comicsToShow = this.addComics(xmlComics, comicsIds, gCoverResolutionStringLastBuy, false);
	xmlComics = null;
	setAlsoLike(comicsToShow);
};

Store.prototype.returnOfGetComicsWithIdsForOtherTitleForDetail = function(pXmlData, pProducts) {
	var xmlComics = this.extractComicsFromXml(pXmlData);
	var comicsIds = ComicsUtilsJSON.getInstance().getIdsWithProductIdsFromJsonObject(xmlComics, pProducts);
	var comicsToShow = this.addComics(xmlComics, comicsIds, gCoverResolutionStringLastBuy, false);
	xmlComics = null;
	setOtherTitle(comicsToShow);
};

Store.prototype.extractUserInfosFromXml = function(pXmlData) {
	if(!window.ActiveXObject){
		var textComics = Xml.getInstance().evaluateBigNode(pXmlData, 'get_info_user');
		return new DOMParser().parseFromString( textComics ,"text/xml" );
	}
	else {
		var textComics = Xml.getInstance().evaluateBigNode(pXmlData, 'get_info_user');
		var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(textComics);
		return xmlDoc;
	}
};

Store.prototype.extractComicsFromXml = function(pXmlData) {
	var textComics = Xml.getInstance().evaluateBigNode(pXmlData, 'getstoreproduct');
	var jsonObject = xml2Json(new DOMParser().parseFromString( textComics ,"text/xml" ));
	textComics = null;
	return jsonObject;
};

Store.prototype.addComics = function(pJsonObject, pComicsIds, pResolution, isAddToCurrentComics) {
	var self = this;
	var comicsToShow = new Array();
	$(pComicsIds).each(function(indexC) {
		var comic = new Comic();
		comic.title = ComicsUtilsJSON.getInstance().getTitleWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.productId = ComicsUtilsJSON.getInstance().getProductIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.coverId = ComicsUtilsJSON.getInstance().getCoverIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.coverWidth = ComicsUtilsJSON.getInstance().getCoverWidthWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.coverHeight = ComicsUtilsJSON.getInstance().getCoverHeightWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.keywords = ComicsUtilsJSON.getInstance().getKeywordsWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.authors = ComicsUtilsJSON.getInstance().getAuthorsWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.editor = ComicsUtilsJSON.getInstance().getEditorWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.collection = ComicsUtilsJSON.getInstance().getCollectionWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.language = ComicsUtilsJSON.getInstance().getLanguageWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.nombreDePages = ComicsUtilsJSON.getInstance().getNombrePagesWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.rating = ComicsUtilsJSON.getInstance().getRatingWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.price = ComicsUtilsJSON.getInstance().getPriceWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.aveId = ComicsUtilsJSON.getInstance().getAveIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.previewId = ComicsUtilsJSON.getInstance().getPreviewIdWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.screenVersion = ComicsUtilsJSON.getInstance().getScreenVersionWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.beginDate = ComicsUtilsJSON.getInstance().getBeginDateWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.published = ComicsUtilsJSON.getInstance().getPublishedWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.publicationDate = ComicsUtilsJSON.getInstance().getPublicationDateWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.collectionPosition = ComicsUtilsJSON.getInstance().getCollectionPositionFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.comicTrack = ComicsUtilsJSON.getInstance().getComicTrackFromJsonObject(pJsonObject, pComicsIds[indexC]);
		//comic.inAppId = ComicsUtilsJSON.getInstance().getInAppIdWithIdFromJsonObject(pJsonObject, comic.productId);
		comic.sumUp = ComicsUtilsJSON.getInstance().getSumUpWithIdFromJsonObject(pJsonObject, pComicsIds[indexC]);
		comic.previewPages = ComicsUtilsJSON.getInstance().getPreviewPagesIdsFromJsonObject(pJsonObject, pComicsIds[indexC]);
		
		comic.id = pComicsIds[indexC];
		//comic.coverUrl = gFriendCoverComicsUrl+pComicsIds[indexC]+"_"+gCoverResolutionString+".jpg";
		//comic.coverUrl = gFriendCoverComicsUrl+pComicsIds[indexC]+"/"+Utils.getInstance().getTitleFromComicForUrl(comic)+".jpg";
		comic.coverUrl = Utils.getInstance().getCoverUrl(comic.id, pResolution);  
			//gTomodachiCoverUrl+"?id="+comic.id+"&width="+pResolution;//"&quality="+gCoverQuality;
		if(isAddToCurrentComics) {
			self.comics.push(comic);
		}
		comicsToShow.push(comic);
		
	});
	return comicsToShow;
};

Store.prototype.addAuthors = function(pJsonObject) {
	var authors = ComicsUtilsJSON.getInstance().getAuthorsFromProducts(pJsonObject);
	for(var i = 0; i<authors.length ; i++) {
		var test = false;
		for(var j = 0; j<this.authors.length ; j++) {
			if(this.authors[j].id == authors[i].id) {
				test = true;
			}
		}
		if(!test) {
			this.authors.push(authors[i]);
		}
	}
};

Store.prototype.addEditors = function(pJsonObject) {
	var editors = ComicsUtilsJSON.getInstance().getEditorsFromProducts(pJsonObject);
	for(var i = 0; i<editors.length ; i++) {
		var test = false;
		for(var j = 0; j<this.editors.length ; j++) {
			if(this.editors[j].id == editors[i].id) {
				test = true;
			}
		}
		if(!test) {
			this.editors.push(editors[i]);
		}
	}
};

Store.prototype.addKeywords = function(pJsonObject) {
	var keywords = ComicsUtilsJSON.getInstance().getKeywordsFromProducts(pJsonObject);
	for(var i = 0; i<keywords.length ; i++) {
		var test = false;
		for(var j = 0; j<this.keywords.length ; j++) {
			if(this.keywords[j].id == keywords[i].id && this.keywords[j].language == keywords[i].language) {
				test = true;
			}
		}
		if(!test) {
			this.keywords.push(keywords[i]);
		}
	}
};

Store.prototype.addCollections = function(pJsonObject) {
	var collections = ComicsUtilsJSON.getInstance().getCollectionsFromProducts(pJsonObject);
	for(var i = 0; i<collections.length ; i++) {
		var test = false;
		for(var j = 0; j<this.collections.length ; j++) {
			if(this.collections[j].id == collections[i].id) {
				test = true;
			}
		}
		if(!test) {
			this.collections.push(collections[i]);
		}
	}
};

Store.prototype.addLanguages = function(pJsonObject) {
	var languages = ComicsUtilsJSON.getInstance().getLanguagesFromProducts(pJsonObject);
	for(var i = 0; i<languages.length ; i++) {
		var test = false;
		for(var j = 0; j<this.languages.length ; j++) {
			if(this.languages[j].id == languages[i].id) {
				test = true;
			}
		}
		if(!test) {
			this.languages.push(languages[i]);
		}
	}
};

Store.prototype.extractProductIdsFromNodeWithLimit = function(pStartIndex, pProductIdsNodes) {
	var ret = new Array();
	for(var i=pStartIndex; i < gMaxCovers+pStartIndex; i++) {
		if(i < pProductIdsNodes.length ) {
			ret.push(pProductIdsNodes[i].nodeValue);
		}
	}
	return ret;
};

Store.prototype.extractPoductIdsFromNodeWithoutLimit = function(pProductIdsNodes) {
	var ret = new Array();
	for(var i=0; i < pProductIdsNodes.length; i++) {
		ret.push(pProductIdsNodes[i].nodeValue);
	}
	return ret;
};

Store.prototype.sendGetNextComics = function() {
	this.currentCoverStartIndex += gMaxCovers;
	var comicsIds = this.extractProductIdsFromNodeWithLimit(this.currentCoverStartIndex, this.productNodesIds);
	if(comicsIds.length > 0) {
		this.sendGetComicsWithIds(comicsIds);
	}
	else {
		hideWaitCover();
	}
};

Store.prototype.sendGetNextFeaturedComics = function() {
	gOffsetSelection += gMaxCoversSelection;
	this.selectionComics.sendGetSelection();
	//this.sendGetComics(gPatternProductWithKeywords);
};

Store.prototype.sendGetNextSmilesComics = function() {
	gOffsetSelection += gMaxCoversSelection;
	this.sendGetSmilesSelection();
	//this.sendGetComics(gPatternProductWithKeywords);
};

Store.prototype.sendGetNextFeaturedComicsForUser = function() {
	this.currentCoverStartIndexUser += gMaxCovers;
	var comicsIds = this.extractProductIdsFromNodeWithLimit(this.currentCoverStartIndexUser, this.productNodesIdsUser);
	if(comicsIds.length > 0) {
		this.sendGetComicsWithIds(comicsIds);
	}
	else {
		hideWaitCover();
	}
};

Store.prototype.getComicWithId = function(pId) {
	var comicTmp = null;
	for(var i=0; i < this.comics.length; i++) {
		if(this.comics[i].id == parseInt(pId)) {
			comicTmp = this.comics[i];
		}
	}
	return comicTmp;
};

Store.prototype.flush = function(pId) {
	this.comics = new Array();
	this.filteredComics = new Array();
	this.authors = new Array();
	this.editors = new Array();
	this.keywords = new Array();
	this.collections = new Array();
	this.languages = new Array();
	this.productNodesIds = new Array();
	this.productNodesIdsUser = new Array();
	this.currentCoverStartIndex = 0;
	this.currentCoverStartIndexUser = 0;
	this.offsetAlsoLike = 0;
};

Store.prototype.getAuthorsNames = function() {
	var names = new Array();
	for (var i=0; i < this.authors.length; i++) {
	  names.push(this.authors[i].name);
	};
	return names;
};

Store.prototype.getEditorsNames = function() {
	var names = new Array();
	for (var i=0; i < this.editors.length; i++) {
	  names.push(this.editors[i].name);
	};
	return names;
};

Store.prototype.getComicsTitles = function() {
	var names = new Array();
	for (var i=0; i < this.comics.length; i++) {
	  names.push(this.comics[i].title);
	};
	return names;
};

Store.prototype.filterComicsByEditorId = function(pId, pComicsToFilter) {
	var result = new Array();
	var comicsToFilter = pComicsToFilter;
	if(pId != "-1") {
		for(var i=0 ; i < comicsToFilter.length ; i++) {
			if(parseInt(comicsToFilter[i].editor) == pId){
				result.push(comicsToFilter[i]);
			}
		}
	}
	else {
		result = pComicsToFilter;
	}
	//gMaxCovers = result.length;
	this.filteredComics = result;
	return result;
};

Store.prototype.filterComicsByAuthorId = function(pId, pComicsToFilter) {
	var result = new Array();
	var comicsToFilter = pComicsToFilter;
	if(pId != "-1") {
		for(var i=0 ; i < comicsToFilter.length ; i++) {
			if(Utils.getInstance().inArray(comicsToFilter[i].authors, pId)){
				result.push(comicsToFilter[i]);
			}
		}
	}
	else {
		result = pComicsToFilter;
	}
	//gMaxCovers = result.length;
	this.filteredComics = result;
	return result;
};

Store.prototype.getAuthorsFromComics = function(pComics) {
	var result = new Array();
	var authorsIds = new Array();
	for(var i=0 ; i < pComics.length ; i++) {
		for(var j=0 ; j < pComics[i].authors.length ; j++) {
			if(!Utils.getInstance().inArray(authorsIds, pComics[i].authors[j])) {
				authorsIds.push(pComics[i].authors[j]);
			}
		}
	}
	for(var i=0 ; i < this.authors.length ; i++) {
		if(Utils.getInstance().inArray(authorsIds, this.authors[i].id)) {
			result.push(this.authors[i]);
		}
	}
	return result;
};

Store.prototype.getEditorsFromComics = function(pComics) {
	var result = new Array();
	var editorsIds = new Array();
	for(var i=0 ; i < pComics.length ; i++) {
		if(!Utils.getInstance().inArray(editorsIds, pComics[i].editor)) {
			editorsIds.push(pComics[i].editor);
		}
	}
	for(var i=0 ; i < this.editors.length ; i++) {
		if(Utils.getInstance().inArray(editorsIds, this.editors[i].id)) {
			result.push(this.editors[i]);
		}
	}
	return result;
};

Store.prototype.getKeywordsFromComics = function(pComics) {
	var result = new Array();
	var keywordsIds = new Array();
	for(var i=0 ; i < pComics.length ; i++) {
		for(var j=0 ; j < pComics[i].keywords.length ; j++) {
			if(!Utils.getInstance().inArray(keywordsIds, pComics[i].keywords[j])) {
				keywordsIds.push(pComics[i].keywords[j]);
			}
		}
	}
	var localeKeywords = this.filterKeywordsByLocale(this.keywords);
	for(var i=0 ; i < localeKeywords.length ; i++) {
		if(Utils.getInstance().inArray(keywordsIds, localeKeywords[i].id)) {
			result.push(localeKeywords[i]);
		}
	}
	return result;
};

Store.prototype.getComicsWithIds = function(pIds) {
	var results = new Array();
	for(var i=0 ; i < this.comics.length ; i++) {
		if(Utils.getInstance().inArray(pIds, this.comics[i].id)){
			results.push(this.comics[i]);
		}
	}
	return results;
};

Store.prototype.filterComicsByKeywordsId = function(pId, pComics) {
	var result = new Array();
	var comicsToFilter = pComics;
	if(pId != "-1"){
		for(var i=0 ; i < comicsToFilter.length ; i++) {
			if(Utils.getInstance().inArray(comicsToFilter[i].keywords, pId)){
				result.push(comicsToFilter[i]);
			}
		}
	}
	else {
		result = this.comics;
	}
	//gMaxCovers = result.length;
	this.filteredComics = result;
	return result;
};

Store.prototype.filterComicsByLocale = function(pComics) {
	var result = new Array();
	var comicsToFilter = pComics;
	for(var i=0 ; i < comicsToFilter.length ; i++) {
		if(comicsToFilter[i].language == gLocaleId){
			result.push(comicsToFilter[i]);
		}
	};
	//gMaxCovers = result.length;
	this.filteredComics = result;
	return result;
};

Store.prototype.filterKeywordsByLocale = function(pKeywords) {
	var result = new Array();
	for(var i=0 ; i < pKeywords.length ; i++) {
		if(pKeywords[i].language == gLocaleId) {
			result.push(pKeywords[i]);
		}
	}
	return result;
};

Store.prototype.getLanguageFromId = function(pId) {
	var result = "";
	for(var i=0 ; i < this.languages.length ; i++) {
		if(this.languages[i].id == pId) {
			result = this.languages[i];
		}
	}
	return result;
};

Store.prototype.getComicsByCollections = function() {
	var result = new Array();
	for ( var j = 0; j < this.collections.length; j++) {
		var collection = this.collections[j];
		var comicsTemp = new Array();
		for ( var i = 0; i < this.comics.length; i++) {
			if (this.comics[i].collection == collection.id) {
				comicsTemp.push(this.comics[i]);
			}
		}
		if (comicsTemp.length > 0) {
			$(comicsTemp).each(function(indexC) {
				comicsTemp[indexC].coverUrl = Utils.getInstance().getCoverUrl(comicsTemp[indexC].id, gCoverCollectionMaxWidth); 
					//gTomodachiCoverUrl+"?id="+comicsTemp[indexC].id+"&width="+gCoverCollectionMaxWidth;//+"&quality="+gCoverQuality;
			});
			result.push({
				collection: collection,
				comics: comicsTemp
			});
		}
	}
	return result;
};

Store.prototype.sendSearchProduct = function(pValue) {
	var self = this;
	var url = gFriendUrl+gSearchProductUrl+pValue;
	var callback = function(pData) {
		self.returnOfGetProductIds(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};

Store.prototype.sendGetOtherTitles = function(pComicsId, pCollectionId, pLangCode) {
	var self = this;
	var url = gFriendUrl+gOtherTitleUrl+pComicsId;//+"&use_lang=true&app_lang="+pLangCode;
	var callback = function(pData) {
		self.returnOfGetOtherTitle(pData, pCollectionId);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};

Store.prototype.returnOfGetOtherTitle = function(pXmlData, pCollectionId) {
	var comicsNodesIds = Xml.getInstance().evaluateXPath(pXmlData, "//row/product_id/text()");
	var productNodesIds = comicsNodesIds;
	var comicsIds = this.extractPoductIdsFromNodeWithoutLimit(productNodesIds);
	if(comicsIds.length > 0) {
		this.sendGetComicsWithIdsAndCollection(comicsIds, pCollectionId);
	}
	comicsNodesIds = null;
}; 

Store.prototype.sendGetComicsWithIdsAndCollection = function(pProducts, pCollectionId) {
	var self = this;
	var productsCsv = Utils.getInstance().productIdsToCsv(pProducts);
	var url = gFriendUrl;
	var reqData = new RequestData();
	reqData.pack_ids = productsCsv;
	reqData.app_store = gStoreId;
	data = reqData.getData(gPatternComicsWithCsvIds);
	
	var callback = function(pData) {
		self.returnOfGetComicsWithIdsForCollection(pData, pProducts, pCollectionId);
	};
	Ajax.getInstance().sendAjax("POST", url, data, true, callback, false, true);
};

Store.prototype.returnOfGetComicsWithIdsForCollection = function(pXmlData, pProducts, pCollectionId) {
	var xmlComics = this.extractComicsFromXml(pXmlData);
	var comicsIds = ComicsUtilsJSON.getInstance().getIdsWithProductIdsFromJsonObject(xmlComics, pProducts);
	var comicsToShow = this.addComics(xmlComics, comicsIds, gCoverCollectionMaxWidth, true);
	this.addAuthors(xmlComics);
	this.addEditors(xmlComics);
	this.addKeywords(xmlComics);
	this.addCollections(xmlComics);
	this.addLanguages(xmlComics);
	addCoversWithComicsForCollection(ComicsUtilsJSON.getInstance().returnComicsByPublishDate(comicsToShow), pCollectionId);
	/*addDataToFilterOne(this.filterKeywordsByLocale(this.keywords));
	addDataToFilterTwo(this.editors);
	addDataToFilterThree(this.authors);*/
	xmlComics = null;
};

Store.prototype.sendGetNextLastBuy = function() {
	gOffsetLastBuy = gOffsetLastBuy + 3;
	this.sendGetLastBuy();
};

Store.prototype.sendGetLastBuy = function() {
	var self = this;
	this.lastBuyComicsInfos = new Array();
	var url = gFriendUrl+gLastBuyUrl+gLimitComicsLastBuy+"&offset="+gOffsetLastBuy;
	var callback = function(pData) {
		self.returnOfGetLastBuy(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

Store.prototype.sendGetTop = function() {
	var self = this;
	this.topComicsInfos = new Array();
	var url = gFriendUrl+gTopUrl+gLimitComicsTop;
	var callback = function(pData) {
		self.returnOfGetTop(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

Store.prototype.sendGetAlsoLike = function(pProductId, pUrl) {
	var self = this;
	Ajax.getInstance().abortAllrequests();
	var url = gFriendUrl+pUrl+"&data="+pProductId+"&offset="+this.offsetAlsoLike;
	var callback = function(pData) {
		self.returnOfGetAlsoLike(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, true);
};

Store.prototype.sendGetOtherTitleForDetail = function(pProductId) {
	var self = this;
	var url = gFriendUrl+gOtherTitleUrl+pProductId;
	var callback = function(pData) {
		self.returnOfGetOtherTitleForDetail(pData);
	};
	Ajax.getInstance().sendAjax("POST", url, new Array(), true, callback, false, false);
};

Store.prototype.reloadCurrentPattern = function() {
	if(this.currentPattern == gPatternComicsTopHundred) {
		this.sendGetComics(this.currentPattern);
		this.callbackForCover = function(pComics) {
			setTopCoversWithComics(pComics);
		};
	}
	else {
		this.selectionComics.flushSelection();
		this.selectionComics.sendGetSelection();
	}
};
/** @class */

var Utils = function() {
    if (Utils.caller != Utils.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }
};

Utils.instance = null;

Utils.getInstance = function() {
    if (this.instance == null) {
        this.instance = new Utils();
    }
    return this.instance;
};

Utils.prototype.productIdsToCsv = function(pProducts) {
    var csv = "", c;
	for( var i=0,len=pProducts.length;i<len;i++ ) {
		c = pProducts[i];
		if( isNaN(c) ) {

		} else {
			csv += c + ";";
		}
	}
	csv = csv.substring(0,csv.length-1);
	return csv;
};

Utils.prototype.extractValueFromCsv = function(pCsv) {
	return pCsv.split(";");
};

Utils.prototype.imageResize = function(pImage, W, H) {
	//H=H||W;//optionnal
	var w=pImage.width, 
		h=pImage.height,
		sc_ratio = W/H,
		vp_ratio = w/h,
		zoom = 1;
	if( vp_ratio >= sc_ratio ) { zoom = W/w; }
	else if( vp_ratio < sc_ratio ) { zoom = H/h; }
	//pImage.width = Math.round(w*zoom );
	//pImage.height = Math.round(h*zoom);
	pImage.width = W;
	//(resizedWidth * currentHeight) / currentWidth;
	pImage.height = (W*h)/w;
	//pImage.height = H;
};

Utils.prototype.loadCoverImage = function(pImagePath, pDivContainer, pMaxWidth, pMaxHeigth, callback, pMaskDiv, pResizeImage, pImageAlt) {
	var self = this;	
	var image = new Image();
	var imageWait = new Image();
	/*image.width = parseInt(pMaxWidth);
	image.height = parseInt(pMaxWidth)+5;*/
	//self.imageResize(image, parseInt(pMaxWidth), parseInt(pMaxHeigth)+10);
	pDivContainer.append(image);
	imageWait.src = pImagePath;
	imageWait.onload = function() {
		image.src = pImagePath;
		image.border = 0;
		if(pImageAlt) {
			$(image).attr('alt', pImageAlt);
		}
		/*if(!pResizeImage) {
			image.width = imageWait.width;
			image.height = imageWait.height;
		}
		else {
			image.width = parseInt(pMaxWidth);
			image.height = parseInt(pMaxWidth)+50;
		}*/
		if(callback) {
			callback(image);
		}
		if(pMaskDiv) {
			pMaskDiv.css("height",  pDivContainer.height()+"px");
			pMaskDiv.css("width", pDivContainer.width()+"px");
		}
		setSideHeight();
	};
	return image;
};

Utils.prototype.loadPubImage = function(pImagePath, pDivContainer, pMaxWidth, pMaxHeigth) {
	var self = this;
	var image = new Image();
	image.src = pImagePath;
	pDivContainer.empty();
	image.onload = function() {
		if(pMaxWidth && pMaxHeigth) {
			self.imageResize(image, pMaxWidth, pMaxHeigth);
		}
		pDivContainer.append(image);
	};
	return image;
};

Utils.prototype.inArray = function(array, p_val) {
    var l = array.length;
    for(var i = 0; i < l; i++) {
        if(array[i] == p_val) {
            return true;
        }
    }
    return false;
};

Utils.prototype.getScrollPosY = function() {
	var currentScroll = 0;
	if (document.documentElement.scrollTop)
	{ 
		currentScroll = document.documentElement.scrollTop;
	}
	else
	{ 
		currentScroll = document.body.scrollTop; 
	}
	return currentScroll;
};

Utils.prototype.scrolled = function (e) {
	var totalHeight, currentScroll, visibleHeight;
	gSideTopPosition = $("#sideLeft").offset().top;
	currentScroll = this.getScrollPosY();
	totalHeight = document.body.offsetHeight;
	visibleHeight = document.documentElement.clientHeight;
		
	if (((50*totalHeight)/100) <= currentScroll + visibleHeight)
	{
		scrolledToBottom();
	}
	position = currentScroll + visibleHeight;
	if(position >= totalHeight - $("#footer").height()) {
		if($("#sideLeft").css('position') == "fixed" ) {
			stopComicDetailFollowPageTop(currentScroll);
		}
	}
	
	
	if(!gSideToggle && gSideFollowEnabled) {
		/*position = currentScroll + visibleHeight;
		if(position >= totalHeight - $("#footer").height()) {
			if($("#sideLeft").css('position') == "fixed" ) {
				stopComicDetailFollowPageTop(currentScroll);
			}
		}*/
		if(position < totalHeight - $("#footer").height()) {
			var topTest = $("#header").offset().top + $("#header").height() + $("#navigation").height();
			var scroll = currentScroll + $("#navigation").height() + 75;
			if(scroll >= topTest/*gSideLeftComicDetailTopPos*/){
				enableComicDetailFollowPageTop(currentScroll);
			}
			else{
				disableComicDetailFollowPageTop();
			}
		}
	}
	else if($("#lastBuyComics").is(':visible')) {
		if(position < totalHeight - $("#footer").height()) {
			var topTest = $("#header").offset().top + $("#header").height() + $("#navigation").height() + $("#topComics").height();
			var scroll = currentScroll + $("#navigation").height() + 75;
			if(scroll >= topTest){
				enableComicDetailFollowPageTop(currentScroll);
			}
			else{
				disableComicDetailFollowPageTop();
			}
		}
	}
	/*{
		if(currentScroll + visibleHeight >= totalHeight - $("#footer").height()) {
			stopSideFollowPageTop(currentScroll);
		}
		else {
			if(currentScroll >= gSideTopPos){
				enableSideFollowPageTop(currentScroll);
			}
			else{
				disableSideFollowPageTop();
			}
		}
	}*/
	
	if( parseInt(this.getScrollPosY()) > 1000 ) {
        $("#backToTop").fadeIn();
    }
    else {
    	$("#backToTop").fadeOut();
    }
};

Utils.prototype.getTitleFromComicForUrl = function(pComic) {
	var title = pComic.title.toLowerCase();
	title = title.replace("#", "T");
	title = title.replace(/\s+/g, "-");
	var regEx = /:.*$/g;
	title = title.replace(regEx, "");
	regEx = /[^a-zA-Z0-9_]/g;
	title = title.replace(regEx, "-");
	regEx = /-+/g;
	title = title.replace(regEx, "-");
	regEx = /^-/g;
	title = title.replace(regEx, "");
	regEx = /-$/g;
	title = title.replace(regEx, "");
	return title;
};

Utils.prototype.priceToArray = function(pPrice) {
	var ret = new Array();
	var priceArr = pPrice.split(".");
	ret.push(priceArr[0]);
	ret.push("."+(priceArr[1] ? priceArr[1] : "00"));
	switch (gCurrency) {
		case "euros":
			ret.push("€");
			break;
		case "dollars":
			ret.push("$");
			break;
		case "pounds":
			ret.push("£");
			break;
	}
	
	return ret;
};

Utils.prototype.isEmail = function(pEmail) {
	var valid = true;
	var regexp = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;
	if ( !( regexp.test( pEmail ) ) ) {
		valid = false;
	}
	return valid;
};


Utils.prototype.getComicWithIdFromComics = function(pComics, pId) {
	var comicTmp = null;
	for(var i=0; i < pComics.length; i++) {
		if(pComics[i].id == parseInt(pId)) {
			comicTmp = pComics[i];
		}
	}
	return comicTmp;
};

Utils.prototype.getUrlVars = function()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
};

Utils.prototype.getDateStringSinceNow = function(pDate) {
	var now = new Date();
	now = new Date(now.toLocaleString());
	var d = pDate.split('.')[0];
	var since = new Date(d.split(" ")[0]+"T"+d.split(" ")[1]);
	since = new Date(since.toGMTString());
	var oneSecond = 1000;
	var oneMinute = 60000;
	var oneHour = 3600000;
	var oneDay = 86400000;
	var oneMonth = 2592000000;
	var oneYear = 31536000000; 
	var strDate = "";
	var time = now.getTime() - ( since.getTime() - (-since.getTimezoneOffset()*oneMinute) ) ;
	if(Math.floor(time / oneYear) > 0) {
		strDate = Math.floor(time / oneYear) + " Année(s)";
	}
	else if(Math.floor(time / oneMonth) > 0){
		strDate = Math.floor(time / oneMonth) + " Mois";
	}
	else if(Math.floor(time / oneDay) > 0) {
		strDate = Math.floor(time / oneDay) + " Jour(s)";
	}
	else if(Math.floor(time / oneHour) > 0) {
		strDate = Math.floor(time / oneHour) + " Heure(s)";
	}
	else if(Math.floor(time / oneMinute) > 0) {
		strDate = Math.floor(time / oneMinute) + " Minute(s)";
	}
	else if(Math.floor(time / oneSecond) > 0) {
		strDate = Math.floor(time / oneSecond) + " Seconde(s)";
	}
	else {
		strDate = " Moins d'une minute";
	}
	
	return strDate;
};

Utils.prototype.getStoreStringFromStoreValAndInApp = function(pStore, pInApp) {
	var string = "";
	var inApp = pInApp == "t" ? true:false;
	var store = parseInt(pStore);
	if (store == 0 && inApp) {
		string = "Apple Store";
	}
	else if(store == 0 && !inApp) {
		string = "Web";
	}
	else if(store == 12){
		string = "Android";
	}
	else if(store == 22) {
		string = "WebOs";
	}
	return string;
};

Utils.prototype.createGrowl = function(persistent) {
      var self = this; 
		var currentScroll = 0;
		if (document.documentElement.scrollTop)
		{ 
			currentScroll = document.documentElement.scrollTop;
		}
		else
		{ 
			currentScroll = document.body.scrollTop; 
		}
	
		// Use the last visible jGrowl qtip as our positioning target
      var target = $('.qtip.jgrowl:visible:last');
 	
	var message =
		$('<p />', { text: "Produit ajouté au panier" }),
		showCart = $('<button />', { 
			text: 'Voir mon panier',
			click: function() { 
				backToTop();
				$('.qtip.jgrowl:not(:animated)').qtip('hide');
				History.pushState({state:"Cart"}, "Cart", "?state=cart");
			}
		});
	
      // Create your jGrowl qTip...
      $(document.body).qtip({
         // Any content config you want here really.... go wild!
         content: {
            text: message.add(showCart),
            title: {
               text: "Mon panier",
               button: true
            }
         },
         position: {
            my: 'top right', // Not really important...
            at: (target.length ? 'bottom' : 'top') + ' right', // If target is window use 'top right' instead of 'bottom right'
            target: target.length ? target : $(document.body), // Use our target declared above
            adjust: { y: currentScroll+5 } // Add some vertical spacing
         },
         show: {
            event: false, // Don't show it on a regular event
            ready: true, // Show it when ready (rendered)
            effect: function() { $(this).stop(0,1).fadeIn(400); }, // Matches the hide effect
            delay: 0, // Needed to prevent positioning issues
            
            // Custom option for use with the .get()/.set() API, awesome!
            persistent: persistent
         },
         hide: {
            event: false, // Don't hide it on a regular event
            effect: function(api) { 
               // Do a regular fadeOut, but add some spice!
               $(this).stop(0,1).fadeOut(400).queue(function() {
                  // Destroy this tooltip after fading out
                  api.destroy();
 
                  // Update positions
                  self.updateGrowls();
               });
            }
         },
         style: {
            classes: 'jgrowl ui-tooltip-light ui-tooltip-rounded', // Some nice visual classes
            tip: false,
         },
         events: {
            render: function(event, api) {
               // Trigger the timer (below) on render
               self.timer.call(api.elements.tooltip, event);
            }
         }
      })
      .removeData('qtip');
   };

// Make it a window property see we can call it outside via updateGrowls() at any point
   Utils.prototype.updateGrowls = function() {
	// Loop over each jGrowl qTip
      var each = $('.qtip.jgrowl:not(:animated)');
      each.each(function(i) {
         var api = $(this).data('qtip');
		 api.hide();
         // Set the target option directly to prevent reposition() from being called twice.
         /*api.options.position.target = !i ? $(document.body) : each.eq(i - 1);
         api.set('position.at', (!i ? 'top' : 'bottom') + ' right');*/
      });
   };

   // Setup our timer function
   Utils.prototype.timer = function(event) {
      var api = $(this).data('qtip'),
         lifespan = 5000; // 5 second lifespan

      // If persistent is set to true, don't do anything.
      if(api.get('show.persistent') === true) { return; }

      // Otherwise, start/clear the timer depending on event type
      clearTimeout(api.timer);
      if(event.type !== 'mouseover') {
         api.timer = setTimeout(api.hide, lifespan);
      }
   };
   
   Utils.prototype.getTiniestCoverCol = function(pMin) {
	   var ret = null;
	   var height1 = $("#coversCol1").height();
	   var height2 = $("#coversCol2").height();
	   var height3 = $("#coversCol3").height();
	   var min = Math.min(parseInt(height1), parseInt(height2), parseInt(height3));
	   var max = Math.max(parseInt(height1), parseInt(height2), parseInt(height3));
	   if((max - min) > pMin){
		   if(min == parseInt(height1)) {
			   ret = $("#coversCol1");
		   }
		   else if(min == parseInt(height2)) {
			   ret = $("#coversCol2");
		   }
		   else {
			   ret = $("#coversCol3");
		   }
	   }
	   return ret;
   };
   
   

Utils.prototype.showQtipOnTarget = function(pMessage, target, position, hideEvent) {
	var message = $('<p />', {
		text : pMessage
	});
	if(!position) {
		position = {
			my : 'top center',
			at : 'bottom center',
			target : target
		};
	}
	if(!hideEvent) {
		hideEvent = 'focus';
	}
	if (target.qtip()) {
		target.qtip("destroy");
	}
	target.qtip({
		overwrite : false, // Make sure we only render one tooltip
		content : {
			text : message
		},
		position : position,
		show : {
			event : false, // Don't show it on a regular event
			ready : true, // Show it when ready (rendered)
			effect : function() {
				$(this).stop(0, 1).fadeIn(400);
			}, // Matches the hide effect
			delay : 0
		},
		hide : {
			event : hideEvent,
			delay : 100,
			distance : 5
		},
		style : {
			classes : "ui-tooltip-tipsy",
			tip : true
		},
		events : {
			render : function(event, api) {
			},
			hide: function(event, api) {
				target.qtip("destroy");
	      	}
		}
	});
	target.qtip('show');
};

Utils.prototype.loadImagesArray = function(pImages, pMaxWidth, pMaxHeigth, pCallback) {
	var index = pImages.length;
	for(var i=0;i<pImages.length;i++) {
		var container = pImages[i].container;
		var image = new Image();
		image.src = pImages[i].src;
		image.width = pMaxWidth;
		image.height = pMaxHeigth;
		container.append(image);
		$(image).attr('id', pImages[i].productId);
		image.onload = function() {
			index--;
			if(index == 0) {
				pCallback();
			}
		};
		$(image).click(function() {
			clickPubCallback($(this));
		});
	}
};

Utils.prototype.getCoverUrl = function(pId, pResolution) {
	var url = gTomodachiCoverUrl+"?id="+pId+"&width="+pResolution;
	if(gCoverQuality != "") {
		url += "&quality="+gCoverQuality;
	}
	return url;
};

Utils.prototype.padNumber = function(pNum) {	   
    return (pNum < 10 ? '0' : '') + pNum; 
};

Utils.prototype.setCardsCurrency = function(pCurrency) {
	switch(pCurrency) {
		case "EUR":
			$("#cardText1").text("La Carte Points AveComics 10€ 1000 points");
			$("#cardText2").text("La Carte Points AveComics 25€ 2500 points");
			$("#cardText3").text("La Carte Points AveComics 50€ 5000 points");
			$("#cardText4").text("La Carte Points AveComics 100€ 10000 points");
		break;
		case "USD":
			$("#cardText1").text("La Carte Points AveComics 15$ 1000 points");
			$("#cardText2").text("La Carte Points AveComics 37,5$ 2500 points");
			$("#cardText3").text("La Carte Points AveComics 75$ 5000 points");
			$("#cardText4").text("La Carte Points AveComics 150$ 10000 points");
		break;
		case "GPB":
			$("#cardText1").text("La Carte Points AveComics 10£ 1000 points");
			$("#cardText2").text("La Carte Points AveComics 25£ 2500 points");
			$("#cardText3").text("La Carte Points AveComics 50£ 5000 points");
			$("#cardText4").text("La Carte Points AveComics 100£ 10000 points");
		break;
	}
};

Utils.prototype.getProductIdFromUrl = function() {
	var reg=new RegExp("bd\/([0-9]*)\/[-a-zA-Z0-9_]*.html$","g");
	var prodId = reg.exec(window.location.href)["1"];
	return prodId;
};

Utils.prototype.getProductIdFromUrlDetail = function() {
	var reg=new RegExp("details\/([0-9]*)$","g");
	var prodId = reg.exec(window.location.href)["1"];
	return prodId;
};

Utils.prototype.getCategoryKeywordFromUrl = function() {
	var reg=new RegExp("cat-bd\/([-a-zA-Z0-9_]*).html$","g");
	var keyword = reg.exec(window.location.href)["1"];
	var keywordId = 0;
	switch (keyword) {
		case "humour" : 
			keywordId = '3';
			break;
		case "manga" : 
			keywordId = '4';
			break;
		case "bd" : 
			keywordId = '44';
			break;
		case "aventure" : 
			keywordId = '12';
			break;
		case "science-fiction" : 
			keywordId = '50';
			break;
		case "jeunesse" : 
			keywordId = '5';
			break;
	}
	return keywordId;
};

Utils.prototype.getEditorFromUrl = function() {
	var reg=new RegExp("editeur-bd\/([-a-zA-Z0-9_]*).html$","g");
	var editeur = reg.exec(window.location.href)["1"];
	regEx = /(-)/g;
	editeur = editeur.replace(regEx, " ");
	return editeur;
};

Utils.prototype.getTitleForUrl = function(pTitle) {
	pTitle = pTitle.replace("#", "T");
	pTitle = pTitle.replace(/\s+/g, "");
	var regEx = /:.*$/g;
	pTitle = pTitle.replace(regEx, "");
	regEx = /[^a-zA-Z0-9_]/g;
	pTitle = pTitle.replace(regEx, "-");
	regEx = /-+/g;
	pTitle = pTitle.replace(regEx, "-");
	regEx = /^-/g;
	pTitle = pTitle.replace(regEx, "");
	regEx = /-$/g;
	pTitle = pTitle.replace(regEx, "");
	return pTitle;
};

Utils.prototype.getEditorLink = function(pEditor) {
	var editorStr = this.getTitleForUrl(pEditor);
	return "http://www.avecomics.com/"+""+"editeur-bd/"+editorStr+".html";
};

Utils.prototype.getAuthorLink = function(pAuthor) {
	var authorStr = this.getTitleForUrl(pAuthor);
	return "http://www.avecomics.com/"+""+"auteur-bd/"+authorStr+".html";
};


Utils.prototype.stripAccents = function(pStr) {

	pStr = $.trim(pStr);
	pStr = pStr.toLowerCase();
	pStr = this.htmlentities(pStr, "ENT_NOQUOTES", 'utf-8');
	var reg = new RegExp("#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#+","gi");
	pStr = pStr.replace(reg, "$1");
	reg = new RegExp('#\&([A-za-z]{2})(?:lig)\;#',"gi");
	pStr = pStr.replace(reg, '$1');
	pStr = pStr.replace("#", "T");
	reg = /[^a-zA-Z0-9_]/g;
	pStr = pStr.replace(reg, "-")
	reg = /-+/g;
	pStr = pStr.replace(reg, "-");
	reg = /^-/g;
	pStr = pStr.replace(reg, "");
	reg = /-$/g;
	pStr = pStr.replace(reg, "");
	return pStr;

};

Utils.prototype.htmlentities = function(string, quote_style, charset, double_encode) {
    // Convert all applicable characters to HTML entities  
    // 
    // version: 1109.2015
    // discuss at: http://phpjs.org/functions/htmlentities
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: nobbler
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Ratheous
    // +   improved by: Rafał Kukawski (http://blog.kukawski.pl)
    // +   improved by: Dj (http://phpjs.org/functions/htmlentities:425#comment_134018)
    // -    depends on: get_html_translation_table
    // *     example 1: htmlentities('Kevin & van Zonneveld');
    // *     returns 1: 'Kevin &amp; van Zonneveld'
    // *     example 2: htmlentities("foo'bar","ENT_QUOTES");
    // *     returns 2: 'foo&#039;bar'
    var hash_map = this.get_html_translation_table('HTML_ENTITIES', quote_style),
        symbol = '';
    string = string == null ? '' : string + '';
 
    if (!hash_map) {
        return false;
    }
    
    if (quote_style && quote_style === 'ENT_QUOTES') {
        hash_map["'"] = '&#039;';
    }
    
    if (!!double_encode || double_encode == null) {
        for (symbol in hash_map) {
            if (hash_map.hasOwnProperty(symbol)) {
                string = string.split(symbol).join(hash_map[symbol]);
            }
        }
    } else {
        string = string.replace(/([\s\S]*?)(&(?:#\d+|#x[\da-f]+|[a-zA-Z][\da-z]*);|$)/g, function (ignore, text, entity) {
            for (symbol in hash_map) {
                if (hash_map.hasOwnProperty(symbol)) {
                    text = text.split(symbol).join(hash_map[symbol]);
                }
            }
            
            return text + entity;
        });
    }
 
    return string;
};

Utils.prototype.get_html_translation_table = function(table, quote_style) {
    // Returns the internal translation table used by htmlspecialchars and htmlentities  
    // 
    // version: 1109.2015
    // discuss at: http://phpjs.org/functions/get_html_translation_table
    // +   original by: Philip Peterson
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: noname
    // +   bugfixed by: Alex
    // +   bugfixed by: Marco
    // +   bugfixed by: madipta
    // +   improved by: KELAN
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Frank Forte
    // +   bugfixed by: T.Wild
    // +      input by: Ratheous
    // %          note: It has been decided that we're not going to add global
    // %          note: dependencies to php.js, meaning the constants are not
    // %          note: real constants, but strings instead. Integers are also supported if someone
    // %          note: chooses to create the constants themselves.
    // *     example 1: get_html_translation_table('HTML_SPECIALCHARS');
    // *     returns 1: {'"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;'}
    var entities = {},
        hash_map = {},
        decimal;
    var constMappingTable = {},
        constMappingQuoteStyle = {};
    var useTable = {},
        useQuoteStyle = {};
 
    // Translate arguments
    constMappingTable[0] = 'HTML_SPECIALCHARS';
    constMappingTable[1] = 'HTML_ENTITIES';
    constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
    constMappingQuoteStyle[2] = 'ENT_COMPAT';
    constMappingQuoteStyle[3] = 'ENT_QUOTES';
 
    useTable = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
    useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';
 
    if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
        throw new Error("Table: " + useTable + ' not supported');
        // return false;
    }
 
    entities['38'] = '&amp;';
    if (useTable === 'HTML_ENTITIES') {
        entities['160'] = '&nbsp;';
        entities['161'] = '&iexcl;';
        entities['162'] = '&cent;';
        entities['163'] = '&pound;';
        entities['164'] = '&curren;';
        entities['165'] = '&yen;';
        entities['166'] = '&brvbar;';
        entities['167'] = '&sect;';
        entities['168'] = '&uml;';
        entities['169'] = '&copy;';
        entities['170'] = '&ordf;';
        entities['171'] = '&laquo;';
        entities['172'] = '&not;';
        entities['173'] = '&shy;';
        entities['174'] = '&reg;';
        entities['175'] = '&macr;';
        entities['176'] = '&deg;';
        entities['177'] = '&plusmn;';
        entities['178'] = '&sup2;';
        entities['179'] = '&sup3;';
        entities['180'] = '&acute;';
        entities['181'] = '&micro;';
        entities['182'] = '&para;';
        entities['183'] = '&middot;';
        entities['184'] = '&cedil;';
        entities['185'] = '&sup1;';
        entities['186'] = '&ordm;';
        entities['187'] = '&raquo;';
        entities['188'] = '&frac14;';
        entities['189'] = '&frac12;';
        entities['190'] = '&frac34;';
        entities['191'] = '&iquest;';
        entities['192'] = '&Agrave;';
        entities['193'] = '&Aacute;';
        entities['194'] = '&Acirc;';
        entities['195'] = '&Atilde;';
        entities['196'] = '&Auml;';
        entities['197'] = '&Aring;';
        entities['198'] = '&AElig;';
        entities['199'] = '&Ccedil;';
        entities['200'] = '&Egrave;';
        entities['201'] = '&Eacute;';
        entities['202'] = '&Ecirc;';
        entities['203'] = '&Euml;';
        entities['204'] = '&Igrave;';
        entities['205'] = '&Iacute;';
        entities['206'] = '&Icirc;';
        entities['207'] = '&Iuml;';
        entities['208'] = '&ETH;';
        entities['209'] = '&Ntilde;';
        entities['210'] = '&Ograve;';
        entities['211'] = '&Oacute;';
        entities['212'] = '&Ocirc;';
        entities['213'] = '&Otilde;';
        entities['214'] = '&Ouml;';
        entities['215'] = '&times;';
        entities['216'] = '&Oslash;';
        entities['217'] = '&Ugrave;';
        entities['218'] = '&Uacute;';
        entities['219'] = '&Ucirc;';
        entities['220'] = '&Uuml;';
        entities['221'] = '&Yacute;';
        entities['222'] = '&THORN;';
        entities['223'] = '&szlig;';
        entities['224'] = '&agrave;';
        entities['225'] = '&aacute;';
        entities['226'] = '&acirc;';
        entities['227'] = '&atilde;';
        entities['228'] = '&auml;';
        entities['229'] = '&aring;';
        entities['230'] = '&aelig;';
        entities['231'] = '&ccedil;';
        entities['232'] = '&egrave;';
        entities['233'] = '&eacute;';
        entities['234'] = '&ecirc;';
        entities['235'] = '&euml;';
        entities['236'] = '&igrave;';
        entities['237'] = '&iacute;';
        entities['238'] = '&icirc;';
        entities['239'] = '&iuml;';
        entities['240'] = '&eth;';
        entities['241'] = '&ntilde;';
        entities['242'] = '&ograve;';
        entities['243'] = '&oacute;';
        entities['244'] = '&ocirc;';
        entities['245'] = '&otilde;';
        entities['246'] = '&ouml;';
        entities['247'] = '&divide;';
        entities['248'] = '&oslash;';
        entities['249'] = '&ugrave;';
        entities['250'] = '&uacute;';
        entities['251'] = '&ucirc;';
        entities['252'] = '&uuml;';
        entities['253'] = '&yacute;';
        entities['254'] = '&thorn;';
        entities['255'] = '&yuml;';
    }
 
    if (useQuoteStyle !== 'ENT_NOQUOTES') {
        entities['34'] = '&quot;';
    }
    if (useQuoteStyle === 'ENT_QUOTES') {
        entities['39'] = '&#39;';
    }
    entities['60'] = '&lt;';
    entities['62'] = '&gt;';
 
 
    // ascii decimals to real symbols
    for (decimal in entities) {
        if (entities.hasOwnProperty(decimal)) {
            hash_map[String.fromCharCode(decimal)] = entities[decimal];
        }
    }
 
    return hash_map;
};
/** @class */
var ComicDetail = function() {
    if (ComicDetail.caller != ComicDetail.getInstance) {
        throw new Error("Cet objet ne peut être instancier");
    }

	this.currentComic = null;
	this.previousComic = null;
	this.nextComic = null;
	this.coverFlowLoaded = false;
	this.currentRequest = gAlsoLikeUrl;
};

ComicDetail.instance = null;

ComicDetail.getInstance = function() {
    if (this.instance == null) {
        this.instance = new ComicDetail();
    }
    return this.instance;
};

ComicDetail.prototype.setComic = function(pComic, pCoverFlowLoaded) {
	$("#alsoLikeImgs").empty();
	gStore.offsetAlsoLike = 0;
	this.coverFlowLoaded = pCoverFlowLoaded;
	this.currentComic = pComic;
	var isFree = false;
	var inUserAsset = false;
	if(gUser) {
		inUserAsset = ComicsUtils.getInstance().isComicInUserAsset(this.currentComic.productId);
	}
	if(this.currentComic.price[gCurrency] == 0) {
		isFree = true;
	}
	/*this.previousComic = pPreviousComic;
	this.nextComic = pNextComic;*/
	this.sendGetAlsoLike();
	this.sendGetOtherTitle();
	if(!pCoverFlowLoaded) {
		setCoverComicDetail(Utils.getInstance().getCoverUrl(this.currentComic.id, gComicDetailCoverSize)); 
	}
	setTitleComicDetail(this.currentComic.title);
	setAuthorsComicDetail(gStore.getAuthorsFromComics(new Array(this.currentComic)));
	setEditorsComicDetail(gStore.getEditorsFromComics(new Array(this.currentComic)));
	setPriceComicDetail(this.currentComic.price[gCurrency]);
	setGenreComicDetail(gStore.getKeywordsFromComics(new Array(this.currentComic)));
	setLangueComicDetail(gStore.getLanguageFromId(this.currentComic.language));
	setParamsPlayer(this.currentComic, inUserAsset);
	setFacebookComments(this.currentComic);
	setButtonsText(inUserAsset, isFree);
	setSumUpComicDetail(this.currentComic.sumUp);
	setRatingComicDetail(this.currentComic.rating);
	setPreviewPages(this.currentComic.previewPages);
	//setPreviousCoverComicDetail(gFriendCoverComicsUrl+this.currentComic.id+"_"+gCoverResolutionString+".jpg");
	//setNextCoverComicDetail(gFriendCoverComicsUrl+this.currentComic.id+"_"+gCoverResolutionString+".jpg");
};

ComicDetail.prototype.addComicToCaddy = function(pIsFlashCall) {
	var showTip = true;
	if(pIsFlashCall) {
		showTip = "popPup";
	}
	Caddy.getInstance().addToCaddy(this.currentComic.productId, null, showTip, $("#buyButton"));
};

ComicDetail.prototype.addComicToCaddyForPresent = function() {
	Caddy.getInstance().addToCaddyForPresent(this.currentComic.productId, null, $("#offerButton"));
};

ComicDetail.prototype.sendCurrentRequest = function() {
	switch (this.currentRequest) {
		case gAlsoLikeUrl: 
			this.sendGetAlsoLike();
		break;
		case gSameAuthorUrl: 
			this.sendGetSameAuthor();
		break;
		case gSameEditorUrl: 
			this.sendGetSameEditor();
		break;
	}
};


ComicDetail.prototype.sendGetAlsoLike = function() {
	this.currentRequest = gAlsoLikeUrl;
	gStore.sendGetAlsoLike(this.currentComic.productId, gAlsoLikeUrl);
};

ComicDetail.prototype.sendGetSameAuthor = function() {
	this.currentRequest = gSameAuthorUrl;
	gStore.sendGetAlsoLike(this.currentComic.id, gSameAuthorUrl);
};

ComicDetail.prototype.sendGetSameEditor = function() {
	this.currentRequest = gSameEditorUrl;
	gStore.sendGetAlsoLike(this.currentComic.id, gSameEditorUrl);
};

ComicDetail.prototype.sendGetOtherTitle = function() {
	gStore.sendGetOtherTitleForDetail(this.currentComic.id);
};

ComicDetail.prototype.getProductUrl = function() {
	return "http://www.avecomics.com/"+""+"bd/"+this.currentComic.productId+"/"+Utils.getInstance().getTitleForUrl(this.currentComic.title)+".html";
};
/** @class */
var PasswordChangePopUp = function() {
};

PasswordChangePopUp.prototype.show = function() {
	var message = form = $("#formChangePwd");
	$('<div />').qtip({
		content : {
			text : message.add(form),
			title : "Changer de mot de passe"
		},
		position : {
			my : 'center',
			at : 'center', // Center it...
			target : $(window)
			// ... in the window
		},
		show : {
			ready : true, // Show it straight away
			modal : {
				on : true, // Make it modal (darken the rest of the page)...
				blur : false
				// ... but don't close the tooltip when clicked
			}
		},
		hide : true, // We'll hide it maunally so disable hide events
		style : 'ui-tooltip-rounded ui-tooltip-dialogue',
		events : {
			hide : function(event, api) {
				$("#oldPassword, #newPassword, #newPasswordConfirm").val("");
			},
			render : function(event, api) {
			}
		}
	});
};
/** @class */
var NewsLetterPopUp = function() {
};

NewsLetterPopUp.prototype.show = function() {
	var message = formNewsLetter = $("#formNewsletterSubscribe");
	$('<div />').qtip({
		content : {
			text : message.add(formNewsLetter),
			title : "Inscrivez-vous à notre newsletter"
		},
		position : {
			my : 'center',
			at : 'center', // Center it...
			target : $(window)
			// ... in the window
		},
		show : {
			ready : true, // Show it straight away
			modal : {
				on : true, // Make it modal (darken the rest of the page)...
				blur : false
				// ... but don't close the tooltip when clicked
			}
		},
		hide : true, // We'll hide it maunally so disable hide events
		style : 'ui-tooltip-rounded ui-tooltip-dialogue',
		events : {
			hide : function(event, api) {
				$("#newsLetterEmail").val("");
			},
			render : function(event, api) {
			}
		}
	});
};
/** @class */
var Comic = function() {
	/** @property */
	this.title = "";
	/** @property */
	this.id = "";
	/** @property */
	this.coverUrl = "";
	/** @property */
	this.productId = "";
	/** @property */
	this.coverId = "";
	/** @property */
	this.coverWidth = "";
	/** @property */
	this.coverHeight = "";
	/** @property */
	this.keywords = "";
	/** @property */
	this.authors = "";
	/** @property */
	this.editor = "";
	/** @property */
	this.collection = "";
	/** @property */
	this.language = "";
	/** @property */
	this.nombreDePages = "";
	/** @property */
	this.rating = "";
	/** @property */
	this.price = "";
	/** @property */
	this.aveId = "";
	/** @property */
	this.previewId = "";
	/** @property */
	this.screenVersion = "";
	/** @property */
	this.beginDate = "";
	/** @property */
	this.published = "";
	/** @property */
	this.publicationDate = "";
	/** @property */
	this.inAppId = "";
	/** @property */
	this.sumUp = "";
	/** @property */
	this.previewPages = "";
	/** @property */
	this.collectionPosition = 0;
	/** @property */
	this.comicTrack = 0;
};/** @class */
var User = function() {
	/** @property */
	this.token = "";
	/** @property */
	this.username = "";
	/** @property */
	this.password = "";
	/** @property */
	this.id = "";
	/** @property */
	this.nickname = "";
	/** @property */
	this.countryCode = "";
	/** @property */
	this.comicsIds = new Array();
	/** @property */
	this.currentCaddyRef = -1;
	/** @property */
	this.points = 0;
	/** @property */
	this.type = "";
	/** @property */
	this.email = "";
	/** @property */
	this.acceptSpam = "";
	/** @property */
	this.birth = "";
	/** @property */
	this.firstName = "";
	/** @property */
	this.lastName = "";
	/** @property */
	this.deviceName = "";
	/** @property */
	this.countryCode = "";
	/** @property */
	this.gender = "";
	/** @property */
	this.phone = "";
	/** @property */
	this.street = "";
	/** @property */
	this.zip = "";
	/** @property */
	this.city = "";
};/** @class */
var UploadAvatarPoPup = function() {
};

UploadAvatarPoPup.prototype.show = function() {
	var message = form = $("#formUploadAvatarProfil");
	$('<div />').qtip({
		content : {
			text : message.add(form),
			title : "Envoi d'un avatar"
		},
		position : {
			my : 'center',
			at : 'center', // Center it...
			target : $(window)
			// ... in the window
		},
		show : {
			ready : true, // Show it straight away
			modal : {
				on : true, // Make it modal (darken the rest of the page)...
				blur : false
				// ... but don't close the tooltip when clicked
			}
		},
		hide : true, // We'll hide it maunally so disable hide events
		style : 'ui-tooltip-rounded ui-tooltip-dialogue',
		events : {
			hide : function(event, api) {
				$("#imgAvatarPopUp").hide();
				$("#loadingUploadAvatar").hide();
				$("#returnMessage").text('');
			},
			render : function(event, api) {
			}
		}
	});
};
/** @class */
var RequestData = function() {
	/** @property */
	this.token = null;
	/** @property */
	this.data = null;
	/** @property */
	this.app_store = null;
	/** @property */
	this.pattern = null;
	/** @property */
	this.limit = null;
	/** @property */
	this.app_lang = null;
	/** @property */
	this.use_lang = null;
	/** @property */
	this.pack_ids = null;
};

RequestData.prototype.getData = function(pPattern, pOffset) {
	var ret = new Object();
	this.pattern = pPattern;
	ret.pattern = this.pattern;
	ret.app_store = this.app_store;
	ret.app_lang = gLocaleString;
	ret.use_lang = gUseLang;
	switch(pPattern) {
		case gPatternProductWithKeywords:
			ret.data = gSelectionKeyWord;
			ret.limit = 12;
			ret.offset = pOffset;
		break;
		
		case gPatternComicsFeatured:
			ret.limit = 12;
			ret.offset = pOffset;
		break;
		
		case gPatternComicsTopHundred:
			ret.top_window = gDateOfssetTop;
		break;
		
		case gPatternComicsWithCsvIds:
			ret.pack_ids = this.pack_ids;
		break;
		
		case gPatternTopSellMonth:
			ret.limit = 12;
			break;
			
		case gPatternProductInPrice: 
			ret.limit = 12;
			ret.offset = pOffset;
			ret.data = "4.99-euros-4.99"
			break;
	}
	return ret;
};

