// Funktionen zum Ermitteln der Maus-Position und der Fenstergröße
if (typeof mposx == 'undefined') {
    var mposx = 0;
    var mposy = 0;
}
function mpos(ev)
{
    mposx = ev.pageX;
    mposy = ev.pageY;
}
function getMousePos(event)
{
    if (document.all) {
        mposx = window.event.clientX;
        mposy = window.event.clientY;
    } else {
        switch (event) {
        case 'click':
            document.onclick = mpos;
            break;
        default:
            document.onmousemove = mpos;
        }
    }
}
if (!document.all) {
    document.onmousemove=mpos;
}
function getWindowHeight()
{
    if (window.innerHeight) {
        return window.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        return document.documentElement.clientHeight;
    } else return 0;
}
function getWindowWidth()
{
    if (window.innerWidth)
    {
        return window.innerWidth;
    } else if (document.documentElement && document.documentElement.clientWidth) {
        return document.documentElement.clientWidth;
    } else return 0;
}
// Variablen und Funktion für checkForm
var submitOK = true;
var fieldChecked = '';
var alertClosed = true;
var erorMsg = '';
var ajaxRunning = false;
var checkForm = function(param)
{
    if (!alertClosed) {
        return;
    }
    if (!param.disableCheck && typeof formFields != 'undefined' && formFields[param.form]) {
        for (var i = 0; i < formFields[param.form].length; i++) {
            if (!param.section || formFields[param.form][i].fieldset == param.section) {
                switch (formFields[param.form][i].type) {
                case 'date':
                case 'futuredate':
                case 'birthday':
                    var field = {};
                    field.day = document.getElementById(param.form+'_'+formFields[param.form][i].name+'_d');
                    field.month = document.getElementById(param.form+'_'+formFields[param.form][i].name+'_m');
                    field.year = document.getElementById(param.form+'_'+formFields[param.form][i].name+'_y');
                    break;
                case "checkbox":
                    var field = document.getElementById(param.form+'_'+formFields[param.form][i].name);
                    if (field && formFields[param.form][i].required && !field.checked) {
                        buildAlert({type: 'alert', head: 'Ein Pflichtfeld wurde nicht ausgefüllt!', msg: (formFields[param.form][i].message && formFields[param.form][i].message != '' ? formFields[param.form][i].message : 'Bitte füllen Sie das Feld "'+formFields[param.form][i].label+'" aus.')});
                        errorField = field;
                        return false;
                    }
                case 'select': // default option should always have value "0" -> user has to select a valid option
                    var field = document.getElementById(param.form+'_'+formFields[param.form][i].name);
                    // check auf nicht Leer && auf nicht 0
                    if (field && typeof field != 'undefined' && formFields[param.form][i].required && (trim(field.value) == '' || trim(field.value) == '0')) {
                        buildAlert({type: 'alert', head: 'Ein Pflichtfeld wurde nicht ausgefüllt!', msg: (formFields[param.form][i].message && formFields[param.form][i].message != '' ? formFields[param.form][i].message : 'Bitte wählen Sie beim Feld "'+formFields[param.form][i].label+'" eine Option aus.')});
                        errorField = field;
                        return false;
                    }
                    break;
                default:
                    var field = document.getElementById(param.form+'_'+formFields[param.form][i].name)
                    // check auf nicht Leer
                    if (field && typeof field != 'undefined' && formFields[param.form][i].required && trim(field.value) == '') {
                        buildAlert({type: 'alert', head: 'Ein Pflichtfeld wurde nicht ausgefüllt!', msg: (formFields[param.form][i].message && formFields[param.form][i].message != '' ? formFields[param.form][i].message : 'Bitte füllen Sie das Feld "'+formFields[param.form][i].label+'" aus.')});
                        errorField = field;
                        return false;
                    }
                }
                // plausibility checks of special fields
                switch (formFields[param.form][i].type) {
                case 'email':
                    if (!checkEmail(field, formFields[param.form][i])) {
                        errorField = field;
                        return false;
                    }
                    break;
                case 'phone':
                    var filter = /[^0-9 \-\/\(\)]/;
                    if (filter.test(field.value)) {
                        buildAlert({type: 'alert', head: 'Fehler bei der Eingabe!', msg: 'Das Feld "'+formFields[param.form][i].label+'" enthält ungültige Zeichen.'});
                        errorField = field;
                        return false;
                    }
                    break
                case 'numeric':
                    if (isNaN(field.value)) {
                        buildAlert({type: 'alert', head: 'Fehler bei der Eingabe!', msg: 'Bitte geben Sie in das Feld "'+formFields[param.form][i].label+'" nur Ziffern (0-9) ein.'});
                        errorField = field;
                        return false;
                    }
                    break;
                case 'date':
                    if (!checkDate(field, formFields[param.form][i])) {
                        errorField = field.day;
                        return false;
                    }
                    break;
                case 'futuredate':
                    if (!checkFutureDate(field, formFields[param.form][i])) {
                        errorField = field.day;
                        return false;
                    }
                    break;
                case 'birthday':
                    var field = {};
                    if (formFields[param.form][i].required) {
                        field.day = document.getElementById(param.form+'_'+formFields[param.form][i].name+'_d');
                        field.month = document.getElementById(param.form+'_'+formFields[param.form][i].name+'_m');
                        field.year = document.getElementById(param.form+'_'+formFields[param.form][i].name+'_y');
                        if (!checkDate(field, formFields[param.form][i]) || !checkMajority(field, formFields[param.form][i])) {
                            errorField = field.day;
                            return false;
                        }
                    }
                    break;
                }
            }
            if (formFields[param.form][i].equals) {
                var equalsFiled = document.getElementById(param.form+'_'+formFields[param.form][i].equals);
                if (field.value != equalsFiled.value) {
                    buildAlert({type: 'alert', head: 'Fehler bei der Eingabe!', msg: formFields[param.form][i].message});
                    return false;
                }
            }
        }
    }
    var formId = document.getElementById(param.form);
    if (param.submit && submitOK && alertClosed && !ajaxRunning) { // disable all form buttons
        var cnt = 0;
        var found = true;
        while (found) {
            found = document.getElementById('btn_'+param.form+'_'+cnt);
            cnt++;
            if (found) {
                changeFormButtons(param.form, found);
            }
        }
        formId.submit();
    } else {
        if (!param.submit) {
            return true
        }
        //buildAlert({type: 'alert', head: 'Fehler beim Versenden des Formulars!', msg: 'Das Formular kann nicht versendet werden, da ein Feld eine ungültige Eingabe enthält.'});
    }
}
var trim = function(str)
{
    str = str.replace(/\s+$/,"");
    return str.replace(/^\s+/,"");
}
var wait = function()
{
    return;
}

