﻿var Moltkes = new function() {}
function xGetPrice(amount, name, type)
{
	var price = null;

	price = tsAjax.innerHTML("/getprice?amount=" + amount + "&name=" + encodeURIComponent(name).replace("'", "%27") + "&type=" + type);

	return price;
}

function xSaveEnquiryHandler(headFormPage, lineFormPage, resultPage, inputWrapperId)
{
	this.Id = 0;
	this.Debug = false;
	this.Handlers = new Array();
	this.LineCategoryParamName = "Kategori";
	this.LineOptionParamName = "Valgmulighed";
	this.LineAmountParamName = "Antal";
	this.LinePriceParamName = "Pris";
	this.HeadAmountElementId = "order-amount";
	this.HeadAmountParamName = "Kuverter";
	this.HeadLink1ParamName = "Alle_valgte_valg";
	this.HeadLink2ParamName= "Alle_ikke_valgte_valg";
	this.WorkingModalDialog = null;
	this.ErrorModalDialog = null;

	this.Options = new Array();
	this.NumberOfOptions = 0;

	this.Load = function(oId, strOptions, amount, barAmount)
	{
		var succes = false;
		if(oId == "" || oId == 0) return;

		document.getElementById("order-amount").value = amount;
		var sHours = document.getElementById("number-of-hours");
		if(sHours != null)
		{
			for(var i = 0; i < sHours.options.length; i++)
			{
				if(sHours.options[i].value == barAmount) sHours.options[i].selected = true;
				else sHours.options[i].selected = false;
			}
		}

		this.Id = oId;
		var arrOptions = strOptions.split(',');

		for(var i = 0; i < arrOptions.length; i++)
		{
			var rElm = document.getElementById("radioid-" + arrOptions[i]);
			var cElm = document.getElementById("checkid-" + arrOptions[i]);

			if(rElm != null)
			{
				rElm.checked = true;
				if(rElm.onclick != null) rElm.onclick.call(rElm);
			}
			else if(cElm != null)
			{
				cElm.checked = true;
			}
		}

		var succes = true;
		return succes;
	}

	this.Save = function()
	{
		var results = this.GetResultsAsObjects();
		var fields1 = "";
		var fields2 = "";
		var postUrl = location.protocol + "//" + location.host + lineFormPage + "?action=post&layoutid=1";

		this.ExecuteHandlers("onbeforeresults", results);
		
		for(var i = 0; i < results.length; i++)
		{
			results[i] = (this.CountHandlers("onbeforeresult") > 0) ? this.ExecuteHandlers("onbeforeresult",results[i]) : results[i];

			var strRes = this.LineCategoryParamName + "=" + results[i].CategoryID + "&" + this.LineOptionParamName + "=" + results[i].ID;

			if(results[i].Amount != null && results[i].Amount != "0") strRes += "&" + this.LineAmountParamName + "=" + results[i].Amount;
			if(results[i].Price != null && results[i].Price != "0") strRes += "&" + this.LinePriceParamName + "=" + results[i].Price;

			var recId = this.StripRecordId(this.DoAjaxSave(postUrl,strRes));

			if(isNaN(recId))
			{
				if(this.ErrorModalDialog != null)
				{
					if(this.WorkingModalDialog != null) this.WorkingModalDialog.HideDialog();
					this.ErrorModalDialog.ShowDialog(false);
				}
				return;
			}

			if(results[i].Type == "1") 
			{
				if(fields1 != "") fields1 += ",";
				fields1 += recId;
			}
			else
			{
				if(fields2 != "") fields2 += ",";
				fields2 += recId;
			}		
		}

		var host = location.protocol + "//" + location.host;
		var postUrl = host + headFormPage + "?action=post&layoutid=1";
		if(this.Id != "") postUrl += "&recid=" + this.Id + "&listid=-300003";
		var strRes = 	this.HeadLink1ParamName + "=" + fields1 + "&" + this.HeadLink2ParamName + "=" + fields2;
		var aElm = document.getElementById(this.HeadAmountElementId);
		if(aElm) strRes += "&" + this.HeadAmountParamName + "=" + aElm.value;
		var recId = this.StripRecordId(this.DoAjaxSave(postUrl,strRes,this.callbackFunc));
		if(isNaN(recId))
		{
			if(this.ErrorModalDialog != null)
			{
				if(this.WorkingModalDialog != null) this.WorkingModalDialog.HideDialog();
				this.ErrorModalDialog.ShowDialog(false);
			}

			return;
		}

		document.location.replace(host + resultPage + "?listid=-300003&recid=" + recId);
	}

	this.AppendOptionRecordId = function(intId, intType)
	{
		var ori = new Object();
		ori.Id = intId;
		ori.Type = intType;
		this.Options.push(ori);

		if(this.Options.length == this.NumberOfOptions) this.SaveRecord();
	}

	this.SaveOptions = function()
	{
		this.Options = new Array();

		var results = this.GetResultsAsObjects();
		this.NumberOfOptions = results.length;
		var postUrl = location.protocol + "//" + location.host + lineFormPage + "?action=post&layoutid=1";

		this.ExecuteHandlers("onbeforeresults", results);
		
		for(var i = 0; i < results.length; i++)
		{
			results[i] = (this.CountHandlers("onbeforeresult") > 0) ? this.ExecuteHandlers("onbeforeresult",results[i]) : results[i];

			var strRes = this.LineCategoryParamName + "=" + results[i].CategoryID + "&" + this.LineOptionParamName + "=" + results[i].ID;

			if(results[i].Amount != null && results[i].Amount != "0") strRes += "&" + this.LineAmountParamName + "=" + results[i].Amount;
			if(results[i].Price != null && results[i].Price != "0") strRes += "&" + this.LinePriceParamName + "=" + results[i].Price;

			var valObject = new Object();
			valObject.SaveObject = this;
			valObject.IntType = results[i].Type;	

			this.DoAjaxSave(postUrl,strRes,this.SaveOptionCallBackHandler, valObject);
		}
	}

	this.SaveRecord = function()
	{
		var host = location.protocol + "//" + location.host;
		var postUrl = host + headFormPage + "?action=post&layoutid=1";
		if(this.Id != "") postUrl += "&recid=" + this.Id + "&listid=-300003";

		var fields1 = "";
		var fields2 = "";

		for(var i = 0; i < this.Options.length; i++)
		{
			if(this.Options[i].Type == "1") 
			{
				if(fields1 != "") fields1 += ",";
				fields1 += this.Options[i].Id;
			}
			else
			{
				if(fields2 != "") fields2 += ",";
				fields2 += this.Options[i].Id;
			}
		}

		var strRes = 	this.HeadLink1ParamName + "=" + fields1 + "&" + this.HeadLink2ParamName + "=" + fields2;
		var aElm = document.getElementById(this.HeadAmountElementId);
		if(aElm) strRes += "&" + this.HeadAmountParamName + "=" + aElm.value;
		var recId = this.StripRecordId(this.DoAjaxSave(postUrl,strRes,null));
		if(isNaN(recId))
		{
			if(this.ErrorModalDialog != null)
			{
				if(this.WorkingModalDialog != null) this.WorkingModalDialog.HideDialog();
				this.ErrorModalDialog.ShowDialog(false);
			}

			return;
		}

		document.location.replace(host + resultPage + "?listid=-300003&recid=" + recId);
	}

	this.SaveOptionCallBackHandler = function() {
		if (this.ajaxObj!=null) {
			if (this.ajaxObj.readyState==4) {
				var RT = this.ajaxObj.responseText;

				var saveObject = this.ValueObject.SaveObject;
				var recId = this.ValueObject.SaveObject.StripRecordId(RT);
				var intType = this.ValueObject.IntType;

				this.ValueObject.SaveObject.AppendOptionRecordId(recId,intType);
			
				if (this.statusElement!=null) {this.statusElement.innerHTML = this.statusText_Done;}
				if (this.resultElement!=null) {this.resultElement.innerHTML = RT}
			} else {
			
		}			
		} else {
			var RT = this.IF.innerHTML;
			if (this.statusElement!=null) {this.statusElement.innerHTML = this.statusText_Done;}
			if (this.resultElement!=null) {this.resultElement.innerHTML = RT}
		}
	}


	this.StripRecordId = function(recId)
	{
		recId = recId.replace("<!-- Tomt layout u/ standardformatering start -->","")
		recId = recId.replace("<!-- Tomt layout u/ standardformatering end -->","");
		return recId;
	}

	this.DoAjaxSave = function(url, strRes, callback, valObject)
	{
		var rnd =  Math.random(10000);
		var storage = tsAjax.createInstance("bgsave-" + rnd);
		storage.method="post";

		storage.postData = strRes + "&previouscontent=";
		if(callback != null) storage.callback = callback;

		if(valObject != null) storage.ValueObject= valObject;

		if(callback != null) tsAjax.innerHTML(url,"tsAjax","bgsave-" + rnd,null,null,callback);
		else return tsAjax.innerHTML(url,null,"bgsave-" + rnd,null,null,null);
	}

	this.GetResultsAsObjects = function()
	{
		var wrapper = (inputWrapperId != null) ? document.getElementById(inputWrapperId) : document;
		var inputs = wrapper.getElementsByTagName("input");
		var results = new Array();
	
		for(var i = 0; i < inputs.length; i++)
		{
			if((inputs[i].type.toLowerCase() == "radio" && inputs[i].checked) || (inputs[i].type.toLowerCase() == "checkbox" && inputs[i].checked))
			{
				var category = inputs[i].name.replace("radio-","").replace("checkid-","");
				var id = inputs[i].id.replace("radioid-","").replace("checkid-","");
				var text = inputs[i].parentNode.getElementsByTagName("label")[0].innerHTML;
				var typ = inputs[i].value.split("-")[0];
				var amount = 0;
				var price = 0;

				if(inputs[i].Amount != null) amount = inputs[i].Amount;
				if(inputs[i].Price != null) price = inputs[i].Price;

				var result = new Object();
				result.ID = id;
				result.Text = text;
				result.CategoryID = category;
				result.Type = typ;
				result.Amount = amount
				result.Price = price;

				results.push(result);				
			}
		}

		return results;
	}

	this.RegisterHandler = function(hType, h)
	{
		var handler = new Array();
		handler.push(hType);
		handler.push(h);
		this.Handlers.push(handler);
	}

	this.ExecuteHandlers = function(hType, object)
	{
		var result = null;

		for(var i = 0; i < this.Handlers.length; i++)
		{
			if(this.Handlers[i][0] == hType)
			{
				if(object != null) result = this.Handlers[i][1].call(object);
				else result = this.Handlers[i][1]();
			}
		}

		return result;
	}

	this.CountHandlers = function(hType)
	{
		var count = 0;

		for(var i = 0; i < this.Handlers.length; i++)
		{
			if(this.Handlers[i][0] == hType) count++;
		}

		return count;
	}
}

