
var arrInitFunctions = new Array();

/* Init Page */
function initPage() {
	extInitPage();
}

/* Extended initialize */
function extInitPage() {
	for (var i = 0; i < arrInitFunctions.length; i++) {
		arrInitFunctions[i]();
	}
}

/* Scroll to result div */
function scrollToResultDiv() {
	getObjectById("lnkResult").scrollIntoView();
}

/* Get object by id */
function getObjectById(sValue) {
	return (document.getElementById) ? document.getElementById(sValue) : document.all(sValue);
}

/* Validates swedish SSN, returns true if correct */
function CheckValidSSNSweden(ssn) {
	var strNo = new String(ssn.value);
	strNo = strNo.replace(/-/gi,"");
	var strNoDash = strNo;
	var Len = new Number(strNo.length - 1);
	var nCS = new Number(Math.abs(strNo.substring(strNo.length -1, strNo.length)));
	var nM = new Number(1);
	var nS = new Number(0);
	var sS = new String();
	var nSum = new Number(0);
	strNo = strNo.substring(0, strNo.length - 1);
		for (i = Len; i >= 1; i--) {
			(nM == 1) ? nM = 2: nM = 1;
			nS = nM * Math.abs(strNo.substring(i - 1,i));
			if (nS > 9) {
				sS = nS.toString();
				nS = (Math.abs(sS.substring(1,2)) + Math.abs(sS.substring(0,1)));
			}
			nSum = nSum + nS;
		}
	 if (((nSum + nCS) % 10) != 0)
	{
	  ssn.value = "";
	}
	else
	{
	    ssn.value = strNoDash;
	}
}

function RemoveDash(stelephone)
{
	var strNo = new String(stelephone.value);
	strNo = strNo.replace(/-/gi,"");
	strNo = strNo.replace(/ /gi,"");
  stelephone.value = strNo;
}

function CheckValidRegNr(txtRegNr)
{
	txtRegNr.value = txtRegNr.value.toUpperCase();
	validateWithPattern(txtRegNr, "^[A-Z]{3}[0-9]{3}$");
}

/********************************************/
// argument retyping
var arrConnectedArgs = new Array();
function connectedArgs(sSourceArgID, oTargetArgField) {
	this.sourceArgID = sSourceArgID;
	this.targetArgField = oTargetArgField;
}

function addConnectedArgs(sSourceArgID, oTargetArgField) {
	var bFound;
	bFound = false;
	for (var iCount=0; iCount<arrConnectedArgs.length; iCount++) {
		oConnectedArgs = arrConnectedArgs[iCount];
		if (oConnectedArgs.sourceArgID == sSourceArgID) {
			oConnectedArgs.targetArgField = oTargetArgField;
			bFound = true;
			iCount = arrConnectedArgs.length;
		}
	}
	if (!bFound) {arrConnectedArgs[arrConnectedArgs.length] = new connectedArgs(sSourceArgID, oTargetArgField);}
}

function removeConnectedArgs(sSourceArgID) {
	for (var iCount=0; iCount<arrConnectedArgs.length; iCount++) {
		oConnectedArgs = arrConnectedArgs[iCount];
		if (oConnectedArgs.sourceArgID == sSourceArgID) {
			oConnectedArgs.targetArgField = null;
		}
	}
}


function checkArgConnection(sSourceArgID, sSourceArgValue, sTargetArgID)
{
	var oTargetArgField, oTmp, iCount;
	oTargetArgField = null;
	for (var iCount = 0; iCount<document.getElementsByTagName('INPUT').length; iCount++)
	{
		oTmp = document.getElementsByTagName('INPUT').item(iCount);
		if (oTmp.attributes.getNamedItem('argumentID') != null)
		{
			if (oTmp.attributes.getNamedItem('argumentID').value == sTargetArgID)
			{
				oTargetArgField = oTmp;
				iCount=document.getElementsByTagName('INPUT').length
			}
		}
	}
	if (oTargetArgField != null)
	{
		if (oTargetArgField.value == sSourceArgValue || oTargetArgField.value == '')
		{
			addConnectedArgs(sSourceArgID, oTargetArgField);
		} else
		{
			removeConnectedArgs(sSourceArgID);
		}
	}
}