function submitenter(myfield, e, formName)
{
    if (ajaxRunning || !alertClosed) {
        return true;
    }
    var keycode;
    if (window.event) {
        keycode = window.event.keyCode;
    } else if (e) {
        keycode = e.which;
    } else {
        return true;
    }
    if (keycode == 13) {
        checkForm({form: formName, submit: true});
        return false;
    } else {
        return true;
    }
}
var changeFormButtons = function(formId, buttonObj) {
    buttonObj.onclick = null;
    buttonObj.style.cursor = 'wait';
    buttonObj.getElementsByTagName('div')[0].className = 'leftInactive';
    buttonObj.getElementsByTagName('p')[0].className = 'rightInactive';
}
var checkEmail = function(elem, fieldObj)
{
    var str = elem.value;
    if (str == '' && !fieldObj.required) {
        return true;
    }
    var filter = /^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/;
    if (typeof str == 'undefined' || !filter.test(str)) {
        buildAlert({type: 'alert', head: 'Fehlerhafte Eingabe!', msg: 'Bitte geben Sie im Feld "'+fieldObj.label+'" eine korrekte E-Mail-Adresse an.'});
        return false;
    }
    return true;
}
var checkPhoneNumber = function(elem, fieldObj)
{
    var str = elem.value;
    if (str == '' && !fieldObj.required) {
        return true;
    }
    var filter = /^[0-9\-_ ]*$/i;
    if (typeof str == 'undefined' || !filter.test(str)) {
        buildAlert({type: 'alert', head: 'Fehlerhafte Eingabe!', msg: 'Bitte geben Sie im Feld "'+fieldObj.label+'" nur Ziffern (0-9) ein.'});
        return false;
    }
    return true;
}
var checkMacAddress = function(elem, fieldObj)
{
    var str = elem.value;
    if (str == '') {
        return true;
    }
    var filter = /^([0-9a-fA-F]{2}([:]|$)){6}$/i;
    if (typeof str == 'undefined' || !filter.test(str)) {
        errorField = elem;
        buildAlert({type: 'alert', head: 'Fehlerhafte Eingabe!', msg: 'Bitte geben Sie im Feld "'+fieldObj.label+'" eine MAC Adresse im Format "aa:aa:aa:aa:aa:aa" ein.'});
        return false;
    }
    return true;
}
var checkSSID = function(elem, fieldObj)
{
    var str = elem.value;
    if (str == '') {
        return true;
    }
    var filter = /^((([0-9a-zA-Z]{3})([\-])){2}([0-9a-zA-Z]{2})(([\-])([0-9a-zA-Z]{3})){2})|(([0-9a-zA-Z]{3})([\-])([0-9a-zA-Z]{2})([\-])([0-9a-zA-Z]{3}))$/i;
    if (typeof str == 'undefined' || !filter.test(str)) {
        errorField = elem;
        buildAlert({type: 'alert', head: 'Fehlerhafte Eingabe!', msg: 'Bitte geben Sie im Feld "'+fieldObj.label+'" eine SSID im Format "aaa-aaa-aa-aaa-aaa" oder "aaa-aa-aaa" ein.'});
        return false;
    }
    return true;
}
var checkDateFormat = function(elem, fieldObj)
{
    var str = elem.value;
    if (str == '' && !fieldObj.required) {
        return true;
    }
    var filter = /^(0[1-9]|[12][0-9]|3[01])(\.)(0[1-9]|1[012])(\.)(19|20)[0-9][0-9]$/i;
    if (typeof str == 'undefined' || !filter.test(str)) {
        buildAlert({type: 'alert', head: 'Fehlerhafte Eingabe!', msg: 'Bitte geben Sie im Feld "'+fieldObj.label+'" ein korrektes deutsches Datum (TT.MM.JJJJ) an.'});
        return false;
    }
    return true;
}
var checkPhonePassword = function(elem, fieldObj)
{
    var str = elem.value;
    if (str == '' && !fieldObj.required) {
        return true;
    }
    var filter = /[^0-9a-zA-ZäöüÄÖÜß_\-]/i;
    if (typeof str == 'undefined' || !filter.test(str)) {
        buildAlert({type: 'alert', head: 'Fehlerhafte Eingabe!', msg: 'Bitte geben Sie im Feld "'+fieldObj.label+'" nur Buchstaben (A-Z), Zahlen (0-9), deutsche Umlaute (ä, ö, ü, ß) oder Bindestriche ein.'});
        return false;
    }
    return true;
}
var checkDate = function(elem, fieldObj)
{
    var date = {
        day: elem.day.value,
        month: elem.month.value,
        year: elem.year.value
    };
    // default...
    return true;
}
var checkNumber = function(elem, fieldObj)
{
    var str = elem.value;
    if (str == '' && !fieldObj.required) {
        return true;
    }
    var filter = /^[0-9\-_ ]*$/i;
    if (typeof str == 'undefined' || isNaN(str)) {
        buildAlert({type: 'alert', head: 'Fehlerhafte Eingabe!', msg: 'Bitte geben Sie im Feld "'+fieldObj.label+'" nur Ziffern (0-9) ein.'});
        return false;
    }
    return true;
}
var checkMajority = function(elem, fieldObj)
{
    var date = {
        day: elem.day.value,
        month: elem.month.value,
        year: elem.year.value
    };
    var eightteen = Date.UTC(Number(date.year)+18, Number(date.month)-1, Number(date.day));
    var now = new Date();
    var comp = Date.UTC(now.getFullYear(), now.getMonth(), now.getDate());
    if (eightteen > comp) {
        buildAlert({type: 'alert', head: 'Fehlerhafte Eingabe!', msg: 'Bitte geben Sie im Feld "'+fieldObj.label+'" Ihr Geburtsdatum an. Das Geburtsdatum muss ein Alter von mindestens 18 Jahren ergeben (volljährig).'});
        return false;
    } else {
        return true;
    }
}
var checkTodayOrEarlier = function(elem, fieldObj)
{
    var str = elem.value;
    if (str == '') {
        return true;
    }
    if (!checkDateFormat(elem, fieldObj)) {
        errorField = elem;
        return false;
    }
    var today = new Date();
    var date = str.split('.');
    str = new Date(date[2], Number(date[1])-1, date[0]);
    if (Date.parse(str) > Date.parse(today)) {
        errorField = elem;
        buildAlert({type: 'alert', head: 'Fehlerhafte Eingabe!', msg: 'Bitte geben Sie im Feld "'+fieldObj.label+'" nur das heutige Datum oder ein in der Vergangenheit liegendes Datum an.'});
        return false;
    } else {
        return true;
    }
}
var checkFutureDate = function(elem, fieldObj)
{
    var today = new Date();
    var elemdate = new Date(elem.year.value, elem.month.value-1, elem.day.value);
    if (Date.parse(elemdate) <= Date.parse(today)) {
        errorField = elem;
        buildAlert({type: 'alert', head: 'Fehlerhafte Eingabe!', msg: 'Bitte geben Sie im Feld "'+fieldObj.label+'" nur ein in der Zukunft liegendes Datum an.'});
        return false;
    } else {
        return true;
    }
}
var checkAreaCode = function(area, city)
{
    if (area.value != '') {
        ajaxRunning = true;
        Ajax.request({uri: '/ajaxsrv/areacode.php', method: 'POST', parameter: 'code=' + area.value + '&city=' + city, handler: 'checkAreaCodeHandler'});
    }
}
var checkAreaCodeHandler = function(resp)
{
    ajaxRunning = false;
    var result = resp.parseJSON();
    if (result.error > 0) {
        buildAlert({type:"alert", head: "Fehler bei der Eingabe", msg: result.errortext});
    }
}
/**
 * Infobox - functions to display & hide
 */
