//do obslugi formularzy

validationErrors = {
  'required': {'pl': 'To pole jest wymagane',
               'en': 'This field is required',
               'de': 'Erforderliches Feld'
               },
  'other': {'pl': 'Niepoprawnie wypełnione pole',
            'en': 'Incorrect field value',
            'de': 'Unverbesserlich Wert'}
}

validationTable = {
    'company': {'re': /^.+$/,
                'required': ['label', 'frontPanel', 'keyboard']},
    'address': {'re': /^.+$/,
                'required': ['label', 'frontPanel', 'keyboard']},
    'email': {'re': /^[a-zA-Z0-9\._-]+@[a-z0-9\._-]+[a-z]{2,4}$/,
              'required': ['label', 'frontPanel', 'keyboard']},
    'companyPerson': {'re': /^.+$/,
                      'required': ['label', 'frontPanel', 'keyboard']},
    'phoneNumber': {'re': /^\+?[0-9 \+\(\)-]{6,16}$/,
                    'required': ['label', 'frontPanel', 'keyboard']},
    'fax': {'re': /^(\+?[0-9 \+\(\)-]{6,16})?$/ },
    'symbol': {'re': /^.+$/,
               'required': ['label', 'frontPanel', 'keyboard']},
    'width': {'re': /^[0-9]+$/,
              'required': ['label', 'frontPanel', 'keyboard']},
    'cornerRadius': {'re': /^[0-9]*$/},
    'height': {'re': /^[0-9]+$/,
               'required': ['label', 'frontPanel', 'keyboard']},
    'holesPunched': {'re': /^[0-9]*$/},
    'numberOfColours': {'re': /^[0-9]+$/,
                        'required': ['label', 'frontPanel', 'keyboard']},
    'keyboardBasePlate': {'re': /^true$/},
    'LCDDisplayWidnow': {'re': /^true$/},
    'LEDDisplayWindow': {'re': /^true$/},
    'LEDDiodeWindows': {'re': /^true$/},
    'windowFilterColor':  {'re': /^green|red|gray|other$/},
    'numberOfKeys':   {'re': /^[0-9]+$/,
                       'required': ['frontPanel', 'keyboard']},
    'domes':  {'re': /^true$/},
    'embossing':  {'re': /^true$/},
    'embossingOption':  {'re': /^dome|key shape|frame$/,
                         'depends': {"embossing": "^true$"}},
    'circuitDiagram':   {'re': /^matrix|common conducto|other$/,
                         'required': ['keyboard']},
    'numberOfPaths':  {'re': /^[0-9]+$/,
                       'required': ['keyboard']},
    'connector':  {'re': /^true$/},
    'connectorOption':  {'re': /^simple|to be solderec|side entry$/,
                         'depends': {"connector": "^true$"}},
    'pinsRaster':   {'re': /^0\.1|1 mm|other$/,
                     'depends': {"connector": "^true$"}},
    'electromagneticScreen':  {'re': /^true$/},
    'electromagneticScreenOption':  {'re': /^top|bottom$/,
                                     'depends': {"electromagneticScreen": "^true$"}},
    'SMDDiodes':  {'re': /^true$/},
    'SMDColorBlue':   {'re': /^[0-9]{0,4}$/,
                       'depends': {"SMDDiodes": '^true$'}},
    'SMDColorGYR':  {'re': /^[0-9]{0,4}$/,
                     'depends': {"SMDDiodes": '^true$'}},
    'SMDColorBicolor':  {'re': /^[0-9]{0,4}$/,
                         'depends': {"SMDDiodes": '^true$'}},
    'SMDSum':   {'re': /[0-9]*/},
    'SMDCircuitDiagram':  {'re': /^matrix|common conducto|other$/},
    'SMDNumberOfPaths':   {'re': /^[0-9]+$/},
    'SMDConnector':   {'re': /^true$/},
    'SMDConnectorOption':   {'re': /^simple|to be solderec|side entry$/,
                             'depends': {'SMDConnector': '^true$'}},
    'SMDPinsRaster':  {'re': /^0\.1|1 mm|other$/,
                       'depends': {
                                   'SMDConnector': "^true$"}},
    'notes':  {'re': /.*/}
}

