/*------------ 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})?)$/,
          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 {
     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){
      return typeof(conf.callback)=='function' ? conf.callback() : true;
    }else{
      return false;
    }
   }catch(e){
     alert('Error validate: ' + e.description);
   }
   }  
});
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 fx = function(){
          f.onsubmit;
      }
      f.removeAttribute('onsubmit');
      f.observe('submit', function(e){
          try {
          telephoneFilter();
          var check = new OrdersValidation(f,{errorHandler:ErrorMsg, callback: fx});
          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;
   }      
}); 