function copyConnectedArg(sSourceArgID, sSourceArgValue)
{
	for (var iCount=0; iCount<arrConnectedArgs.length; iCount++) {
		oConnectedArgs = arrConnectedArgs[iCount];
		if (oConnectedArgs.sourceArgID == sSourceArgID && oConnectedArgs.targetArgField != null) {
			oConnectedArgs.targetArgField.value = sSourceArgValue;
			iCount = arrConnectedArgs.length;
		}
	}
}


/* Onkeypressevent, only accepts numeric chars and specified key */
function checkCharIsNumeric(addKey) {
	if (addKey == "" || addKey == null) addKey = "1";
	if ((event.keyCode > 47 && event.keyCode < 58) || event.keyCode == addKey.charCodeAt(0) || event.keyCode == 13) {
	} else {
		event.returnValue = false;
	}
}

/* Onblurevent, check if field is numeric */
function checkFieldIsNumeric(fo, addKey, bFormatNum) {
	if (!fo.readOnly) {
		if (bFormatNum == null || bFormatNum == "") bFormatNum = false;
		var sText = fo.value.replace(/ /gi, "");
			if (addKey != "" && addKey != null) {
			var re = new RegExp(addKey);
			sText = sText.replace(re, "");
			}
		if (isNaN(sText)) {
			fo.value = "";
		} else {
			if (bFormatNum) fo.value = formatNumericField(fo.value);
		}
	}
}

/* OnBlur event, validates input with pattern */
function validateWithPattern(fo, sPattern) {
	var regPattern = new RegExp(sPattern, "g");
	if (fo.value.match(regPattern) == null) {
		fo.value = "";
	}
}

/* Format numeric values, disabled */
function formatNumericField(sText) {
	sText = sText.replace(/ /gi, "");
	var lCount = sText.length;
	var sOut = "";
	var z = 0;
	for (var i = lCount - 1; i >= 0; i--) {
		if (sText.charAt(i) != ",") {
			if (z == 3) { sOut = sText.charAt(i) + " " + sOut; z = 0; }
			else { sOut = sText.charAt(i) + sOut; }
			z++;
		} else {
			sOut = sText.charAt(i) + sOut.replace(" ", "");
			z = 0;
		}
	}
	return sOut;
}

/* Check key and adds '-' */
function formatSSNValid(el, oWin){
	if ((oWin.event.keyCode < 48 || oWin.event.keyCode > 57 ) ) {
		oWin.event.returnValue = false;
	} else {
		switch (el.value.length) {
			case 5 : {
				el.value+= +(oWin.event.keyCode- 48) + "-";
				oWin.event.returnValue= false;
				break;
			}
			case 6 : {
				el.value += "-";
				break;
			}
			case 12 : {
				oWin.event.returnValue= false;
				break;
			}
		}
	}
}


/********************************************/
/* Date validation                          */

/* Onblurevent, check if field is numeric */
function checkDateIsValid(fo) {
	var sText = fo.value;
	sText = sText.replace(/-/gi, "");
	sText = validateDate(sText);
		if (isNaN(sText) || sText.length != 8) {
		fo.value = "";
		} else {
		fo.value = sText.substring(0, 4) + "-" + sText.substring(4, 6) + "-" + sText.substring(6, 8);
		}
}

