/********************
Comon JS Functions
*********************/
/*
if(typeof $ != 'function') {
    function $(id) {
        return document.getElementById(id);
    }
}
*/
/* comp function/class */
function comp(elemA, elemB)
{
    var addZero = function(nbr)
    {
        if (nbr * 1 < 10)
            return '0' + (nbr * 1);
        return nbr;
    }
    
    var addYear = function(nbr)
    {
        if (nbr.length == 2)
            nbr = '20' + nbr;
        return nbr;
    }
    
    var ts_sort_date = function(a,b) {
        var aa = a.split(/[\/-]/);
        var bb = b.split(/[\/-]/);
        
        aa = addYear(aa[2])  + '-' + addZero(aa[1])  + '-' + addZero(aa[0]); 
        bb = addYear(bb[2])  + '-' + addZero(bb[1])  + '-' + addZero(bb[0]);
          
        
        if (aa==bb) return 0;
        if (aa < bb) return -1;
        return 1;
    }
    
    var ts_sort_currency = function(a,b) { 
        var aa = a.replace(/[^0-9.]/g,'');
        var bb = b.replace(/[^0-9.]/g,'');
        return parseFloat(aa) - parseFloat(bb);
    }
    
    var ts_sort_numeric = function(a,b) { 
        var aa = parseFloat(a);
        if (isNaN(aa)) aa = 0;
        var bb = parseFloat(b); 
        if (isNaN(bb)) bb = 0;
        return aa - bb;
    }
    
    var ts_sort_caseinsensitive = function(a,b) {
        var aa = a.toLowerCase();
        var bb = b.toLowerCase();
        if (aa==bb) return 0;
        if (aa<bb) return -1;
        return 1;
    }; 
    
    this.detectCompMethod = function(elemA)
    {
        var sortfn = ts_sort_caseinsensitive;
        if (elemA.match(/^\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}$/)) 
            sortfn = ts_sort_date;
        if (elemA.match(/^[£$]/))
            sortfn = ts_sort_currency;
        if (elemA.match(/^[\d\.]+$/))
            sortfn = ts_sort_numeric;
        return sortfn;
    }
    
    if (!elemA)
        return;
        
    var sortfn = detectCompMethod(elemA);
    var result = sortfn(elemA, elemB);
    return result;    
}


//--shows object's properties
function show_props(obj, strObjectName){
    var result="";
    for(var i in obj)
        result += strObjectName + "." + i +
                  " = " + obj[i]+"\n";
    return result;
}

//-- Définition de la fonction de création d'objets messages
function jsMessage(value)
{
	if(!this.content)
		this.content = new Array();
	
	// methode add to message
	this.add = function jsMessage_add(value){
		if(!value)
			value = "";
		else
			this.content.push(value);
	}
	
    // methode show message
    this.show = function jsMessage_show(){
		var outputMsg = "";
		for (var i = 0; i < this.content.length; i++)
		{
			outputMsg += this.content[i] + "\n";
		}
		
		return outputMsg;
	}
	
	this.count = function jsMessage_count(){
		return this.content.length;
    }
	
	
	this.test = function jsMessage_test(){
		alert("test");
	}
	
	this.reset = function jsMessage_reset(){
		this.content = new Array();
	}
}


function trim(string)
{
	return string.replace(/(^\s*)|(\s*$)/g,'');
}

	
function inArray( b, a ) {
  for ( var i = 0, al = a.length; i < al; i++ )
    if ( a[i] == b )
      return i;
  return -1;
}

 
function merge(first, second) {
    //var r = [].slice.call( first, 0 );
    var r = [].slice(first, 0);
    
  // Now check for duplicates between the two arrays
  // and only add the unique items
  for ( var i = 0, sl = second.length; i < sl; i++ )
  // Check for duplicates
    if ( inArray( second[i], r ) == -1 )
      // The item is unique, add it
      first.push( second[i] );
  return first;
}

