function openCenteredWindow(file,name,properties,wprefix,hprefix) {
    centeredWindow = window.open(file,name,properties);
    centeredWindow.moveTo(screen.width/2-wprefix,screen.height/2-hprefix);
}


function columnRegexpFilter(r_event, r_regexp) {
    var theChar = "", r_founded = false;

    if(document.all) {
        r_event = window.event;
        theChar = String.fromCharCode(r_event.keyCode);
        if(!r_event.shiftKey) theChar = theChar.toLowerCase();
        r_founded = r_regexp.test(theChar);
        r_event.returnValue = r_founded;
    } else if (document.layers) {
        theChar = String.fromCharCode(r_event.which);
        r_founded = r_regexp.test(theChar)
    } else {
        theChar = String.fromCharCode(r_event.charCode);
        r_founded = (r_event.keyCode!=0) || r_regexp.test(theChar);
        r_event.cancelBubble = !r_founded;
    }

    return r_founded;
}


function getParent(el) {
    if (document.all)
    while (el.parentElement != null)
    if (el.tagName == 'TR') return el;
    else el = el.parentElement;
    else if (document.getElementById) {
        if (el.nodeType == 1 && el.tagName.toLowerCase() == 'tr') return el;
        else return getParent(el.parentNode);
    }
}


function getFormularName(formName) {
    for (i=0; i < document.forms.length; i++) {
        if (document.forms[i].name == formName) {
            return document.forms[i];
        }
    }
    return null;
}


function checkAll(formName, checked) {
    var formName = getFormularName(formName);
    len = formName.length;
    for (i = 0; i < len; i++) if (formName.elements[i].name == 'tableRowPkCheckbox[]') {
        formName.elements[i].checked = checked;
        var dbTableColor;
        dbTableColor = dbTableColor == 'db_table_odd_color' ? 'db_table_even_color' : 'db_table_odd_color';
        var parentTR = getParent(formName.elements[i]);
        parentTR.className = (formName.elements[i].checked) ? 'db_table_sel_color' : dbTableColor;
    }
}


function checkAllGIDs(formName, checked) {
    var formName = getFormularName(formName);
    len = formName.length;
    for (i = 0; i < len; i++) if (formName.elements[i].name == 'tableRowPkCheckbox[]') {
        formName.elements[i].checked = checked;
        var dbTableColor;
        dbTableColor = dbTableColor == 'db_table_odd_color' ? 'db_table_even_color' : 'db_table_odd_color';
        var parentTR = getParent(formName.elements[i]);
        parentTR.className = (formName.elements[i].checked) ? 'db_table_sel_color' : dbTableColor;

        if (formName.elements[i].checked = checked) {
            formName.elements['gids'].value = formName.elements['gids'].value.replace(formName.elements[i].value + '|', '');
            formName.elements['gids'].value += formName.elements[i].value + '|';
        } else {
            formName.elements['gids'].value = formName.elements['gids'].value.replace(formName.elements[i].value + '|', '');
        }
    }
}


function textCounter( field, countfield, maxlimit ) {
    if ( field.value.length > maxlimit ) {
        field.value = field.value.substring( 0, maxlimit );
        field.blur();
        field.focus();
        return false;
    } else {
        countfield.value = maxlimit - field.value.length;
    }
}


function checkChangedRow(formName, rowNr, usedElement, oldValue, usedBgColor, usageType, isChecked) {

    var rowNr = rowNr - 1;
    var elementName = 'tableRowPkCheckbox[]';
    var rowCheckbox = formName[elementName][rowNr];
    var rowElement = formName[usedElement];
    var rowElementOldValue = oldValue;

    if (rowCheckbox == null) {
        rowCheckbox = formName[elementName]
    };

    if (rowCheckbox) {
        var parentTR = getParent(rowCheckbox);
        if (usageType == 'checked') {
            if (isChecked == 'y') {
                if (rowCheckbox.checked) {
                    parentTR.className = (rowCheckbox.checked) ? 'db_table_sel_color' : usedBgColor;
                } else {
                    rowCheckbox.checked = true;
                    parentTR.className = (!rowCheckbox.checked) ? usedBgColor : 'db_table_sel_color';
                }
            } else {
                if (!rowCheckbox.checked) {
                    rowCheckbox.checked = true;
                    parentTR.className = (!rowCheckbox.checked) ? usedBgColor : 'db_table_sel_color';
                } else {
                    parentTR.className = (rowCheckbox.checked) ? 'db_table_sel_color' : usedBgColor;
                }
            }
        } else {
            if (rowElement.value != rowElementOldValue) {
                rowCheckbox.checked = true;
            } else {
                rowCheckbox.checked = false;
            }
            parentTR.className = (rowCheckbox.checked) ? 'db_table_sel_color' : usedBgColor;
        }
    }
    rowCheckbox = null;
}



var returnValuesFromWindow = new Array;
var formElementIndex;
var returnedFormElements = new Array;

function getFormelementByName(formName) {
    formElement = null;

    for (i=0; i < document.forms.length; i++) {
        whichForm = document.forms[i];

        for (e=0; e < whichForm.elements.length; e++) {
            if(whichForm.elements[e].name == formName) {
                formElement = whichForm.elements[e];
                break;
            }
        }

        if (formElement != null) break;
    }

    return formElement;
}


function getDataFromOpenedWindow(formName, sep) {
    var valuation;
    var elementName;
    var elementInfo;
    var z;

    if (formElementIndex == 0) {
        for (z=2; z < arguments.length; z++) {
            valuation = '';
            elementName = arguments[z];
            elementInfo = document.forms[formName].elements[elementName];
            valuation = elementInfo.value;
            returnValuesFromWindow[z - 2] = valuation;
        }
    } else {
        for (z=2; z < arguments.length; z++) {
            valuation = '';

            elementName = arguments[z] + '[' + formElementIndex + ']';
            elementInfo = document.forms[formName].elements[elementName];
            valuation = elementInfo.value;

            returnValuesFromWindow[z - 2] = valuation;
        }
    }
}


function openCenteredWindowChoose(file,name,properties,wprefix,hprefix) {

    returnedFormElements = new Array;

    for (z = 0, k = 5; k < arguments.length; k++, z++) {
        returnedFormElements[z] = getFormelementByName(arguments[k]);
    }

    centeredWindow=open(file,name,properties);
    centeredWindow.moveTo(screen.width/2-wprefix,screen.height/2-hprefix)
}


function returnWindowChooseValues(returnedValues) {
    if(returnedValues != null) {
        for(i = 0; i < returnedValues.length; i++) {
            returnedFormElements[i].value = returnedValues[i];
        }
    }
}


// after formName you should specify all fields, need to be reseted, delimited by ","
function resetFormularFields(formName) {
    for (k = 1; k < arguments.length; k++) {
        elementName = arguments[k];
        if (document.forms[formName].elements[elementName])
        document.forms[formName].elements[elementName].value = '';
    }
}


var http_request = false;
function getXhttpRequest(url, onReadyStateFunction) {
    if (window.XMLHttpRequest) {
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
            }
        }
    }
    if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }
    http_request.onreadystatechange = onReadyStateFunction;
    http_request.open('GET', url, true);
    http_request.send(null);
}
/*
example of usage :
function check_count() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
alert(http_request.responseText + ' any text ...');
}
}
}
onClick="getXhttpRequest('http://server/page.php?', check_count); return false;"
*/