/**
 * LICENCE[[
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1/CeCILL 2.O
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is kelis.fr code.
 *
 * The Initial Developer of the Original Code is 
 * nicolas.boyer@kelis.fr
 *
 * Portions created by the Initial Developer are Copyright (C) 2009-2010
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s): samuel.monsarrat@kelis.fr
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * or the CeCILL Licence Version 2.0 (http://www.cecill.info/licences.en.html),
 * in which case the provisions of the GPL, the LGPL or the CeCILL are applicable
 * instead of those above. If you wish to allow use of your version of this file
 * only under the terms of either the GPL, the LGPL or the CeCILL, and not to allow
 * others to use your version of this file under the terms of the MPL, indicate
 * your decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL, the LGPL or the CeCILL. If you do not
 * delete the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL, the LGPL or the CeCILL.
 * ]]LICENCE
 */

/** Project Gallery manager */
var projGalleryMgr = {
	fprojGalleryPath : [],
	fCls : "projGal",
	fClsBox : "GalBox",
	fClsBtnOff : "btnOff",
	fDefaultSpeed : 4,
	fSpeed : 0
}

/** projGalleryMgr.init. */
projGalleryMgr.init = function() {
	scCoLib.util.log("projGalleryMgr.init");
	this.fNavie6 = scCoLib.isIE && parseFloat(navigator.appVersion.split("MSIE")[1]) < 7;
	this.fNavie7 = scCoLib.isIE && parseFloat(navigator.appVersion.split("MSIE")[1]) < 8;	
}

/** projGalleryMgr.registerGallery.
 * @param pPathProjGal scPaLib path vers les galeries.
 * @param pOpts options de la galerie.
 *           size : 1 = logos toujours sur une ligne / 2 = si plus de 5 logos, on passe sur 2 lignes
 *           speed : 4 = Vitesse de défilement
 *           ie7Compatibility : true = Compatibilité IE7 scentreprise
 *           counter : true = compteur de projets
 *           clsPre : préfix de classe CSS
 *			 clsPreBox : préfix de classe CSS pour la boite contenant les logos
 *			 clsBtnOff : préfix de classe CSS pour la les Btn inactif
 */
projGalleryMgr.registerGallery = function(pPathProjGal, pOpts) {
	var vProjGal = new Object;
	vProjGal.fPath = pPathProjGal;
	vProjGal.fOpts = (typeof pOpts == "undefined" ? {size:1,speed:this.fDefaultSpeed,ie7Compatibility:true,counter:false,clsPre:this.fCls,clsPreBox:this.fClsBox,clsBtnOff:this.fClsBtnOff} : pOpts);
	vProjGal.fOpts.size = (typeof vProjGal.fOpts.size == "undefined" ? 1 : vProjGal.fOpts.size);	
	vProjGal.fOpts.speed = (typeof vProjGal.fOpts.speed == "undefined" ? this.fDefaultSpeed : vProjGal.fOpts.speed);
	vProjGal.fOpts.ie7Compatibility = (typeof vProjGal.fOpts.ie7Compatibility == "undefined" ? false : vProjGal.fOpts.ie7Compatibility);
	vProjGal.fOpts.counter = (typeof vProjGal.fOpts.counter == "undefined" ? true : vProjGal.fOpts.counter);
	vProjGal.fOpts.clsPre = (typeof vProjGal.fOpts.clsPre == "undefined" ? this.fCls : vProjGal.fOpts.clsPre);
	vProjGal.fOpts.clsPreBox = (typeof vProjGal.fOpts.clsPreBox == "undefined" ? this.fClsBox : vProjGal.fOpts.clsPreBox);
	vProjGal.fOpts.clsBtnOff = (typeof vProjGal.fOpts.clsBtnOff == "undefined" ? this.fClsBtnOff : vProjGal.fOpts.clsBtnOff);
	this.fprojGalleryPath[this.fprojGalleryPath.length] = vProjGal;
}

