/**
 * Diverse javascriptfunksjoner, spesiellt laget for siten
 * I tillegg bør filen functions-standard.js inkluderes, den inneholder endel standardfunksjoner
 *
 * @author Anders S. Oefsdahl <anders at apt no>
 * @version 1.0.0
 */

/**
 * Variabel
 * @var	type
 */

function calculateForm(objForm,dblPostageLimit,dblUpperPostage,dblLowerPostage,dblBookWeightLimitForeign,dblPostageForeignLower,dblPostageForeignUpper,strCountryCode,intDelivery){
	var dblNumber = 0;
	var dblPrice = 0
	var dblSubTotal = 0;
	var dblTotal = 0;
	var dblWeight = 0;
	var dblPostage = 0;
	for(var I=0;I<objForm.elements.length;){
		if(objForm.elements[I].name && objForm.elements[I].name != 'total' && objForm.elements[I].name != 'postage'){
			arrName = objForm.elements[I].name.split('_');
			switch(arrName[0]){
				case 'number':
					dblNumber = getNumber(objForm.elements[I++].value);
					dblNumber = Math.ceil(dblNumber);
					dblWeight += (objForm.elements[I++].value*dblNumber);
					dblPrice = getNumber(objForm.elements[I++].value);
					dblSubTotal = dblNumber*dblPrice;
					dblTotal += dblSubTotal;
					objForm.elements[I++].value = getNok(dblSubTotal);
					break;
				default:
					I++;
			}
		}else{
			I++;
		}
	}

	if(intDelivery == 1){
		if(strCountryCode == 'NO'){
			dblPostage = (dblTotal > dblPostageLimit)?dblUpperPostage:dblLowerPostage;
		}else{
			dblPostage = (dblWeight > dblBookWeightLimitForeign)?dblPostageForeignUpper:dblPostageForeignLower;
		}
	}

	dblTotal += dblPostage;
	objForm.elements['postage'].value = getNok(dblPostage);
	objForm.elements['total'].value = getNok(dblTotal);
}

function deleteElement(strURL,strMsg){
	if(confirm(strMsg)){
		location.href = strURL;
	}
}

function newWindow(subWindow,page,width,height,resizable,scrollbars,menubar){
	var mypage = page;
	var skjermbredde = screen.availWidth;
	var skjermhoyde = screen.availHeight;
	var winWidth = width;
	var winHeight = height;
	var koordX = (skjermbredde/2) - (winWidth/2);
	var koordY = (skjermhoyde/2) - (winHeight/2);
	subWindow = window.open(mypage, 'page', 'width='+winWidth+' ,height='+winHeight+',resizable='+resizable+',screenX=' + koordX + ',screenY=' + koordY + ',scrollbars='+scrollbars + ',menubar=' + menubar);
	subWindow.moveTo(koordX,koordY);
}

function showBookmarkText(strType,intBookID,intBookmarkID){
	var objElement = document.getElementById('text_'+strType+'_'+intBookID+'_'+intBookmarkID);
	objElement.className = 'visible';
}

function hideBookmarkText(strType,intBookID,intBookmarkID){
	var objElement = document.getElementById('text_'+strType+'_'+intBookID+'_'+intBookmarkID);
	objElement.className = 'hidden';
}

function showHand(objElement){
	objElement.style.cursor = 'hand';
}

/**
 * Validerer et KID-nummer med modulus 10
 *
 * Funksjonen sjekker kun om tallet er i modulus 10 og ikke om de ulike delene av tallet stemmer med databasen.
 * Funksjonen krever at strenglengden er 15 lang.
 *
 * @access	public
 * @since	20060913
 * @param	string	strKID	KID-nummeret som skal sjekkes
 * @return	boolean	sann dersom KID-nummeret er korrekt.
 */
function isValidKID(strKID){
	var strReturn = true;
	var intWeight = 2;
	var strString = '';
	var intSum = 0;
	/* Strenglengden må være 15 lang */
	if(strKID.length == 15){
		/* hvert tall i strengen skal ganges med 1 2 1 2 fra høyre til venstre og produktene legges etter hverandre i en streng */
		for(I=14;I>=0;I--){
			intWeight = ((I%2) == 0)?1:2;
			strString += strKID[I]*intWeight;
		}
		/* Alle enkelttallene i strengen summeres */
		for(I=0;I<strString.length;I++){
			intSum += parseInt(strString[I]);
		}
		/* Tallet er ikke et gyldig KID-nummer dersom ikke summen går opp i en heltalsdivisjon på 10 */
		if((intSum%10) > 0){
			strReturn = false;
		}
	}else if(strKID.length > 15){
		strReturn = false;
	}
	return strReturn;
}