function ModifyRadioGroup(gName, priceLbl, changeHandler, inputElm, inputLbl)
{
	var radios = document.getElementsByName(gName);
	var pNode = null;
	var pNode = radios[0].parentNode.parentNode.parentNode.parentNode;

	if(inputElm)
	{
		var tr = document.createElement("tr");
		tr.className = "amount-wrapper";
		var td = document.createElement("td");
		td.colSpan = "2";

		var lbl = document.createElement("label");
		lbl.setAttribute("for",inputElm.id);
		lbl.innerHTML = inputLbl;
		td.appendChild(lbl);

		td.appendChild(inputElm);

		tr.appendChild(td);
		pNode.insertBefore(tr,pNode.rows[0]);
	}

	var tr = document.createElement("tr");
	tr.className = "price-wrapper-row";
	var td = document.createElement("td");
	td.className = "caption-cell";
	td.innerHTML = "<h2 class=\"sectionheader\">" + priceLbl + "</h2>";
	tr.appendChild(td);
	var td = document.createElement("td");
	td.className = "price-cell";
	tr.appendChild(td);
	pNode.appendChild(tr);

	for(var i = 0; i < radios.length; i++)
	{
		radios[i].onclick = changeHandler;
		radios[i].parentNode.parentNode.nextSibling.innerHTML = "";
		radios[i].PriceWrapper = td;
		if(inputElm) radios[i].InputElm = inputElm;
	}

	Tangora.Layout.Resize();
}