/* Validate date is correct */
function validateDate(sInDate) {
	if (sInDate != "") {
	var sDate, sYear, sMonth, nDay;
	sDate = sInDate;
	sDate = sDate.replace(/-/gi, "");
		if(sDate.length < 8 || sDate.length > 8) {
		sInDate = "";
		} else {
		var sYear = sDate.substr(0, 4);
		sMonth = sDate.substr(4, 2);
		nDay = parseInt(sDate.substr(6, 2), 10);
			if (parseInt(sMonth, 10) > 0 && parseInt(sMonth, 10) <= 12) {
				if (sMonth == "01" || sMonth == "03" ||sMonth == "05" ||sMonth == "07" ||sMonth == "08" ||sMonth == "10" ||sMonth == "12") {
					if (nDay > 31 || nDay == 0) sInDate = ""; 
				} else if (sMonth == "02") {
					if (isLeapYear(sYear)) {
						if (nDay > 29 || nDay == 0) sInDate = ""; 
					} else {
						if (nDay > 28 || nDay == 0) sInDate = ""; 
					}
				} else {
					if (nDay > 30 || nDay == 0) sInDate = ""; 
				}
			} else {
			sInDate = "";
			}
		}
	} else {
	sInDate = "";
	}
	return sInDate;
}

/* Check if leapyear */
function isLeapYear(sYear) {
	if (sYear.length<4) {
	return false;
	} else {
		if (sYear.substr(2, 2) == "00") {
			return (parseInt(sYear.substr(1, 1), 10) % 4 == 0) ? true : false;
		} else if (parseInt(sYear.substr(2, 2), 10) % 4 == 0)
			return true;
		else
			return false;
	}
}
/* End Date validation                      */
/********************************************/

function checkMaxLength(oFld, iMaxLen, sFieldName) 
{
	if (oFld.value.length > iMaxLen)
	{
		oFld.value = oFld.value.slice(0, iMaxLen);
		alert(sFieldName + ' (max ' + iMaxLen + ' tecken)');
	}
}

/* Expand or contract fieldset */
function switchInfo(oSender, sDiv) {
	var oDiv = getObjectById(sDiv);
	if (oDiv.style.display == "none") {
		oDiv.style.display = "block";
		oSender.firstChild.src = "images/collapse-2.gif";
	} else {
		oDiv.style.display = "none";
		oSender.firstChild.src = "images/collapse-1.gif";
	}
}

/* Show/Hide subarguments */
function showSubArguments(sSender, sObject) {
	var oSender = getObjectById(sSender);
	var oDiv = getObjectById(sObject);
	oDiv.style.display = (oSender.checked) ? "block" : "none" ;
}

/* Onclick, insure */
function insureThisCompany(lInsID) {
	if (lInsID != "" && !isNaN(lInsID)) {
		document.forms[0]["txtInsuranceCompanyID"].value = lInsID;
		document.forms[0]["btnInsure"].click();
	}
}

/********************************************/
/* Required fields validation               */

var arrRequiredFields = new Array();
var arrFDepRequiredFields = new Array();

/* Constructor for requiredField-object */
function requiredField(sName, sErrorMess, sParentObjectID) {
	this.name = sName;
	this.sError = sErrorMess;
	this.parent = sParentObjectID;
}

/* Adds a formfield to requiredFields */
function addRequiredField(sName, sError, sParentObjectID) {
	arrRequiredFields[arrRequiredFields.length] = new requiredField(sName, sError, sParentObjectID);
}

/* Removes a formfield from requiredFields */
function removeRequiredField(sName) {
	for (var i = 0; i < arrRequiredFields.length; i++) {
		if (arrRequiredFields[i].name == sName) {
			arrRequiredFields[i].sError = "";
		}
	}
}