/** projGalleryMgr.onLoad - called by the scenari framework, inits the manager. */
projGalleryMgr.onLoad = function() {
	scCoLib.util.log("projGalleryMgr.onLoad");
	this.xInitProjGalleries(document.body);
}

/* ================== global managers =====================*/
/** projGalleryMgr.xBtnMgr - centralized button manager for onclick */
projGalleryMgr.xBtnMgr = function(pBtn, pOpts) {
	scCoLib.util.log("projGalleryMgr.xBtnMgr: "+pBtn.fName);
	var vProjGallery = pBtn.fProjGallery;
	var vIdx = pBtn.fIdx;
	switch(pBtn.fName){
		case pOpts.clsPre + "BtnLogo":
			this.xPGGalleryMode(vProjGallery, vIdx, pOpts);
			vProjGallery.fBtnClose.focus();
			break;
		case pOpts.clsPre + "BtnPrv":
			this.xPGGalleryPrv(vProjGallery);break;
		case pOpts.clsPre + "BtnNxt":
			this.xPGGalleryNxt(vProjGallery);break;
		case pOpts.clsPre + "BtnClose":
			this.xPGLogoMode(vProjGallery, pOpts);break;
		
		case pOpts.clsPreBox + "BtnPrv":
			this.fSpeed-=pOpts.speed;this.xStep(-20,vProjGallery);break;
		case pOpts.clsPreBox + "BtnNxt":
			this.fSpeed+=pOpts.speed;this.xStep(20,vProjGallery);break;
	}
	return false;
}

/* ================== projGallery manager =====================*/
projGalleryMgr.xInitProjGalleries = function(pCo) {
	scCoLib.util.log("projGalleryMgr.xInitGalleries");
	for(var i in this.fprojGalleryPath) {
		var vProjGalleries = scPaLib.findNodes(this.fprojGalleryPath[i].fPath, pCo);
		for(var j in vProjGalleries) this.xInitProjGallery(vProjGalleries[j],this.fprojGalleryPath[i].fOpts);		
	}
}

