/*------------ Used in templates:  oppdater_firma, bli_kunde ----------*/
var inst = WO.setup.inst;

function check_company() {
    var form = document.company;
    var contact = form.elements['contact'].value;
    var companyname = form.elements['companyname'].value;
    var orgnu = form.elements['orgnu'].value;
    var address = form.elements['address'].value;
    var zipcode = form.elements['zipcode'].value;
    var city = form.elements['city'].value;
    //var telephone = form.elements['telephone'].value;
    var email = form.elements['from'].value;
    //-----Check for content-----
    if (!contact) {
        window.alert("Vennligst oppgi kontaktperson");
        return false;
    } else if (!companyname) {
        window.alert("Vennligst oppgi firmanavn");
        return false;
    } else if (!orgnu) {
        window.alert("Vennligst oppgi organisasjonsnummer");
        return false;
    } else if (!address) {
        window.alert("Vennligst oppgi adresse");
        return false;
    } else if (!zipcode) {
        window.alert("Vennligst oppgi postnummer");
        return false;
    } else if (!email) {
        window.alert("Vennligst oppgi epostadresse");
        return false;
    }
    //-----Check for valid content-----
    if (!validate_zipcode_no(zipcode)) {
        return false;
    } else if (!validate_email(email)) {
        return false;
    } else if (!validate_telephone(telephone)) {
        return false;
    }
    //-----Return true if everything is ok-----
    return true;
}

function check_order() {
/* ----------midlertidig deaktivert-------------
    var d_fname       = document.orders.elements['ORDERS.D_FNAME'].value;
    var d_lname       = document.orders.elements['ORDERS.D_LNAME'].value;
    var d_zipcode     = document.orders.elements['ORDERS.D_ZIPCODE'].value;
    var d_city        = document.orders.elements['ORDERS.D_CITY'].value;
    var d_email       = document.orders.elements['ORDERS.D_EMAIL'].value;

    //-----Check for content-----
    if (!d_fname) {
      window.alert("Vennligst oppgi fornavn");
      return false;
    }
    else if (!d_lname) {
      window.alert("Vennligst oppgi etternavn");
      return false;
    }
    else if (!d_zipcode) {
      window.alert("Vennligst oppgi postnummer");
      return false;
    }
    else if (!d_email) {
      window.alert("Vennligst oppgi epostadresse");
      return false;
    }

    //-----Check for valid content-----
    if(!validate_zipcode_no(d_zipcode)){
      return false;
    }
    else if(!validate_email(d_email)){
      return false;
    }
    else if(!validate_telephone(d_telephone)){
      return false;
    }
*/
    //-----Return true if everything is ok-----
    return true;
}

function validate_email(email_str) {
    var email_filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
    if (!email_filter.test(email_str)) {
        alert(WO.freetext('java_email_not_valid'));
        return false;
    } else {
        return true;
    }
}

function validate_zipcode_no(zipcode_str) {
    var zipcode_filter = /^([\d]+)$/i;
    if (!zipcode_filter.test(zipcode_str)) {
        alert("Postnummeret kan bare inneholde tall");
        return false;
    } else if (zipcode_str < 1 || zipcode_str > 9999) {
        alert("Postnummeret m? v?re et tall mellom 0001 og 9999");
        return false;
    } else {
        return true;
    }
}

function validate_zipcode_se(zipcode_str) {
    var zipcode_filter = /^([\d]+)$/i;
    if (!zipcode_filter.test(zipcode_str)) {
        alert("Postnummer kan bara inneh?lla siffror");
        return false;
    } else if (zipcode_str < 1 || zipcode_str > 99999) {
        alert("Postnumret m?ste vara ett tal mellan 00001 och 99999");
        return false;
    } else {
        return true;
    }
}

function validate_zipcode(zipcode_str) {
    var zipcode_filter = /^([\d]+)$/i;
    if (!zipcode_filter.test(zipcode_str)) {
        alert(WO.freetext('java_zipcode_onlynumbers'));
        return false;
    } else if (zipcode_str < 1 || zipcode_str > 99999) {
        alert(WO.freetext('java_zipcode_outofrange'));
        return false;
    } else {
        return true;
    }
}

function validate_telephone(telephone_str) {
    var telephone_filter = /^([\d]+)$/i;
    if (!telephone_filter.test(telephone_str)) {
        alert("Telefonnummeret kan bare inneholde tall");
        return false;
    } else if (telephone_str < 10000000 || telephone_str > 99999999) {
        alert("Telefonnummeret er ugyldig");
        return false;
    } else {
        return true;
    }
}