function goToNextFormPart(elemId) {
    document.body.scrollTop = 0;
    var elem = $(elemId);
    var formPart = elem;
    var reId = /^formgroup([0-9]+)$/ ;
    
    var intId = parseInt(formPart.id.replace(reId, '$1'));
    var nextElement = null;
    while (intId < 7 && !nextElement){
        nextElement = $('formgroup'+ (++intId));
    }
    
    if (validateFormPart(formPart)) {
        var reId = /^formgroup([0-9]+)$/ ;
        var intId = parseInt(formPart.id.replace(reId, '$1'));
        var nextElement = null;
        while (intId < 7 && !nextElement){
            nextElement = $('formgroup'+ (++intId));
        }
        var allParts = getElementsByTagAndClassName(null, 'formgroup');
        for (var i = 0; i < allParts.length; i++) {
            allParts[i].style.display = 'none';
        }
        nextElement.style.display = 'block';

        if (typeof customUpdateDisplay == 'function') {
            setTimeout(customUpdateDisplay,100);
        }
        if ($('main')) {
            $('main').scrollTop = 0;
        }
        return true;
    }
    else {
        return false;
    }
}

function goToPrevFormPart(elemId) {
    document.body.scrollTop = 0;
    var elem = $(elemId);
    var formPart = elem;
    var reId = /^formgroup([0-9]+)$/ ;
    
    var intId = parseInt(formPart.id.replace(reId, '$1'));
    var prevElement = null;
    while (intId > 1 && !prevElement){
        prevElement = $('formgroup'+ (--intId));
    }
    
    var allParts = getElementsByTagAndClassName(null, 'formgroup');
    for (var i = 0; i < allParts.length; i++) {
        allParts[i].style.display = 'none';
    }
    
    prevElement.style.display = 'block';
    if ($('main')) {
        $('main').scrollTop = 0;
    }
    return true;
}

function validateField(field, setRe) {
    if (setRe != undefined) {
        if (field.type == 'text') {
            if (field.value.match()) {
                return true;
            }
            else {
                return false;
            }
        }
        else if (field.type == 'checkbox') {
            if (setRe == null && field.checked == undefined) {
                return true;
            }
            else if (setRe != null && field.checked != undefined) {
                return true;
            }
            else {
                return false;
            }
        }
        else if (field.type == 'radio') {
            fields = document.getElementsByName(field.name);
            isChecked = false;
            for (var i = 0; i < fields.length; i++) {
                if (fields[i].checked) {
                    isChecked = true;
                }
            }
            if ((setRe == null && !isChecked) || (setRe != null && isChecked)) {
                return true;
            }
            else {
                return false;
            }
        }
    }
    else {
        var reId = /^form_([^_]+)(_.+)?$/
            var fieldName = field.id.replace(reId, "$1");
        if (field.type == 'reset') {
            return true;
        }
        var formName = $('form_formName');
        var required = false;
        if (validationTable[fieldName].required && validationTable[fieldName].required.indexOf(formName.value) > -1) {
            required = true;
        }
        var valid = false;
        if (field.type == 'text' || field.type == 'textarea') {
            valid = field.value.match(validationTable[fieldName].re);
        }
        else if (field.type == 'checkbox') {
            if (field.checked) {
                valid = field.value.match(validationTable[fieldName].re);
            }
            else {
                valid = true;
            }
        }
        else if (field.type == 'radio') {
            fs = document.getElementsByName(field.name);
            elemChecked = null;
            for (var i = 0; i < fs.length; i++) {
                if (fs[i].checked) {
                    elemChecked = fs[i];
                }
            }
            if (required && !elemChecked) return false;
            valid = true;
        }
        
        return valid?true:false;
        
    }
}

function validateFormPart(formPart) {
    errorInfo = $('errorInfo_' + formPart.id);
    errorInfo.innerHTML = '';
    isError = false;
    if (formPart.id != 'formgroup6') {
        fields = getElementsByTagAndClassName('input', null, formPart);
        for (var i = 0; i < fields.length; i++) {
            if (validateField(fields[i])) {
                fields[i].parentNode.style['color'] = '';
            }
            else {
                isError = true;
                fields[i].parentNode.style['color'] = 'red';
                errorInfo.innerHTML = validationErrors.other[$('form_language').value];
            }
        }
    }
    else {
        fields = getElementsByTagAndClassName('textarea', null, formPart);
        for (var i = 0; i < fields.length; i++){
            if (validateField(fields[i])) {
                fields[i].style.color = '';
            }
            else {
                isError = true;
                fields[i].style.color = 'red';
                errorInfo.innerHTML = validationErrors.other[$('form_language').value];
            }
        }
    }
    return !isError;
}