/* Constructor for fieldDependentRequiredField-object */
function fieldDependentRequiredField(sSourceFieldName, sSourceFieldCompareType, sSourceFieldValue, sName, sCompareType, sValue, sErrorMess, sParentObjectID) {
  this.sourceFieldName = sSourceFieldName;
  this.sourceFieldCompareType = sSourceFieldCompareType;
  this.sourceFieldValue = sSourceFieldValue;
	this.name = sName;
	this.compareType = sCompareType;
	this.vale = sValue;
	this.sError = sErrorMess;
	this.parent = sParentObjectID;
  this.errorMess = errorMess;
}
function errorMess(fo) {
	var sErrorMess = "";
  var bSourceFieldCondition = false;
	var bTargetFieldCondition = false;
	switch(this.sourceFieldCompareType) {
		case "=" :
			bSourceFieldCondition = (document.getElementById(this.sourceFieldName).value == this.sourceFieldValue)
			break;
		case "!=" :
			bSourceFieldCondition = (document.getElementById(this.sourceFieldName).value != this.sourceFieldValue)
			break;
	}
	switch(this.compareType) {
		case "=" :
			bTargetFieldCondition = (document.getElementById(this.name).value == this.vale)
			break;
		case "!=" :
			bTargetFieldCondition = (document.getElementById(this.name).value != this.vale)
			break;
	}
	if (bSourceFieldCondition && bTargetFieldCondition) {
		if (this.parent != "") {
			if (fo[this.parent].checked) sErrorMess = this.sError + "\n";
		} else {
			sErrorMess = this.sError + "\n";
		}
	}
	return sErrorMess;
}

function addFDepRequiredField(sSourceFieldName, sSourceFieldCompareType, sSourceFieldValue, sName, sCompareType, sValue, sError, sParentObjectID) {
	arrFDepRequiredFields[arrFDepRequiredFields.length] = new fieldDependentRequiredField(sSourceFieldName, sSourceFieldCompareType, sSourceFieldValue, sName, sCompareType, sValue, sError, sParentObjectID);
}

function removeFDepRequiredField(sName) {
	for (var i = 0; i < arrFDepRequiredFields.length; i++) {
		if (arrFDepRequiredFields[i].name == sName) {
			arrFDepRequiredFields[i].sError = "";
		}
	}
}

/* Validate before post */
function validateBeforePost(fo) {
	var sErrorMess = "";
	for (var i = 0; i < arrRequiredFields.length; i++) {
		/*
		if (fo[arrRequiredFields[i].name].value == "") {
			if (arrRequiredFields[i].parent != "") {
				if (fo[arrRequiredFields[i].parent].checked) sErrorMess += arrRequiredFields[i].sError + "\n";
			} else {
				sErrorMess += arrRequiredFields[i].sError + "\n";
			}
		}
		*/
		
		if (document.getElementById(arrRequiredFields[i].name).value == "") {
			if (arrRequiredFields[i].parent != "") {
				if (fo[arrRequiredFields[i].parent].checked) sErrorMess += arrRequiredFields[i].sError + "\n";
			} else {
				sErrorMess += arrRequiredFields[i].sError + "\n";
			}
		}
	}
  //cross field validation
	for (var i = 0; i < arrFDepRequiredFields.length; i++) {
		sErrorMess += arrFDepRequiredFields[i].errorMess(fo);
	}
	if (sErrorMess != "") {
		alert(sErrorMess);
		return false;
	}	else {
		//setWaitState();
		return true;
	}
}

/* End Required field validation            */
/********************************************/

function setWaitState() {
	getObjectById("oWaitDiv").style.display = "block";
	getObjectById("oFormDiv").style.display = "none";
}

/* Shows PrototypeWindows popup using Aculo effects*/
function showPopup(nTitle, nText){
	var win = new Window({className: "alphacube", width:320, height:200, zIndex: 100, resizable: true, title: nTitle , showEffect:Effect.BlindDown, hideEffect: Effect.SwitchOff, draggable:true, wiredDrag: true, destroyOnClose: true,showEffectOptions: {duration:0.011}})
	win.getContent().innerHTML= "<div style='padding:10px'>" + nText + "</div>"
	win.show();   
}

function showPage(nTitle, nLink){
	var win = new Window({className: "alphacube", title: nTitle, width:400, height:300, url: nLink, showEffectOptions: {duration:0.75}})
	win.show();   
}