function validate_consumer(form) {
    if ($('invalid-consumer')) {
        $('invalid-consumer').update('');
    }
    var msg = WO.freetext('java_folgende_felter') + '\n';
    var error = 0;
    if (!form.elements['ORDERS.D_FNAME'].value) {
        msg = msg + ' ' + WO.freetext('java_fornavn') + '\n';
        error = 1;
    }
    if (!form.elements['ORDERS.D_LNAME'].value) {
        msg = msg + ' ' + WO.freetext('java_etternavn') + '\n';
        error = 1;
    }
    if (!form.elements['ORDERS.D_ZIPCODE'].value) {
        msg = msg + ' ' + WO.freetext('java_postnummer') + '\n';
        error = 1;
    }
    if (!form.elements['ORDERS.D_EMAIL'].value) {
        msg = msg + ' ' + WO.freetext('java_epostadresse') + '\n';
        error = 1;
    }
    if (form.elements['buyingcondition_check'] && !form.elements['buyingcondition_check'].checked) {
        msg = msg + ' ' + WO.freetext('java_buyingcondition_check_failed') + '\n';
        error = 1;
    }
    if (error) {
        showErrorMsg(msg, {
            targetElement: form,
            errorID: 'orders-error-message'
        });
        return false;
    }
    if (!validate_zipcode_no(form.elements['ORDERS.D_ZIPCODE'].value)) {
        return false;
    }
    if (!validate_email(form.elements['ORDERS.D_EMAIL'].value)) {
        return false;
    }
}

function validate_userinfo(form) {
    var msg = WO.freetext('java_folgende_felter') + ': \n';
    var error = 0;
    if (!form.elements['USER.FIRSTNAME'].value) {
        msg = msg + '  ' + WO.freetext('java_fornavn') + '\n';
        error = 1;
    }
    if (!form.elements['USER.LASTNAME'].value) {
        msg = msg + '  ' + WO.freetext('java_etternavn') + '\n';
        error = 1;
    }
    if (!form.elements['USER.ZIPCODE'].value) {
        msg = msg + '  ' + WO.freetext('java_postnummer') + '\n';
        error = 1;
    }
    if (error) {
        alert(msg);
        return false;
    }
    if (!validate_zipcode_no(form.elements['USER.ZIPCODE'].value)) {
        return false;
    }
    if (form.elements['USER.TELEPHONE'].value) {
        if (!validate_telephone(form.elements['USER.TELEPHONE'].value)) {
            return false;
        }
    }
}

function validate_change_password(form) {
    if (form.elements["password_new1"].value.length < 4) {
        alert("Passordet må bestå av minst 4 tegn!");
        return false;
    }
    if (form.elements["password_new1"].value != form.elements["password_new2"].value) {
        alert("Passordene du skrev samsvarer ikke!");
        return false;
    }
}

function validate_new_password(form) {
    if (form.elements["PASSWORD"].value.length < 4) {
        alert("Passordet m? best? av minst 4 tegn!");
        return false;
    }
    if (form.elements["password_new1"].value != form.elements["PASSWORD2"].value) {
        alert("Passordene du skrev samsvarer ikke!");
        return false;
    }
}

function validate_change_password(form) {
    if (!form.elements['password_current'].value) {
        alert("N?v?rende passord kan ikke v?re tomt. Vennligst fyll inn n?v?rende passord");
        return false;
    }
    if (form.elements['password_current'].value < 4 || form.elements["password_new1"].value.length < 4) {
        alert("Passordet m? best? av minst 4 tegn!");
        return false;
    }
    if (form.elements["password_new1"].value != form.elements["password_new2"].value) {
        alert("Passordene du skrev samsvarer ikke!");
        return false;
    }
}

function validate_new_password(form) {
    if (form.elements["PASSWORD"].value.length < 4) {
        alert("Passordet m? best? av minst 4 tegn!");
        return false;
    }
    if (form.elements["PASSWORD"].value != form.elements["PASSWORD2"].value) {
        alert("Passordene du skrev samsvarer ikke!");
        return false;
    }
} /****************Goto product page.*******************/
//Param: product id

function open_product_page(script_frontend) {
    var curSelect = document.getElementById("product_option");
    var selIndex = curSelect.selectedIndex;
    var product_id = curSelect.options[selIndex].value;
    var url = script_frontend + "func=catalog.show&func_id=" + product_id + "&table=PRODUCT&p_id=" + product_id + "&template=product";
    window.location = url;
} /****************Text Fields auto clear*******************/
var TextFields_inited;
var TextFields_hash;

function TextFields_init() {
    TextFields_inited = true;
    TextFields_hash = new Array();
}

function TextFields_obj(fieldId, text) {
    this.fieldId = fieldId;
    this.text = text;
    var element = document.getElementById(fieldId);
    element.value = text;
    element.onfocus = TextFields_focus;
    element.onblur = TextFields_blur;
}

function TextFields_FindElement(e) {
    if (e == null) {
        e = event;
    }
    var target = null;
    if (e != null) {
        if (e.target) {
            target = e.target;
        } else if (e.srcElement) {
            target = e.srcElement;
        }
        if (target.nodeType == 3) {
            target = target.parentNode;
        }
    }
    return target;
}

function TextFields_focus(e) {
    var element = TextFields_FindElement(e);
    var field = TextFields_hash[element.id];
    if (element.value == field.text) {
        element.value = '';
        if (element.id == 'e_mail') {
            var pwd = document.getElementById("passward");
            pwd.value = '';
        }
    }
}

function TextFields_blur(e) {
    var element = TextFields_FindElement(e);
    var field = TextFields_hash[element.id];
    if (element.value == '') {
        element.value = field.text;
    }
}

