/// <reference name="MicrosoftAjax.js" />
/* Copyright 2005-2007 INL */
/* certains éléments sont inspirés du code javascript de .net */

var inl_isIE = (navigator.appName == "Microsoft Internet Explorer");

function GetDocumentElement( id ) {
    if ( document.getElementById ) // most browser that we need ^^
        return ( document.getElementById( id ) );
    else // IE 5.5
        return ( document.all[id] );
}

function GetDocumentElementName( id ) {
    if ( document.getElementByName ) // most browser that we need ^^
        return ( document.getElementByName( id ) );
    else // IE 5.5
        return ( document.all[id] );
}

function ShowHidePanel( ctrl, visible ) {
	if ( visible )
        GetDocumentElement(ctrl).style.display='block';
	else
        GetDocumentElement(ctrl).style.display='none';
}

function EnableDisable( ctrl, enable) {
  var c = GetDocumentElement(ctrl); 
  if ( inl_isIE || ( c.tagName == "INPUT" ) ) {
	  if ( enable )
          c.disabled='';
	  else
          c.disabled='disabled';
  }
  else {
    if ( enable ) {
      c.style.fontStyle="";
    }
    else {
      c.style.fontStyle="italic";
    }
  }
}

function ShowHideCombos( visible ) {
	var sel = document.getElementsByTagName("select");
	for (var i=0; i<sel.length; i++) {
		if ( visible )
			sel[i].style.visibility = 'visible'; 
		else
			sel[i].style.visibility = 'hidden'; 
	}
}



function IncMonth( BeginDate, NBMonth ) {
    YB = BeginDate.getFullYear();
    MB = BeginDate.getMonth();
    DB = BeginDate.getDate();
	MB = MB+NBMonth;
	YB = YB+Math.floor( MB/12 + 0.005 );
	MB = MB % 12;
    return ( new Date( YB, MB, DB ) );
}

function NBMoisEntierEntre2Dates( BeginDate, EndDate  ) {
	var YB, MB, DB, YE, ME, DE, Res;
	YB = BeginDate.getFullYear();
	MB = BeginDate.getMonth()+1;
	DB = BeginDate.getDate();
	YE = EndDate.getFullYear();
	ME = EndDate.getMonth()+1;
	DE = EndDate.getDate();
	Res = ( YE-YB )*12+(ME-MB);
	if ( ( Res > 0 ) && ( DE < DB ) )
		return( Res-1 );
	else if ( ( Res < 0 ) && ( DB < DE ) )
		return( Res-1 );
	return( Res );
}

function inl_datetostr( value, dateorder ) {

	if ( inl_datetostr.arguments.length < 2 )
		dateorder = (typeof(global_dateorder) == "undefined") ? "dmy" : global_dateorder;

    var YB, MB, DB, res, resDB, resMB;
    YB = value.getFullYear();
	MB = value.getMonth()+1;
	DB = value.getDate();

    if ( DB < 10 )
      resDB = "0" + DB
    else
      resDB = DB;

    if ( MB < 10 )
      resMB = "0" + MB
    else
      resMB = MB;

    if (dateorder == "ymd")
        return ( YB+"/"+resMB+"/"+resDB );
    else if (dateorder == "mdy")
        return ( resMB+"/"+resDB+"/"+YB );
    else
        return ( resDB+"/"+resMB+"/"+YB );
}

function inl_doubletostr( value, digits ) {
    function float_group( value, groupchar ) { // value doit etre int
        var res;
        if ( value > 1000 ) {
            res = float_group( Math.floor(value/1000) )+groupchar;
            value = value % 1000;
            if ( value < 100 )
                res = res+"0";
            if ( value < 10 )
                res = res+"0";
        }
        else
            res = "";
        return ( res + value.toString() );
    };

    function float_group2( value, groupchar ) { // value doit etre int
        var res = value.toString();
        var res2 = "";
        for ( var I = 1 ; I <= res.length  ; I++ ) {
            res2 = res.charAt( res.length-I ) + res2;
            if ( ( I < res.length ) && ( ((I)%3) == 0 ) ) {
              res2 = groupchar + res2;
            };
        };

        return ( res2 );
    };


    var groupchar = (typeof(global_groupchar) == "undefined") ? "." : global_groupchar;
    var decimalchar = (typeof(global_decimalchar) == "undefined") ? "," : global_decimalchar;

	if ( inl_doubletostr.arguments.length < 2 )
        digits = 2;

    var res = "";
    if ( value < 0 )
    {
      value = -value;
      res = "-";
    };
    var facteur = Math.pow( 10, digits );
    value = Math.floor( value*facteur+0.5 )/facteur;
    res = res + float_group2( Math.floor( value ), groupchar );
    if ( digits > 0 ) {
        value = Math.floor( ( value - Math.floor( value ) )*facteur +0.5 );
        var partdecimal = value.toString();
        while ( partdecimal.length < digits )
            partdecimal = "0" + partdecimal ;
        res = res+decimalchar+partdecimal;
    }
    return (res);
}

