/**** Initialize greybox ****/
var GB_ROOT_DIR = "/WO61/greybox/";
var GB_ANIMATION = true;
var GB_overlay_click_close = true;
/**** Initialize global search ****/
var MIN_SEARCH_CHAR = 3; // minimum number of characters to trigger a search
var URL_BASE = '/wsp/spaceworld/frontend.cgi?'; // for Ajax request
var URL_SEARCH = '/wsp/spaceworld/frontend.cgi?&page=0&menuitem&selected&func=frontend.show&template=search&open=reset&shopid=default'; // for links
var styles = {'position':'absolute','border':'3px solid','background':'#ffffff','textAlign':'left', 'zIndex':'8888','padding':'10px', 'width':'20%','cursor':'move', 'display':'none'};
var errorDiv = $('error-div') ? $('error-div') : new Element('div', { 'id':'error-div' }).setStyle(styles).addClassName('error');
/*window.alert = function(msg){
  var er = new Error();
  er.show({msg:msg, btn:true, msgID: 'windowAlert'});
};*/
/* document.observe( 'dom:loaded', domLoadedHandler); */

document.observe('dom:loaded', function(){
   portDate();
   mapEffect();
   if(!$('error-div')){  $(document.body).insert({ 'bottom':errorDiv }); new Draggable('error-div'); 
   domLoadedHandler();
 }
});
function portDate() {
var portdate = $$('input.portdate'); 
   if(portdate){
    var checkDate = function(strDate){
     var D = strDate.split('.');
     var now = new Date();
     var now2 = new Date();
     var date = new Date(D[2],(D[1] - 1),D[0],0,0,0,0);
     var minDate = new Date(now.setDate(now.getDate() + 7));
     var maxDate = new Date(now2.setDate(now2.getDate() + 60)); 
     [minDate, maxDate].each(function(d){ d.setHours(0,0,0,0); });
     var DateString = function(dateObj){
         var mm = (parseInt(dateObj.getMonth()) + 1) < 10 ? '0' + (parseInt(dateObj.getMonth()) + 1) : (parseInt(dateObj.getMonth()) + 1);
         return dateObj.getDate()+'.'+mm+'.'+dateObj.getFullYear();     
     };
    return {valid: (parseInt(date.getTime()) <= parseInt(maxDate.getTime()) && parseInt(date.getTime()) >= parseInt(minDate.getTime())), errorMsg: 'The date period have to be selected from '+DateString(minDate)+' to '+DateString(maxDate)};
   }
     var err=new Error();
     var startDate = new Date();
     var date = new Date(startDate.setDate(startDate.getDate() + 10)); // Adding 10 days as a default value
     var css = new Element('link', { 'type':'text/css', 'media':'screen', 'rel':'stylesheet', 'href':'/spaceworld/frontend/template/css/scal_style.tpl' });
     var js = new Element('script', { 'type':'text/javascript', 'src':'/spaceworld/frontend/template/javascript/scal.tpl' });
    if(!$('calendar-container')){
     var cal = new Element('div', { 'id':'calendar-container' }).setStyle({ width:'221px','position':'absolute','display':'none','zIndex':'9999' });
      cal.update('<b class="rtop" style="cursor:move"><b class="r1"></b> <b class="r2"></b> <b class="r3"></b><b class="r4"></b></b><div class="floating" id="calendar"></div>');
      $(document.body).insert({'bottom':cal});
      if(Prototype.Browser.IE && $('calendar')){ $('calendar').setStyle({'paddingBottom':'20px'}); }
    }  
      [css, js].each(function(o){ $$('head')[0].insert({'bottom':o}); });
     $(portdate).each(function(d){
       var val = d.getValue().split('.');
       var startdate = val.length != 3 ? { year:date.getFullYear(),month:date.getMonth,date:date.getDate()} : { year:val[2],month:val[1],date:val[0] } ;
       var defaultV = d.getValue();
       ['click', 'keypress'].collect(function(n){
         d.observe(n, function(evt){
           Event.stop(evt);
           showCalendar("calendar", { input: d, updateformat: 'dd.mm.yyyy', startdate: startdate, container: "calendar-container", source: d, callback: function(v){ 
               var ok = checkDate(v);
               if(ok.valid==false){
                  err.show({ target: d, msg: ok.errorMsg});
                  d.focus();
               }else{
                  err.clearError(d);
               }
           }});
         });
       }); 
     });
   }
}  
var attempt = 5;
function domLoadedHandler() {
  var subscrForm = $('subscription_frm');
  var errormessage = "Disse feltene mangler:";
  if ( typeof(subscrForm) != 'undefined' && subscrForm ) {
    var birthNumberEl = { "input" : $(subscrForm['SUBSCRIPTIONUSER.SOCIALSECURITY_ID']), "rule" : "^(\\d{11})$", "allowBlank": false, "errorMsg":"Feil fødselsnummer" };
    var firstNameEl = {"input" : $(subscrForm['SUBSCRIPTIONUSER.FIRSTNAME']), "allowBlank": false,"errorMsg":"Fornavn mangler" };
    var lastNameEl = { "input" : $(subscrForm['SUBSCRIPTIONUSER.LASTNAME']), "allowBlank": false,"errorMsg":"Etternavn mangler" };
   var error=0;
   errorDiv.update('<h6 id="errorDiv-header">'+errormessage+'</h6>');
   /* Keypress filter for birth ID */
    $(subscrForm['SUBSCRIPTIONUSER.SOCIALSECURITY_ID']).observe('keypress', function(e){
      var k = e.keyCode ? e.keyCode : e.charCode;
      if(!(k >= 48 && k <= 57)){    if(([8,46].indexOf(k)==-1)){  Event.stop(e); }  } 
    });
   var effectOpt = {duration: 0.25 };
 
   var err = new Error();
   var arr = [birthNumberEl, firstNameEl, lastNameEl];

   arr.each(function(o){
       var elem = o.input;
       var reg = o.rule ? new RegExp(o.rule) : '';
       elem.stopObserving('blur');
       elem.observe('blur',  function(e){
          var ok = reg!='' ? reg.test(this.value) : o.allowBlank==false ? !this.value.blank() : true;
          if(!ok){
             errorDiv.update('<h6 id="errorDiv-header">'+errormessage+'</h6>');
             error++;
             if($('subscription-error-msg')){ $('subscription-error-msg').replace('<h6>'+errormessage+'</h6>'); }
             err.show({target: this, msg: o.errorMsg});
          }else{
             if($(this.name + '-errorMsg')){ $(this.name + '-errorMsg').remove(); }
             if(executeAjaxOrNot()==true){
               err.close();
               fillSubscriptionForm(subscrForm);
             }
          }
       });
   });
  }
}

