﻿var t = "Ange ditt personnummer";

$(function() {
	// Confirm link
	$(".confirm").bind("click", function() {
		return confirm("Är du säker?");
	});
	
	// New window link
	$("a.newwin").bind("click", function(e) {
		if (!e.ctrlKey) {
			window.open(this.href);
			return false;
		}
		return true;
	});
	
	// Form validation
	$("form.validate").bind("submit", function() {
		var validForm = true;
		$("input.validate", this).each(function(idx, el) {
			el = $(el);
			var validElement = true;
			
			if (el.hasClass("mandatory") && ((el.is('[type=checkbox]') && !el.is(':checked')) || !el.attr("value")))
				validElement = false;
			if (validElement && el.hasClass("email") && !validateEmail(el.attr("value")))
				validElement = false;
			if (validElement && el.hasClass("integer") && !validateInteger(el.attr("value")))
				validElement = false;
			if (validElement && el.hasClass("ipAddress") && !validateIPAddress(el.attr("value")))
				validElement = false;
			if (validElement && el.hasClass("module10") && !validateModule10(el.attr("value")))
				validElement = false;
			
			if (validElement) {
				el.removeClass("invalid");
			} else {
				el.addClass("invalid");
				validForm = false;
			}
		});
		return validForm;
	});
		
	// Other stuff
	
	var iptUserName = $("#login-username");
	iptUserName.bind("focus", function() {
		if (this.value == t)
			this.value = "";
	});
	iptUserName.bind("blur", function() {
		if (this.value == "")
			this.value = t;
	});
	
	$("#login-passwordDialog").dialog({
		closeText: "Stäng",
		width: 600,
		autoOpen: false,
		modal: true
	});
	
	$("#login-newPasswordDialog").dialog({
		closeText: "Stäng",
		width: 600,
		autoOpen: false,
		modal: true
	});	
	
	$("#login-password").val("");
	
	$("#login-form, #login-passwordDialog").bind("submit", function() {
		var pnum = stripNonNumerics(iptUserName.val());
		
		if (pnum.length == 12 && pnum.charAt(0) == "1" && pnum.charAt(1) == "9")
			pnum = pnum.substr(2);
		
		if (pnum.length == 10) {
			var h = new Handler();
			var r = h.loginCustomer(pnum, $("#login-password").val());
			if (r == LoginCustomerResult.PasswordRequired) {
				$("#login-passwordDialog").dialog("open");
			}
			if (r == LoginCustomerResult.Success) {
				window.location = document.getElementById("login-form").action;
			}
			if (r == LoginCustomerResult.Failed) {
				alert("Inloggning misslyckades");
			}
		}
		return false;
	});

	$("#login-newPassword").bind("click", function() {
		$("#login-newPasswordDialog button").bind("click", function() {
			$("#login-newPasswordDialog").dialog("close");
			return false;
		});	
		$("#login-passwordDialog").dialog("close");
		$("#login-newPasswordDialog").dialog("open");
		var h = new Handler();
		h.resetPassword(iptUserName.val());
		return false;
	});
});

function stripNonNumerics(source) {
	var numericChars = '1234567890';
	var result = "";
	for (var i = 0; i < source.length; i++) {
		var c = source.charAt(i);
		if (numericChars.indexOf(c) >= 0)
			result += c;
	}
	return result;
}


function validateEmail(source) {
	if (!source)
		return true;	

	var validCharsPostAt = 'abcdefghijklmnopqrstuvwxyz0123456789-';
	var validChars = validCharsPostAt + "!£#$%&'*+-/=?^_`{|}~";
	var foundAt = false;
	var foundDotAfterAt = false;
	var lastc = '';
	var email = source.toLowerCase();

	for (var i = 0; i < email.length; i++) {
		var c = email.charAt(i); // Indexer does not work in IE!
		if (c == '@') {
			if (foundAt || lastc == '.' || i == 0)
				return false;
			foundAt = true;
			validChars = validCharsPostAt;
		} else if (c == '.') {
			if (lastc == '.' || lastc == '@' || i == 0 || i == email.length - 1)
				return false;
			foundDotAfterAt = foundAt;
		} else if (validChars.indexOf(c) < 0) {
			return false;
		}
		lastc = c;
	}
	
	if (!(foundAt && foundDotAfterAt))
		return false;
	
	return true;
}

function validateModule10(source) {
	if (!validateInteger(source))
		return false;
	var sum = 0;
	for (var i = source.length - 1; i >= 0; i--) {
		var val = source.substring(i, i + 1) * (i % 2 - 2) * -1;
		if (val > 9)
			val -= 9;
		sum += val;
	}
	return sum % 10 == 0;
}

function validateIPAddress(source) {
	var parts = source.split('.');
	if (parts.length != 4)
		return false;
	for (var i = 0; i < 4; i++) {
		if (!validateInteger(parts[i]))
			return false;
		if (parseInt(parts[i]) > 255)
			return false;
	}
	return true;
}

function validateInteger(source) {
	var numericChars = '1234567890';
	for (var i = 0; i < source.length; i++) {
		if (numericChars.indexOf(source.charAt(i)) < 0)
			return false;
	}
	return true;
}

function formatNumber(source) {
	var result = "";
	for (var i = source.length - 1; i >= 0; i--) {
		result = source.charAt(i) + result;
		if ((source.length - i) % 3 == 0) {
			result = " " + result;
		}
	}
	return result;
}