function validateForm() {

}

function onChangeLEDWindow() {
    LEDDisplay = $('form_LEDDisplayWindow');
    LEDDiode = $('form_LEDDiodeWindows');
    radios = document.getElementsByClassName('windowFilterColor');
    if (LEDDiode.checked || LEDDisplay.checked) {
        for (var i = 0; i < radios.length; i++) {
            radios[i].disabled = undefined;
        }
    }
    else {
        for (var i = 0; i < radios.length; i++) {
            radios[i].disabled = 'disabled';
        }
    }
}

function onChangeEmbossing() {
    emb = $('form_embossing');
    radios = document.getElementsByName('form[embossingOption]');
    if (emb.checked) {
        for(var i = 0; i < radios.length; i++) {
            radios[i].disabled = undefined;
        }
    }
    else {
        for(var i = 0; i < radios.length; i++){
            radios[i].disabled = 'disabled';
        }
    }
}

function onChangeConnector() {
    connector = $('form_connector');
    radios1 = document.getElementsByName('form[connectorOption]');
    radios2 = document.getElementsByName('form[pinsRaster]');
    if (connector.checked) {
        for (var i = 0; i < radios1.length; i++){
            radios1[i].disabled = undefined;
        }
        for (var i = 0; i < radios2.length; i++){
            radios2[i].disabled = undefined;
        }
    }
    else {
        for (var i = 0; i < radios1.length; i++){
            radios1[i].disabled = 'disabled';
        }
        for (var i = 0; i < radios2.length; i++){
            radios2[i].disabled = 'disabled';
        }
    }
}

function onChangeSMDConnector() {
    smdconnector = $('form_SMDConnector');
    radios1 = document.getElementsByName('form[SMDConnectorOption]');
    radios2 = document.getElementsByName('form[SMDPinsRaster]');
    if (smdconnector.checked) {
        for (var i = 0; i < radios1.length; i++) {
            radios1[i].disabled = undefined;
        }
        for (var i = 0; i < radios2.length; i++) {
            radios2[i].disabled = undefined;
        }
    }
    else {
        for (var i = 0; i < radios1.length; i++) {
            radios1[i].disabled = 'disabled';
        }
        for (var i = 0; i < radios2.length; i++) {
            radios2[i].disabled = 'disabled';
        }
    }
}

function onChangeElectromagneticScreen() {
    escreen = $('form_electromagneticScreen');
    radios = document.getElementsByName('form[electromagneticScreenOption]');
    if (escreen.checked) {
        for (var i = 0; i < radios.length; i++) {
            radios[i].disabled = undefined;
        }
    }
    else {
        for (var i = 0; i < radios.length; i++) {
            radios[i].disabled = 'disabled';
        }
    }
}

function onChangeSMDDiodes() {
    var group = $('formgroup5');
    var smddiodes = $('form_SMDDiodes');
    var inputs = getElementsByTagAndClassName('input', null, group);
    if (smddiodes.checked) {
        for (var i = 0; i < inputs.length; i++) {
            if (inputs[i].id != smddiodes.id){
                inputs[i].disabled = undefined;
            }
        }
    }
    else {
        for (var i = 0; i < inputs.length; i++) {
            if (inputs[i].id != smddiodes.id){
                inputs[i].disabled = 'disabled';
            }
        }
        onChangeSMDConnector();
        onChangeElectromagneticScreen();
    }
}

function sumSMDColorDiodes() {
    var colorFields = [];
    colorFields.push($('form_SMDColorBlue'), $('form_SMDColorGYR'), $('form_SMDColorBicolor'));
    var sum = 0;
    var v = 0;
    for (var i = 0; i < colorFields.length; i++) {
        v = parseInt(colorFields[i].value);
        if (!isNaN(v)) {
            sum += v;
        }
    }
    smdsum = $('form_SMDSum');
    smdsum.readonly = undefined;
    smdsum.value = sum.toString();
    smdsum.readonly = 'readonly';
}