function executeAjaxOrNot() {
    var subscrForm = $('subscription_frm');
    var errormessage = "Disse feltene mangler:";
    var error = 0;
    var birthNumberEl = $(subscrForm['SUBSCRIPTIONUSER.SOCIALSECURITY_ID']);
    var firstNameEl = $(subscrForm['SUBSCRIPTIONUSER.FIRSTNAME']);
    var lastNameEl = $(subscrForm['SUBSCRIPTIONUSER.LASTNAME']);
    if((/^(\d{11})$/).test(birthNumberEl.getValue()) && firstNameEl.getValue() != '' && lastNameEl.getValue() != ''){
        return true;
        //fillSubscriptionForm(subscrForm);
    }else{
        return false;
     
    }
}
var ajaxing=null;
function fillSubscriptionForm(subscrForm) {

  try {
    var birthNumberEl = subscrForm['SUBSCRIPTIONUSER.SOCIALSECURITY_ID'];
    var birthNumber = birthNumberEl.value;
    var firstNameEl = subscrForm['SUBSCRIPTIONUSER.FIRSTNAME'];
    var firstName = firstNameEl.value;
    var lastNameEl = subscrForm['SUBSCRIPTIONUSER.LASTNAME'];
    var lastName = lastNameEl.value;
    var inputs = [birthNumberEl, firstNameEl, lastNameEl];
    var callOptions = {parameters: {
        func: 'ajax.getCustomerJson',
        firstName:   firstName,
        lastName:    lastName,
        birthNumber: birthNumber,
        debug: 'off'},
        onCreate: function(){ 
          inputs.each(function(i){ $(i).writeAttribute({'disabled':'disabled'}); });
        },
        onLoading: function(){
           $('waitspin').setStyle({'position':'absolute','zIndex':'8889', 'marginLeft': ($(subscrForm['SUBSCRIPTIONUSER.ADDRESS']).getWidth() + 10) + 'px' }).show();
        },
        onFailure: function(res){ 
          inputs.each(function(i){ $(i).removeAttribute('disabled'); if($('error-div')){ $('error-div').update("request_error:<p>"+res.responseText+"</p>") }else{ alert(res.responseText); } });
        },
        onSuccess: function (response){ inputs.each(function(i){ $(i).removeAttribute('disabled'); }); _doFillSubscriptionForm(response, subscrForm) } 
    };

    if(ajaxing!=null){

       ajaxing.transport.onreadystatechange = Prototype.emptyFunction;
       ajaxing.transport.abort();
    }
    ajaxing = new Ajax.Request( subscrForm.action, callOptions );

  } catch ( ex ) {
    alert( 'function "fillSubscriptionForm" is error:' + ex.message );
    
  }
}
var timerCheck=0;
function _doFillSubscriptionForm (response, subscrForm) {
  
  var json = response.responseText;
  var err = new Error();
  var customerData = eval('('+ json +')');
  $('waitspin').hide();  
  errorDiv.update('<h6 id="errorDiv-header">Disse feltene mangler</h6>');
  if ( customerData.status == 1 ) { 

    var fault = customerData.result['soapenv:Body']['soapenv:Fault'];
    if ( typeof(fault) != 'undefined' ) {
     if(fault.wait_seconds){
         $$('#subscriber input').each(function(i){
            i.writeAttribute({'disabled':'disabled'});
         });
        
        var mask = new ElementMask('<span id="pending-error-mask">'+fault.faultstring+'</span>', { target: 'subscriber',innerStyles : { 'width':'220px','padding':'10px','background':'#ffffff','border':'3px solid red'  } })
        mask.show();
        if(timerCheck!=0){ timerCheck .stop(); }
        var timer = new Timer(parseInt(fault.wait_seconds), { target: 'pending-error-mask', callback: function(){
            mask.hide();
            $$('#subscriber input').each(function(i){
               i.removeAttribute('disabled');
            });
        } });
       timerCheck = timer.countDown();

     }else{
      var msg = fault.faultstring.match( /\|([^\|]+)$/ );
      if ( msg ) {
        var i = $(subscrForm['SUBSCRIPTIONUSER.FIRSTNAME']);
        err.show({ target: i, msg: '<div id="subscription-error-msg">' + msg[1] + '</div>' })
      }
     }
    } else {

      var customerInfo = customerData.result['soapenv:Body'].multiRef;
      subscrForm['SUBSCRIPTIONUSER.ADDRESS'].value = customerInfo.streetAddress.content +' '+ customerInfo.streetNumber.content;
      subscrForm['SUBSCRIPTIONUSER.ZIPCODE'].value = customerInfo.postalCode.content;
      subscrForm['SUBSCRIPTIONUSER.CITY'].value = customerInfo.postalPlace.content;
      subscrForm['SUBSCRIPTIONUSER.TELEPHONE'].value = customerData.result.phone.content;
    }
  }
  else {
     errorDiv.update('<h6 id="errorDiv-header">Server feil</h6>');
     var i = $(subscrForm['SUBSCRIPTIONUSER.FIRSTNAME']);
     err.show({ target: i, msg: '<div id="subscription-error-msg">' + 'Feil i kommunikasjonen med Telenor' + '</div>' })
  }
}

function getOrderStatus ( oLink, url ) {

    var callOptions = {
        onSuccess: function (response) {
           var container = oLink.up('div');
           container.innerHTML = response.responseText;
        }
    };

    new Ajax.Request( url, callOptions );
  
}

function showPresale () {
  var presale = document.getElementById('pre_sale_buy');
  presale.style.display='block';
  return false;
}
function hidePresale () {
  var presale = document.getElementById('pre_sale_buy');
  presale.style.display='none';
  return false;
}

/**** Hide or show elements based by id ****/
function ActivateElement(id){
  node = document.getElementById(id);
  if (node) {
    node.style.display = 'block';
    return 1;
  }
  return 0;
}

function DeactivateElement(id){
  node = document.getElementById(id);
  if (node) {
    node.style.display = 'none';
    return 1;
  }
  return 0;
}

/**** Reset tabs ****/
function ResetTabBoxes(tabname){
  var count = 1;
  var res = DeactivateElement('tab_' + tabname + '_box_' + count.toString());
  while (res) {
    count++;
    res = DeactivateElement('tab_' + tabname + '_box_' + count.toString());
  }
}