projGalleryMgr.xInitProjGallery = function(pProjGal,pOpts) {
	if (this.fNavie6) return;
	try {	
		var vProjGallery = pProjGal;
		if (vProjGallery) {
		
			/** Spécifique scent et pour compatibilité IE7 */
			if (pOpts.ie7Compatibility == true) {
				this.fFooter = scPaLib.findNode("ide:footer");
				this.fFooterBanner = scPaLib.findNode("des:.tplFootBanner");
				this.fOutCat =  scPaLib.findNode("des:.outCat_sel_yes");
			}
			/************************************************/
			
			vProjGallery.className = vProjGallery.className + " " + pOpts.clsPre + "Fra";
			vProjGallery.fClass = vProjGallery.className;
			
			//Boite encadrante du widget ProjGallery
			vProjGallery.fProjGalWidget = this.xAddElt("div", vProjGallery.parentNode, pOpts.clsPre + "Widget", null, null, vProjGallery);
			
			//Création de la fleche de déplacement prev et initialisation du rollOver
			vProjGallery.fGalBoxBtnPrv = this.xAddBtn(vProjGallery.fProjGalWidget, vProjGallery, pOpts.clsPreBox + "BtnPrv", this.xGetStr(8), this.xGetStr(9), pOpts, "scrollBtnType");
			
			//Boite des Logos
			vProjGallery.fProjGalBox = this.xAddElt("div", vProjGallery.fProjGalWidget, pOpts.clsPre + "Box", null, null, null);
			
			//Création de la fleche de déplacement next et initialisation du rollOver
			vProjGallery.fGalBoxBtnNxt = this.xAddBtn(vProjGallery.fProjGalWidget, vProjGallery, pOpts.clsPreBox + "BtnNxt", this.xGetStr(10), this.xGetStr(11), pOpts, "scrollBtnType");						
			
			//Boite de contenu des logos
			vProjGallery.fProjGalBoxContent = this.xAddElt("div", vProjGallery.fProjGalBox, pOpts.clsPre + "BoxContent", null, null, null);

			vProjGallery.fOver = this.xAddElt("div", vProjGallery.parentNode, pOpts.clsPre + "Over",null, null, vProjGallery);
			
			//Création des btn logos
			vProjGallery.fProjSheets =scPaLib.findNodes("chi:",vProjGallery);							
			for (var k in vProjGallery.fProjSheets) {
				var vProjSheet  = vProjGallery.fProjSheets[k];
				vProjSheet.style.display = "none";
				vTitleNode = scPaLib.findNode("des:.bkBase_ti/chi:span",vProjSheet)
				vLogoNode = scPaLib.findNode("des:img",vProjSheet);
				if (vTitleNode) var vTitle = vTitleNode.innerHTML;
				if (vLogoNode) {
					var vLogo = vLogoNode;
					var vProjGalLogo = '<img style="padding-top:'+ (80-vLogo.getAttribute("height"))/2 +'px;" class="'+ pOpts.clsPre +'binImgInline" title="'+ vTitle +'" src="'+ vLogo.src +'" alt="'+ vLogo.alt +'">';
				} else var vProjGalLogo = '<span class="'+ pOpts.clsPre +'NoLogo">'+this.xGetStr(12)+'</span>';
				vProjGalBtn = this.xAddBtn(vProjGallery.fProjGalBoxContent, vProjGallery, pOpts.clsPre + "BtnLogo", vProjGalLogo, vTitle, pOpts, null, k-1);
				vProjGalBtn.style.cssFloat  = "left";
				vProjGalBtn.style.width  = "120px";
				vProjGalBtn.style.height  = "80px";
				
				//Largeur du bouton Logo padding et margin compris
				var vPaddingLeft = this.xGetStyle(vProjGalBtn,"paddingLeft");
				var vPaddingRight = this.xGetStyle(vProjGalBtn,"paddingRight");
				var vMarginLeft = this.xGetStyle(vProjGalBtn,"marginLeft");
				var vMarginRight = this.xGetStyle(vProjGalBtn,"marginRight");
				vPaddingLeft = (vPaddingLeft == "auto" ? "0px" : vPaddingLeft);
				vPaddingRight = (vPaddingRight == "auto" ? "0px" : vPaddingRight);	
				vMarginLeft = (vMarginLeft == "auto" ? "0px" : vMarginLeft);	
				vMarginRight = (vMarginRight == "auto" ? "0px" : vMarginRight);	
				vProjGallery.fProjSheetWidth = 120 + parseInt(vPaddingLeft.substring(0,vPaddingLeft.indexOf("px"))) + parseInt(vPaddingRight.substring(0,vPaddingRight.indexOf("px"))) + parseInt(vMarginLeft.substring(0,vMarginLeft.indexOf("px"))) + parseInt(vMarginRight.substring(0,vMarginRight.indexOf("px")));
			}
			
			//Toolbar du player
			vProjGallery.fToolbar = this.xAddElt("div", vProjGallery.parentNode, pOpts.clsPre + "Tools", null, null, null);
			vProjGallery.fBtnClose = this.xAddBtn(vProjGallery.fToolbar, vProjGallery, pOpts.clsPre + "BtnClose", this.xGetStr(0), this.xGetStr(1), pOpts);
			this.xAddSep(vProjGallery.fToolbar,pOpts);
			vProjGallery.fNavBtns = this.xAddElt("span", vProjGallery.fToolbar, pOpts.clsPre + "NavBtns");
			vProjGallery.fBtnPrv = this.xAddBtn(vProjGallery.fNavBtns, vProjGallery, pOpts.clsPre + "BtnPrv", this.xGetStr(2), this.xGetStr(3), pOpts);
			this.xAddSep(vProjGallery.fNavBtns,pOpts);
			vProjGallery.fBtnNxt = this.xAddBtn(vProjGallery.fNavBtns, vProjGallery, pOpts.clsPre + "BtnNxt", this.xGetStr(4), this.xGetStr(5), pOpts);
			if(pOpts.counter == true) {
				this.xAddSep(vProjGallery.fNavBtns,pOpts);
				var vBlockCount = this.xAddElt("span", vProjGallery.fToolbar, pOpts.clsPre + "CountBk");
				var vLblCount = this.xAddElt("span", vBlockCount, pOpts.clsPre + "CountLbl");
				vLblCount.innerHTML = "<span>"+this.xGetStr(6)+"</span>"
				vProjGallery.fCount = this.xAddElt("span", vBlockCount, pOpts.clsPre + "CountTxt");
			}
			
			this.xPGLogoMode(vProjGallery,pOpts);
			
			//Init des fleches de déplacement du widget
			if(pOpts.clsBtnOff) {
				this.xCheckBtn(vProjGallery,pOpts);
				scSiLib.addRule(vProjGallery.fProjGalBox, this);
				vProjGallery.fProjGalBox.onscroll = function(){projGalleryMgr.xCheckBtn(vProjGallery,pOpts)};
			}	 
		}
	} catch(e){
		scCoLib.util.logError("scImgMgr.xInitAnim::Error", e);
	}
}

