// Utils JScript File

// Add indexOf function to Array object on IE6,IE7,IE8
if(!Array.indexOf){
    Array.prototype.indexOf = function(obj){
        for(var i=0; i<this.length; i++){
            if(this[i]==obj){
                return i;
            }
        }
        return -1;
    }
}

// Renvoie true si le navigateur est IE, false sinon
function isMSIE() {
    return $.browser.msie;
}
// Renvoie true si le navigateur est FireFox, false sinon
function isFireFox() {
    return $.browser.mozilla;
}
// Renvoie true si le navigateur est IE 6.0, false sinon
function isMSIE6() {
    return (navigator.userAgent.toLowerCase().indexOf("msie 6.") >= 0);
}

// remove the first found instance from myString arg
function removeFromString(myString, myStrToRemove) {
    pos = myString.indexOf(myStrToRemove);
    if (pos >= 0) {
        return myString.substr(0, pos) + myString.substr(pos + myStrToRemove.length, myString.length - pos - myStrToRemove.length);
    }
    else {
        return myString;
    }
}

// remove the first found instance from myString arg
function removeFromStringByReplace(myString, myStrToRemove) {
    myString = "," + myString;
    myString = myString.replace("," + myStrToRemove, ",");
    myString = ((myString.substr(1, myString.length-1) == ",")? "": myString.substr(1, myString.length-1));
    return myString;
}

function splitStringIntoArray(myString, separator) {
    try {
        var reg= new RegExp("[" + separator + "]+", "g");
        return myString.split(reg);
    }
    catch (ex) {
        return new Array();
    }
}

// Trim a string, remove start and end spaces
function trim(string) {
    return string.replace(/(^\s*)|(\s*$)/g,'');
}

// remove spaces and leading zeros in a number
function trimNumber(number) {
    return trim(number).replace(/(^0*)/g,'');
}

function fillStringToLength(inStr, desiredLength, fillChar, fillAtLeft) {
    var fillStr = "";
    for(i = new String(inStr).length; i < desiredLength; i++) {
        fillStr += fillChar;
    }
    if (fillAtLeft) {
        return fillStr + inStr;
    }
    else {
        return inStr + fillStr;
    }
}

// round decimal (with a precision of 2 by default)
function roundDecimal(value, precision) {
    if (precision == null || precision < 0) {
        precision = 2;
    }
    var tenPow = Math.pow(10, precision);
    return Math.round(value * tenPow) / tenPow;
}

// Return a string representing the number with separation on millions, thousands...
// If no separator defined, set space by default
// Ex: the 3000000 value will return the '3 000 000' string
// decimals is the number of decimal digit(s) you want to be displayed
// Ex: the 3000000 value will return the '3 000 000.00' according to both, separtor parameter and decimals parameter
function getNumberWithSeparators(value, separator, decimals) {
    if (value) {
        if (decimals) {
            if (decimals > 0) {
                value = parseFloat(value).toFixed(decimals);
            }
        }
    
        if (!separator) {
            separator = " ";
        }
        var result = value.toString();
        var intValueStr = Math.floor(value).toString();
        var nbDec = 0;
        for (var i = intValueStr.length - 1; i > 0; i--) {
            if (i % 3 == 0) {
                result = result.substring(0, intValueStr.length - i + nbDec) + separator + result.substring(intValueStr.length - i + nbDec);
                nbDec ++;
            }
        }
        return result;
    }
    else {
        return "0";
    }
}

// retourne le code touche
function codeTouche(ev) {
    if (isMSIE()) {
        return ev.keyCode;
    }
    else {
        return ev.keyCode ? ev.keyCode : ev.charCode;
    }
}

// Conversion de date en string
function dt2dtstr(dt_datetime) {
    var stringDate = "";
    if (dt_datetime != null && dt_datetime != undefined && dt_datetime != "") {
        if(crtLanguage == 'fr'){
            stringDate = fillStringToLength(dt_datetime.getDate(),2,0,true)+"/"+
                fillStringToLength((dt_datetime.getMonth()+1),2,0,true)+"/"+
                (dt_datetime.getFullYear());
	    }
	    else if(crtLanguage == 'en'){
            stringDate = fillStringToLength((dt_datetime.getMonth()+1),2,0,true)+"/"+
                fillStringToLength(dt_datetime.getDate(),2,0,true)+"/"+
                (dt_datetime.getFullYear());
	    }
	    else{
            stringDate = fillStringToLength(dt_datetime.getDate(),2,0,true)+"/"+
                fillStringToLength((dt_datetime.getMonth()+1),2,0,true)+"/"+
                (dt_datetime.getFullYear());
	    }
    }
	return stringDate;
}

// Converstion de string en date
function str2dt(str_datetime) {
    var re_date = "";
    if(crtLanguage == 'fr'){
        re_date = /^(\d{1,2}\/){1,2}\d{4}$/;
    }
    else if(crtLanguage == 'en'){
          re_date = /^(\d{1,2}\/){1,2}\d{4}$/;
    }
    else{
         re_date = /^(\d{1,2}\/){1,2}\d{4}$/;
    }
	
    if (!re_date.exec(str_datetime)) {
        throw("Invalid Datetime format: "+ str_datetime);
    }
    var myarray=str_datetime.split("/");
    var myDate= new Date(1,1,1);
    if(crtLanguage == 'fr'){
        myDate.setMonth(parseInt(trimNumber(myarray[1]))-1);
        myDate.setDate(parseInt(trimNumber(myarray[0])));
    }
    else if(crtLanguage == 'en'){
        myDate.setMonth(parseInt(trimNumber(myarray[0]))-1);
        myDate.setDate(parseInt(trimNumber(myarray[1])));
    }
    myDate.setFullYear(parseInt(trimNumber(myarray[2])));
    return myDate;
}

// Vérifie la validité d'une date au format jj/mm/aaaa
function isDate(str_date) {
	if (str_date == "")
		return false;
	
	e = new RegExp("^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$");
	
	if (!e.test(str_date))
		return false;

	j = parseInt(str_date.split("/")[0], 10);
	m = parseInt(str_date.split("/")[1], 10);
	a = parseInt(str_date.split("/")[2], 10);

	if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;
	else fev = 28;

	nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);

	return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );
}

function setCurrentNavPanel(navPanelNb) {
    $('#navPanel_'+navPanelNb).mouseover().unbind('mouseover').unbind('mouseout');
}

function navPanelOver(ev) {
    var navPanelNb = $(ev.currentTarget).attr('id').split("_")[1];
    $("#navPanelLeft_"+navPanelNb).css('background-image', 'url(graphics/nav_coinG_on.png)');
    $("#navPanelContent_"+navPanelNb).css('background-image', 'url(graphics/nav_centre_on.png)');
    $("#navPanelRight_"+navPanelNb).css('background-image', 'url(graphics/nav_coinD_on.png)');
}

function navPanelOut(ev){
    var navPanelNb = $(ev.currentTarget).attr('id').split("_")[1];
    $("#navPanelLeft_"+navPanelNb).css('background-image', 'url(graphics/nav_coinG.png)');
    $("#navPanelContent_"+navPanelNb).css('background-image', 'url(graphics/nav_centre.png)');
    $("#navPanelRight_"+navPanelNb).css('background-image', 'url(graphics/nav_coinD.png)');
}