function inl_strtodate( op, dateorder ) {
	function GetFullYear(year) {
		return (year + parseInt(2000) - ((year < 50) ? 0 : 100) );
	};

	if ( inl_strtodate.arguments.length < 2 )
		dateorder = (typeof(global_dateorder) == "undefined") ? "dmy" : global_dateorder;

    	var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})\\s*$");
        m = op.match(yearFirstExp);
        var day, month, year;
        if (m != null && (m[2].length == 4 || dateorder == "ymd")) {
            day = m[6];
            month = m[5];
            year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10))
        }
        else {
            if (dateorder == "ymd"){
                return null;
            }
            var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))\\s*$");
            m = op.match(yearLastExp);
            if (m == null) {
                return null;
            }
            if (dateorder == "mdy") {
                day = m[3];
                month = m[1];
            }
            else {
                day = m[1];
                month = m[3];
            }
            year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10))
        }
        month -= 1;
        var date = new Date(year, month, day);
    	return ( date );
}

function inl_getNBDecimal(op) {
    var pos = op.lastIndexOf(global_decimalchar);
    if (pos != -1)
        return op.length - pos - 1;
    var pos = op.lastIndexOf(global_groupchar);
    if (pos != -1)
        return op.length - pos - 1;
    return 0;
}

function inl_strtodouble(op, decimalchar, groupchar, digits) {
    /// <summary>Convertit une string en un double</summary>
    /// <param name="op" mayBeNull="false" type="String" >Valeur à convertir</param>
    /// <param name="decimalchar" mayBeNull="true" type="String" >Séparateur décimal</param>
    /// <param name="groupchar" mayBeNull="true" type="String" >Séparateur des milliers</param>
    /// <param name="digits" mayBeNull="true" type="Number" integer="true" >Nombre de digit (si rien 2)</param>
    /// <returns type="Number" >Double converti ou null si convertion impossible</returns>
    var num, cleanInput, m, exp;

	if ( inl_strtodouble.arguments.length < 4 )
        digits = 2;
	if ( inl_strtodouble.arguments.length < 3 )
        groupchar = (typeof(global_groupchar) == "undefined") ? "." : global_groupchar;
	if ( inl_strtodouble.arguments.length < 2 )
        decimalchar = (typeof(global_decimalchar) == "undefined") ? "," : global_decimalchar;

    if ((digits > 0) && (op.indexOf(decimalchar, 0) == -1) && (op.indexOf(groupchar, 0) != -1)) { // pas de décimal mais bien groupchar
        var posGroup = op.indexOf(groupchar, 0);
        if (posGroup == op.lastIndexOf(groupchar))
            op = op.replace(groupchar,decimalchar); 
    }
   
    exp = new RegExp("^\\s*([-\\+])?(((\\d+)\\" + groupchar + ")*)(\\d+)"
                        + ((digits > 0) ? "(\\" + decimalchar + "(\\d{1,}))?" : "")
//                        + ((digits > 0) ? "(\\" + decimalchar + "(\\d{1," + digits + "}))?" : "")
                        + "\\s*$");
    m = op.match(exp);
    if (m == null)
        return null;
    var intermed = m[2] + m[5] ;
    if (typeof(m[1]) == "undefined") m[1] = ""; // corrige problème mozilla
    cleanInput = m[1] + intermed.replace(new RegExp("(\\" + groupchar + ")", "g"), "") + ((digits > 0) ? "." + m[7] : 0);
    num = parseFloat(cleanInput);
    return (isNaN(num) ? null : num);
};

function inl_strtodouble2( op, digits ) {
    var decimalchar, groupchar;
    decimalchar = (typeof(global_decimalchar) == "undefined") ? "," : global_decimalchar;
    groupchar = (typeof(global_groupchar) == "undefined") ? "." : global_groupchar;
    return ( inl_strtodouble( op, decimalchar, groupchar, digits ) );   
};

function ReformatNumeric(c, nbDecNornam) {
    var nbDec = 2;
    if (nbDecNornam != null)
        if (nbDecNornam >= 0)
            nbDec = nbDecNornam;
        else
            nbDec = inl_getNBDecimal(c.value);
            
    var newvalue = inl_doubletostr(inl_strtodouble2(c.value, 10), nbDec);
  if ( newvalue != c.value )
    c.value = newvalue;
}

function getWindowHeight() {
    var windowHeight=0;
    if (typeof(window.innerHeight)=='number') {
        windowHeight=window.innerHeight;
    }
    else {
     if (document.documentElement&&
       document.documentElement.clientHeight) {
         windowHeight = document.documentElement.clientHeight;
    }
    else {
     if (document.body&&document.body.clientHeight) {
         windowHeight=document.body.clientHeight;
      }
     }
    }
    return windowHeight;
}