function ResetTabs(tabname){
  var tab_on = 'tab_' + tabname + '_on';
  var tab_off = 'tab_' + tabname + '_off';

  var count = 1;
  var tab = document.getElementById('tab_' + tabname + '_' + count.toString());
  while (tab) {
    if (tab.className == tab_on) {
      tab.innerHTML = '<a onclick="activate_tab(this);">' + tab.innerHTML + '</a>';
      tab.className = tab_off;
    }
    count++;
    tab = document.getElementById('tab_' + tabname + '_' + count.toString());
  }
}

function IsNumeric(sText)
{
  var ValidChars = "0123456789.";
  var IsNumber=true;
  var Char;

  for (i = 0; i < sText.length && IsNumber == true; i++) {
    Char = sText.charAt(i);
    if (ValidChars.indexOf(Char) == -1) {
      IsNumber = false;
    }
  }
  return IsNumber;
}

function IsTab(idname) {
  if (idname == undefined || idname == null)
    return 0;
  var namesplit = idname.split('_');
  if (namesplit.length < 3)
    return 0;
  if (namesplit[0] == 'tab' && IsNumeric(namesplit[2]))
    return 1;
  if (namesplit.length < 4)
    return 0;
  if (namesplit[0] == 'tab' && namesplit[2] == 'box' && IsNumeric(namesplit[3]))
    return 2;

  return 0;
}

/**** Set clicked tab active ****/
function activate_tab(obj){
  var parentobj = obj.parentNode;
  var namesplit = parentobj.id.split('_');
  var tabname = namesplit[1];
  var tabnumber = namesplit[2];

  ResetTabBoxes(tabname);
  ResetTabs(tabname);

  parentobj.innerHTML = obj.innerHTML;
  parentobj.className = 'tab_' + tabname + '_on';
  ActivateElement('tab_' + tabname + '_box_' + tabnumber);
}

/**** Set clicked tab active ****/
function activate_tab_getobj(objname){
  var obj = document.getElementById(objname);
  if (!obj)
    return 0;
  var childobj = obj.getElementsByTagName('a');
  if (childobj && childobj.length > 0) {
    var namesplit = obj.id.split('_');
    var tabname = namesplit[1];
    var tabnumber = namesplit[2];

    ResetTabBoxes(tabname);
    ResetTabs(tabname);

    obj.innerHTML = childobj[0].innerHTML;
    obj.className = 'tab_' + tabname + '_on';
    ActivateElement('tab_' + tabname + '_box_' + tabnumber);
  }
  return 1;
}

function switch_div (show_id, hide_id) {
    DeactivateElement(hide_id);
    ActivateElement(show_id);
}

function switch_divobj (show_id, hide_obj) {
    if (hide_obj) {
      hide_obj.style.display = 'none';
    }
    ActivateElement(show_id);
}

function switch_class (obj_1, class_1, obj_id_2, class_2) {
    var obj_2 = document.getElementById(obj_id_2);
    if (obj_1 && obj_2) {
      obj_1.className = class_1;
      obj_2.className = class_2;
    }
}

function check_user_reg(){
    var firstname   = document.user.elements['USER.FIRSTNAME'].value;
    var lastname    = document.user.elements['USER.LASTNAME'].value;
    var address     = document.user.elements['USER.ADDRESS'].value;
    var zipcode     = document.user.elements['USER.ZIPCODE'].value;
    var city        = document.user.elements['USER.CITY'].value;
    var email       = document.user.elements['USER.EMAIL'].value;

    if (!firstname) {
      window.alert("Vennligst oppgi fornavn");
      return false;
    }
    else if (!lastname) {
      window.alert("Vennligst oppgi etternavn");
      return false;
    }
    else if (!address) {
      window.alert("Vennligst oppgi adresse");
      return false;
    }
    else if (!zipcode) {
      window.alert("Vennligst oppgi postnummer");
      return false;
    }
    else if (!city) {
      window.alert("Vennligst oppgi poststed");
      return false;
    }
    else if (!email) {
      window.alert("Vennligst oppgi epostadresse");
      return false;
    }
    //-----Check for valid content-----
    else if(!validate_zipcode_no(zipcode)){
      return false;
    }
    else if(!validate_email(email)){
      return false;
    }

    return true;
}