function xModalDialog(strId, objName)
{
	this.ModalDialogLayer = null;
	this.DialogLayer = null;
	this.Handlers = new Array();
	this.ExecuteHandlers = false;
	this.Showing = false;

	this.Init = function()
	{
		that = eval(objName);

		this.ModalDialogLayer = document.getElementById("modal-dialog-layer");

		if(this.ModalDialogLayer == null)
		{
			this.ModalDialogLayer = document.createElement("div");
			this.ModalDialogLayer.id = "modal-dialog-layer";
			this.ModalDialogLayer.style.height = (document.body.clientHeight + 200) + "px";
			document.body.appendChild(this.ModalDialogLayer);
		}

		this.DialogLayer = document.createElement("div");
		this.DialogLayer.id = "dialog-layer" + "-"+ strId;
		document.body.appendChild(this.DialogLayer);

		Tangora.Events.AddHandler(window,"onresize",that.OnWindowResizeHandler);
		Tangora.Events.AddHandler(window,"onscroll",that.OnWindowResizeHandler);
	}

	this.OnWindowResizeHandler = function()
	{
		var md = eval(objName);
		if(md.Showing) md.PositionDialog();
	}

	this.OnKeyDownHandler = function(e)
	{
		var ev = (window.event) ? window.event : e;
		var key = (window.event) ? window.event.keyCode : e.which;
		var md = eval(objName);

		if(key == 13)
		{
			md.HideDialog();
		}
		
		md.CancelBubble(ev);

		return false;
	}

	this.CancelBubble = function(e)
	{
		if (e && e.stopPropogation) e.stopPropogation();
		else if (window.event && window.event.cancelBubble) window.event.cancelBubble = true;
		if (e &&e.preventDefault) e.preventDefault();
		else if (window.event && window.event.returnValue)
		window.eventReturnValue = false;
	}

	this.PositionDialog = function()
	{
		var sWidth = document.documentElement.clientWidth;
		var sHeight = document.documentElement.clientHeight;
		var lOffset = (sWidth / 2) - (this.DialogLayer.clientWidth / 2);
		var tOffset = document.documentElement.scrollTop + (sHeight / 2) - (this.DialogLayer.clientHeight / 2);

		this.DialogLayer.style.left = lOffset + "px";
		this.DialogLayer.style.top = tOffset + "px";
	}

	this.ShowDialog = function(executeHandlers)
	{
		this.Showing = true;
		Tangora.Events.AddHandler(document,"onkeydown",this.OnKeyDownHandler);

		this.ExecuteHandlers = executeHandlers;

		this.PositionDialog();

		if(this.ModalDialogLayer != null) this.ModalDialogLayer.style.display = "block";
		if(this.DialogLayer != null) this.DialogLayer.style.visibility = "visible";
	}

	this.HideDialog = function()
	{
		var md = eval(objName);

		if(md.ModalDialogLayer != null) md.ModalDialogLayer.style.display = "none";
		if(md.DialogLayer != null) md.DialogLayer.style.visibility= "hidden";

		if(md.ExecuteHandlers)
		{
			var handlers = md.GetHandlers("onclose");
			for(var i = 0; i < handlers.length; i++)
			{
				handlers[i]();
			}
		}
		this.Showing = false;

		Tangora.Events.RemoveHandler(document,"onkeydown",md.OnKeyDownHandler);
	}

	this.SetDialogLayout = function(strHeader, content)
	{
		this.DialogLayer.innerHTML = "";
		var h1 = document.createElement("h1");
		h1.id = "dialog-layer-header-" + strId;
		h1.className = "dialog-layer-header";
		h1.innerHTML = strHeader;
		this.DialogLayer.appendChild(h1);
		this.DialogLayer.appendChild(content);
	}

	this.RegisterHandler = function(strType, handler)
	{
		var o = new Object();
		o.Type = strType;
		o.Handler = handler;
		this.Handlers.push(o);
	}

	this.GetHandlers = function(strType)
	{
		var arr = new Array();
		for(var i = 0; i < this.Handlers.length; i++)
		{
			if(this.Handlers[i].Type == strType) arr.push(this.Handlers[i].Handler);
		}

		return arr;
	}
}