function updateConfirmationField(inputField) {
    var confirmField = $('confirm_' + inputField.id);
    if (inputField.type == 'textarea') {
        confirmField.innerHTML = inputField.value;
    }
    else if (inputField.type == 'text') {
        if (inputField.value === '' || inputField.disabled) {
            confirmField.parentNode.parentNode.style.display = 'none';
        }
        else {
            confirmField.parentNode.parentNode.style.display = "";
            confirmField.innerHTML = inputField.value;
        }
    }
    else if (inputField.type == 'checkbox') {
        if (inputField.checked && !inputField.disabled) {
            confirmField.parentNode.parentNode.style.display = "";
            confirmField.style.display = "";
        }
        else {
            confirmField.parentNode.parentNode.style.display = 'none';
            confirmField.style.display = 'none'
        }
    }
    else if (inputField.type == 'radio') {
        /*allConfirmRadios = confirmField.parentNode.childNodes;
          for(var i = 0; i < allConfirmRadios.length; i++) {
          allConfirmRadios[i].style.display = 'none';
        }*/
        var radios = document.getElementsByName(inputField.name);
        confirmField.parentNode.parentNode.style.display = 'none';
        for (var i = 0; i < radios.length; i++) {
            var confirmFieldCurrent = $('confirm_' + radios[i].id)
            if (radios[i].checked && !radios[i].disabled) {
                confirmField.parentNode.parentNode.style.display = '';
                confirmFieldCurrent.style.display = "";
            }
            else {
                confirmFieldCurrent.style.display = 'none';
            }
        }
    }
}

function updateConfirmation() {
    var formgroup = null;
    var inputs = null;
    for (var i = 1; i < 6; i++) {
        formgroup = $('formgroup' + i.toString());
        if (!formgroup) {
            continue;
        }
        inputs = getElementsByTagAndClassName('input', null, formgroup);
        for (var j = 0; j < inputs.length; j++) {
            updateConfirmationField(inputs[j]);
        }
    }
    formgroup = $('formgroup6');
    if (!formgroup) {
        return;
    }
    textarea = getElementsByTagAndClassName('textarea', null, formgroup);
    for (var j = 0; j < textarea.length; j++) {
        updateConfirmationField(textarea[j]);
    }
}

function addFormGroupsActions(){
    nextButtons = getElementsByTagAndClassName(null, 'form_next');
    for (var i = 0; i < nextButtons.length; i++) {
        if (nextButtons[i].id == 'form_before_confirm') {
            var f = function(parentId) {
                updateConfirmation();
                goToNextFormPart(parentId);
            }
            nextButtons[i].onclick = partial(f, nextButtons[i].parentNode.id);
        }
        else {
            nextButtons[i].onclick = partial(goToNextFormPart, nextButtons[i].parentNode.id);
        }
    }
    prevButtons = getElementsByTagAndClassName(null, 'form_prev');
    for (var i = 0; i < prevButtons.length; i++){
        prevButtons[i].onclick = partial(goToPrevFormPart, prevButtons[i].parentNode.id);
    }
    var leddisplay = $('form_LEDDisplayWindow');
    var leddiode = $('form_LEDDiodeWindows');
    if (leddisplay && leddiode){
        leddisplay.onchange = onChangeLEDWindow;
        leddiode.onchange = onChangeLEDWindow;
    }
    var emb = $('form_embossing')
    if (emb) {
        emb.onchange = onChangeEmbossing;
    }
    var elem = $('form_connector');
    if (elem) {
        elem.onchange = onChangeConnector;
    }
    elem = $('form_SMDDiodes');
    if (elem) {
        elem.onchange = onChangeSMDDiodes;
    }
    elem = $('form_SMDConnector');
    if (elem) {
        elem.onchange = onChangeSMDConnector;
    }
    elem = $('form_electromagneticScreen');
    if (elem) {
        elem.onchange = onChangeElectromagneticScreen;
    }
    
    elem = $('form_SMDColorBlue');
    if (elem) {
        elem.onkeyup = sumSMDColorDiodes;
    }
    
    elem = $('form_SMDColorGYR');
    if (elem) {
        elem.onkeyup = sumSMDColorDiodes;
    }
    elem = $('form_SMDColorBicolor');
    if (elem) {
        elem.onkeyup = sumSMDColorDiodes;
    }
    
}

addLoadEvent(addFormGroupsActions);