projGalleryMgr.execTask = function(){
	try {
		if(this.fSpeed == 0) return false;
		this.fCt.scrollLeft += this.fSpeed;
		return true;
	}catch(e){
		this.fSpeed = 0;
		return false;
	}
}

projGalleryMgr.xMoveLayer = function(pPlayer){
	this.fCt = pPlayer.fProjGalBox;
	scTiLib.addTaskNow(projGalleryMgr);
}

projGalleryMgr.xStep = function(pPx,pPlayer) {
	try { pPlayer.fProjGalBox.scrollLeft += pPx; }catch(e){}
}

projGalleryMgr.xCheckBtn = function(pPlayer,pOpts){
	var vScrollLeft = pPlayer.fProjGalBox.scrollLeft;
	var vBtnPrvOff = pPlayer.fGalBoxBtnPrv.className.indexOf(pOpts.clsBtnOff);
	if(vScrollLeft <= 0) {
		if(vBtnPrvOff < 0) pPlayer.fGalBoxBtnPrv.className+= " "+pOpts.clsBtnOff;
	} else {
		if(vBtnPrvOff >= 0) pPlayer.fGalBoxBtnPrv.className = pPlayer.fGalBoxBtnPrv.className.substring(0, vBtnPrvOff);
	}
	var vContentL = pPlayer.fProjGalBoxContent.offsetWidth;
	var vBtnNxtOff = pPlayer.fGalBoxBtnNxt.className.indexOf(pOpts.clsBtnOff);
	if( vContentL - vScrollLeft <= pPlayer.fProjGalBox.offsetWidth){
		if(vBtnNxtOff < 0) pPlayer.fGalBoxBtnNxt.className+= " "+pOpts.clsBtnOff;
	} else {
		if(vBtnNxtOff >=0) pPlayer.fGalBoxBtnNxt.className = pPlayer.fGalBoxBtnNxt.className.substring(0, vBtnNxtOff);
	}
}

