var $j = jQuery.noConflict();

var NVI = {
	version: '0.0.0'
};

/*---------------------------------------------------------------------------------------------------
NVI.initRollOverImg // Créer des rollover selon le nom d'une classe et l'extension des images rollover, preload les images également
---------------------------------------------------------------------------------------------------*/
NVI.initRollOverImg = function (containerElement,startClassName,endClassName,rollOverSuffix, activateName){
	var els = $j(containerElement).find('.' + startClassName+'[src]');

	for(var i=0; i< els.length; i++){
		var rollOverImg = $j(els[i]);
			
		var startSrc    = rollOverImg.attr("src");
		var startSrcLen = startSrc.length;
		var filePath    = startSrc.substring(0,startSrcLen-4);
		var fileExt     = startSrc.substring(startSrcLen-4); 
		var rollSrc     = filePath + rollOverSuffix + fileExt; // on créer le chemin du rollover
		//rollOverImg.activateName = activateName;
		rollOverImg.data('rollSrc', rollSrc); // on assigne le chemin de départ à l'objet image
		rollOverImg.data('startSrc', startSrc) // on assigne le chemin rollover à l'objet image

		//Activate state
		if(rollOverImg.attr("class").indexOf(activateName) != -1){
			rollOverImg.attr("src",rollOverImg.data('rollSrc')); // assigne le chemin rollover
			rollOverImg.addClass(endClassName);
		}
		
		//MouseOver
		rollOverImg.bind("mouseover", function(){
			rollOverImg = $j(this);
			if(rollOverImg.hasClass(activateName))return;
			rollOverImg.attr("src",rollOverImg.data('rollSrc'));
			rollOverImg.addClass(endClassName);
  		});
				
		//MouseOver
		rollOverImg.bind("mouseout", function(){
			rollOverImg = $j(this);
			if(rollOverImg.hasClass(activateName))return;
			rollOverImg.attr("src",rollOverImg.data('startSrc'));
			rollOverImg.removeClass(endClassName);
  		});

		//Preloading
		if (!document.createElement) return false;
		var refPreloadImg = $j(document.createElement("img")); // crée un élément img qui n'est pas dans le document (donc invisible)
		refPreloadImg.attr("src", rollSrc); // assigne le chemin du rollover
		
	}
}


/*---------------------------------------------------------------------------------------------------
NVI.initEqualHeight //
---------------------------------------------------------------------------------------------------*/
NVI.initEqualHeight = function(containerElement){
	if(!containerElement)containerElement = document;
	var els = $j(containerElement).find('*');
	var eqEls = new Array();
	for(var i=0; i< els.length; i++){
		var el = els[i];
		if(el.className.indexOf("equalHeight_@") != -1){
			var startSubString = el.className.indexOf("equalHeight_@");
			var string = el.className.substring(startSubString);
			var param1 = string.split('@')[1];
			var param1 = param1.split(' ')[0];
			eqEls.push(param1);
			if(!eqEls[param1])eqEls[param1] = new Array();
			eqEls[param1].push(el);
		}
	}
	for(var x in eqEls){
		if(typeof(eqEls[x]) == 'object'){
			var maxHeight = 0;
			for(var y in eqEls[x]){
				var el = eqEls[x][y];
				if(typeof(el) == 'object'){
					if(el.offsetHeight > maxHeight) maxHeight = el.offsetHeight;
				}
			}
			for(var y in eqEls[x]){
				var el = eqEls[x][y];
				if(typeof(el) == 'object'){ // sinon on a un bug quand on inclu prototype
					el.style.minHeight = maxHeight + "px";
					if($j.browser.msie){
						el.style.height = maxHeight + "px";
					}
				}
			}
		}
	}
}

/*---------------------------------------------------------------------------------------------------
initStripeTables // Ajoute des stripes à toutes les tables possèdant une certaine classe
---------------------------------------------------------------------------------------------------*/
NVI.initStripeTables = function(containerElement, tableClass, trClasses){
	var tables = $j(containerElement).find('.' + tableClass);
	for (var i=0; i<tables.length; i++) {
		NVI.stripeTable($j(tables[i]), trClasses);
	}
}

/*---------------------------------------------------------------------------------------------------
stripeTable // Ajoute des stripes à une table
---------------------------------------------------------------------------------------------------*/
NVI.stripeTable = function(tableElement, trClasses){
	var rows = $j(tableElement).find("tr");
	for (var i=0; i<rows.length; i++) {
		$j(rows[i]).addClass(trClasses[i%(trClasses.length)]);
	}
}

