if(!NVI){var NVI = new Object();}
NVI.version = '0.0.0';
NVI.jQueryRequiredVersion = '1.3.2';

if(typeof(jQuery) != "undefined" && jQuery().jquery == NVI.jQueryRequiredVersion){
	var $j = jQuery.noConflict();
	
	/*---------------------------------------------------------------------------------------------------
	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 , disable ){
		var disable = disable || false ;
		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
						if( disable ){
							el.style.minHeight = "";
							el.style.height = "";
						}else{
							el.style.minHeight = maxHeight + "px";
							if($j.browser.msie){
								el.style.height = maxHeight + "px";
							}
						}
					}
				}
			}
		}
		
	}
	
	/*
		Debug of the endless pages count bug in ie7 due to the firxed height 
		we have set on elements using the NVI.initEqualHeight
	*/
    if( typeof window.onbeforeprint != 'undefined' ) {
		window.onbeforeprint = function(){ 
			NVI.initEqualHeight("#wrapper" , true );
		} ;
		window.onaftereprint = function(){
			NVI.initEqualHeight("#wrapper");
		} ;
    }	
	
	
	/*---------------------------------------------------------------------------------------------------
	initNav //  call this function under #nav for faster loading
	---------------------------------------------------------------------------------------------------*/
	NVI.initNav = function(){
		if(!$j('#nav'))return;
		var nav = $j('#nav');
		var mainUl = nav.find('ul'); 
		var lis = nav.find('li'); 
		for(var i=0; i< lis.length; i++){
			var li = $j(lis[i]);
			var ul = li.find('ul');
			if(!ul)continue;
			li.ul = ul;
			li.bind('mouseover', function(ev){
				$j(this).find('ul').css('display', 'block');
			});
			li.bind('mouseout', function(ev){
				$j(this).find('ul').css('display', 'none');
			});
		}
	}
	
	/*---------------------------------------------------------------------------------------------------
	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.findParamsClass //
	---------------------------------------------------------------------------------------------------*/
	NVI.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;
	}
	
	/*---------------------------------------------------------------------------------------------------
	NVI.findJsonClass //
	---------------------------------------------------------------------------------------------------*/
	NVI.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 //
	---------------------------------------------------------------------------------------------------*/
	NVI.initPopups = function(popupClass){
		var popupElements = NVI.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 //
	---------------------------------------------------------------------------------------------------*/
	NVI.initPrints = function(printClass){
		$j('.' + printClass).bind("click", function(){
			window.print();
			return false;
		});
	}
	
}else{
	alert('You need to include jQuery version: "' + NVI.jQueryRequiredVersion + '" to use only for this library');
}

$j(document).ready(function(){
	NVI.initRollOverImg("#wrapper", "rollover", "rollover_on", "_on", "activate");
	NVI.initEqualHeight("#wrapper");
});



/*  pages listing Services */
function switchServices(){
	var thumbTitles = $j('.thumbsPortfolioList');
	var photoDetails = $j('.containerBigPhoto1');
	var monLink = $j('.monLink');
	//var title = $('serviceTitles').getElementsByClassName('title');
	
	for(var i=0; i< thumbTitles.length; i++){
		var st = thumbTitles[i];
		var sd = photoDetails[i];
		var sl = monLink[i];
		
		var maListe = new Object();
		maListe.sd = sd ;
		maListe.sl = sl ;
		maListe.i = i ;

		$j( st ).bind('click',maListe, function( eventObject ){
											
			for(var i=0; i< thumbTitles.length ; i++){
				if( i != eventObject.data.i ){
					$j(photoDetails[i]).addClass('contentHide');
					$j(monLink[i]).removeClass('activate');
				}
			}
			$j(eventObject.data.sd).removeClass('contentHide');
			$j(eventObject.data.sl).addClass('activate');
		} );
		
		if(i==0){
			$j(sd).removeClass('contentHide');	
			$j(sl).addClass('activate');	
		}
	}
}





