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 kampanjkod får du tillgång till speciella rabatter och erbjudanden. För att aktivera kampanjkoden fyller du i koden i rutan och trycker på \"ok\". Kampanjkod kan förekomma i samband med speciellt riktade evenemang och 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"] = "Om du bor i lägenhet, eller av annan anledning har ett smalt brevinkast (mindre än 3 cm högt), kan du genom att klicka i rutan välja tjänsten \"paketera om mina linser\" och få dina kontaktlinser ompaketerade och skickade direkt hem till dig i en tunn specialförpackning. Brevinkast varierar dock kraftigt i storlek och vi kan därför inte garantera att vår förpackning går in i alla brevinkast. Ompaketering sker inte vid beställning av linsvätska.";
_helpers["rememberme"] = "Klicka i rutan så blir du automatiskt inloggad nästa gång du besöker synfel.se. – och behöver då inte fylla i din e-postadress och lösenord för att komma åt ditt medlemskonto. För mer info se Frågor & 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"] = "Gemensamt för alla linser:
BC/Radie = Baskurva
DIA = Diameter
Sfär/SPH/PWR = Styrka
Visus = Ej applicerbart, ignorera
Endast för toriska linser:
Cyl = Cylinder (t ex \"-0.75\")
Ax = Axel (t ex "90")
Endast för progressiva linser:
Add/Addition = Extra styrka (t ex \"+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);