function check_newsletter_reg(){
    var firstname   = document.newsletter_user.elements['USER.FIRSTNAME'].value;
    var lastname    = document.newsletter_user.elements['USER.LASTNAME'].value;
    var email       = document.newsletter_user.elements['USER.EMAIL'].value;
    var zipcode     = document.newsletter_user.elements['USER.ZIPCODE'].value;

    if (!firstname) {
      window.alert("Vennligst oppgi fornavn");
      return false;
    }
    else if (!lastname) {
      window.alert("Vennligst oppgi etternavn");
      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-----
    else if(!validate_zipcode_no(zipcode)){
      return false;
    }
    else if(!validate_email(email)){
      return false;
    }

    return true;
}

//--------------Customer service registration validation -----------------
function check_service_customer_reg(){
    var firstname   = document.service_customer_reg.elements['USER.FIRSTNAME'].value;
    var lastname    = document.service_customer_reg.elements['USER.LASTNAME'].value;
    var email       = document.service_customer_reg.elements['USER.EMAIL'].value;
    //var mobilephone = document.service_customer_reg.elements['USER.MOBILEPHONE'].value;
    if (!firstname) {
      window.alert("Vennligst oppgi fornavn");
      return false;
    }
    else if (!lastname) {
      window.alert("Vennligst oppgi etternavn");
      return false;
    }
    else if (!email) {
      window.alert("Vennligst oppgi epostadresse");
      return false;
    }
    //else if (!mobilephone) {
    //  window.alert("Vennligst oppgi epostadresse");
    //  return false;
    //}
    //-----Check for valid content-----
    else if(!validate_email(email)){
      return false;
    }
    //else if(!validate_mobilephone(mobilephone)){
    //  return false;
    //}
    return true;
}
function check_service_request_reg(){
    window.alert("Her");
    return false;
}

//-----NetCom and other subscriptions-----
function enable_mobil_number(){
    document.subscription.elements['SUBSCRIPTIONUSER.MOBILEPHONE'].disabled=false;
    document.subscription.elements['SUBSCRIPTIONUSER.MOBILEPHONE'].style.backgroundColor = '#FFFFFF'; 
    if(document.subscription.elements['SUBSCRIPTIONUSER.MOBILEPHONE'].value == '?nsker nytt'){
      document.subscription.elements['SUBSCRIPTIONUSER.MOBILEPHONE'].value ='';
    }
    document.subscription.elements['SUBSCRIPTIONUSER.MOBILEPHONE'].focus();
    var portdate = $('portdate');
    if ( portdate ) {
      portdate.show();
    }
}

function disable_mobil_number(){
    document.subscription.elements['SUBSCRIPTIONUSER.MOBILEPHONE'].disabled=true;
    document.subscription.elements['SUBSCRIPTIONUSER.MOBILEPHONE'].style.backgroundColor = '#EEEEEE'; 
    document.subscription.elements['SUBSCRIPTIONUSER.MOBILEPHONE'].value ='?nsker nytt';
}

//-----Telenor subscriptions-----
function enable_mobil_new(){
    document.subscription.elements['mobile1'].disabled=false;
    document.subscription.elements['mobile1'].style.backgroundColor = '#FFFFFF'; 
    document.subscription.elements['mobile1'].focus();
    document.subscription.elements['mobile2'].disabled=false;
    document.subscription.elements['mobile2'].style.backgroundColor = '#EEEEEE'; 
    document.subscription.elements['mobile3'].disabled=true;
    document.subscription.elements['mobile3'].style.backgroundColor = '#EEEEEE'; 
    var portdate = $('portdate');
    if ( portdate ) {
      portdate.hide();
    }
}
function enable_mobil_videreforing(){
    document.subscription.elements['mobile1'].value ='';
    document.subscription.elements['mobile1'].disabled=true;
    document.subscription.elements['mobile1'].style.backgroundColor = '#EEEEEE'; 
    document.subscription.elements['mobile2'].disabled=false;
    document.subscription.elements['mobile2'].style.backgroundColor = '#FFFFFF'; 
    document.subscription.elements['mobile2'].focus();
    document.subscription.elements['mobile3'].value ='';
    document.subscription.elements['mobile3'].disabled=true;
    document.subscription.elements['mobile3'].style.backgroundColor = '#EEEEEE';
    var portdate = $('portdate');
    if ( portdate ) {
      portdate.hide();
    }
}
function enable_mobil_portering(){
    document.subscription.elements['mobile1'].value ='';
    document.subscription.elements['mobile1'].disabled=true;
    document.subscription.elements['mobile1'].style.backgroundColor = '#EEEEEE'; 
    document.subscription.elements['mobile2'].value ='';
    document.subscription.elements['mobile2'].disabled=true;
    document.subscription.elements['mobile2'].style.backgroundColor = '#EEEEEE'; 
    document.subscription.elements['mobile3'].disabled=false;
    document.subscription.elements['mobile3'].style.backgroundColor = '#FFFFFF'; 
    document.subscription.elements['mobile3'].focus();
    var portdate = $('portdate');
    if ( portdate ) {
      portdate.show();
    }
}
var Error = new Class.create({
    initialize: function(){
       this.effectOpt = {duration:0.3};
       this.errorDiv = errorDiv; // global div to be used;
    },
    _setPosition: function(target){
       if(!this.errorDiv.visible()){ 
          if(!target){
            var pos = { 'left': Math.round(($(document.body).getWidth() / 2) - (this.errorDiv.getWidth() / 2)), 'top':  Math.round(($(document.body).getHeight() / 2) - (this.errorDiv.getHeight() / 2)) }
            this.errorDiv.setStyle({  'top':pos.top+'px', 'left':pos.left+'px' });
          }else{
            Position.clone(target, this.errorDiv, { setWidth: false, setHeight: false, offsetLeft: (target.getWidth() + 10) });
          }
       }
    },
    clearError: function(target){
       var ID = (target.name || target.id) + '-errrorMsg';
       if($(ID)){ $(ID).remove(); }
       if(this.errorDiv.select('#errorOL li').length==0){ this.close(); }
    },
    show: function(o){
      var opt = o || {};
      this._setPosition($(opt.target));
      var clearErrorMsg = function(e){
            var ok = !this.getValue().blank() ? ( (opt.rule && opt.rule!='') ? (new RegExp(opt.rule)).test(this.getValue()) : true) : false;
            if(ok==true){
                 errorMsg.remove();
                if(s.errorDiv.select('#errorOL li').length==0){ s.close(); }
             }
      }
      var ID = opt.msgID || (opt.target.name || opt.target.id);
          ID += '-errrorMsg';
      var errorMsg = $(ID) || new Element('li', { id: ID }).setStyle({'listStyle':'disc'}).update(opt.msg);
      if(!$('errorOL')){ this.errorDiv.insert({ 'bottom': '<ol id="errorOL" style="margin-left:2em""></ol>' }); }
      if(!$(ID)){ $('errorOL').insert({'bottom': errorMsg }); }else{ errorMsg.update(opt.msg) }
      if(opt && typeof(opt.callback)=='function'){
         this.effectOpt.afterFinish = function(){ opt.callback.call(); }
      }
      if(opt.target){ $(opt.target).stopObserving('change'); $(opt.target).observe('change', clearErrorMsg); }
      var s = this;
      if(opt.btn===true){
        if(!$('alert-error-btn')){ 
          var btn = new Element('button', { id:'alert-error-btn', 'type':'button' }).update('Ok');
          btn.observe('click', function(e){ s.close(); });
          errorDiv.insert({'bottom': btn.wrap(new Element('p').setStyle({textAlign:'center'})) });
        }
      }
      new Effect[(opt.effect && opt.effect != '') ? opt.effect.capitalize() : 'Appear'](this.errorDiv, this.effectOpt);
    },
    close: function(o){
       var opt = o || {};
       if(typeof(opt.callback)=='function'){
         this.effectOpt.afterFinish = function(){ opt.callback.call(); }
      }
        new Effect[(opt.effect && opt.effect != '') ? opt.effect.capitalize() : 'Fade'](this.errorDiv, this.effectOpt);
    },
    setHeader: function(str){
        if(this.errorDiv.down('#errorDiv-header')){
            this.errorDiv.down('#errorDiv-header').update(str); 
        }
    }
   
});
function showSubscriptionError(opt){
  Position.clone(opt.target, errorDiv, { setWidth:false,setHeight:false,offestLeft:(opt.target.getWidth() + 10) });
  
}
function check_subscription_mobil_telenor(date_limit){
    var form = document.subscription;
    var inp = form.elements;
    var getElementValue = function(i){
        return i ? $(i).getValue() || i.value : '';
    };
    var sub_subtype = inp['SUBSCRIPTIONUSER.SUBTYPE'];
    var sub_mobilephone1 = getElementValue(inp['mobile1']);
    var sub_mobilephone2 = getElementValue(inp['mobile2']);
    var sub_mobilephone3 = getElementValue(inp['mobile3']);
    var sub_firstname = getElementValue(inp['SUBSCRIPTIONUSER.FIRSTNAME']);
    var sub_lastname = getElementValue(inp['SUBSCRIPTIONUSER.LASTNAME']);
    var sub_address = getElementValue(inp['SUBSCRIPTIONUSER.ADDRESS']);
    var sub_zipcode = getElementValue(inp['SUBSCRIPTIONUSER.ZIPCODE']);
    var sub_city   = getElementValue(inp['SUBSCRIPTIONUSER.CITY']);
    var sub_email   = getElementValue(inp['SUBSCRIPTIONUSER.EMAIL']);
    var sub_telephone   = getElementValue(inp['SUBSCRIPTIONUSER.TELEPHONE']);
    var sub_social_security_id   = getElementValue(inp['SUBSCRIPTIONUSER.SOCIALSECURITY_ID']);
    var birthdate   =  sub_social_security_id.substring(0,6);
    var emailPttr = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/;
    var err = new Error();
    //-----Check for content-----
    if (radioValue(sub_subtype) == 'nytegning' && inp['mobile1']) {
      if(sub_mobilephone1.blank()) {
        err.show({target: inp['mobile1'], msg: 'Vennligst velg et ønsket mobilnummer', msgID:'mobile'})
        return false;
      }
    }
    else if (radioValue(sub_subtype) == 'videreforing' && inp['mobile2']) {
      if(sub_mobilephone2.blank()) {
        err.show({target:inp['mobile2'], msg: 'Vennligst oppgi ditt mobilnummer når du vil videreføre nummeret', msgID:'mobile'});
        return false;
      }else if(!validate_mobilephone(sub_mobilephone2, inp['mobile2'])){
        return false;
      }
    }
    else if (radioValue(sub_subtype) == 'portering' && inp['mobile3']) {
      if(sub_mobilephone3.blank()) {
        err.show({target: inp['mobile3'], msg: 'Vennligst oppgi mobilnummeret du vil portere nummeret til Telenor',msgID:'mobile'})
        return false;
      }else if(!validate_mobilephone(sub_mobilephone3, inp['mobile3'])){
        return false;
      }
    }

    if (sub_firstname.blank()) {
      err.show({target: inp['SUBSCRIPTIONUSER.FIRSTNAME'], msg: 'Vennligst oppgi fornavn'});
      return false;
    }else if (sub_lastname.blank()) {
      err.show({target: inp['SUBSCRIPTIONUSER.LASTNAME'], msg: 'Vennligst oppgi etternavn'});
      return false;
    }
    else if(sub_zipcode.blank()) {
      err.show({target: inp['SUBSCRIPTIONUSER.ZIPCODE'], msg: 'Vennligst oppgi postnummer'});
      return false;
    }
    else if (sub_city.blank()) {
      err.show({target: inp['SUBSCRIPTIONUSER.CITY'], msg: 'Vennligst oppgi poststed'});
      return false;
    }
    else if (sub_email.blank()) {
      err.show({target: inp['SUBSCRIPTIONUSER.EMAIL'], msg: 'Vennligst oppgi epostadresse', rule: emailPttr});
      return false;
    }
    else if (sub_social_security_id.blank()) {
      err.show({target: inp['SUBSCRIPTIONUSER.SOCIALSECURITY_ID'], msg: 'Vennligst oppgi fødselsnummer', rule: /^(\d{11})$/});
      return false;
    }
    // checking email pattern
    if(!(emailPttr).test(sub_email)){
      err.show({target: form.elements['SUBSCRIPTIONUSER.EMAIL'], msg: "invalid_email", rule: emailPttr});
      return false;
    }
    //-----Check for valid content-----
    if(!validate_zipcode_no(sub_zipcode, inp['SUBSCRIPTIONUSER.ZIPCODE'])){
      return false;
    }
    else if(!validate_email(sub_email)){
      return false;
    }
    else if(!check_agelimit(birthdate,date_limit, inp['SUBSCRIPTIONUSER.SOCIALSECURITY_ID'])){
      return false;
    }
    else if(!validate_social_security_id(sub_social_security_id, inp['SUBSCRIPTIONUSER.SOCIALSECURITY_ID'])){
      return false;
    }
    //// preload function
     var vp = document.viewport.getDimensions();
     var bg = new Element('iframe', { 'id': 'preload-bg', 'src':'javascript:false;', 'scrolling':'no','frameborder':'no' });
     var height = Prototype.Browser.IE ? document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px' : '100%';
         bg.setOpacity(0.7).setStyle({
            'position': Prototype.Browser.IE ? 'absolute' : 'fixed',
            'background': '#FFFFFF',
            'padding': '0', 'margin': '0', 'left':'0', 'top':'0',
            'width': '100%', 'height': height,'zIndex': '9998'
         });
     var preloader = new Element('div',{ 'id':'preloader-img-spinner' });
         preloader.setStyle({
            'background':'transparent url('+$('waitspin').readAttribute('src')+') 50% 50% no-repeat',
            'zIndex':'9999', 'position' : Prototype.Browser.IE ? 'absolute' : 'fixed',           
            'padding': '0', 'margin': '0', 'left':'0', 'top':'0',
            'width': '100%', 'height': height,'zIndex': '9998'
         });
     [bg, preloader].each(function(o){
        $(document.body).insert({ 'bottom':o });
     });
    return true;
}


//--------------Order validation -----------------

function check_order(){

    var d_fname   = document.orders.elements['ORDERS.D_FNAME'].value;
    var d_lname   = document.orders.elements['ORDERS.D_LNAME'].value;
    var d_address = document.orders.elements['ORDERS.D_ADDRESS'].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;
    var d_telephone   = document.orders.elements['ORDERS.D_TELEPHONE'].value;
    var ccnr   = document.orders.elements['ccnr'].value;
    var ccode   = document.orders.elements['ccode'].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_address) {
      window.alert("Vennligst oppgi adresse");
      return false;
    }
    else if (!d_zipcode) {
      window.alert("Vennligst oppgi postnummer");
      return false;
    }
    else if (!d_city) {
      window.alert("Vennligst oppgi poststed");
      return false;
    }
    else if (!d_email) {
      window.alert("Vennligst oppgi epostadresse");
      return false;
    }
    else if (!d_telephone) {
      window.alert("Vennligst oppgi telefonnummer");
      return false;
    }
    else if (!ccnr) {
      window.alert("Vennligst oppgi kredittkortnummer (16 siffer)");
      return false;
    }
    else if (!ccode) {
      window.alert("Vennligst oppgi kortets CVC-kode. (De tre siste sifrene i signaturfeltet på baksiden av kredittkortet)");
      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;
    }
    else if(!validate_creditcard(ccnr)){
      return false;
    }
    else if(!validate_cvc(ccode)){
      return false;
    }
    //-----Log to google analytics  - do not overwrite! -----
    urchinTracker('/funnel/pay');

    //-----Return true if everything is ok-----
    return true;
}