var showInfoBox = function(textIdentifier,openerId) {
    getMousePos();
    if (infoTextBlocks[textIdentifier] && infoTextBlocks[textIdentifier] != ''){
        if (window.pageYOffset) {
            var scrolled = window.pageYOffset;
        } else {
            var scrolled = document.documentElement.scrollTop;
        }
        var contentRight = document.getElementById("contentRight");
        var infoLayerObj = document.getElementById("infolayer");
        if (infoLayerObj) {
            contentRight.removeChild(infoLayerObj);
        }
        if (document.all) {
            mposy = mposy + scrolled;
        }
        var infoLayer = document.createElement('div');
        infoLayer.id = "infolayer";
        infoLayer.style.zIndex = "999";
        infoLayer.style.visibility = "hidden";
        document.getElementsByTagName('body')[0].appendChild(infoLayer);
        var image = document.createElement('img');
        image.src = gClientImg+'layer_top.gif';
        image.style.margin = 0;
        infoLayer.appendChild(image);
        var h6 = document.createElement('h6');
        var a = document.createElement('a');
        a.href = 'javascript:hideInfoBox()';
        var image = document.createElement('img');
        image.src = gClientImg+'info_i_2.gif';
        a.appendChild(image);
        h6.appendChild(a);
        infoLayer.appendChild(h6);
        var container = document.createElement('div');
        container.className = "container";
        infoLayer.appendChild(container);
        var divrow = document.createElement('div');
        divrow.className = "tr";
        var p = document.createElement('p');
        if (infoTextBlocks[textIdentifier].indexOf('\n') == -1) {
            var infoText = document.createTextNode(infoTextBlocks[textIdentifier]);
            p.appendChild(infoText);
        } else {
            var msg = infoTextBlocks[textIdentifier].split('\n');
            for (var i in msg) {
                if (typeof msg[i] == 'string') {
                    var infoText = document.createTextNode(msg[i]);
                    p.appendChild(infoText);
                    var lb = document.createElement('br');
                    p.appendChild(lb);
                }
            }
        }
        divrow.appendChild(p);
        container.appendChild(divrow);
        infoLayer.style.left = (7 + mposx) +'px';
        infoLayer.style.top = (15 + mposy) + 'px';
        if (parseInt(infoLayer.style.top) + infoLayer.offsetHeight > getWindowHeight() + scrolled) {
            infoLayer.style.top = (mposy - 15 - infoLayer.offsetHeight) +'px';
        }
        if (parseInt(infoLayer.style.left) + infoLayer.offsetWidth > getWindowWidth()) {
            infoLayer.style.left = (mposx - 7 - infoLayer.offsetWidth) +'px';
        }
        /*
        var offsetTop = infoLayer.offsetTop;
        if (offsetTop < scrolled) {
            infoLayer.style.marginTop = (scrolled - offsetTop) + 'px';
        } */
        infoLayer.style.visibility = "visible";
    }
}
var hideInfoBox = function()
{
    var infoLayerObj = document.getElementById("infolayer");
    if (infoLayerObj) {
        infoLayerObj.parentNode.removeChild(infoLayerObj);
    }
}