projGalleryMgr.xPGLogoMode = function(pPlayer, pOpts){
	scCoLib.util.log("projGalleryMgr.xPGLogoMode");
	pPlayer.fToolbar.style.display = "none";
	
	/** Spécifique scent et pour compatibilité IE7 **/
	//si IE 7 gestion des zindex de certains éléments pour les repasser au dessus
	if (this.fNavie7) {
		if (this.fFooter) this.fFooter.style.position = "static";
		if (this.fFooterBanner) this.fFooterBanner.style.visibility = "visible";
		if (this.fOutCat) this.fOutCat.style.display = "";
	}
	/************************************************/
			
	pPlayer.fProjGalBox.style.overflow = "hidden";
	pPlayer.fProjGalBox.style.width = "496px";
	for(var i in pPlayer.fProjSheets) {
		var vProjSheet = pPlayer.fProjSheets[i];
		vProjSheet.style.display = "none";	
	}
	//Hauteur du widget en fonction des options
	if (pOpts.size == 2) {
		pPlayer.fProjGalBoxContent.style.width = (pPlayer.fProjSheets.length < 9 ? "496px" : (pPlayer.fProjSheetWidth*(pPlayer.fProjSheets.length+1)/2)+"px");
		var vProjSheetsLenght = 9;
	} else {
		pPlayer.fProjGalBoxContent.style.width = pPlayer.fProjSheetWidth*pPlayer.fProjSheets.length+"px";
		var vProjSheetsLenght = 5;
	}
	//Ajout de classe aux boutons quand ils ne sont pas actifs
	pPlayer.fGalBoxBtnPrv.className = pPlayer.fGalBoxBtnPrv.className + (pPlayer.fProjSheets.length < vProjSheetsLenght ? " btnNoAct" : "");
	pPlayer.fGalBoxBtnNxt.className = pPlayer.fGalBoxBtnNxt.className + (pPlayer.fProjSheets.length < vProjSheetsLenght ? " btnNoAct" : "");
	
	//Placement des flêches au centre verticalement de la boite des ptojets
	pPlayer.fGalBoxBtnPrv.style.marginBottom = (pPlayer.fProjGalBox.offsetHeight-pPlayer.fGalBoxBtnPrv.offsetHeight)/2 + "px";
	pPlayer.fGalBoxBtnNxt.style.marginBottom = (pPlayer.fProjGalBox.offsetHeight-pPlayer.fGalBoxBtnNxt.offsetHeight)/2 + "px";
	pPlayer.className = pPlayer.fClass;
	pPlayer.fOver.style.display = "none";
}

projGalleryMgr.xPGGalleryMode = function(pPlayer, pIdx, pOpts){
	scCoLib.util.log("projGalleryMgr.xPGGalleryMode");
	pPlayer.fToolbar.style.display = "";
	
	/** Spécifique scent et pour compatibilité IE7 **/
	//si IE 7 gestion des zindex de certains éléments pour les repasser en dessous
	if (this.fNavie7) {
		if (this.fFooter) this.fFooter.style.position = "static";
		if (this.fFooterBanner) this.fFooterBanner.style.visibility = "hidden";
		if (this.fOutCat) this.fOutCat.style.display = "none";
	}
	/************************************************/
	
	pPlayer.fIdx = pIdx;
	pPlayer.className = pPlayer.fClass + " " + pOpts.clsPre + "FraAct";
	pPlayer.fOver.style.display = "";
	this.xPGGalleryNxt(pPlayer);
}

projGalleryMgr.xPGGalleryPrv = function(pPlayer){
	scCoLib.util.log("projGalleryMgr.xPGGalleryPrv");
	if (pPlayer.fIdx <= 0) return;
	this.xPGGalleryGotoStep(pPlayer,--pPlayer.fIdx);
}

projGalleryMgr.xPGGalleryNxt = function(pPlayer){
	scCoLib.util.log("projGalleryMgr.xPGGalleryNxt");
	if (pPlayer.fIdx >= pPlayer.fProjSheets.length-1) return;
	this.xPGGalleryGotoStep(pPlayer,++pPlayer.fIdx);
}

projGalleryMgr.xPGGalleryGotoStep = function(pPlayer, pIdx){
	scCoLib.util.log("projGalleryMgr.xPGGalleryGotoStep: "+pIdx);
	for(var i in pPlayer.fProjSheets) {
		var vProjSheet = pPlayer.fProjSheets[i];
		vProjSheet.style.display = (pIdx == i ? "" : "none");
	}
	pPlayer.fBtnPrv.style.visibility = (pPlayer.fIdx <= 0 ? "hidden" : "");
	pPlayer.fBtnNxt.style.visibility = (pPlayer.fIdx >= pPlayer.fProjSheets.length-1 ? "hidden" : "");
	pPlayer.fCount.innerHTML = "<span>"+(pPlayer.fIdx+1)+"/"+pPlayer.fProjSheets.length+"</span>";
	if (pPlayer.fIdx >= pPlayer.fProjSheets.length-1) pPlayer.fBtnClose.focus();
}

