function Dec2Hex(value,radix,len){
    var retval = '';
    var ConvArray = Array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F');
    var intnum;
    var tmpnum;
    var i = 0;

    intnum = parseInt(value,10);
    if (isNaN(intnum)){
        retval = 'NaN';
    }else{
        while (intnum > 0.9){
            i++;
            tmpnum = intnum;
            // cancatinate return string with new digit:
            retval = ConvArray[tmpnum % radix] + retval;  
            intnum = Math.floor(tmpnum / radix);
            if (i > 100){
                // break infinite loops
                retval = 'NaN';
                break;
            }
        }
		
	 if(len > 0)
	 {
	  while(retval.length < len)
	   retval = "0" + retval;
	 }
    }
    return retval;
}

function Hex2Dec(hex) {
    return parseInt(hex,16);
}

function IncludeJavaScript(jsFile)
{
  document.write('<script type="text/javascript" src="'
    + jsFile + '"></script>'); 
}

function custLog(x,base) 
{
 return (Math.log(x))/(Math.log(base));
}

function colorBrightDifference(col1,col2)
{
 var ret_val;
 
 col1 = trim(col1).replace(/#/g,"");
 col2 = trim(col2).replace(/#/g,"");
 
 if(col1.length == 6 && col2.length==6)
 {
  var bY=((Hex2Dec(col1.substr(0,2)) * 299) + (Hex2Dec(col1.substr(2,2)) * 587) + (Hex2Dec(col1.substr(4,2)) * 114)) / 1000;
  var fY=((Hex2Dec(col2.substr(0,2)) * 299) + (Hex2Dec(col2.substr(2,2)) * 587) + (Hex2Dec(col2.substr(4,2)) * 114)) / 1000;
  
  var brightnessDifference = Math.abs(bY-fY); 
  
  ret_val = new Array(brightnessDifference>=125, brightnessDifference);
 }
 else
  ret_val = new Array(true,255);
  
 return ret_val; //0 = is W3C comlplaint, 1 = difference
}

function colorDifference(col1,col2)
{
 var ret_val;
 
 col1 = trim(col1).replace(/#/g,"");
 col2 = trim(col2).replace(/#/g,"");
 
 if(col1.length == 6 && col2.length==6)
 {
  var colorDifference = (Math.max (Hex2Dec(col1.substr(0,2)), Hex2Dec(col2.substr(0,2))) - Math.min (Hex2Dec(col1.substr(0,2)), Hex2Dec(col2.substr(0,2)))) +
                          (Math.max (Hex2Dec(col1.substr(2,2)), Hex2Dec(col2.substr(2,2))) - Math.min (Hex2Dec(col1.substr(2,2)), Hex2Dec(col2.substr(2,2)))) +
                          (Math.max (Hex2Dec(col1.substr(4,2)), Hex2Dec(col2.substr(4,2))) - Math.min (Hex2Dec(col1.substr(4,2)), Hex2Dec(col2.substr(4,2)))); 
                          
  ret_val = new Array(colorDifference>=500, colorDifference);
 }
 else
  ret_val = new Array(true,765);
  
 return ret_val; //0 = is W3C comlplaint, 1 = difference
}

function isColorDifferenceOK(col1,col2)
{
 var br_diff = colorBrightDifference(col1,col2);
 var clr_diff = colorDifference(col1,col2);
 
 return(br_diff[0] && clr_diff[0]);
}

function deleteTableRows(id)
{
 var Parent = document.getElementById(id);
 
 while(Parent.hasChildNodes())
 {   
  Parent.removeChild(Parent.firstChild);
 }
}

function sprintf () {
  var i = 0, a, f = arguments[i++], o = [], m, p, c, x;
  while (f) {
    if (m = /^[^\x25]+/.exec(f)) o.push(m[0]);
    else if (m = /^\x25{2}/.exec(f)) o.push('%');
    else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
      if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments.");
      if (/[^s]/.test(m[7]) && (typeof(a) != 'number'))
        throw("Expecting number but found " + typeof(a));
      switch (m[7]) {
        case 'b': a = a.toString(2); break;
        case 'c': a = String.fromCharCode(a); break;
        case 'd': a = parseInt(a); break;
        case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
        case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
        case 'o': a = a.toString(8); break;
        case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
        case 'u': a = Math.abs(a); break;
        case 'x': a = a.toString(16); break;
        case 'X': a = a.toString(16).toUpperCase(); break;
      }
      a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);
      c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
      x = m[5] - String(a).length;
      p = m[5] ? str_repeat(c, x) : '';
      o.push(m[4] ? a + p : p + a);
    }
    else throw ("Huh ?!");
    f = f.substring(m[0].length);
  }
  return o.join('');
}

function getCurUTCDtTm(seconds)
{
 var d = new Date();
 
 var localTime = d.getTime();
 var localOffset = d.getTimezoneOffset() * 60000;
 var utc = new Date(localTime + localOffset);
 
 return sprintf("%02d.%02d.%04d %02d:%02d" + (seconds?":%02d":""),utc.getDate(),utc.getMonth()+1,utc.getFullYear(),utc.getHours(),utc.getMinutes(),utc.getSeconds());
}