function TextFields_register(fieldId, text) {
    if (!TextFields_inited) {
        TextFields_init();
    }
    var field = new TextFields_obj(fieldId, text);
    TextFields_hash[fieldId] = field;
} /****************End of text Fields auto clear*******************/
/****************Top menu background image changer*******************/

function changeBackground(node) {
    linkElements = node.getElementsByTagName('a');
    linkElements[0].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_active_bg_left.gif') no-repeat";
    linkElements[1].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_active_bg_middle.gif') repeat-x";
    linkElements[2].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_active_bg_right.gif') no-repeat";
}

function resetBackground(node) {
    linkElements = node.getElementsByTagName('a');
    linkElements[0].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_rounder_left.gif') no-repeat";
    linkElements[1].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_bar1.gif') repeat-x";
    linkElements[2].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_rounder_right.gif') no-repeat";
} /****************End of top menu background image changer*******************/
/**************** Micro Top menu background image change  *****************/

function changeMicroTopBackground(node) {
    linkElements = node.getElementsByTagName('a');
    linkElements[0].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_left_active_rounder.gif') no-repeat";
    linkElements[1].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_middle_active_norounder.gif') repeat-x";
    linkElements[2].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_right_active_rounder.gif') no-repeat";
}

function resetMicroTopBackground(node) {
    linkElements = node.getElementsByTagName('a');
    linkElements[0].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_left.gif') no-repeat";
    linkElements[1].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_middle.gif') repeat-x";
    linkElements[2].style.background = "url('/" + inst + "/frontend/files/design/backgrounds/top_right.gif') no-repeat";
} /************************Check tipsvenn form elenments*************************/

function tipsvenn_check() {
    var from = document.getElementById("tipsvenn_from").value;
    var to = document.getElementById("tipsvenn_to").value;
    var comment = document.getElementById("tipsvenn_comment").value;
    if (!validate_email(from)) {
        //  alert("Invalid from address!");
        return false;
    }
    if (!validate_email(to)) {
        //  alert("Invalid to address!");
        return false;
    }
    if (from == to) {
        alert("From and to cannot be the same!");
        return false;
    }
    return true;
} /****************************End of tipsvenn_check*****************************/
/************************ Lindorff *************************/

function validate_lindorff() {
    var fname = $j('#o_fname');
    var lname = $j('#o_lname');
    var zipcode = $j('#o_zipcode');
    var email = $j('#o_email');
    var r = true;
    if (fname && lname && zipcode && email) {
        if ($j.trim(fname.val()) == "" || $j.trim(lname.val()) == "" || $j.trim(zipcode.val()) == "" || $j.trim(email.val()) == "") {
            alert(WO.freetext('java_Fornavn, etternavn'));
            r = false;
        } else {
            if (!validate_zipcode_no($j.trim(zipcode.val())) || !validate_email($j.trim(email.val()))) {
                r = false;
            }
        }
    }
    return r;
} /************************ End of Lindorff *************************/
/************************ Cconditions *****************************/

function showhide(id, link_id) {
    if ($j('.help_txt[id!="' + id + '"]:visible').length > 0) {
        $j('.help_txt:visible').hide();
    }
    var a = $j('#' + id);
    var duration = 350;
    var closeTxt = WO.freetext('close');
    var btn = $j('<button type="button" id="close-popup-btn" class="hide-popup" title="' + closeTxt + '">' + closeTxt + '</button>');
    btn.bind('click', function(e) {
        a.fadeOut(duration);
    });
    if (a.children('#close-popup-btn').length == 0 && !a.hasClass('collection-popup')) {
        a.prepend(btn);
    }
    if (a.is(':hidden')) {
        a.fadeIn(duration, function() {
            document.getElementById(id).defaultTop = document.getElementById(id).defaultTop || a.offset().top;
            if (a.offset().top <= $j.scrollOffset().top) {
                a.animate({
                    'top': ($j.scrollOffset().top + 10) + 'px'
                }, 200)
            }
        });
    }
    if (link_id) {
        var link = document.getElementById(link_id);
        if (link) {
            link.href = "#";
        }
    }
    return true;
} /************************ End of Conditions ***********************/

function show_city() {
    return true;
} /************************ Check for empty fields in hkasse*************************/

function hkasse_empty_fields() {
    var prodnr = document.getElementById('hkasse_productnu');
    var kunde = document.getElementById('hkasse_kundenummer');
    var epost = document.getElementById('hkasse_epost');
    if (prodnr && kunde && epost) {
        if (prodnr.value == "" || kunde.value == "" || epost.value == "") {
            alert("Aktivitet, kundenummer og e-post er obligatoriske felt.");
            return false;
        }
    }
    return true;
} /************************ End of hkasse_empty_fields *************************/
/************************Add parameter to search url*************************/

function add_param() {
    var str = $j('#search_input').val();
    var txt = WO.freetext('entter_pro');
    if (str == txt || $j.trim(str) == '') {
        alert(WO.freetext('search_alert'));
        return false;
    } else {
        var search = document.getElementById('search_input').value;
        var action = document.searchform.action;
        document.searchform.action = action + (/\?/.test(action) ? '&' : '?') + 's=' + search;
        return true;
    }
} /************************ End of add_param *************************/