function validate_email(email_str, inp){
  var err = new Error();
  var email_filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
  if (!email_filter.test(email_str)){
    if(inp){
      err.show({target: $(inp), msg : "Epostadressen er ikke gyldig: Eksempel på riktig adresse er: fornavn.etternavn@firma.no", rule:email_filter});
   }else{
     alert("Epostadressen er ikke gyldig: Eksempel på riktig adresse er: fornavn.etternavn@firma.no");
   }
    return false;
  }
  else {
    return true;
  }
}

function validate_zipcode_no(zipcode_str,inp){
  var error = new Error();
  var zipcode_filter = /^([\d]+)$/i;
  var valid = false;
  var errMsg='';
  if(!zipcode_filter.test(zipcode_str)){
     errMsg = 'Postnummeret kan bare inneholde tall';
  }else if(zipcode_str < 1 || zipcode_str > 9999){
    errMsg = "Postnummeret må vÃ¦re et tall mellom 0001 og 9999";
  }else {
    valid = true;
  }
  if(valid==false){
    if(inp){
        error.show({target: $(inp), msg: errMsg, rule: zipcode_filter });
    }else{
       alert(errMsg);
    }
  }
  return valid;
}
var mobErr = new Error();
function validate_telephone(telephone_str, inp){
  var telephone_filter = /^([\d]+)$/i;
  if (!telephone_filter.test(telephone_str)){
     var msg = "Telefonnummeret kan bare inneholde tall";
    if(inp){
      mobErr.show({ target:$(inp), msg:msg, rule: telephone_filter, msgID: 'mobile'  });
    }else{
     alert(msg);
    }
    return false;
  }
  else if(telephone_str < 10000000 || telephone_str > 99999999){
    var msg = "Telefonnummeret er ugyldig";
    if(inp){
       mobErr.show({ target:$(inp), msg:msg, rule: telephone_filter, msgID: 'mobile'  });
    }else{
      alert(msg);
    }
    return false;
  }
  else {
    return true;
  }
}

