/*é*/
// $() - 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 = isString(args[1]) ? args[1] : 'obj';
    var depth = isNumber(args[args.length-1]) ? 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 = '';
    }
}

// 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) {
    var xhr = createXHR();
    if ( xhr ) {
        xhr.open('GET', url, true);
        xhr.onreadystatechange = function(){handleResponse(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
        }
    }
}
*/

// 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 showPhoto(url,wd,ht) {
    wd += 10;
    ht += 10;
    var x = (screen.availWidth - wd) / 2;
    var y = 140;
    var photoWin = window.open('','','height='+ht+',width='+wd
			+ ',menubar=no,scrollbars=no,status=no,toolbar=no,location=no,'
			+ 'resizable=yes,screenx='+x+',screeny='+y+',top='+y+',left='+x);
    var html = "<html><head  style='margin:0;padding:0;'><title>HPBS</title></head>";
    html += "<body style='margin:0;padding:0;text-align: center;'>";
    html += "<img src='"+url+"' style='margin: 5px auto;' />";
    html += "</body></html>";
    photoWin.document.write(html);
    photoWin.document.close();
    photoWin.focus();
}

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 do_subscribe() {
    f = $('f_subscribe');
    var action = f.subscribe_toggle[0].checked ? 'subscribe' : 'unsubscribe';
    var email = f.subscribe_email.value;
    if ( email != '' ) {
        var url = 'ajax.php?action='+action+'&email='+email;
        var xhr = createXHR();
        if ( xhr ) {
            xhr.open('GET', url, true);
            xhr.onreadystatechange = function(){subscribeResponse(xhr);};
            xhr.send(null);
        }
        else {
            //alert('Cannot create XMLHttpRequest');
        }
    }
}

function subscribeResponse(xhr) {
    if (xhr.readyState == 4 && xhr.status == 200)
    {
        var div_msg = $('subscribe_msg');
        div_msg.innerHTML = '';
        try {
            var res = eval('(' + xhr.responseText + ')');
        }
        catch (e) {
            //alert(xhr.responseText);
            return;
        }

        // do something
        if ( res && res.result == true && res.action == 'subscribe' ) {
            var f = $('f_subscribe');

            div_msg.innerHTML = f.subscribe_msg_1.value;
            f.subscribe_email.value = '';
        }
        if ( res && res.result == true && res.action == 'unsubscribe' ) {
            var f = $('f_subscribe');
            div_msg.innerHTML = f.subscribe_msg_2.value;
            f.subscribe_email.value = '';
        }
    }
}

var position = 0;
function ticker()
{
    var tmp = msg.substring(position)+msg.substring(0,position);
    tmp = tmp.substring(0, 71);
    tmp = tmp.replace(/ /g, "&nbsp;");
    $('text_undermenu').innerHTML = tmp;
    position++;
    if (position >= msg.length) {
        position=0;
    }

}

function clearSelectBox(sbox) {
    var max_index = sbox.length - 1;
    for ( var i = max_index; i >= 0; i-- ) {
        sbox.options[i] = null;
    }
}