if(!NVILib){var NVILib = new Object();}
NVILib.version = '0.0.0';
NVILib.jQueryRequiredVersion = '1.3.2';

if(typeof(jQuery) != "undefined" && jQuery().jquery == NVILib.jQueryRequiredVersion){
	var $j = jQuery.noConflict();
	
	/*---------------------------------------------------------------------------------------------------
	NVILib.initRollOverImg // Cr�er des rollover selon le nom d'une classe et l'extension des images rollover, preload les images �galement
	---------------------------------------------------------------------------------------------------*/
	NVILib.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
			
		}
	}
	
	
	/*---------------------------------------------------------------------------------------------------
	NVILib.initEqualHeight //
	---------------------------------------------------------------------------------------------------*/
	NVILib.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
	---------------------------------------------------------------------------------------------------*/
	NVILib.initStripeTables = function(containerElement, tableClass, trClasses){
		var tables = $j(containerElement).find('.' + tableClass);
		for (var i=0; i<tables.length; i++) {
			NVILib.stripeTable($j(tables[i]), trClasses);
		}
	}
	
	/*---------------------------------------------------------------------------------------------------
	stripeTable // Ajoute des stripes � une table
	---------------------------------------------------------------------------------------------------*/
	NVILib.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  
	---------------------------------------------------------------------------------------------------*/
	NVILib.initHighlightTablesRows = function(containerElement,tableClass, highlightClass) {
		var tables = $j(containerElement).find('.' + tableClass + ' tr').each(function(){
			NVILib.highlightElement(this, highlightClass);				
		});
	}
	
	/*---------------------------------------------------------------------------------------------------
	highlightElement // Ajoute une class a un element lors du rollover
	---------------------------------------------------------------------------------------------------*/
	NVILib.highlightElement = function(element,highlightClass) {
		element = $j(element);
		element.bind("mouseover", function(){
			$j(this).addClass(highlightClass);
		});
		element.bind("mouseout", function(){
			$j(this).removeClass(highlightClass);
		});				
	}
	
	/*---------------------------------------------------------------------------------------------------
	toggleContent //
	---------------------------------------------------------------------------------------------------*/
	NVILib.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 // 
	---------------------------------------------------------------------------------------------------*/
	NVILib._jsClass = "jsActivated";
	NVILib.setJsClassToBodyFast = function(jsClass){
		if(jsClass)NVILib._jsClass = jsClass;
		if(!$j(document.body).hasClass(NVILib._jsClass)){
			$j(document.body).addClass(NVILib._jsClass);
			setTimeout(NVILib.setJsClassToBodyFast, 10, NVILib._jsClass);
		}
	}
	
	/*---------------------------------------------------------------------------------------------------
	initPngFix // 
	---------------------------------------------------------------------------------------------------*/
	NVILib.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>');
		}
	}
	
	/*---------------------------------------------------------------------------------------------------
	NVILib.findParamsClass //
	---------------------------------------------------------------------------------------------------*/
	NVILib.findParamsClass = function(paramClass){
		var allElements = $j('*');
		var paramsElements = new Array();
		for(var el=0; el<allElements.length; el++){
			var element = allElements[el];
			var classes = element.className.split(' ');
			for(var c=0; c<classes.length; c++){
				var curClass = classes[c];
				if(curClass.indexOf(paramClass) != -1){
					var clss = curClass; // prendre class comme variable fait planter ie ??
					if(clss.indexOf(paramClass + "(") == -1)continue;
					if(curClass.split('(')[0].length != paramClass.length)continue;
					var array = clss.split(')');
					var paramsString = (array[0].split('('))[1];
					var params = new Array();
					if(paramsString != '')params = paramsString.split(',');
					//alert('params:' + params + "\n" + "params.length:" + params.length);
					paramsElements.push({element:$j(element), params:params});
				}
			}
		}
		return paramsElements;
	}
	
	/*---------------------------------------------------------------------------------------------------
	NVILib.findJsonClass //
	---------------------------------------------------------------------------------------------------*/
	NVILib.findJsonClass =  function(jsonClass, jsonSep){
		var allElements = $j('*');
		var SEP = (jsonSep) ? jsonSep : ':::';
		var jsonElements = new Array();
		for(var el=0; el<allElements.length; el++){
			var element = allElements[el];
			var classes = element.className;
			if(classes.indexOf(jsonClass) == -1)continue;
			var json = null;
			if(classes.indexOf(jsonClass + SEP) !== -1){
				try{
					var jsonString = classes.split(jsonClass + SEP)[1];
					jsonString = jsonString.split(SEP)[0];
					json = eval(jsonString);
				}catch(e){}
			}
			jsonElements.push({element:$j(element), json:json});
		}
		return jsonElements;
	}
	
	/*---------------------------------------------------------------------------------------------------
	initPopups //
	---------------------------------------------------------------------------------------------------*/
	NVILib.initPopups = function(popupClass){
		var popupElements = NVILib.findJsonClass(popupClass);
		//alert('popupElements:' + popupElements);
		for(var el=0; el<popupElements.length; el++){
			var popupElement = $j(popupElements[el].element);
			var json = popupElements[el].json;
			//popupElement.data('json', json);
			popupElement.data('json',json);
			popupElement.bind("click", function(){
				var popupElement = $j(this);
				var json = popupElement.data('json');
				try{
					if(!json)json = new Object();
					var url = (popupElement.attr('href')) ? popupElement.attr('href') : '';
					url = (json.url) ? json.url : url;
					var name = (json.name) ? json.name : 'popupName';
					var width = (!isNaN(json.width)) ? ', width=' + json.width : '';
					var height = (!isNaN(json.height)) ? ', height=' + json.height : '';
					var toolbar = (json.toolbar == 'yes' || json.toolbar == true) ? ", toolbar=yes" : "";
					var scrollbars = (json.scrollbars == 'yes' || json.scrollbars == true) ? ", scrollbars=yes" : "";
					var resizable = (json.resizable == 'yes' || json.resizable == true) ? ", resizable=yes" : "";
					var menubar = (json.menubar == 'yes' || json.menubar == true) ? ", menubar=yes" : "";
					var location = (json.location == 'yes' || json.location == true) ? ", location=yes" : "";
					var directories = (json.directories == 'yes' || json.directories == true) ? ", directories=yes" : "";
					var status = (json.status == 'yes' || json.status == true) ? ", status=yes" : "";
					var fullscreen = (json.fullscreen == 'yes' || json.fullscreen == true) ? ", fullscreen=yes" : "";
					var channelmode = (json.channelmode == 'yes' || json.channelmode == true) ? ", channelmode=yes" : "";
					var top = (!isNaN(json.top)) ? ', top=' + json.top : '';
					var left = (!isNaN(json.left)) ? ', left=' + json.left : '';
					open(url, name, width + ',' + height + toolbar + scrollbars + resizable + menubar + location + directories + status + fullscreen + channelmode + top + left);
				}catch(e){}
				
				return false;
			});
		}
	}
	
	/*---------------------------------------------------------------------------------------------------
	initPrints //
	---------------------------------------------------------------------------------------------------*/
	NVILib.initPrints = function(printClass){
		$j('.' + printClass).bind("click", function(){
			window.print();
			return false;
		});
	}
	
}else{
	alert('You need to include jQuery version: "' + NVILib.jQueryRequiredVersion + '" to use only for this library');
}