/*---------------------------------------------------------------------------------------------------
initHighlightTablesRows // Ajoute une class au tr lors du rollover sur une table  
---------------------------------------------------------------------------------------------------*/
NVI.initHighlightTablesRows = function(containerElement,tableClass, highlightClass) {
	var tables = $j(containerElement).find('.' + tableClass + ' tr').each(function(){
		NVI.highlightElement(this, highlightClass);				
	});
}

/*---------------------------------------------------------------------------------------------------
highlightElement // Ajoute une class a un element lors du rollover
---------------------------------------------------------------------------------------------------*/
NVI.highlightElement = function(element,highlightClass) {
	element = $j(element);
	element.bind("mouseover", function(){
		$j(this).addClass(highlightClass);
	});
	element.bind("mouseout", function(){
		$j(this).removeClass(highlightClass);
	});				
}

/*---------------------------------------------------------------------------------------------------
toggleContent //
---------------------------------------------------------------------------------------------------*/
NVI.toggleContent = function(openBtn, closeBtn, content, animType, startOpen, switchBtn, time, classToRemove, callBackOpen, callBackClose){
	
	closeBtn = $j(closeBtn);
	openBtn = $j(openBtn);
	content = $j(content);
	startOpen = (startOpen === true) ? true : false;
	switchBtn = (switchBtn === true) ? true : false;
	time = (!time) ? 0 : time * 1000;
	
	if(animType == 'slide'){
		content.data('animTypeClose', "slideUp");
		content.data('animTypeOpen', "slideDown");
	}else if(animType == 'show'){
		content.data('animTypeClose', "hide");
		content.data('animTypeOpen', "show");
	}else if(animType == 'fade'){
		content.data('animTypeClose', "fadeOut");
		content.data('animTypeOpen', "fadeIn");
	}else{
		content.data('animTypeClose', "toggle");
		content.data('animTypeOpen', "toggle");
	}
	closeBtn.data('callBack', callBackClose);
	openBtn.data('callBack', callBackOpen);
	
	if(startOpen){
		if(switchBtn){
			closeBtn.show();
			openBtn.hide();
		}
	}else{
		content.hide();
		if(switchBtn){
			closeBtn.hide();
			openBtn.show();
		}
	}
		
	openBtn.bind("click", function(){
		content.stop(false, true);
		content[content.data("animTypeOpen")](time, $j(this).data("callBack"));
		if(switchBtn){
			$j(openBtn).hide();
			$j(closeBtn).show();
		}
	});
	
	closeBtn.bind("click", function(){
		content.stop(false, true);
		content[content.data("animTypeClose")](time, $j(this).data("callBack"));
		if(switchBtn){
			$j(closeBtn).hide();
			$j(openBtn).show();
		}
	});

	closeBtn.removeClass(classToRemove);
	openBtn.removeClass(classToRemove);
	content.removeClass(classToRemove);
}
/*---------------------------------------------------------------------------------------------------
setJsClassToBodyFast // 
---------------------------------------------------------------------------------------------------*/
NVI._jsClass = "jsActivated";
NVI.setJsClassToBodyFast = function(jsClass){
	if(jsClass)NVI._jsClass = jsClass;
	if(!$j(document.body).hasClass(NVI._jsClass)){
		$j(document.body).addClass(NVI._jsClass);
		setTimeout(NVI.setJsClassToBodyFast, 10, NVI._jsClass);
	}
}

/*---------------------------------------------------------------------------------------------------
initPngFix // 
---------------------------------------------------------------------------------------------------*/
NVI.initPngFix = function(blankImgPath, htcPath, rule, tileJsPath){
	if(!rule)rule = 'img'
	if(document.all && /MSIE (5\.5|6)/.test(navigator.userAgent) && document.styleSheets && document.styleSheets[0] && document.styleSheets[0].addRule){
		window.__BLANK_IMG = blankImgPath;
		//document.styleSheets[0].addRule(rule, 'behavior: url("'+ htcPath +'")');
		document.write("\n<style>\n<!--\n" + rule + "{"+'behavior: url("'+ htcPath +'")'+"}\n" + "-->\n</style>\n");
		if(tileJsPath)document.write('<script type="text/javascript" src="'+ tileJsPath + '"></script>');
	}
}





/*NVI.test = function () {
	
	//"private" method:
	var myPrivateMethod = function () {
		alert('private method');
	}
	
	return  {
		myPublicMethod: function () {
			myPrivateMethod();
			alert('test');
		}
	};

}(); // the parens here cause the anonymous function to execute and return*/
//NVI.test.myPublicMethod();