function makeScrollable(wrapper, scrollable){
	// Get jQuery elements
	var wrapper = $(wrapper), scrollable = $(scrollable);
	
	// Hide images until they are not loaded
	scrollable.hide();
	var loading = $('<div class="loading">Loading...</div>').appendTo(wrapper);
	
	// Set function that will check if all images are loaded
	var interval = setInterval(function(){
		var images = scrollable.find('img');
		var completed = 0;
		
		// Counts number of images that are succesfully loaded
		images.each(function(){
			if (this.complete) completed++;	
		});
		
		if (completed == images.length){
			clearInterval(interval);
			// Timeout added to fix problem with Chrome
			setTimeout(function(){
				
				loading.hide();
				// Remove scrollbars	
				wrapper.css({overflow: 'hidden'});						
				
				scrollable.slideDown('slow', function(){
					enable();	
				});					
			}, 1000);	
		}
	}, 100);
	
	function enable(){
		// height of area at the top at bottom, that don't respond to mousemove
		var inactiveMargin = 99;					
		// Cache for performance
		var wrapperWidth = wrapper.width();
		var wrapperHeight = wrapper.height();
		// Using outer height to include padding too
		var scrollableHeight = scrollable.outerHeight() + 2*inactiveMargin;
		// Do not cache wrapperOffset, because it can change when user resizes window
		// We could use onresize event, but it's just not worth doing that 
		// var wrapperOffset = wrapper.offset();
		
		// Create a invisible tooltip
		var tooltip = $('<div class="sc_menu_tooltip"></div>')
			.css('opacity', 0)
			.appendTo(wrapper);
	
		// Save menu titles
		scrollable.find('a').each(function(){				
			$(this).data('tooltipText', this.title);				
		});
		
		// Remove default tooltip
		scrollable.find('a').removeAttr('title');		
		// Remove default tooltip in IE
		scrollable.find('img').removeAttr('alt');	
		
		var lastTarget;
		//When user move mouse over menu			
		wrapper.mousemove(function(e){
			// Save target
			lastTarget = e.target;

			var wrapperOffset = wrapper.offset();
		
			var tooltipLeft = e.pageX - wrapperOffset.left;
			// Do not let tooltip to move out of menu.
			// Because overflow is set to hidden, we will not be able too see it 
			tooltipLeft = Math.min(tooltipLeft, wrapperWidth - 75); //tooltip.outerWidth());
			
			var tooltipTop = e.pageY - wrapperOffset.top + wrapper.scrollTop() - 40;
			// Move tooltip under the mouse when we are in the higher part of the menu
			if (e.pageY - wrapperOffset.top < wrapperHeight/2){
				tooltipTop += 80;
			}				
			tooltip.css({top: tooltipTop, left: tooltipLeft});				
			
			// Scroll menu
			var top = (e.pageY -  wrapperOffset.top) * (scrollableHeight - wrapperHeight) / wrapperHeight - inactiveMargin;
			if (top < 0){
				top = 0;
			}			
			wrapper.scrollTop(top);
		});
		
		// Setting interval helps solving perfomance problems in IE
		var interval = setInterval(function(){
			if (!lastTarget) return;	
										
			var currentText = tooltip.text();
			
			if (lastTarget.nodeName == 'IMG'){					
				// We've attached data to a link, not image
				var newText = $(lastTarget).parent().data('tooltipText');

				// Show tooltip with the new text
				if (currentText != newText) {
					tooltip
						.stop(true)
						.css('opacity', 0)	
						.text(newText)
						.animate({opacity: 1}, 1000);
				}					
			}
		}, 200);
		
		// Hide tooltip when leaving menu
		wrapper.mouseleave(function(){
			lastTarget = false;
			tooltip.stop(true).css('opacity', 0).text('');
		});			
		
		/*
		//Usage of hover event resulted in performance problems
		scrollable.find('a').hover(function(){
			tooltip
				.stop()
				.css('opacity', 0)
				.text($(this).data('tooltipText'))
				.animate({opacity: 1}, 1000);
	
		}, function(){
			tooltip
				.stop()
				.animate({opacity: 0}, 300);
		});
		*/			
	}
}


function makeScrollable(wrapper, scrollable){
}
$(function(){
  makeScrollable("div.sc_menu_wrapper", "div.sc_menu");
});