function validate_mobilephone(telephone_str, inp){
  if(validate_telephone(telephone_str, inp)){
    if (((telephone_str > 39999999) && (telephone_str < 50000000)) || ((telephone_str > 89999999) && (telephone_str < 100000000))){
      if($('mobile-errrorMsg')){ $('mobile-errrorMsg').remove(); }
      return true;
    }
    else {
      var msg = "Mobilnummeret må begynne på 4 eller 9";
      if(inp){
          mobErr.show({ target:$(inp), msg:msg, msgID: 'mobile'});
      }else{
        alert(msg);
      }
      return false;
    }
  }
  return false;
}

function validate_homephone(telephone_str, inp){
  if(validate_telephone(telephone_str, inp)){
    if (((telephone_str > 39999999) && (telephone_str < 50000000)) || ((telephone_str > 89999999) && (telephone_str < 100000000))){
      var msg = "Det oppgitte telefonnummeret er et mobilnummer. Vennligst oppgi et fasttelefonnummer.";
      if(inp){
        mobErr.show({ target:$(inp), msg:msg, msgID: 'mobile'});
      }else{
        alert(msg);
      }
      return false;
    }
    else {
      return true;
    }
  }
  return false;
}

function validate_creditcard(ccnr, inp){
  var creditcard_filter = /^([\d]+)$/i;
  var err = new Error();
  if (!creditcard_filter.test(ccnr)){
    var msg = "Kortnummeret kan bare inneholde tall";
    if(inp){
      err.show({ target: $(inp), msg: msg, msgID: 'creditCard', rule: creditcard_filter });
    }else{
     alert(msg);
    }
    return false;
  }
  if(ccnr.length != 16){
      var str = "Det oppgitte kortnummeret har for få siffer. Vennligst oppgi et gyldig kortnummer med 16 siffer";
    if(inp){
       err.show({ target: $(inp), msg: msg, msgID: 'creditCard', rule: creditcard_filter });
    }else{
      alert(str);
    }
    return false;
  }
  return true;
}

function validate_cvc(ccode){
  var ccode_filter = /^([\d]+)$/i;
  if (!ccode_filter.test(ccode)){
    alert("CVC-feltet kan bare inneholde tall");
    return false;
  }
  if(ccode.length != 3){
    alert("Den oppgitte CVC-koden har for få siffer. Vennligst oppgi en CVC-kode med 3 siffer");
    return false;
  }
  return true;
}

function validate_social_security_id(social_security_id,inp){
 if((/^(\d{11})$/).test(social_security_id)){
      return true;
 }
 var msg = "Det oppgitte fødselsnummeret har ikke 11 siffer. Vennligst oppgi et gyldig fødselsnummer";
 if(inp){ 
   var e = new Error();
   e.show({target: $(inp), msg: msg, rule: /^(\d{11})$/ });
 }else{
   alert(msg);
 }
 return false;
}

//---------------Sjekk aldersgrense:------------------
// Støtter inn-formatene dd.mm.åååå og ddmmåå

function check_agelimit(date_born,date_limit,inp){
    date_born=date_born+"";
    birthdate = new Date();
    // Er formatet ddmmåå?
    if(date_born.length == 6){
       birthdate.setDate(date_born.substring(0,2));
       birthdate.setMonth(date_born.substring(2,4)-1);
      if(date_born.substring(4,5) == '0'){
       var year='200'+date_born.substring(5,6);
       birthdate.setYear(year);
      }
      else{
       birthdate.setYear(date_born.substring(4,6));
      }
    }
    // Formatet er dd.mm.åååå
    else{
     birthdate.setYear(date_born.substring(6,10));
     birthdate.setMonth(date_born.substring(3,6)-1);
     birthdate.setDate(date_born.substring(0,2));
    } 
    date_limit=date_limit+"";
    birthdatelimit = new Date();
    birthdatelimit.setYear(date_limit.substring(0,4));
    birthdatelimit.setMonth(date_limit.substring(5,7)-1);
    birthdatelimit.setDate(date_limit.substring(8,10));

    if(birthdate > birthdatelimit){
     var msg = "Beklager, du må vÃ¦re over 18 år for å bestille mobiltelefonabonnement";
     if(inp){
       var err = new Error();
       err.show({target: $(inp), msg: msg});
     }else{
       alert(msg);
     }
     return false;
    }
  return true;
}

