var urlSafe = function(txt) { return escape(txt).replace("+", "%2B"); } $(document).ready(function() { var sslEnabled = document.location.href.indexOf("https://")==0; // Quick buy menu var quickBuyForm = $("#quickbuy-frm"); quickBuyForm.find("input[type=submit]").hide(); quickBuyForm.find("select").change(function() { this.form.submit(); }); // Jajja statistics if(!sslEnabled) { var img = new Image(); img.src = "http://wp.statistik.jajja.com/wp_stat.php?pid=98459001&page=" + escape(document.location.href) + "&referer=" + escape(document.referrer); } initHelpers(); }); var _helpers = {}; var _helperTimeout = null; var _helperElement = null; var _helperIFrameElement = null; function initHelpers() { _helperElement = $('
'); _helperIFrameElement = $(''); $(document.body).append(_helperIFrameElement, _helperElement); _helpers["campaign"] = "Med en kampanjekode får du tilgang til spesielle rabatter og tilbud. For å aktivere kampanjekoden fyller du i koden i feltet og trykker på \"OK\". Kampanjekoden kan forekomme i forbindelse med spesielle arrangement og kampanjer."; _helpers["password"] = "Skriv in ett lösenord (valfritt) så skapar synfel.se ett privat medlemskonto till dig. Via ditt medlemskonto erbjuds du ett antal tjänster för att underlätta dina framtida inköp. För mer info se \"Frågor & Svar\"."; _helpers["repackage"] = "Bor du i en leilighet, eller av en annen anledning har et smalt brevinnkast (mindre enn 3 cm i høyde), kan du velge tjenesten \"kompakt forsendelse\" og få dine kontaktlinser sendt direkte hjem til deg i en tynn spesialforpakning. Størrelsen på brevinnkast varierer mye og vi kan derfor ikke garantere at vår tynne spesialforsendelse går inn i alle brevinnkast. Vår kompakte spesialforpakning skjer ikke ved bestilling av linsevæsker."; _helpers["rememberme"] = "Klikk i feltet så blir du automatisk innlogget neste gang du besøker lensstore.no – da behøver du ikke fylle i din e-postadresse og passord for å få tilgang til din medlemskonto.
For mer informasjon – se \"Spørsmål og svar\""; _helpers["crossell"] = "Genom \"rekommenderade produkter\" kan du lätt se vilka produkter som passar ihop med de du har valt!"; _helpers["image"] = ""; _helpers["subscription"] = "Välj den smarta lösningen linsabonnemang, så ser vi till att du aldrig står utan linser! Du har alltid full kontroll över ditt abonnemang! Du kan när som helst via ditt medlemskonto ändra leveransintervall, pausa för viss tid/antal leveranser och/eller avsluta ditt linsabonnemang.

Du bestämmer själv intervall för dina framtida leveranser. Du kan antingen välja vårt rekommenderade intervall eller själv välja ett eget leveransintervall. Vi meddelar dig i god tid via mail innan varje ny leverans."; _helpers["subscriptionNextDelivery"] = "Här visas din nästa/kommande linsleverans."; _helpers["subscriptionInterval"] = "Här visas antal dagar mellan varje ny leverans. Du kan enkelt ändra leveransintervall under kontrollpanelen."; _helpers["subscriptionDeliveryCount"] = "Här visas totalt antal leveranser som utförts."; _helpers["subscriptionpause"] = "Om du inte behöver linser på ett tag eller är bortrest etc. kan du här enkelt själv pausa visst antal leveranser. Exempel: Om du idag har 30 dagars leveransintervall och väljer att hoppa över/pausa 2 leveranser kommer systemet att pausas under 60 dagar. Fyll i antal leveranser som du önskar pausa ditt abonnemang med och tryckt på knappen ”Spara ändringar”. Nytt/aktuellt leveransdatum visas under rubriken ”Nästa leverans”."; _helpers["subscriptionviewinterval"] = "Här kan du själv enkelt ändra leveransintervall för dina linsleveranser. Exempel: Om du idag har 30 dagar/1 månad mellan varje leverans och ändrar till 60 dagar får du nya linser var 60 dag, dvs. var annan månad istället. Fyll i antal dagar som du önskar mellan varje ny leverans och tryck på knappen "Spara ändringar". Nytt/aktuellt leveransdatum visas under rubriken ”Nästa leverans”."; _helpers["recept"] = "Felles for alle linser:
BC/Radius
= Basiskurve
DIA = Diameter
Sfære/SPH/PWR = Styrka
Visus = Ikke mulig, ignorer

Bare for toriske linser:
Cyl/Syl
= Sylinder (for eksempel \"-0.75\")
Ax/Aks = Aksel (for eksempel "90")

Bare for progressive linser:
Add/Addition
= Ekstra styrke (for eksempel \"+2.00\" el. \"Low\")"; var helperLinks = $("a.helper"); helperLinks.addClass("helptip"); helperLinks.hover( function(){showHelper(this);}, function(){hideHelper( );} ); _helperElement.hover(function(){showHelper();},function(){hideHelper();}); helperLinks.click(function(){return false;}); } function showHelper(helperLink) { clearTimeout(_helperTimeout); if(!helperLink) return; var helpTitle = helperLink.href.match(/\/helper_descriptions.asp\?helpid=(.*?)$/)[1]; var helpText = _helpers[helpTitle]; _helperElement.html(helpText); var pos = $(helperLink).offset(); var win = $(window); _helperElement.show(); _helperIFrameElement.show(); var _minMax = {min: { left: win.scrollLeft(), top: win.scrollTop() }, max: { left: win.scrollLeft()+win.width()-(_helperElement.width()+16), top: win.scrollTop()+win.height()-(_helperElement.height()+16) }}; var _targetPos = {left: pos.left+$(helperLink).width(), top: pos.top}; _helperElement[0].style.left = _helperIFrameElement[0].style.left = Math.min(_minMax.max.left, _targetPos.left+16) + "px"; _helperElement[0].style.top = _helperIFrameElement[0].style.top = Math.min(_minMax.max.top, _targetPos.top) + "px"; _helperIFrameElement[0].style.width = $(_helperElement).width() + "px"; _helperIFrameElement[0].style.height = $(_helperElement).height() + "px"; } function hideHelper() { clearTimeout(_helperTimeout); _helperTimeout = setTimeout(function() { _helperElement.hide(); _helperIFrameElement.hide(); }, 300); } /* Form Validation */ (function($) { // Formvalidator function FormValidator() { this.defaults = { onvalidated: null, onsucess: null, onfail: null }; this.validationmethods = { "nonempty": function(field) { return field.value.length>0; }, "checked": function(field) { return field.checked; }, "email": function(field) { return field.value.search(/^\b[A-Z0-9._%+-]+@[A-Z0-9\.-]+\.[A-Z]{2,}\b$/i)==0; }, "ssn": function(field) { var i, n, sum = 0, l; var validate = /^\d{2}?(\d{6})-?(\d{4})$/; if(!field.value.search(validate)) return false; num = field.value.toString().replace(validate,"$1$2"); l = num.length; if(l==10) l--; for(i = l - 1; i >= 0; i--) { n = parseInt(num.charAt(i)) * (2 - ((l + 3 - i) % 2)); sum += parseInt(Math.floor(n / 10) + (n % 10)); } return ((10 - (sum % 10)) % 10) == num[num.length-1]; } }; } $.extend(FormValidator.prototype, { addValidator: function(name, method) { this.validationmethods[name] = method; }, _validateForm: function(form, _settings) { var processedFields = {}; var errors = []; var settings = $.extend({}, $.formvalidator.defaults, _settings||{}); $(form).find("input, select").each(function() { var result = $.fieldvalidator._validateField(this, true, processedFields); if(!result.success) errors.push(result); processedFields[this] = result.success; }); if(errors.length>0) if(settings.onfail) settings.onfail(form, false, errors); else if(settings.onsuccess) settings.onsuccess(form, true, errors); if(settings.onvalidated) settings.onvalidated(form, errors.length==0, errors) return errors.length==0; }, _register: function(validatorInstance) { $(validatorInstance._element).submit(function() { return $.formvalidator._validateForm(validatorInstance._element, validatorInstance._settings ); }); } }); function FormValidatorInstance(element, settings) { this._element = element; this._settings = settings; $.formvalidator._register(this); this.validate = function() { $.formvalidator._validateForm(this._element, this._settings); }; } // Fieldvalidator function FieldValidator() { this.defaults = { validators: [], failMessage: "Validation failed.", region: "", onsuccess: null, onfail: null }; this.validators = $.formvalidator.validationmethods; } $.extend(FieldValidator.prototype, { getValidator: function(field) { return $(field).data("validation"); }, _validateField: function(field, allowScolding, stateLog) { var _errorElement = $("#jquery-valid-" + $.data(field)) var result = {success: true, field: field, region: null, message: ""}; var validationSet = $(field).data("validation"); if(!validationSet) return result; var settings = $.extend({}, $.fieldvalidator.defaults, validationSet[0]._settings||{}); if(allowScolding && settings.mustValidate) { var failed = false; for(var i=0,item; item = settings.mustValidate[i]; ++i) { var state = stateLog?stateLog[item]:null; if(state==null) state = this._validateField(item, false, stateLog).success; if(!state) failed = true; } if(failed) return result; } for(var i=0, mi=validationSet.length; i"); _errorElement.hover( function() { $(field).addClass("invalid-error"); }, function() { $(field).removeClass("invalid-error"); } ); _errorElement.click( function() { field.focus(); } ); $(typeof(settings.region)=="function"?settings.region.call(field):settings.region).append(_errorElement); } } if(allowScolding && _errorElement) { _errorElement.addClass("active-validation-error"); _errorElement.html(result.message); } if(settings.onfail) settings.onfail.call(field, allowScolding, validationName); if(settings.onvalidate) settings.onvalidate.call(field, allowScolding, success); return result; }; if(_errorElement) { _errorElement.removeClass("active-validation-error"); _errorElement.html(""); } if(settings.onsuccess) settings.onsuccess.call(field, allowScolding); if(settings.onvalidate) settings.onvalidate.call(field, allowScolding, success); return result; }, _register: function(validatorInstance) { if(!$(validatorInstance._element).data("bound-field-validation")) { $(validatorInstance._element).change(function() { $.fieldvalidator._validateField(validatorInstance._element, true); }); $(validatorInstance._element).keyup(function(e) { $.fieldvalidator._validateField(validatorInstance._element, false); }); $(validatorInstance._element).data("bound-field-validation", true) } } }); function FieldValidatorInstance(element, settings, validator) { this._element = element; this._settings = settings; this._validator = validator; $.fieldvalidator._register(this); } // Init field/formvalidators $.formvalidator = new FormValidator(); $.fieldvalidator = new FieldValidator(); $.fn.attachValidator = function(validator, settings) { this.each(function() { switch(this.nodeName) { case "FORM": settings = validator; var valid = $(this).data("validation")||[]; valid.push(new FormValidatorInstance(this, settings)); $(this).data("validation", valid); break; default: var _settings = settings||{}; var validators = _settings.validators||(typeof(validator)=="string"?[validator]:validator); _settings.validators = null; var valid = $(this).data("validation")||[]; for(var i=0, mi=validators.length; i0) return; valid.push(new FieldValidatorInstance(this, _settings, validators[i])); }; $(this).data("validation", valid); }; }); return this; }; })(jQuery);