function xBackUrlGetter()
{
	this.Get = function(pId, oId)
	{
		var options = document.getElementsByName("option-id");
		var strUrl = "/page" + pId+ ".aspx?";
		var strOptions = "";

		for(var i = 0; i < options.length; i++)
		{
			if(i > 0) strOptions += ",";
			strOptions += options[i].value;
		}

		strUrl += "options=" + strOptions;

		var aElm = document.getElementById("amount-value");
		if(aElm != null) strUrl += "&amount=" + aElm.value;
		var baElm = document.getElementById("bar-amount-value");
		if(baElm != null) strUrl += "&bar-amount=" + baElm.value;
		strUrl += "&oid=" + oId;

		return strUrl;
	}
}

Moltkes.SaveEnquiryHandler = xSaveEnquiryHandler;
Moltkes.BackUrlGetter = new xBackUrlGetter;
Moltkes.GetPrice = xGetPrice;
Moltkes.ModalDialog = xModalDialog;

function RadioOnChangeHandler()
{

	var amount = 0;
	if(this.InputElm) amount = this.InputElm.value;
	var name = this.parentNode.getElementsByTagName("label")[0].innerHTML;
	var price = Moltkes.GetPrice(amount,name);
	this.Amount = amount;
	this.Price = price;
	if(parseInt(price) == 0) price = "";
	this.PriceWrapper.innerHTML = price;

	if(this.InputElm && (price == "" || parseInt(price) == 0)) this.InputElm.value = "";
}