function virtual_pageview(ga_id, url, doTrack) {
    if (doTrack == true) {
        try {
            var virtualPageTracker = _gat._getTracker(ga_id);
            virtualPageTracker._trackPageview(url);
        } catch (err) {}
    }
    return doTrack;
} /* Orders functions */

function copy_to_user() {
    var arr = [{
        user: 'USER.FIRSTNAME',
        order: 'ORDERS.D_FNAME'
    }, {
        user: 'USER.LASTNAME',
        order: 'ORDERS.D_LNAME'
    }, {
        user: 'USER.ADDRESS',
        order: 'ORDERS.D_ADDRESS'
    }, {
        user: 'USER.ZIPCODE',
        order: 'ORDERS.D_ZIPCODE'
    }, {
        user: 'USER.CITY',
        order: 'city_input'
    }, {
        user: 'USER.USERNAME',
        order: 'ORDERS.D_EMAIL'
    }];
    arr.each(function(hash) {
        if ($(hash.user) && $(hash.order)) {
            $(hash.user).value = $(hash.order).value;
        }
    });
    // For order finish.
    var user_o2o = $('user_o2o_check') ? $('user_o2o_check').value : '';
    if (user_o2o == 'no') {
        check = $('o2o');
        form = $('sub_order');
        form.action += '&o2o=' + check.checked;
    }
    //   var retur = validate_consumer(document.orders);
    return true;
} /************************ General functions *************************/

function showhide_inline(id) {
    var a = $(id);
    if (a) {
        var display = a.visible() ? 'none' : 'inline';
        a.setStyle({
            'display': display
        });
    }
    return true;
}

function changeAddress(elem) {
    if (!elem) {
        return;
    }
    var val = $(elem).getValue() || $(elem).value;
    var elem = ['o_fname', 'o_lname', 'o_address', 'o_street', 'o_zipcode'];
    elem.each(function(a) {
        if ($(a)) {
            var method = val > 0 ? 'setAttribute' : 'removeAttribute';
            $(a)[method]('readonly', 'readonly');
            $(a)[val > 0 ? 'addClassName' : 'removeClassName']('readonly');
        }
    });
    if ($('o_fname')) {
        $('o_fname').value = fnameArray[val];
    }
    if ($('o_lname')) {
        $('o_lname').value = lnameArray[val];
    }
    if ($('o_street')) {
        $('o_street').value = adrArray[val];
    }
    if ($('o_zipcode')) {
        $('o_zipcode').value = zipArray[val];
    }
    if ($('o_city')) {
        $('o_city').value = cityArray[val];
    }
    if ($('ORDERS.CUSTOMER_REF')) {
        $('ORDERS.CUSTOMER_REF').value = bornArray[val];
    }
    if ($('ORDERS.CUSTID')) {
        $('ORDERS.CUSTID').value = custidArray[val];
    }
    if ($('ORDERS.SALUTATION')) {
        var salutation = 'U';
        if (genderArray[val] == 2) {
            salutation = 'M';
        }
        if (genderArray[val] == 3) {
            salutation = 'K';
        }
        $('ORDERS.SALUTATION').value = salutation;
    }
}

