/*é*/
// $_() - shortcut for document.getElementById()
function $_(id) {
    return document.getElementById(id);
}
function isString(obj) {
    return typeof obj == "string";
}
function isNumber(obj) {
    return typeof obj == "number";
}
function isUndefined(obj) {
    return typeof obj == "undefined";
}
function isArray(obj) {
    return obj != null && typeof obj == "object" && 'splice' in obj && 'join' in obj;
}
function isObject(obj) {
    return typeof obj == "object";
}

// DEBUG FUNCTION
// open a window with a list of object's properties
// depends on function get_dump()
// arg1: (object) object
// [arg2]: (string) objectName (default: 'obj')
// [arg3]: (number) depth of recursion (default: 0)
function var_dump(obj) {
    var args = var_dump.arguments;
    var objName = typeof args[1] == "string" ? args[1] : 'obj';
    var depth = typeof args[args.length-1] == "number" ? args[args.length-1] : 0;
    var res = get_dump(obj, objName, depth);
    var wd = 600;
    var ht = screen.availHeight - 220;
    var x = (screen.availWidth - wd) / 2;
    var y = 140;
    var vdWin 	= window.open('','','height='+ht+',width='+wd
			+ ',menubar=no,scrollbars=yes,status=yes,toolbar=no,location=no,'
			+ 'resizable=yes,screenx='+x+',screeny='+y+',top='+y+',left='+x);
    vdWin.document.write(res);
    vdWin.document.close();
    vdWin.focus();
}
// recursive function return a string with object's properties
function get_dump(obj, objName, depth) {
    var res = '';
    for ( var i in obj ) {
        try {
            if ( typeof obj[i] == "object" ) {
                if ( depth > 0 ) {
                    depth--;
                    res += get_dump(obj[i], objName+"."+i, depth);
                }
                else {
                    res += '<b>'+objName + '.' + i + "</b> = " + obj[i] + "<br />";
                }
            }
            else {
                res += '<b>'+objName + '.' + i + "</b> = " + obj[i] + "<br />";
            }
        }
        catch (e) {
            res += objName + '.' + i + " = Exception<br />";
        }
    }
    return res;
}

// toggle element display
function toggle(obj) {
    var el = document.getElementById(obj);
    if ( el.style.display != 'none' ) {
        el.style.display = 'none';
    }
    else {
        el.style.display = '';
    }
}

function showPopup(url,wd,ht) {
	if ( wd == undefined ) {
		var wd = screen.availWidth - 200;
	}
	if ( ht == undefined ) {
		var ht = screen.availHeight - 200;
	}
	var x = (screen.availWidth - wd) / 2;
	var y = 100;
	var win	= window.open(url,'','height='+ht+',width='+wd
			+ ',menubar=no,scrollbars=yes,status=yes,toolbar=no,location=no,'
			+ 'resizable=yes,screenx='+x+',screeny='+y+',top='+y+',left='+x);
	win.focus();
}