function handleKIDLookupResult( objDOM ){
	var strMessage = 'ugyldig';
	var strCSInvoiceRef = net.getElementTextNS("", "cs_invoiceref", objDOM, 0);
	var strCSCustomerRef = net.getElementTextNS("", "cs_customerref", objDOM, 0);
	var strCSInvoiceDate = net.getElementTextNS("", "cs_invoicedate", objDOM, 0);
	var intCSInvoiceRefIsValid = parseInt(net.getElementTextNS("", "cs_invoiceref_valid", objDOM, 0));
	var intCSCustomerRefIsValid = parseInt(net.getElementTextNS("", "cs_customerref_valid", objDOM, 0));
	var strKID = this.kid.value;

	if (strCSInvoiceRef != "n/a") {
		var strRegExp = /[^0-9]/gi;
		var strInvoiceDate = this.invoicedate.value.replace(strRegExp,'');
		if(strKID.substr(0,2) != strInvoiceDate.substr(6)){
			//strMessage = 'ugyldig dato';
		}else if(!intCSInvoiceRefIsValid){
			//strMessage = 'Ugyldig fakturanummer';
		}else if(!intCSCustomerRefIsValid){
			//strMessage = 'Ugyldig kundenummer';
		}else if(!isValidKID(strKID)){
			//strMessage = 'Ugyldig KID-nummer';
		}else{
			strMessage = 'OK';
			this.invoicedate.disabled = true;
			this.invoiceref.value = strKID.substr(2,6);
			this.customerref.value = strKID.substr(8,6);
			this.button.innerHTML = '<input class="button" type="image" src="/elm/button_utfoert.gif" name="pay" value="Utfør" style="margin-right:4px;" />';
		}
	}

	this.message.innerHTML = strMessage;
}

var objTime;
var objWaitDiv;

function doWait(){
	if(!objWaitDiv){
		objWaitDiv = document.getElementById('payment_wait');
		objWaitDiv.innerHTML = 'behandler<span></span>';
	}

	objWaitDiv.className = 'display';

	if(objWaitDiv.childNodes[1].innerHTML.length > 2){
		objWaitDiv.childNodes[1].innerHTML = '';
	}else{
		objWaitDiv.childNodes[1].innerHTML += '.';
	}

	clearTimeout(objTime);
	objTime = setTimeout("doWait()",400);
}


function changePasswordType(objForm){
	alert(objForm.elements['password'].type);
}

function enableDeliveryAddress(objForm){
	var objFieldSet = document.getElementById('deliveryaddress');
	for(I=0;I<objForm.elements.length;I++){
		if(objForm.elements[I].disabled){
			objForm.elements[I].disabled = false;
			intPositionOfBlank = objForm.elements[I].className.lastIndexOf(' ');
			strClassName = (intPositionOfBlank > 0)?objForm.elements[I].className.slice(0,intPositionOfBlank):'';
			objForm.elements[I].className = strClassName;
		}
	}
	objFieldSet.className = 'deliveryaddress';
}

function disableDeliveryAddress(objForm){
	var objFieldSet = document.getElementById('deliveryaddress');
	for(I=0;I<objForm.elements.length;I++){
		if (objForm.elements[I].name == 'shire') {
			// Ikke fjern mulighet til å velge fylke.
		} else if(objForm.elements[I].type == 'text' || objForm.elements[I].type == 'select-one'){
			objForm.elements[I].value = '';
			objForm.elements[I].disabled = true;
			objForm.elements[I].className += (objForm.elements[I].className.length > 0)?' disabled':'disabled';
		}
	}
	objFieldSet.className = objFieldSet.className+' off';
}

/**
 * Validerer KID-nummer
 *
 * Funksjonen bryter opp kidnummeret og sjekker hver del av det mot databasen
 *
 * @access	public
 * @since	20060913
 * @param	Document	objDocument		Javascript-referanse til dokumentet.
 * @param	integer		intPurchaseID	ID til ordren CS.referansene skal tilegnes.
 * @see		requestAjax()
 */
function validateKID(objDocument,strPurchaseID){
	var objKIDField = objDocument.getElementById('kid');
	var objButton = objDocument.getElementById('button');
	var objCSInvoiceDateField = objDocument.getElementById('cs_invoicedate');
	var strRegExp = /[^0-9]/gi;

	objButton.innerHTML = '';

	objKIDField.value = objKIDField.value.replace(strRegExp,'');
	if(objKIDField.value.length >= 15){
		/* Heneter meldingsfeltet */
		var objMessageField = objDocument.getElementById('kidmessage');

		 /* Henter de gjenværende CS-refersansfeltene */
		var objCSInvoiceRefField = objDocument.getElementById('cs_invoiceref');
		var objCSCustomerRefField = objDocument.getElementById('cs_customerref');

		requestAjax( 'lookupKID', strPurchaseID, objKIDField, objMessageField, objCSInvoiceDateField, objCSInvoiceRefField, objCSCustomerRefField, objButton );
	}else{
		objCSInvoiceDateField.disabled = false;
	}

	return false;
}

function enableFields(objForm){
	for(var I=0;I<objForm.elements.length;I++){
		objForm.elements[I].disabled = false;
	}
}

