var debugMode = 'true';
var traceInfo = 'true';

// DEBUG LOG
if(typeof debug != 'function') {
	function debug(msg){
		if(window.console && console.debug && debugMode ){  console.debug(msg); }else if(window.console && console.log && debugMode ){ console.log(msg); }
	}
}
function warning(msg){
	if(window.console && console.warn ){ console.warn(msg); }
	else if(window.console && console.error ){ console.error(msg); }
	else if(window.console && console.info ){ console.info(msg); }
	else if(window.console && console.log ){ console.log(msg); }
	alert(msg);
}
function info(msg){
	if(window.console && console.info && traceInfo ){ console.info(msg); }
}
function dump(arr){
	if(debugMode){ try{ console.groupCollapsed("arr:"+(typeof arr)+" = "+arr+" : "+arr.length); }catch(e){} }
	for(x in arr) { debug("arr["+x+"]:"+arr[x]); }
	if(debugMode){ try{ console.groupEnd(); }catch(e){} }
}
function isArray(obj) {
	return obj.constructor == Array;
}



// =====================
// = BROWSER DETECTION =
// =====================
function IE(){
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
		var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
		if (ieversion>=9){		return {'version':9, 'msg':"You're using IE9 or above"}; }
		else if (ieversion>=8){	return {'version':8, 'msg':"You're using IE8 or above"}; }
		else if (ieversion>=7){	return {'version':7, 'msg':"You're using IE7 or above"}; }
		else if (ieversion>=6){	return {'version':6, 'msg':"You're using IE6 or above"}; }
		else if (ieversion>=5){	return {'version':5, 'msg':"You're using IE5 or above"}; }
	}else{
		return false;
	}
}

function FF(){
	if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
	 var ffversion=new Number(RegExp.$1) // capture x.x portion and store as a number
		if (ffversion>=3){		return {'version':3, 'msg':"You're using FF 3.x or above"}; }
		else if (ffversion>=2){	return {'version':2, 'msg':"You're using FF 2.x"}; }
		else if (ffversion>=1){	return {'version':1, 'msg':"You're using FF 1.x"}; }
	}else{
		return false;
	}
}
function opera(){
	if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);
	 var oprversion=new Number(RegExp.$1) // capture x.x portion and store as a number
		if (oprversion>=10){		return {'version':3, 'msg':"You're using Opera 10.x or above"}; }
		else if (oprversion>=9){	return {'version':2, 'msg':"You're using Opera 9.x"}; }
		else if (oprversion>=8){	return {'version':1, 'msg':"You're using Opera 8.x"}; }
		else if (oprversion>=7){	return {'version':1, 'msg':"You're using Opera 7.x"}; }
	}else{
		return false;
	}
}

// IE6 MESSAGE
function IE6_alert(){
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
		//test for MSIE x.x;
		var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
		if (ieversion<=6) {
			if( hasClass(document.getElementByTagName("body"), "fr") ){
				//do something
				document.write("<DIV id=ie6msg><H4>Savez-vous que votre navigateur est obsolète&nbsp;?</H4><P>Pour naviguer de la manière la plus satisfaisante sur notre site, nous recommandons que vous procédiez à une mise à jour de votre navigateur. La version actuelle est <A class=getie7 href='http://www.microsoft.com/windows/downloads/ie/getitnow.mspx'>Internet Explorer&nbsp;8</A>. La mise à jour est gratuite. Si vous utilisez un PC au travail, veuillez contacter votre service informatique.</P><P>Si vous le souhaitez, vous pouvez aussi essayer d'autres navigateurs Web populaires comme par exemple <A class=ie6expl href='http://mozilla.com'>FireFox</A>, <A class=ie6expl href='http://www.opera.com'>Opera</A> ou <A class=ie6expl href='http://www.apple.com/safari/download/'>Safari</A></P></DIV>");
			}else{
				document.write("<DIV id=ie6msg><H4> Do you know your browser is outdated </ H4> <P> To navigate the most satisfactory manner on our site, we recommend that you perform an update of your browser. The current version is <A class=getie7 href='http://www.microsoft.com/windows/downloads/ie/getitnow.mspx'> Internet Explorer 8 </ A>. The update is free. If you use a PC at work, please contact your IT department. </ P> If you wish, you can also try other popular web browsers such as <A class = ie6expl href = 'http:/ / mozilla.com '> FireFox </ A> <A class=ie6expl href='http://www.opera.com'> Opera </ A> or <a class = ie6expl href = ' http://www .apple.com / safari / download / '>Safari</A></P></DIV>");
			}
		}
	}
}
// CLASSES MANIPULATION : OLD METHODES 
function hasClass(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
	if (hasClass(ele,cls)) {
		var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
	}
}