function FocusAmountField()
{
	document.getElementById("order-amount").focus();
}

function Save(elm)
{
	try
	{
		var amElm = document.getElementById("order-amount");
		if(!amElm || amElm.value == "") 
		{
			mdAlert.ShowDialog(true);
			return false;
		}

		mdWorking.ShowDialog(false);
		elm.disabled = true;
		setTimeout("seh.SaveOptions()",5);
	}
	catch(err)
	{
		seh.WorkingModalDialog.HideDialog();
		seh.ErrorModalDialog.ShowDialog(false);
	}
	return false;
}

function InputOnChangeHandler(e)
{
	var elm = this;
	var amount = elm.value;

	if(amount == "" || amount < 15 || isNaN(amount) || amount > 320)
	{
		elm.value = "";
		mdAlert.ShowDialog(true);
		return;
	}

	var radios = document.getElementsByName(elm.Group);
	for(var i = 0; i < radios.length; i++)
	{
		if(radios[i].checked)
		{
			RadioOnChangeHandler.call(radios[i]);
			break;
		}
	}
}

function SelectOnChangeHandler()
{
	this.Amount = this.options[this.selectedIndex].value;
	
	var radios = document.getElementsByName(this.Group);
	for(var i = 0; i < radios.length; i++)
	{
		if(radios[i].checked)
		{
			RadioOnChangeHandler.call(radios[i]);
			break;
		}
	}
}