function radioValue(radioButton)
{
    for (x = 0; x <= radioButton.length; x++)
    {
        if (radioButton[x].checked == true) return radioButton[x].value; 
    } 
         // if it didn't find anything, return the .value  (behaviour of single radio btn)
   return radioButton.value;
}

function check_shoppinglist(){
    var bname   = document.shoppinglist.elements['bname'].value;

    //-----Check for content-----
    if (!bname) {
      window.alert("Vennligst gi handlelisten et navn");
      return false;
    }
  else {
    return true;
  }
}

//---------------Datosjekk:------------------

function isLeap(year){
    if(year % 400 == 0){
        return true;
    } else if((year % 4 == 0) && (year % 100 != 0)){
        return true
    } else return false;
}
    
function days_in(month, year){
    if(month == 4 | month == 6 || month == 9 || month == 11){
        return 30;
    } else if(!isLeap(year) && month == 2){
        return 28;
    } else if(isLeap(year) && month == 2){
        return 29;
    } else return 31;
}
    
function validate_date(inDate){
    var myArrayDate, myDay, myMonth, myYear, myString, myYearDigit;
    myString = inDate + "";
    if (myString == "" || myString == "dd.mm.åååå"){
        alert("Vennligst oppgi en gyldig fødselsdato. Bruk datoformatet dd.mm.åååå.");
        return false;
    }
    myArrayDate = myString.split(".");
    
    myDay = Math.round(parseFloat(myArrayDate[0]));
    myMonth = Math.round(parseFloat(myArrayDate[1]));
    myYear = Math.round(parseFloat(myArrayDate[2]));
    myYearString = myYear + "";
    myYearDigit = myYearString.length;
    if (myString.length >10 || isNaN(myDay) || isNaN(myMonth) || isNaN(myYear) || (myYear < 1) || (myDay < 1) || (myMonth < 1) || (myMonth > 12) || (myYearDigit != 4)   || (myDay > days_in(myMonth, myYear))){
        alert("Vennligst oppgi en gyldig fødselsdato. Bruk datoformatet dd.mm.åååå.");
        return false;
    } else{
        return true;
    }
}

//---------------Kundesenter:------------------

function toggleFields()
{
  if(document.getElementById('all').checked)
  {
    document.getElementById('status1').disabled = true;
    document.getElementById('status20').disabled = true;
    document.getElementById('status30').disabled = true;
    document.getElementById('status99').disabled = true;
    document.getElementById('myrequest').disabled = true;
  }else{
    document.getElementById('status1').disabled = false;
    document.getElementById('status20').disabled = false;
    document.getElementById('status30').disabled = false;
    document.getElementById('status99').disabled = false;
    document.getElementById('myrequest').disabled = false;
  }
}

function showComment(){
    if(document.getElementById('comment').style.display == "none"){
      document.getElementById('comment').style.display = "block";
    }else{
      document.getElementById('comment').style.display = "none";
    }
}

function order_show(script) {
  var ordernu = document.updaterequest.elements['REQUEST.REFERENCE'].value;
  window.location = script + 'func=request.orderinfo&ordernu=' + ordernu + '&template=request_order_info';

}

function toggleDisplay(id) {
   var div = document.getElementById(id);
   if (div) {
     if (div.style.display != "block") {
       div.style.display = "block";
     } else {
       div.style.display = "none";
     }
   }
   return false;
}


function exclude_products(subprod_id,sub_id) {

    var s_id = sub_id;
    var sp_id = subprod_id; 

     new Ajax.Request('/wsp/spaceworld/frontend.cgi?func=frontend.show&func_id=' + s_id + '&spid=' + sp_id + '&template=netcom_exclude', { 
     onSuccess : function(resp) { 

       aParts = resp.responseText.split(/AJAX_BEGIN/);
       aParts2 = aParts[1].split(/AJAX_END/);

       strID = aParts2[0];
       oCheckbox = $(strID);

       oMain = $(sp_id);

       if(oCheckbox) {

         if (oMain.getAttribute('checked')) {
             oCheckbox.setAttribute('disabled','disabled');
         }

         else {
             oCheckbox.removeAttribute('disabled');
         } 

       }

     }

    });
}


function check_subscription_netcom_neo(){
    var sub_subtype      = document.subscription.elements['SUBSCRIPTIONUSER.SUBTYPE'];
    var sub_mobilephone1 = document.subscription.elements['mobile1'].value;
    var sub_mobilephone2 = document.subscription.elements['mobile2'].value;
    var sub_mobilephone3 = document.subscription.elements['mobile3'].value;
    var sub_firstname    = document.subscription.elements['SUBSCRIPTIONUSER.FIRSTNAME'].value;
    var sub_lastname     = document.subscription.elements['SUBSCRIPTIONUSER.LASTNAME'].value;
    var sub_zipcode      = document.subscription.elements['SUBSCRIPTIONUSER.ZIPCODE'].value;
    var sub_social_security_id   = document.subscription.elements['SUBSCRIPTIONUSER.SOCIALSECURITY_ID'].value;

    //-----Check for content-----
    if (radioValue(sub_subtype) == 'nytegning') {
      if (!sub_mobilephone1) {
        window.alert("Vennligst velg et ønsket mobilnummer");
        return false;
      }
    }
    else if (radioValue(sub_subtype) == 'videreforing') {
      if (!sub_mobilephone2) {
        window.alert("Vennligst oppgi ditt mobilnummer når du vil videreføre nummeret");
        return false;
      }
      else if(!validate_mobilephone(sub_mobilephone2)){
        return false;
      }
    }
    else if (radioValue(sub_subtype) == 'portering') {
      if (!sub_mobilephone3) {
        window.alert("Vennligst oppgi mobilnummeret du vil portere nummeret til Telenor");
        return false;
      }
      else if(!validate_mobilephone(sub_mobilephone3)){
        return false;
      }
    }

    if (!sub_firstname) {
      window.alert("Vennligst oppgi fornavn");
      return false;
    }
    else if (!sub_lastname) {
      window.alert("Vennligst oppgi etternavn");
      return false;
    }
    else if (!sub_zipcode) {
      window.alert("Vennligst oppgi postnummer");
      return false;
    }
    else if (!sub_social_security_id) {
      window.alert("Vennligst oppgi fødselsnummer");
      return false;
    }

    //-----Check for valid content-----
    if(!validate_zipcode_no(sub_zipcode)){
      return false;
    }
    else if(!validate_social_security_id(sub_social_security_id)){
      return false;
    }
    return true;
}


//---------Input fields ----------------

function clearText(thefield){
   if (thefield.defaultValue==thefield.value) {
      thefield.value = "";
   }
} 