// =============
// = GEOMETRIC =
// =============
// FIND POSITION (Developped for ypgconquest)
function findPos( oElement ) {
	if( typeof( oElement.offsetParent ) != 'undefined' ) {
		for( var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent ) {
			posX += oElement.offsetLeft;
			posY += oElement.offsetTop;
		}
		debug("posX: "+posX+", posY: "+posY);
		return [ posX, posY ];
	} else {
		debug("oElement.x: "+oElement.x+", oElement.y: "+oElement.y);
		return [ oElement.x, oElement.y ];
	}
}
	
	
// ==============
// = wappalyzer =
// ==============
// INSERT wappalyzer script to the current page header and pop the results

function wappalyzer(){
var body = document.getElementsByTagName('body')[0];
	if(body){
		var script = document.getElementById('wappalyzer-script');
		if (script){
			body.removeChild(script);
		}
		script = document.createElement('script');
		script.type = 'text/javascript';
		script.src  = 'http://wappalyzer.com/bookmarklet/analyze.js.php?' + Math.ceil(9999999 * Math.random());
		script.id   = 'wappalyzer-script';
		body.appendChild(script);
	}
	void(0);
}

// ==========
// = STRING =
// ==========
function capitaliseFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

// ==========
// = PHP.JS =
// ==========
function function_exists (function_name) {
    if (typeof function_name == 'string'){
        return (typeof this.window[function_name] == 'function');
    } else{
        return (function_name instanceof Function);
    }
}

function isset () {
	var a = arguments, l = a.length, i = 0, undef;
	if (l === 0) { throw new Error('Empty isset'); };
	while (i !== l) { if (a[i] === undef || a[i] === null) { return false;  }; i++; }; return true;
}

function empty (mixed_var) {
    var key;
    if (mixed_var === "" ||
        mixed_var === 0 ||
        mixed_var === "0" ||
        mixed_var === null ||
        mixed_var === false ||
        typeof mixed_var === 'undefined'
    ){ return true; }
    if (typeof mixed_var == 'object') {
        for (key in mixed_var) { return false; }
        return true;
    }
    return false;
}

// ===========
// = CONTEXT =
// ===========
function getLang() {
	var l = arguments[0] || "en";
	// @TODO : get lang from userAgnet if available
	// navigator.userAgent : Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13
	// navigator.userAgent.systemLanguage
	// navigator.userAgent.userLanguage
	
	// @TODO : if available get lang from <html lang:...>
	if( $('body').is('.fr') ){ l="fr" }
	debug("l="+l);
	return l;
}
function load_script(src, callBack){
	var script = document.createElement("script");
	script.src = src; "http://sympatico.tractr.net/201110-demotour/js/swfobject.js";
	script.onload = script.onreadystatechange = callBack;
	document.body.appendChild( script );
}

// ===========================================================
// = COOKIES  -  http://www.quirksmode.org/js/cookies.html   =
// ===========================================================
function createCookie(name,value,days,domain) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/ ; domain="+domain;
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function eraseCookie(name) {
	createCookie(name,"",-1);
}