// AJAX FUNCTIONS
function createXHR() {
    try { return new XMLHttpRequest(); } catch(e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
    try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
    return false;
}

// async request, method get
function sendRequest(url,responseFunction) {
    var xhr = createXHR();
    if ( xhr ) {
        xhr.open('GET', url, true);
        xhr.onreadystatechange = function(){responseFunction(xhr);};
        xhr.send(null);
    }
    else {
        //alert('Cannot create XMLHttpRequest');
    }
}

// async request, method post (if data > 512 bytes)
function sendPost(url,data) {
    var xhr = createXHR();
    if ( xhr ) {
        xhr.open('POST', url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function(){handleResponse(xhr);};
        xhr.send("param1=x&param2=y");
    }
    else {
        //alert('Cannot create XMLHttpRequest');
    }
}

// example of handleResponse()
/*
function handleResponse(xhr) {
    if (xhr.readyState == 4 && xhr.status == 200)
    {
        try {
            var res = eval('(' + xhr.responseText + ')');
        }
        catch (e) {
            alert(xhr.responseText);
            return;
        }
        // do something
        if ( res && res.result == true && res.action == 'your_action' ) {
            // do something
        }
    }
}
*/

function handleDelete(xhr) {
    if (xhr.readyState == 4 && xhr.status == 200)
    {
        try {
            var res = eval('(' + xhr.responseText + ')');
        }
        catch (e) {
            alert(xhr.responseText);
            return;
        }
        // SUCCESS delete table row
        if ( res && res.result ) {
            delRow('table_list',res.id);
        }

        // FAIL - show error
        if ( res && res.result == false && res.error ) {
        	alert(res.error);
        }
    }
}

// delete a row from table
function delRow(tableId,rowId) {
    if (!document.getElementById)
        return;
    var tbl = $_(tableId);
    if (!tbl.getElementsByTagName)
		return;
    var tbody_node = tbl.getElementsByTagName('tbody')[0];
    var row_node = $_('row'+rowId);
    if ( !tbody_node.hasChildNodes() || row_node.parentNode !== tbody_node )
        return;
    tbody_node.removeChild(row_node);
    makeStripe(tbl);
}

function makeStripe(tbl)
{
	if (!tbl.getElementsByTagName)
		return;
	rows = tbl.getElementsByTagName("tr");
	// find first row with class="odd"
	for(var i=0; i<rows.length; i++) {
	    if ( rows[i].className == "odd" ) {
            var from = i;
            break;
        }
	}
	if ( isUndefined(from)  ) {
        from = rows.length - 1;
    }
	for(var i=from; i<rows.length; i++) {
		rows[i].className = ((i - from)%2)==0 ? "odd" : "even";
	}
}

var default_content = '';
function close_jpopup() {
   var details_layer = document.getElementById('details_layer1');
   var details = document.getElementById('details_area');

   if (details_layer) {
      details_layer.style.display = 'none';
      if (details) {
         details.innerHTML = default_content;
      }
      vis_elements(true);
   }
   else {
      window.location.reload();
   }
}

function vis_elements(show) {
   var visibility = show ? 'visible' : 'hidden';
   var forms = document.forms;
   if (forms.length!=0) {
      for (var i=0 ; i<forms.length ; i++) {
         var form = document.forms[i];
         for (var j=0 ; j<form.elements.length ; j++) {
            if (form.elements[j].nodeName=='SELECT') {
               form.elements[j].style.visibility = visibility;
            }
         }
      }
   }
} 

function arr2ul(arr) {
    if ( isArray(arr) && arr.length > 0 ) {
        var msg = '';
        for ( var i in arr ) {
            msg += '<li>'+arr[i]+'</li>';
        }
        msg = '<ul>'+msg+'</ul>';
        return msg;
    }
    else {
        return '';
    }
}

function isValidDate(year,month,day) {
    var date_obj = new Date(year,month-1,day);
    if ( date_obj.getFullYear() != year
    ||   date_obj.getMonth()+1  != month
    ||   date_obj.getDate()     != day ) {
        return false;
    }
    else {
        return true;
    }
}

function formatDateFr(d) {
	var weekdays = ["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"];
	var year = d.getFullYear();
	var month = d.getMonth() + 1;
	if ( month < 10 ) {
	    month = '0' + month;
	}
	var day = d.getDate();
	if ( day < 10 ) {
        day = '0' + day;
    }
	var weekday = weekdays[d.getDay()];
	return weekday + ' ' + day + '/' + month + '/' + year;
}

//drop-down menu
var menu_timeout_value = 700;
var menu_timeout;


function show_menu(id,el) {
	hide_menus();
    var this_menu = document.getElementById(id);
    if (this_menu) {
    	this_menu.style.marginLeft = el.offsetLeft + 'px';
        this_menu.style.display='block';
    }
}

function stop_menu_timer() {
   if (menu_timeout) {
      clearTimeout(menu_timeout);
   }
}

function start_menu_timer() {
	menu_timeout = setTimeout(hide_menus,menu_timeout_value);
}

function hide_menus() {
   var uls = document.getElementsByTagName('ul');
   for (var i=0 ; i<uls.length ; i++) {
      if (uls[i].className=='submenu') {
         uls[i].style.display='none';
      }
   }
} 
// show menu FO 
var menu_timeout_fo;
function show_menu_fo(id) {
	hide_menus_fo();
    var this_menu = document.getElementById(id);
    if (this_menu) {
        this_menu.style.display='block';
    }
}

function show_menu_lev3(id) {
	hide_menus_lev3();
    var this_menu = document.getElementById(id);
    if (this_menu) {
        this_menu.style.display='block';
    }
}

function stop_menu_timer_fo() {
   if (menu_timeout_fo) {
      clearTimeout(menu_timeout_fo);
   }
}

function start_menu_timer_fo() {
	menu_timeout_fo = setTimeout(hide_menus_fo,menu_timeout_value);
}
function hide_menus_fo() {
   var uls = document.getElementsByTagName('ul');
   for (var i=0 ; i<uls.length ; i++) {
      if (uls[i].className == 'submenu_lev2' || uls[i].className == 'submenu_lev3') {
         uls[i].style.display='none';
      }
   }
}
function hide_menus_lev3() {
   var uls = document.getElementsByTagName('ul');
   for (var i=0 ; i<uls.length ; i++) {
      if (uls[i].className == 'submenu_lev3') {
         uls[i].style.display='none';
      }
   }
}