function defText(field){
   if (field.value=="") {
      field.value = field.defaultValue;
   }
}
/************************Check stock in basket*************************/
function check_stock(stock,old_quantity,basketline) {
  var new_quantity = document.getElementById("quantity_"+basketline).value;
  if(new_quantity > stock) {
    alert("Antallet overstiger vårt lagerantall. Vennligst legg inn et lavere antall");
    document.getElementById("quantity_"+basketline).value = old_quantity;
    return false;
  }
  return true;
}
/************************Check tipsvenn form elements*************************/
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("Vennligst fyll ut en gyldig fra-adresse");
    return false;
  }
  if(! validate_email(to)) {
    alert("Vennligst fyll ut en gyldig til-adresse");
    return false;
  }
  //if(from == to) {
  //  alert("From and to cannot be the same!");
  //  return false;
  //}

  return true;
}
/************************Check stock alert form elements*************************/
function stockalert_check() {
  var email = document.getElementById("email").value;
  if(! validate_email(email)) {
    alert("Vennligst fyll ut en gyldig epost-adresse");
    return false;
  }
  return true;
}
/** Timer class: this return only the format in mm:ss **/
var Timer = new Class.create({
    initialize: function(sec,opt){
      this.sec = parseInt(sec);
      this.opt = opt || {};
      this.task=null;
    },
    countDown: function(){
      var self = this;
      if(self.task==null){
        self.task = new PeriodicalExecuter(function(p){ self._setTimer(); }, 1);
      }
    },
    _setTimer: function(){
      if(--this.sec<0){
         this.task.stop();
         if(typeof(this.opt.callback)=='function'){ this.opt.callback.call();  }
       }else{
        var span = $('timer-span-countdown') || new Element('span', { id: 'timer-span-countdown' });
        if(this.opt.target){
           if(!$('timer-span-countdown')){ $(this.opt.target).insert({ 'bottom':span }); }
        }
        var nbr = Math.floor(this.sec / 60);
        var time = ((nbr < 10 ? '0' + nbr : nbr)+":")+(((nbr=(this.sec-(nbr*60)))<10)?"0"+nbr:nbr); 
        if(this.sec <= 10 ){ span.setStyle({'color':'red'}) }
        span.update(time);
    }
  },
  clearTimer: function(resetSec){
     if(this.task != null){ this.task.stop(); this.task = null; }
     if(resetSec){  this.sec = parseInt(resetSec); }
  }
});
var ElementMask = new Class.create({
     initialize: function(msg,opt){
      this.target = $(document.body);
      this.opt = opt || {};
      this.msg = $('mask-innerHTML') || new Element('div', { 'id':'mask-innerHTML' });
      this.msg.update(msg || 'Loading..');
      this.bg = $('preloader-bg') || new Element('iframe', { 'id': 'preloader-bg', 'src':'javascript:"";', 'scrolling':'no','frameborder':'no' });
      this.preloader = new Element('div',{ 'id':'preloader-img-spinner' });
      this.parent;
    },
    _createMask: function(){
      if(this.opt.target){
         var elem = $(this.opt.target);
         var vp = elem.getDimensions();
	 var height = vp.height + 'px';
      }else{
         var elem = this.target;
         var vp = document.viewport.getDimensions();
	 var height = Prototype.Browser.IE ? document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px' : '100%';
      }
      this.parent = elem;
         this.bg.setOpacity(0.7).setStyle({
            'position': Prototype.Browser.IE ? 'absolute' : 'fixed',
            'background': '#FFFFFF',
            'padding': '0', 'margin': '0', 'left':'0', 'top':'0',
            'width': vp.width + 'px', 'height': height,'zIndex': '9997'
         });
         this.preloader.setStyle({
            'background':'transparent none',
            'zIndex':'9999', 'position' : Prototype.Browser.IE ? 'absolute' : 'fixed',           
            'padding': '0', 'margin': '0', 'left':'0', 'top':'0',
            'width': vp.width + 'px', 'height': height,'zIndex': '9998'
         });
     var wrapper = new Element('div', { 'id':'mask-wrapper'}).setStyle({ 'margin':'0','border':'0 none','background':'transparent none','padding':'0' });
     [this.bg, this.preloader].each(function(o){ if(!$(o.id)){ wrapper.insert({'top': o}); } });
     if(this.opt.target){
       [this.bg, this.preloader].each(function(d){
          d.setStyle({
            marginTop: '-' + vp.height +'px', position:'relative'
          });
          if(!$(wrapper.id)){ elem.insert({'after':wrapper}); }
       });
     }else{
         if(!$(wrapper.id)){ $(document.body).insert({ 'bottom': wrapper }); }
     }
	 if(this.opt.innerStyles){ $(this.msg).setStyle(this.opt.innerStyles); }
         this.preloader.insert({ 'bottom':this.msg });
	 this.msg.setStyle({ 'textAlign':'center', 'position':'relative', 'float':'none','margin':'auto' });
    },
    show: function(callback){
        if(!$('mask-wrapper')){ this._createMask(); } 
        this._toggle('show',callback);
       try{ this.msg.setStyle({ 'top': Math.round((this.parent.getHeight()/2) - (this.msg.getHeight()/2)) + 'px' }); }catch(e){}
    },
    hide: function(callback){
        this._toggle('hide',callback);
    },
    _toggle: function(vis, callback){
        $('mask-wrapper')[vis]();
        if(typeof(callback)=='function'){ callback.call(); }
    }
});

function mapEffect(){
if($$("area")){
  if($("map")){ 
      var href = new Array();
      var defaultMapSrc = $("map").readAttribute("src");
      /// synchronize to right menu
       var link = $$(".category-sub-menu a");
           link.each(function(a){ 
               href[a.rel] = a.href;
               if(a.rel != "map20013"){ 
                a.observe('mouseover', function(e){
                  hover(this.rel); 
                });
                a.observe('mouseout', function(e){
                  hover();
                });
               }
           });
      // end of synchronize to right menu
   }
   var hover = function(src){
        if(src) { $("map").writeAttribute("src", "/spaceworld/frontend/graphics/map/"+src+".gif"); }else{ $("map").writeAttribute("src", defaultMapSrc) }
   }
   $$("area").each(function(a){
   a.setAttribute("href", href[a.id]);
    $("map20013").setAttribute("href", href['map20013']);
   a.observe('mouseover', function(e){      
       if(this.id){  hover(this.id);  }
   });
   a.observe('mouseout', function(e){
       hover();
   });
      if(a.id){
	new Insertion.Bottom("county-map", '<img src="/spaceworld/frontend/graphics/map/'+a.id+'.gif">')
      }
   });
  
}
}