/* ================== ToolBox =====================*/
/** projGalleryMgr.xScrollBtn - scroll button for onrollover */
projGalleryMgr.xScrollBtn = function(pBtn,pOpts){
	scCoLib.util.log("projGalleryMgr.xScrollBtn: "+pBtn.fName);
	var vProjGallery = pBtn.fProjGallery;
	switch(pBtn.fName){
		case pOpts.clsPreBox + "BtnNxt":
			if (this.fSpeed<=0) {this.fSpeed=pOpts.speed;this.xMoveLayer(vProjGallery);};break;
		case pOpts.clsPreBox + "BtnPrv":
			if (this.fSpeed>=0) {this.fSpeed=-pOpts.speed;this.xMoveLayer(vProjGallery);};break;
	}
	return false;
}

/** projGalleryMgr.xAddSep : Add a simple textual separator : " | ". */
projGalleryMgr.xAddSep = function(pParent,pOpts){
	var vSep = document.createElement("span");
	vSep.className = pOpts.clsPre + "Sep";
	vSep.innerHTML = " | "
	pParent.appendChild(vSep);
}

/** projGalleryMgr.xAddElt : Add an HTML element to a parent node. */
projGalleryMgr.xAddElt = function(pName, pParent, pClassName, pNoDisplay, pHidden, pNxtSib){
	var vElt;
	if(scCoLib.isIE && pName.toLowerCase() == "iframe") {
		var vEltHolder = pParent.ownerDocument.createElement("div");
		if (pNxtSib) pParent.insertBefore(vEltHolder,pNxtSib)
		else pParent.appendChild(vEltHolder);
		vEltHolder.innerHTML = "<iframe scrolling='no' frameborder='0' allowtransparency='true'></iframe>";
		vElt = vEltHolder.firstChild;
	} else {
		vElt = pParent.ownerDocument.createElement(pName);
		if (pNxtSib) pParent.insertBefore(vElt,pNxtSib)
		else pParent.appendChild(vElt);
	}
	if (pClassName) vElt.className = pClassName;
	if (pNoDisplay) vElt.style.display = "none";
	if (pHidden) vElt.style.visibility = "hidden";
	return vElt;
}

/** projGalleryMgr.xAddBtn : Add a HTML button to a parent node. */
projGalleryMgr.xAddBtn = function(pParent,pProjGallery,pClass,pCapt,pTitle,pOpts,pScroll,pIdx,pNoCmd){
	var vBtn = document.createElement("a");
	vBtn.className = pClass;
	vBtn.fName = pClass;
	vBtn.href = "#";
	vBtn.target = "_self";
	if (!pNoCmd) vBtn.onclick=function(){return projGalleryMgr.xBtnMgr(this, pOpts);}
	if (pScroll) {
		vBtn.onmouseover = function(){return projGalleryMgr.xScrollBtn(this, pOpts);}
		vBtn.onmouseout = function(){projGalleryMgr.fSpeed=0}
	}
	vBtn.setAttribute("title",pTitle);
	vBtn.innerHTML="<span>"+pCapt+"</span>";
	vBtn.fProjGallery = pProjGallery;
	if (pIdx) vBtn.setAttribute("id","PGBtnLogo_"+pIdx);
	vBtn.fIdx = vBtn.id.substring(10);
	pParent.appendChild(vBtn);
	return vBtn;
}

/** projGalleryMgr.xGetStr : Reteive a string. */
projGalleryMgr.xGetStr = function(pStrId) {
	return this.fStrings[pStrId];
}

/** projGalleryMgr.xGetStyle : Get style of an element. */
projGalleryMgr.xGetStyle = function(pNode,pStyleProp)	{
	if (pNode.currentStyle) //IE
		return pNode.currentStyle[pStyleProp];
	else if (document.defaultView && document.defaultView.getComputedStyle) //Firefox
		return document.defaultView.getComputedStyle(pNode, "")[pStyleProp];
	else //try and get inline style
		return pNode.style[pStyleProp];
}

loadSortKey : "projGalleryMgr";
scOnLoads[scOnLoads.length] = projGalleryMgr;