function GATracking(path) {
    try {
        var ga = _gat;
        if (path && path.strip() != '') {
            var eventPageTracker = ga._getTracker(WO.shopinfo.GOOGLE_ANALYTICS);
            eventPageTracker._trackPageview(path);
        }
    } catch (e) {
        // alert('Error: '+ e.detail );
    }
}
// To extend Element methods
Element.addMethods({
    hasAttribute: function(e) {
        var attr = arguments[1];
        // var attrVal = arguments[2] || false; return attrVal ? $(e).readAttribute(attr) == attrVal : $(e).readAttribute(attr) != null;
        return $(e).readAttribute(attr) != null
    },
    isButton: function(btn) {
        var e = btn.tagName.toLowerCase();
        var tag = ['input', 'button'];
        var type = ['submit', 'reset', 'button'];
        if (tag.indexOf(e) == -1) {
            return false;
        } else {
            if ((e == 'input' && (type.indexOf(e.type) != -1)) || (e == 'button')) {
                return !arguments[1] ? true : btn.type == arguments[1];
            } else {
                return false;
            }
        }
    }
}); /* Classes  */
var reg = '';
var Validator = new Class.create({
    // UKzip pattern is availabel here: http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom 
    initialize: function(value, attr) {
        this.value = value;
        this.attr = attr || {};
        this.rules = {
            number: /^(\d)+$/,
            email: /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/,
            // Not allow to have any dots in user part;
            email2: /^([\w-]+(?:[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/,
            // Allow only 1 dot in the user part;
            snplEmail: /^[\w-]+\.?[\w-]+@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/,
            // Allow only 1 dot in user name part
            date: /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-((19|20)\d\d)$/gi,
            // dd-mm-yyyy
            date2: /^(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])-((19|20)\d\d)$/gi,
            // mm-dd-yyyy
            mobile: /(?:^$)|(?:^(?:\+\d{2}|00\d{2})?[ ]?[1-9]{1}[0-9]{7,}$)/,
            UKzip2: /(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})/gi,
            UKzip3: /[A-Z]{1,2}[0-9R][0-9A-Z]?(\s)?[0-9][ABD-HJLNP-UW-Z]{2}/gi,
            UKzip: /\b[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}\b/gi,
            NEDzip: /^(\d{4})(\s)?([a-zA-Z]{2})$/g,
            SVEzip: /^(\d{5})/g,
            SVEstreet: /^([\w]*)[^:;,.]+([\w]*)$/,
            SVEphone: /^(([+]\d{2}[ ]?[1-9]\d{0,2}[ ]?)|([0]\d{1,3}[ ]?[-]?[ ]?))((\d{2}([ ]?\d{2}){2})|(\d{3}([ ]?\d{3})*([ ]?\d{2})+))$/,
            DANzip: /^(\d{4})/g,
            DANstreet: /^([\w]*)[^:;,.]+([\w]*)$/,
            IEzip: /^\d{1}[\dwW]?$/
        }, this.errorMsg = {
            number: WO.freetext('errmsg_number'),
            email: WO.freetext('errmsg_email'),
            // Not allow to have any dots in user part;
            email2: WO.freetext('errmsg_email2'),
            // Allow only 1 dot in the user part;
            snplEmail: WO.freetext('errmsg_snplEmail'),
            // Allow only 1 dot in user name part
            date: WO.freetext('errmsg_date'),
            // dd-mm-yyyy
            date2: WO.freetext('errmsg_date2'),
            // mm-dd-yyyy
            mobile: WO.freetext('errmsg_mobile'),
            UKzip2: WO.freetext('errmsg_UKzip2'),
            UKzip3: WO.freetext('errmsg_UKzip3'),
            UKzip: WO.freetext('errmsg_UKzip'),
            NEDzip: WO.freetext('errmsg_NEDzip'),
            SVEzip: WO.freetext('errmsg_SVEzip'),
            SVEstreet: WO.freetext('errmsg_SVEstreet'),
            SVEphone: WO.freetext('errmsg_SVEphone'),
            DANzip: WO.freetext('errmsg_DANzip'),
            DANstreet: WO.freetext('errmsg_DANstreet'),
            IEzip: 'Legal format: 1-2 digits or 1 digit + \'w\' (eg 6w)'
        }
    },
    check: function() {
        reg = this.rules;
        var msg = '';
        var r = true;
        if (this.attr['mandatory'] === true && this.isBlank()) {
            return false;
        }
        if (!this.isBlank()) {
            if (this.attr['vtype'] && !this.attr['vtype'].blank()) {
                if ($H(this.rules).keys().indexOf(this.attr.vtype) != -1) {
                    var p = new RegExp(this.rules[this.attr['vtype']]);
                    r = p.test(this.value);
                } else {
                    var pttr = new RegExp(this.attr.vtype, 'gi');
                    r = this.isMatch(pttr);
                }
            } else {
                r = true;
            }
            // character's length check
            var len = this.value.strip().length;
            if (this.attr['minLength'] && parseInt(this.attr['minLength']) > len) {
                r = false;
            }
            if (this.attr['maxLength'] && parseInt(this.attr['maxLength']) < len) {
                r = false;
            }
        }
        return r;
    },
    checkWithInfo: function() {
        reg = this.rules;
        var msg = '';
        if (this.attr['mandatory'] === true && this.isBlank()) {
            return WO.freetext('error_mandatory_field');
        }
        if (this.attr['cityzipcheck'] === true) {
            var cityValue = $('o_city').value.toLowerCase();
            if ((cityValue == "dublin" || cityValue == "cork") && $('postalcode').value.blank()) {
                return 'A Postcode is required for this city';
            }
        }
        if (this.attr['streetlocationcheck'] === true) {
            if ($('o_street').value.blank() && $('o_locality').value.blank()) {
                return 'At least one of the fields \'Address Line 1\' or \'Locality\' has to be filled out';
            }
        }
        if (!this.isBlank()) {
            if (this.attr['vtype'] && !this.attr['vtype'].blank()) {
                if ($H(this.rules).keys().indexOf(this.attr.vtype) != -1) {
                    var p = new RegExp(this.rules[this.attr['vtype']]);
                    if (!p.test(this.value)) {
                        return this.errorMsg[this.attr['vtype']];
                    }
                } else {
                    var pttr = new RegExp(this.attr.vtype, 'gi');
                    if (!this.isMatch(pttr)) {
                        return 'vtype';
                    }
                }
            }
            // character's length check
            var len = this.value.strip().length;
            if (this.attr['minLength'] && parseInt(this.attr['minLength']) > len) {
                return WO.freetext('min_chars') + ' ' + this.attr['minLength'] + ' ' + WO.freetext('letter');
            }
            if (this.attr['maxLength'] && parseInt(this.attr['maxLength']) < len) {
                return WO.freetext('max_chars') + ' ' + this.attr['maxLength'] + ' ' + WO.freetext('letter');
            }
        }
        return '';
    },
    isBlank: function() {
        return this.value.blank();
    },
    isNumber: function() {
        return (this.rules.number).test(this.value);
    },
    isEmail: function() {
        return (this.rules.email).test(this.value)
    },
    isDate: function() {
        return (this.rules.date).test(this.value);
    },
    isMobile: function() {
        return (this.rules.mobile).test(this.value);
    },
    isMatch: function(pttr) {
        return (pttr).test(this.value);
    }
});
// Validate fields
var OrdersValidation = new Class.create({
    initialize: function(form, opt) {
        this.f = form;
        this.opt = opt || {};
        this.errorClassName = this.opt.errorClassName || 'invalid';
        this.returnInfo = this.opt.returnInfo || false;
        this.errorInputs = null;
    },
    __fieldCheck: function() {
        var elem = this.f.getElements();

        var self = this;
        var chk = true;
        if (typeof(this.opt.errorHandler.remove) == 'function') {
            this.opt.errorHandler.remove();
        }
        self.errorInputs = self.returnInfo ? {} : [];
        elem.each(function(i) {
            $(i).removeClassName(self.errorClassName);
            var inpType = i.type;
            if (inpType != 'hidden' && !$(i).isButton() && i.disabled != true) {
                var attr = {
                    mandatory: $(i).hasClassName('mandatory'),
                    cityzipcheck: $(i).hasClassName('cityzipcheck'),
                    streetlocationcheck: $(i).hasClassName('streetlocationcheck')
                };
                ['minLength', 'maxLength', 'vtype'].each(function(a) {
                    var n = a.toLowerCase();
                    if ($(i).hasAttribute(n)) {
                        attr[a] = $(i).readAttribute(n);
                    }
                });
                var tikbox = ['radio', 'checkbox'];
                var val = tikbox.indexOf(inpType) != -1 ? i.checked == true ? 'on' : '' : i.value;
                var valid = new Validator(val, attr);
                if (self.returnInfo) {
                    var pass = valid.checkWithInfo();
                    if (pass.length > 0) {
                        var id = $(i).readAttribute('id');
                        self.errorInputs[id] = pass;
                        chk = false;
                    }
                } else {
                    var pass = valid.check();
                    if (pass == false) {
                        self.errorInputs.push(i);
                    }
                }
            }
        });

        return self.returnInfo ? chk : self.error.length == 0;
    },
    __errorHandler: function() {
        var errCls = this.errorClassName;
        this.errorInputs.each(function(inp) {
            $(inp).addClassName(errCls);
        });
    },
    validate: function(conf) {
        try {
            if (typeof(this.opt.callfront) == 'function') {
                this.opt.callfront();
            }
            var pass = this.__fieldCheck();
            var ok = false;

            if (pass == false) {
                if (this.returnInfo && typeof(this.opt.errorHandler.showWithInfo) == 'function') {
                    this.opt.errorHandler.showWithInfo(this.errorInputs, this.f);
                } else if (typeof(this.opt.errorHandler.show) == 'function') {
                    this.opt.errorHandler.show(this.errorInputs, this.f);
                } else {
                    this.__errorHandler();
                }
            } else {
                ok = true;
                if (typeof(this.opt.callback) == 'function') {
                    ok = this.opt.callback();
                }

            }
            var result = ok != false ? true : false;
            if (result) {
                if (this.opt.eventObj) {
                    this.opt.eventObj.stop();
                }
                return typeof(conf.callback) == 'function' ? conf.callback(this.f) : true;
            } else {
                return false;
            }
        } catch (e) {
            alert('Error validate: ' + e);
        }
    }
});

function telephoneFilter() {
    var inp = $('o_telephone');
    if (inp) {
        var filter = /\(?\)?\s?\-?/g;
        inp.value = inp.value.replace(filter, '');
    }
}

function showErrorMsg(msg, opt) {
    var conf = opt || {}
    var errorID = conf.errorID || 'invalid-message';
    var target = $(conf.targetElement);
    var p = $('orders-error-message') || new Element('p', {
        id: 'orders-error-message'
    }).addClassName('submit error');
    if (!$(p.id)) {
        var insertParam = {};
        insertParam[conf.insertPosition || 'top'] = p;
        target.insert(insertParam);
    }
    var span = $(errorID) || new Element('span', {
        id: errorID
    }).setStyle({
        'display': 'block'
    });
    if (!$(span.id)) {
        p.insert({
            'bottom': span
        });
    }
    span.update(msg);
    p.show();
}
var ErrorMsg = {
    show: function(inputs, form) {
        try {
            if (inputs && inputs.length > 0) {
                var err = new Array();
                inputs.each(function(i) {
                    var lbl = $$('label');
                    if (lbl) {
                        lbl.each(function(l) {
                            if (l.htmlFor == i.id) {
                                err.push(l.innerHTML.stripTags().replace('*', ''));
                                throw $break;
                            }
                        });
                    }
                    i.addClassName('invalid');
                });
                inputs[0].focus();
                showErrorMsg(WO.freetext('please_input_correct') + ' ' + err.join(', '), {
                    targetElement: form
                });
            }
        } catch (e) {
            alert('Error ErrorMsg.show: ' + e.description);
        }
    },
    showWithInfo: function(inputs, form) {
        try {

            var inputsKeys = $H(inputs).keys();
            if (inputs && inputsKeys.length > 0) {

                var err = new Array(),
                    counter = 0;
                for (var key in inputs) {
                    if (typeof(inputs[key]) == 'string') {
                        var input = $(key);
                        if (input) {
                            var lbl = $$('label');
                            if (lbl) {
                                lbl.each(function(l) {
                                    if (l.htmlFor == input.id) {
                                        if (input.type == 'checkbox') {
                                            inputs[key] = WO.freetext('errmsg_checkbox');
                                        }
                                        err.push('<strong class="invalid-input">' + l.innerHTML.stripTags().replace(/[()*]/g, '') + ': ' + (inputs[key] == 'vtype' ? input.readAttribute('title') : inputs[key]) + '</strong>');
                                        throw $break;
                                    }
                                });
                            }
                            if (counter++ == 0) {
                                input.focus();
                            }
                            input.addClassName('invalid');
                        }
                    }
                }
                var showErrorParams = {},
                    target = form;
                if (form.down('.errorTarget', 0)) {
                    target = form.down('.errorTarget', 0);
                    showErrorParams['insertPosition'] = 'after';
                }
                showErrorParams['targetElement'] = target;
                showErrorMsg(err.join(''), showErrorParams);
            }
        } catch (e) {
            alert('Error ErrorMsg.show: ' + e + ' - ' + e.description);
        }
    },
    remove: function() {
        if ($('orders-error-message')) {
            $('orders-error-message').hide();
        }
    }
}

function AgeCheck() {
    var b = $$('input.birthdate-check');
    if (!b || b.length == 0) {
        return true;
    }
    var bd = b[0].value.split('-');
    var isHNM = b[0].readAttribute('vtype') == 'date2';
    // According that HNM date format is mm-dd-yyyy
    var dd = isHNM ? bd[1] : bd[0];
    var mm = isHNM ? bd[0] : bd[1];
    var yyyy = bd[2];
    var age = new LegalAge(yyyy + '/' + mm + '/' + dd);
    var isAdult = age.check();
    var result = true;
    if (!isAdult) {
        result = false;
        b[0].addClassName('invalid');
        showErrorMsg(WO.freetext('legal_age_warning'), {
            targetElement: $(b[0]).up('form', 0)
        });
    }
    return result;
}

function _formValidationObserve() {
    var form = $$('form.validation');
    if (form) {
        form.each(function(f) {
            var evtObj = false;
            var onSubmit = f.onsubmit || false;
            var fx = function(E) {
                if (f.down('[name="validation-callback"]')) {
                    var fxArray = f.down('[name="validation-callback"]').value.split(',');
                    fxArray.each(function(F) {
                        var fn = eval(F);
                        if (typeof(fn) == 'function') {
                            fn(E);
                        }
                    });
                } else {
                    if (typeof(onSubmit) == 'function') {
                        onSubmit.call(f);
                    }
                }
            };
            var callFront;
            if (f.down('[name="validation-callfront"]')) {
                callFront = eval(f.down('[name="validation-callfront"]').value);
            }
            f.removeAttribute('onsubmit');
            f.stopObserving('submit');
            f.observe('submit', function(e) {
                if (f.down('[name="validation-callback"]') || onSubmit) {
                    evtObj = e;
                }
                try {
                    telephoneFilter();
                    var check = new OrdersValidation(f, {
                        errorHandler: ErrorMsg,
                        callfront: callFront,
                        callback: fx,
                        returnInfo: true,
                        eventObj: evtObj
                    });
                    var pass = check.validate({
                        callback: AgeCheck
                    });
                    // For only HNM market
                    if (pass != true) {
                        e.stop();
                    }

                } catch (e) {
                    alert('Error submit: ' + e.detail);
                }
            });
        });
    }
}

document.observe('dom:loaded', function() {
    _formValidationObserve();
    productCollectionInit();
});
var LegalAge = new Class.create({
    initialize: function(bd) {
        this.adult = 18;
        this.born = new Date(bd);
        var now = new Date();
        var sec = 31556926000; // the milliseconds in a year (By Google)
        this.age = Math.round((now.getTime() - this.born.getTime()) / sec);
        return this;
    },
    check: function(a) {
        if (a && !isNaN(a)) {
            this.adult = parseInt(a);
        }
        return this.age >= this.adult;
    }
});
var lookingUp = null;

function DNSLookup(domain, opt) {
    if (!domain) {
        return false;
    } else {
        var opt = opt || {};
        var url = WO.script.frontend + 'debug=off&func=email.dns_lookup&domain=' + domain;
        try {
            lookinUp.transport.abort()
        } catch (e) {};
        lookingUp = new Ajax.Request(url, {
            onLoading: function() {
                if (typeof(opt.onLoading) == 'function') {
                    opt.onLoading.call();
                }
            },
            onSuccess: function(r) {
                if (typeof(opt.onSuccess) == 'function') {
                    opt.onSuccess(r.responseText.strip());
                }
            }
        });
    }
}
// Poland Market

function SNPLEmailValidation(e, F) {
    var i = e || $('o_email');
    if (!i) {
        return false;
    }
    var span = $('emailDNSLookupStatus') || new Element('span', {
        id: 'emailDNSLookupStatus'
    });
    var cls = 'error';
    if (i.value.blank() || i.hasClassName(cls)) {
        return false;
    } else {
        if (!$('emailDNSLookupStatus')) {
            i.insert({
                after: span.hide().setStyle('position:absolute')
            });
        }
        DNSLookup(i.getValue().split('@')[1], {
            onLoading: function() {
                i.up('form').disable();
                span.removeClassName(cls).update(WO.freetext('dns_verifying')).show();
            },
            onSuccess: function(status) {
                if (status != 'ok') {
                    span.addClassName(cls).update(WO.freetext(status));
                    i.up('form').enable();
                } else {
                    span.removeClassName(cls).update('').hide();
                    i.up('form').enable();
                    checkUserExist(i, F);
                }
            }
        });
    }
}

function SNPLAddressCorrection() {
    var addr = $('o_street');
    if (addr) {
        addr.value = addr.value.replace(/^ul\./i, '');
    }
}

function checkUserExist(i) {
    var username = i.value.strip();
    var span = $('emailDNSLookupStatus');
    var form = i.up('form');
    var cls = 'error';
    if (!username.blank()) {
        var url = WO.script.frontend + 'func=user.getbyusername';
        new Ajax.Request(url, {
            parameters: {
                debug: 'off',
                username: username,
                ajax: '1'
            },
            onLoading: function() {
                form.disable();
                span.removeClassName(cls).update(WO.freetext('email_verifying')).show();
            },
            onSuccess: function(r) {
                form.enable();
                if (r.responseText.blank()) {
                    span.update('').hide();
                    form.submit();
                } else {
                    span.addClassName(cls).update(WO.freetext('email_already_in_use')).show();
                }
            }
        });
    }
}

function SNPLUserRegistration() {
    var pw = $('PASSWORD'),
        pw2 = $('PASSWORD2'),
        span = $('match-pw-result').setStyle('float: none; position: absolute').update('').hide(),
        cls = 'invalid';
    if (pw && pw2) {
        pw2.removeClassName(cls);
        if (!pw.getValue().blank() && (pw.getValue() != pw2.getValue())) {
            span.update(WO.freetext('password_not_matched')).show();
            pw2.addClassName(cls).focus();
        } else {
            pw2.up('form').submit();
        }
    }
}

function passwordConfirmCheck(f) {
    var form = $(f);
    if (form) {
        form.observe('submit', function(e) {
            var span = $('match-pw-result').update('').hide();
            if (!$('PASSWORD').value.blank() && ($('PASSWORD').value != $('PASSWORD2').value)) {
                span.update(WO.freetext('password_not_matched')).show();
                e.stop();
            }
        });
    }
}

function productCollectionInit() {
    var div = $$('.collection-popup');
    if (div) {
        div.each(function(d) {
            var b = new Element('input', {
                type: 'button',
                value: WO.freetext('back_to_offer_page')
            }),
                p = d.down('.collection-close-btn'),
                f = new Element('form', {
                    method: 'post',
                    action: '/wsp/shg_master/frontend.cgi?'
                }),
                s = new Element('input', {
                    type: 'submit',
                    value: WO.freetext('buy_button')
                });
            s.addClassName('button submit-btn');
            b.addClassName('button  order-process').observe('click', function(e) {
                $j(d).fadeOut(350);
            });
            [s, b].each(function(btn) {
                p.insert({
                    bottom: btn
                });
            });
            p.wrap(f);
            $(document.body).insert({
                bottom: d
            });

            var link = d.select('.tab-item');
            if (link) {
                var div = d.select('.tab-body');
                // Auto set active to the first tab;
                link[0].addClassName('active-tab');
                // Auto show the first tab body;
                div[0].show();

                link.each(function(a) {

                    a.observe('click', function(e) {
                        e.stop();
                        link.invoke('removeClassName', 'active-tab');
                        div.invoke('hide');
                        $(a.id + '-body').show();
                        a.addClassName('active-tab');

                    });
                });
            }
        });
    }
}

function StaticEmailCapture() {

    var f = $('static-email-capture-form'),
        pl = new Element('span').update(WO.freetext('loading')).setStyle('display:block;margin-top:5px').hide(),
        bd = $('static-email-capture-body'),
        thanksDiv = $('static-capture-body-thanks'),
        btn = $('static-sentVisitorData');

    f.request({
        parameters: 'debug=off',
        onLoading: function() {
            f.disable();
            btn.insert({
                after: pl.show()
            });
        },
        onSuccess: function(r) {
            if (r.responseText.strip() == '1') {
                f.remove();
                bd.hide();
                thanksDiv.addClassName('active');
            }
        }
    });
    return false;
}