function unsubscribeBokliv(objElement){
	var objBokliv = objElement.parentNode.parentNode;
	var arrSpans = objBokliv.getElementsByTagName('span');

	objBokliv.text = arrSpans[0];
	objBokliv.store = arrSpans[0].childNodes[1].innerHTML;

	handler = new net.Observer();
	objXmlHttp = new net.XmlHttp();

	handler.bokliv = objBokliv;
	handler.notify = function(response){
		this.bokliv.text.innerHTML = response;
	}

	objXmlHttp.attach(handler);
	objXmlHttp.reqParam("work", 'act.ajax.bokliv.unsubscribe');
	objXmlHttp.load("ret.php");
}

function validateDate(){
	var booReturn = false;
	var strRegExp = /[^0-9]/gi;
	var strDate = this.input.value.replace(strRegExp,'');
	if(strDate.length == 8){
		var intDay = parseInt(Number(strDate.substring(0,2)));
		var intMonth = parseInt(Number(strDate.substring(2,4)))-1;
		var intYear = parseInt(Number(strDate.substring(4)));
		var objDate = new Date(intYear,intMonth,intDay);
		if(objDate){
			var objNow = new Date();
			if(objDate.getFullYear() <= objNow.getFullYear()){
				booReturn = true;
			}
		}
	}
	return booReturn;
}

function populateSelect(objSelect,strTargetName){
	var intID = objSelect.options[objSelect.selectedIndex].value;
	var objTarget = document.getElementById(strTargetName);

	handler = new net.Observer();
	handler.target = objTarget;
	handler.notify = observeSelect

	objXmlHttp = new net.XmlHttp();

	objXmlHttp.attach(handler);
	objXmlHttp.reqParam("work", 'act.ajax.'+strTargetName+'.get');
	objXmlHttp.reqParam("id", intID);
	objXmlHttp.load('ret.php');
}

function observeSelect(arrOptions){
	clearSelect(this.target);
	for(var i=0;i<arrOptions.length;i++){
		this.target.options[this.target.options.length] = new Option(arrOptions[i].name,arrOptions[i].value);
	}
}

function clearSelect(objSelect){
	while(objSelect.options.length > 1){
		objSelect.remove(objSelect.options.length-1);
	}
}






function Inloging(form,update){
	this.form = form;
	this.update = update;

	this.doAction = function(){
		handler = new net.Observer();
		handler.target = this.observer.form;
		handler.notify = displayHTML;

		objXmlHttp = new net.XmlHttp();

		objXmlHttp.attach(handler);
		objXmlHttp.reqParam("p", 'ajax.bokliv.login');
		objXmlHttp.reqParam("update", this.observer.update);
		objXmlHttp.load('index.php');
	}
}

function displayHTML(strHTML){
	for(var i=0;i<this.target.elements.length;i++){
		if(this.target.elements[i].type != undefined && this.target.elements[i].getValue){
			strHTML = strHTML.replace('['+this.target.elements[i].name+']',this.target.elements[i].getValue());
		}
	}
	this.target.innerHTML = strHTML;
	this.target.extendForm = frm.extendForm
	this.target.extendForm();
	this.target.undowait();
}

function getCharLength(strString){
	var intLength = 0;
	var arrString = strString.split("<br />");
	for(var i=0;i<arrString.length;i++){
		if(arrString[i].length > intLength)intLength = arrString[i].length;
	}
	return intLength
}

function sendNewPassword(button){
	var username = button.parent.getField('username');
	if(username.validateInput()){

	}
	return false;
}

var pwd = new Object();

pwd.sendNew = function(button){
	var username = button.parent.getField('username');

	handler = new net.Observer();
	handler.target = button.parent;
	handler.notify = pwd.observeResponse;

	objXmlHttp = new net.XmlHttp();

	objXmlHttp.attach(handler);
	objXmlHttp.reqParam("work", 'act.ajax.user.password.new');
	objXmlHttp.reqParam("username", username.value);
	objXmlHttp.load('ret.php');
}

pwd.observeResponse = function(response){
	if(response){
		var form = this.target;
		var messagepane = new msg.MessagePane('Det er blitt sendt passord til din e-postadresse');
		var actionOK = new msg.closePane(form,messagepane);
		var objOK = new msg.Button('ok',actionOK);

		messagepane.addButton(objOK);
		messagepane.display(form);
	}
}

function getForm(element){
	if(element.tagName != 'FORM'){
		element = getForm(element.parentNode);
	}
	return element;
}

function resetError(element){
	element.className = element.className.replace('error','');
}

function getStoreFormHref(){
	var regexp = new RegExp("[https|http]\://[^/]+/([^/]+)/");
	var store = window.location.href.match(regexp);
	if(store){
		return store[1];
	}else{
		return false;
	}
}

function selectOption(element,value){
	var selected = false;
	var i = 0;

	while(i<element.options.length && !selected){
		if(element.options[i].value == value){
			element.options[i].selected = true;
			selected = true;
		}
		i++;
	}
}

function getSelectedOptionValue(element){
	return element.options[element.selectedIndex].value;
}

String.prototype.strpad = function(){ 
	return (!isNaN(this) && this.toString().length==1)?"0"+this:this; 
} 
