/*------------ 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;
    }
    //else if (!telephone) {
    //  window.alert("Vennligst oppgi telefonnummer");
    //  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.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 + '&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.D_CITY')) {
     if(cityArray[val].strip() != ''){ 
         var d_city = $('ORDERS.D_CITY');         
         d_city.value = cityArray[val];
     }else{
         city_lookup(zipArray[val],'','ORDERS.D_CITY');
     }
    }
    if($('city_input')) {
      $('city_input').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
        }
    },
    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;
    },
    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.error = new Array();
    },
    __fieldCheck: function () {

        var elem = this.f.getElements();
        var error = new Array();
        var self = this;
        if (typeof(this.opt.errorHandler.remove) == 'function') {
            this.opt.errorHandler.remove();
        }
        elem.each(function (i) {

            $(i).removeClassName(self.errorClassName);
            var inpType = i.type;
            if (inpType != 'hidden' && !$(i).isButton()) {
                var attr = {
                    mandatory: $(i).hasClassName('mandatory')
                };
                ['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);
                var pass = valid.check();
                if (pass == false) {
                    error.push(i);
                }
            }
        });
        this.error = error;

        return error.length == 0;

    },
    __errorHandler: function () {
        var errCls = this.errorClassName;
        this.error.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 (typeof(this.opt.errorHandler.show) == 'function') {
                    this.opt.errorHandler.show.call(this, this.error);
                } else {
                    this.__errorHandler();
                }
            } else {
                ok = true;
                if (typeof(this.opt.callback) == 'function') {
                    ok = this.opt.callback.call();
                }
            }
            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)) {
        target.insert({
            'top': p
        });
    }

    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) {
        try {
            if (inputs && inputs.length > 0) {
                var inp = $(inputs)[0];
                inp.focus();
                var err = new Array();
                inputs.each(function (i) {
/* IE has a bug with this line;
       var lbl = $$('label[for="' + i.id + '"]');
    */
                    var lbl = $$('label');
                    if (lbl) {
                        lbl.each(function (l) {
                            if (l.htmlFor == i.id) {
                                err.push(l.innerHTML.stripTags().replace('*', ''));
                                $break;
                            }
                        });
                    }
                    i.addClassName('invalid');
                });
                showErrorMsg(WO.freetext('please_input_correct') + ' ' + err.join(', '), {
                    targetElement: inp.up('form', 0)
                });
            }
        } catch (e) {
            alert('Error ErrorMsg.show: ' + 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;
}
document.observe('dom:loaded', function () {
    var form = $$('form.validation');
    
    if (form) {
        
        form.each(function (f) {
            var evtObj = false;
            var fx = function (E) {
                f.onsubmit;
                if( $('validation-callback') ){
                 
                   var fxArray = $('validation-callback').value.split(',');
                       fxArray.each(function( F ){
                            var fn = eval(F);
                                if( typeof(fn) == 'function' ){
                                    fn(E);
                                }
                       });
               }
            }
            var callFront;
            if( $('validation-callfront') ){
                callFront = eval($('validation-callfront').value);         
            }
            f.removeAttribute('onsubmit');
            f.observe('submit', function (e) {
                if( $('validation-callback') ){
                      evtObj = e;
                }
                try {
                    telephoneFilter();
                    var check = new OrdersValidation(f, {
                        errorHandler: ErrorMsg,
                        callfront: callFront,
                        callback: fx,
                        eventObj: evtObj
                    });
                    var pass = check.validate({
                        callback: AgeCheck
                    });
                    // For only HNM market

                    if (pass != true) {
                        e.stop();
                    }
                } catch (e) {
                    alert('Error submit: ' + e.detail);
                }
            });
        });
    }
});
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();
          }
          
      });  
  }

}