﻿var LocalReference = "/";

function ShortList()
{
	var items = new Array();

	this.Load = function()
	{
		var tmp = Tangora.Cookies.GetCookieValue("tangora","shortlist");
		if(tmp && tmp.length > 0) items = tmp.split(",");
	}

	this.AddItem = function(strID)
	{
		items.push(strID);
	}

	this.RemoveItem = function(strID)
	{
		var newArr = new Array();

		for(var i = 0; i < items.length; i++)
		{
			if(items[i] != strID) newArr.push(items[i]);
		}
		
		items = newArr;
	}

	this.DoesItemExist = function(strID)
	{
		var res = "";

		for(var i = 0; i < items.length; i++)
		{
			if(items[i] == strID)
			{
				res = items[i];
				break;
			}
		}

		return res;
	}

	this.Save = function()
	{
		var td = new Date();
		var year = td.getFullYear()+1;
		var month = td.getMonth();
		var day = td.getDate();
		var exp = new Date(year,month,day);

		var tmp = "";
		var x = 0;

		for(var i = 0; i < items.length; i++)
		{
			if(items[i] != "")
			{
				if(x > 0) tmp += ",";
				tmp += items[i];
				x++;
			}
		}

		Tangora.Cookies.SetCookieValue("tangora","shortlist",tmp,exp);
	}
}

// Kalender - tilføjet af TS-MSO d. 28-10-2008
function Calendar(cal_ph,displayMonth,displayYear,instanceName)
{
	this._placeHolder = null;
	this._currentMonth = null;
	this._currentYear = null;
	this._currentDay = null;
	this.TodaysDate = null;
	this.Today = null;
	this.TodaysMonth = null;
	this.TodaysYear = null;
	this.ShowHeader = false;
	this._monthNames = ["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"];
	this._dayNames = ["mandag","tirsdag","onsdag","torsdag","fredag","lørdag","søndag"];
	this._weekLabel = "Uge";
	this._events = new Array();
	this._eventStartDates = new Array();
	this._eventEndDates = new Array();
	this._dayClickHandlers = new Array();
	this._dayMouseOverHandlers = new Array();
	this._dayMouseOutHandlers = new Array();
	this._nextMonthClickHandlers = new Array();
	this._previousMonthClickHandlers = new Array();
	this._externalHandlers = new Array();
	this._initHandlers = new Array();
	this._renderHandlers = new Array();
	this.EventDataCallBack = null;
	this.NextMonthClickHandler = null;
	this.PreviousMonthClickHandler = null;
	this.ShowWeekNumber = true;
	this.ShowDayNameForEachDate = false;
	this.ShowOverFlowDates = true;

	this.Init = function()
	{  
		var elm = (this == window) ? eval(instanceName) : this;

		elm._placeHolder = document.getElementById(cal_ph);

		if(!elm._currentMonth)
		{
			elm._currentMonth = (isNaN(displayMonth) || displayMonth == null) ? new Date().getMonth() : displayMonth-1;
			elm._currentYear  = (isNaN(displayYear) || displayYear == null) ? new Date().getFullYear() : displayYear;
		}
		elm.Render();

		for(var i = 0; i < elm._initHandlers.length; i++)
		{
			elm._initHandlers[i]();
		}
	}

	this.RegisterHandler = function(name,handler)
	{
		switch(name)
		{
			case "eventClick":
				this._dayClickHandlers.push(handler);
				break;
			case "eventMouseOver":
				this._dayMouseOverHandlers.push(handler);
				break;
			case "eventMouseOut":
				this._dayMouseOutHandlers.push(handler);
				break;
			case "next":
				this._nextMonthClickHandlers.push(handler);
				break;
			case "previous":
				this._previousMonthClickHandlers.push(handler);
				break;
			case "init":
				this._initHandlers.push(handler);
				break;
			case "external":
				this._externalHandlers.push(handler);
				break;
			case "render":
				this._renderHandlers.push(handler);
				break;
		}
	}

	this._execRenderHandlers = function()
	{
		for(var i = 0; i < this._renderHandlers.length; i++)
		{
			this._renderHandlers[i]();
		}
	}

	this._dayClickHandler = function()
	{
		var elm = eval(instanceName);

		for(var i = 0; i < elm._dayClickHandlers.length; i++)
		{
			elm._dayClickHandlers[i].call(elm,this.childNodes[0].innerHTML,elm._currentMonth+1, elm._currentYear);
		}
	}

	this._dayMouseOverHandler = function(e)
	{
		var elm = eval(instanceName);

		for(var i = 0; i < elm._dayMouseOverHandlers.length; i++)
		{
			var target = (window.event) ? window.event.srcElement : e.target;

			elm._dayMouseOverHandlers[i].call(elm,this.childNodes[0].innerHTML,elm._currentMonth+1, elm._currentYear,target);
		}
	}

	this._dayMouseOutHandler = function()
	{
		var elm = eval(instanceName);

		for(var i = 0; i < elm._dayMouseOutHandlers.length; i++)
		{
			elm._dayMouseOutHandlers[i]();
		}
	}

	this._nextMonthClickHandler = function()
	{
		var elm = eval(instanceName);

		if(elm._nextMonthClickHandlers)
		{
			for(var i = 0; i < elm._nextMonthClickHandlers.length; i++)
			{
				elm._nextMonthClickHandlers[i]();
			}

			elm.SetMonth(parseInt(elm._currentMonth)+1);
		}

		elm._executeExternalHandlers();
			
		return false;
	}

	this._previousMonthClickHandler = function()
	{
		var elm = eval(instanceName);

		if(elm._previousMonthClickHandlers)
		{
			for(var i = 0; i < elm._previousMonthClickHandlers.length; i++)
			{
				elm._previousMonthClickHandlers[i]();
			}

			elm.SetMonth(parseInt(elm._currentMonth)-1);
		}

		elm._executeExternalHandlers();

		return false;
	}

	this._executeExternalHandlers = function()
	{
		var elm = eval(instanceName);

		for(var i = 0; i < elm._externalHandlers.length; i++)
		{
			elm._externalHandlers[i]();
		}
	}

	this.SetToday = function(date)
	{
		var tmp = date;
		if(tmp.indexOf(" ") > -1) tmp = tmp.substring(0,date.indexOf(" "));
		this.TodaysDate = tmp;
		//var d = new Date(date);
		//var day = d.getDate();
		//var month = d.getMonth();
		//var year = d.getFullYear();

		var day = parseInt(this.TodaysDate.split("-")[0]);
		var month = parseInt(this.TodaysDate.split("-")[1])-1;
		//var month = this.TodaysDate.split("-")[1].replace("0","")-1;

		var year = this.TodaysDate.split("-")[2];

		//if(day < 10) day = "0" + day;

		this.Today = day;
		this.TodaysMonth = month;
		this.TodaysYear = year;	
	}

	this.AddEvent = function(date)
	{
		if(!this._eventExists(date)) this._events.push(date);
	}

	this.AddEventStartDate = function(date)
	{
		this._eventStartDates.push(date);
	}

	this.AddEventEndDate = function(date)
	{
		this._eventEndDates.push(date);
	}

	this.AddEventTimeSpan = function(startDate,duration)
	{
		//if(startDate.indexOf("07") > -1) alert(startDate + "," + duration);
		this.AddEvent(startDate);
		this.AddEventStartDate(startDate);
		var day = startDate.split("-")[0];
		if(day.indexOf("0") == 0) day = parseInt(day.replace("0",""));
		else day = parseInt(day);
		var month = startDate.split("-")[1];
		if(month.indexOf("0") == 0) month = parseInt(month.replace("0",""));
		var year = parseInt(startDate.split("-")[2]);
		monthLength = this._getMonthLength(month-1,year);

		for(var i = 0; i < duration; i++)
		{
			day++;
			if(day > monthLength)
			{
				day = 1;
				month++;
				if(month > 12)
				{
					month = 1;
					year++;
				}
				monthLength = this._getMonthLength(month-1,year);
			}
			
			var tmpDay = day;
			if(tmpDay < 10) tmpDay = "0" + tmpDay;
			var tmpMonth = month;
			if(tmpMonth < 10) tmpMonth = "0" + tmpMonth;

			this.AddEvent(tmpDay+ "-" + tmpMonth + "-" + year);
		}
		this.AddEventEndDate(tmpDay+ "-" + tmpMonth + "-" + year);
	}

	this.ClearEvents = function()
	{
		this._events = null;
		this._events = new Array();
	}

	this._eventExists = function(date)
	{
		date = date.split("-");
		var day = date[0];

		if(day < 10) day = "0" + day;

		month = parseInt(date[1]);
		month = (month < 10) ? "0" + month : month;
		var year = date[2];

		date = day + "-" + month + "-" + year;

		for(var i = 0; i < this._events.length; i++)
		{
			if(this._events[i] == date) return true;
		}

		return false;
	}

	this._isEventStartDate = function(date)
	{
		date = date.split("-");
		var day = date[0];

		if(day < 10) day = "0" + day;

		month = parseInt(date[1]);
		month = (month < 10) ? "0" + month : month;
		var year = date[2];

		date = day + "-" + month + "-" + year;

		for(var i = 0; i < this._eventStartDates.length; i++)
		{
			if(this._eventStartDates[i] == date) return true;
		}

		return false;		
	}

	this._isEventEndDate = function(date)
	{
		date = date.split("-");
		var day = date[0];

		if(day < 10) day = "0" + day;

		month = parseInt(date[1]);
		month = (month < 10) ? "0" + month : month;
		var year = date[2];

		date = day + "-" + month + "-" + year;

		for(var i = 0; i < this._eventEndDates.length; i++)
		{
			if(this._eventEndDates[i] == date) return true;
		}

		return false;
	}

	this.Render = function()
	{
		if(document.location.href.indexOf("debug") > -1)
		{
			var res = "";
			for(var i = 0; i < this._eventStartDates.length; i++)
			{
				res += "," + this._eventStartDates[i];
			}

			alert(res);
		}


		this._placeHolder.innerHTML = "";

		var wrap = document.createElement("div");
		wrap.id = "cal_wrapper";

		var dayWrapper = document.createElement("div");
		dayWrapper.id = "day_names_wrapper";
		if(!this.ShowDayNameForEachDate) wrap.appendChild(dayWrapper);

		var dayHeader = document.createElement("div");
		dayHeader.id = "week_number_header";
		dayHeader.className = "week_number_wrapper";
		dayHeader.innerHTML = this._weekLabel;
		if(this.ShowWeekNumber) dayWrapper.appendChild(dayHeader);

		for(var i = 0; i < this._dayNames.length; i++)
		{
			dayHeader = document.createElement("div");
			dayHeader.id = "day_" + i;
			dayHeader.className = "day_header";
			dayHeader.innerHTML = this._dayNames[i];
			dayWrapper.appendChild(dayHeader);
		}

		var fb = document.createElement("div");
		fb.className = "floatbreaker";
		dayWrapper.appendChild(fb);

		var weeks = this._getNumberOfWeeks(this._currentMonth,this._currentYear);
		var days = this._dayNames.length;
		var firstDay = this._getFirstDayOfMonth(this._currentMonth,this._currentYear);
		var monthLength = this._getMonthLength(this._currentMonth,this._currentYear);
		var day = 1;
		var week = this._getWeekNumber(day,this._currentMonth,this._currentYear);

		var daysWrapper = null;
		var weekWrapper = null;

		var j = 0;
		if(firstDay == 0) j = -1;

		var overFlowDate = 1;

		for(j; j < weeks; j++)
		{
			daysWrapper = document.createElement("div");
			daysWrapper.className = "week_wrapper";

			weekWrapper = document.createElement("div");
			weekWrapper.className = "week_number_wrapper";
			weekWrapper.innerHTML = week;
			if(this.ShowWeekNumber) daysWrapper.appendChild(weekWrapper);
			week++;

			var dayWrapper = null;
			var d = null;

			for(var x = 1; x <= days; x++)
			{
				dayWrapper = document.createElement("div");
				dayWrapper.className = "day_wrapper";

				if(x == 6 || x == 7) dayWrapper.className += " weekend";

				if (day <= monthLength && (j > 0 || x >= firstDay) && (j > -1 || x == 7))
				{
					if(this.ShowDayNameForEachDate) dayWrapper.innerHTML = "<span class=\"dayname_wrapper\">" + this._dayNames[x-1] + "</span>";
					dayWrapper.innerHTML += "<span class=\"date_wrapper\">" + day + "</span>";

					if(this.Today == parseInt(day) && this.TodaysMonth == this._currentMonth && this.TodaysYear == this._currentYear)
					{
						dayWrapper.id = "current_day";
					}

					var theDate = day + "-" + (parseInt(this._currentMonth)+1) + "-" + this._currentYear;

					if(this._eventExists(theDate))
					{
						dayWrapper.className += " event_day";

						if(this._isEventStartDate(theDate) && this._isEventEndDate(theDate))
						{
							dayWrapper.className += " full_booked";
						}
						else if (this._isEventStartDate(theDate))
						{
							dayWrapper.className += " start_date";
						}
						else if (this._isEventEndDate(theDate))
						{
							dayWrapper.className += " end_date";
						}

						if(this.EventDataCallBack)
						{
							dayWrapper.innerHTML += this.EventDataCallBack(theDate);
						}
						else
						{
							dayWrapper.onclick = this._dayClickHandler;
							dayWrapper.onmouseover = this._dayMouseOverHandler;
							dayWrapper.onmouseout = this._dayMouseOutHandler;
						}
					}

					day++;
				}
				else if(day > monthLength)
				{
					dayWrapper.innerHTML = overFlowDate;
					overFlowDate++;
					//if(!this.EventDataCallBack) dayWrapper.onclick = this._nextMonthClickHandler;
					dayWrapper.className += " nextMonth";
				}
				else if((j == -1 && x < 7) || (j == 0 && x < firstDay))
				{
					var ml = this._getMonthLength(this._currentMonth-1,this._currentYear);

					dayWrapper.innerHTML = ml-firstDay+x+1;
					if(j == -1) dayWrapper.innerHTML = ml-6+x;
					//if(!this.EventDataCallBack) dayWrapper.onclick = this._previousMonthClickHandler;
					dayWrapper.className += " previousMonth";
				}
				daysWrapper.appendChild(dayWrapper);
			}

			wrap.appendChild(daysWrapper);
		}

		this._placeHolder.appendChild(wrap);

		var fb = document.createElement("div");
		fb.className = "floatbreaker";
		fb.innerHTML = " ";
		this._placeHolder.appendChild(fb);

		this._execRenderHandlers();
	}

	this._getMonthLength = function(monthIndex,year)
	{
		var d = new Date(year, monthIndex + 1, 0);
		return(d.getDate());
	}

	this._getMonthName = function(monthIndex)
	{
		return this._monthNames[parseInt(monthIndex)];
	}
	
	this._getDayName = function(dayIndex)
	{
		return this._dayNames[dayIndex];
	}

	this._getFirstDayOfMonth = function(monthIndex,year)
	{
		var d = new Date(year,monthIndex,1);
		return(d.getDay());
	}

	this._getNumberOfWeeks = function(monthIndex, year)
	{
		var weeks = Math.ceil((this._getMonthLength(monthIndex, year) + this._getFirstDayOfMonth(monthIndex, year)) / 7);

		return weeks;
	}

	this._getWeekNumber = function(day,month,year)
	{
			month = parseInt(month) + 1;
			var a = Math.floor((14-(month))/12);
			var y = year+4800-a;
			var m = (month)+(12*a)-3;
			var jd = day + Math.floor(((153*m)+2)/5) + (365*y) + Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400) - 32045;

			var d4 = (jd+31741-(jd%7))%146097%36524%1461;
			var L = Math.floor(d4/1460);
			var d1 = ((d4-L)%365)+L;
			NumberOfWeek = Math.floor(d1/7) + 1;

			return NumberOfWeek;	  
	}

	this.SetYear = function(year)
	{
		this._currentYear = year;
		this.Render();
	}

	this.SetMonth = function(month)
	{
		if(month > 11)
		{
			this._currentMonth = 0;
			this._currentYear = parseInt(this._currentYear)+1;
		}
		else if(month < 0)
		{
			this._currentMonth = 11;
			this._currentYear = parseInt(this._currentYear)-1;
		}
		else
		{
			this._currentMonth = parseInt(month);
		}

		this.Render();
	}

	this.YearSelectClickHandler = function()
	{
		var year = this.options[this.selectedIndex].value;
		eval(instanceName).SetYear(year);
	}
}

var PriceCalculator = new function()
{
	this.ConvertDateToTicks = function(date)
	{
		var tmp = date.split("-");
		var d = new Date(tmp[2] + "/" + tmp[1] + "/" + tmp[0]);
		return d.getTime();			
	}

	this.GetFullYearFromStringDate = function(date)
	{
		var tmp = date.split("-");
		var d = new Date(tmp[2] + "/" + tmp[1] + "/" + tmp[0]);
		return d.getFullYear().toString();		
	}

	this.FormatNumber = function(num)
	{
		var numStr = "";
		num = num.toString().replace(",",".");
		numStr = this.RoundNumber(num,2);
		numStr = numStr.toString();
		numStr = (numStr.indexOf(".") == -1 && numStr.indexOf(",") == -1) ? numStr + ".00" : numStr;
		if(numStr.substring(numStr.lastIndexOf(".")).length < 3) numStr = numStr + "0";
		numStr = numStr.toString().replace(".",",") + " €";
		return numStr;
	}

	this.RoundNumber = function(num, dec)
	{
		var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
		return result;
	}

	this.Calculator = function(targetElmId, instanceName)
	{
		this.TargetElm = "";
		this.NormalPeriods = new Array();
		this.SpecialPeriods = new Array();
		this.SpecialDiscounts = new Array();
		this.LongStayDiscounts = new Array();
		this.OtherFees = new Array();

		this.StartDate = "";
		this.EndDate = "";
		this.StartDateTicks = 0;
		this.EndDateTicks = 0;
		this.Persons = 0;
		this.ReservationFee = 0;
		this.MinimumPersons = 0;
		this.PricePerPersonAboveMinimum = 0;
		this.MinimumDays = 0;
		this.CalculationTable = null;
		this.Depository = 0;

		this.BasePriceCaption = "Lejepris";
		this.LongTermDiscountCaption = "Rabat";
		this.SubPriceCaption = "Pris";
		this.TotalPriceCaption = "Totalpris";
		this.ReservationFeeCaption = "Reservationsgebyr";
		this.DepositoryCaption = "Depositum";

		this.LessThanMinimumReservationError = "The minimum reservation for this property is ¤days¤ days";
		
		this.Init = function()
		{
			this.TargetElm = document.getElementById(targetElmId);

			if(!this.TargetElm)
			{
				alert("Target element not found");
				return;
			}
		}

		this.AddNormalPeriod = function(startDate, endDate, price)
		{
			var np = new PriceCalculator.NormalPeriod(startDate, endDate, price);
			this.NormalPeriods.push(np);
		}

		this.AddSpecialPeriod = function(startDate, endDate, price)
		{
			var sp = new PriceCalculator.SpecialPeriod(startDate, endDate, price);
			this.SpecialPeriods.push(sp);
		}

		this.AddSpecialDiscount = function(startDate, endDate, discount)
		{
			var sd = new PriceCalculator.SpecialDiscount(startDate, endDate, discount);
			this.SpecialDiscounts.push(sd);
		}

		this.AddLongStayDiscount = function(startDays, endDays, discount)
		{
			var lsd = new PriceCalculator.LongStayDiscount(startDays, endDays, discount);
			this.LongStayDiscounts.push(lsd);
		}

		this.AddOtherFee = function(name, fee)
		{
			var of = new PriceCalculator.OtherFee(name, fee);
			this.OtherFees.push(of);
		}

		this.SetNormalPeriodsYear = function()
		{	
			   return false;
			for(var i = 0; i < this.NormalPeriods.length; i++)
			{
				this.NormalPeriods[i].SetStartDateYear(PriceCalculator.GetFullYearFromStringDate (this.StartDate));
				this.NormalPeriods[i].SetEndDateYear(PriceCalculator.GetFullYearFromStringDate(this.EndDate));
			}
		}

		this.SetStartDate = function(date)
		{
			this.StartDate = date;
			this.StartDateTicks = PriceCalculator.ConvertDateToTicks(date);

			this.SetNormalPeriodsYear();
		}

		this.SetEndDate = function(date)
		{
			this.EndDate = date;
			this.EndDateTicks = PriceCalculator.ConvertDateToTicks(date);

			this.SetNormalPeriodsYear();
		}

		this._findObjectsByDateInterval = function(arr)
		{
			var objs = new Array();

			for(var i = 0; i < arr.length; i++)
			{
				if(arr[i].StartDateTicks <= this.StartDateTicks && arr[i].EndDateTicks >= this.EndDateTicks)
				{
					objs.push(arr[i]);
				}
				else if(arr[i].StartDateTicks <= this.StartDateTicks && arr[i].EndDateTicks >= this.StartDateTicks)
				{
					objs.push(arr[i]);
				}
				else if(arr[i].StartDateTicks >= this.EndDateTicks && arr[i].EndDateTicks <= this.EndDateTicks)
				{
					objs.push(arr[i]);
				}
				else if(arr[i].StartDateTicks > this.StartDateTicks && arr[i].EndDateTicks >= this.StartDateTicks)
				{
					objs.push(arr[i]);
				}
				else
				{
					notFound = true;
				}
			}

			return objs;
		}

		this._getDayPrice = function(dateTicks)
		{
			var np = this._findObjectsByDateInterval(this.NormalPeriods);
			var sp = this._findObjectsByDateInterval(this.SpecialPeriods);
			var sd = this._findObjectsByDateInterval(this.SpecialDiscounts);

			var price = 0.00;
			var discount = 0;
//if(location.href.indexOf("debug") > -1) alert(this.StartDateTicks + "=" + dateTicks);
			for(var i = 0; i < sp.length; i++)
			{
//if(location.href.indexOf("debug") > -1) alert(sp[i].StartDateTicks <= dateTicks && sp[i].EndDateTicks >=dateTicks);
				if(sp[i].StartDateTicks <= dateTicks && sp[i].EndDateTicks >= dateTicks)
				{
					price = sp[i].Price.replace(",",".");
//if(location.href.indexOf("debug") > -1) alert(price);
					break;
				}
			}

			if(price == 0)
			{
				for(var i = 0; i < np.length; i++)
				{
					if(np[i].StartDateTicks <= dateTicks && np[i].EndDateTicks >= dateTicks)
					{
						price = np[i].Price.replace(",",".");
						break;
					}
				}				
			}

			if(price > 0)
			{
				var extraPersons = (this.Persons - this.MinimumPersons);

				if(extraPersons > 0)
				{
					price = parseFloat(price) + (extraPersons * this.PricePerPersonAboveMinimum.replace(",","."));
				}

				for(var i = 0; i < sd.length; i++)
				{
					if(sd[i].StartDateTicks <= dateTicks && sd[i].EndDateTicks >= dateTicks)
					{
						discount = sd[i].Discount.replace(",",".");
						break;
					}
				}
	
				price = (price - (price*(discount/100)));
			}

			return Math.round(price,2);
		}

		this.Calculate = function()
		{
			//var startTicks = this.StartDateTicks + 86400000;
var startTicks = this.StartDateTicks;
			var price = 0.00;
			this.CalculationTable = document.createElement("table");
			this.CalculationTable.id = "calculation_table";
			this.CalculationTable.border = "0";
			this.CalculationTable.cellPadding = "0";
			this.CalculationTable.cellSpacing = "0";

			var days = ((this.EndDateTicks - this.StartDateTicks)/86400000);

			//days = Math.ceil(days);
				   days = Math.round(days);

			if(days < this.MinimumDays)
			{
				var txt = this.LessThanMinimumReservationError.replace("¤days¤",this.MinimumDays);
				alert(txt);
				return;
			}

			var i = 1;

			//while(startTicks <= this.EndDateTicks)
			while(i <= days)
			{
				var dayPrice = this._getDayPrice(startTicks);

				if(dayPrice == 0)
				{
					alert("A price for the specified period could not be found");
					return;
				}

				price += dayPrice;
				startTicks += 86400000;
				i++;
			}

			if(price == 0)
			{
				alert("A price for the specified period could not be found");
				return;
			}

			this.AddCalculationTableRow(this.BasePriceCaption,price);

			var discount = 0;
			var lsd = this.LongStayDiscounts;

			for(var i = 0; i < lsd.length; i++)
			{
				if(lsd[i].StartDays <= days && lsd[i].EndDays >= days)
				{
					discount = lsd[i].Discount.replace(",",".");
					break;
				}
			}

			if(discount > 0)
			{
				var discountAmount = price*(discount/100);
				this.AddCalculationTableRow(this.LongTermDiscountCaption + " (" + Math.round(discount*-1) + "%)",discountAmount*-1);
				price = (price - discountAmount);
			}

			this.AddCalculationTableRow(this.SubPriceCaption,price);			

			var resFee = 0;
			if(price > 0 && this.ReservationFee != "0")
			{
				resFee = (price*(parseFloat(this.ReservationFee.replace(",","."))/100));
				//price = price + resFee;
			}

			var of = this.OtherFees;
			for(var i = 0; i < of.length; i++)
			{
				price += parseFloat(of[i].Fee.replace(",","."));
				this.AddCalculationTableRow(of[i].Name,of[i].Fee);
			}
			
			this.AddCalculationTableRow(this.TotalPriceCaption,price);
			this.AddCalculationTableSpacer();
			if(resFee > 0) this.AddCalculationTableRow(this.ReservationFeeCaption + " (" + Math.round(this.ReservationFee.replace(",",".")) + "%)",resFee);

			this.AddCalculationTableRow(this.DepositoryCaption, this.Depository);

			this.TargetElm.innerHTML = "";
			this.TargetElm.appendChild(this.CalculationTable);
		}

		this.AddCalculationTableRow = function(txt,val)
		{
			if(this.CalculationTable.childNodes.length == 0)
			{
				var tBody = document.createElement("tbody");
				this.CalculationTable.appendChild(tBody);
			}

			var tr = document.createElement("tr");
			var td = document.createElement("td");
			td.className = "calculation_label";
			td.innerHTML = txt + ":";
			tr.appendChild(td);

			td = document.createElement("td");
			td.className = "calculation_value";
			td.innerHTML = PriceCalculator.FormatNumber(val);
			if(txt == this.TotalPriceCaption) td.innerHTML = "<strong>" + td.innerHTML + "</strong>";
			tr.appendChild(td);

			this.CalculationTable.childNodes[0].appendChild(tr);
		}

		this.AddCalculationTableSpacer = function()
		{
			var tr = document.createElement("tr");
			var td = document.createElement("td");
			td.className = "calculation_spacer";
			td.colSpan = "2";
			td.innerHTML = "--------------------------------------------------------";
			tr.appendChild(td);

			this.CalculationTable.childNodes[0].appendChild(tr);			
		}
	}

	this.NormalPeriod = function(startDate, endDate, price)
	{
		this.StartDate = startDate;
		this.StartDateTicks = PriceCalculator.ConvertDateToTicks(startDate);
		this.StartDateYear = "";
		this.EndDate = endDate;
		this.EndDateTicks = PriceCalculator.ConvertDateToTicks(endDate);
		this.EndDateYear = "";
		this.Price = price;

		this.SetStartDateYear = function(year)
		{
			var d = this.StartDate.split("-")[0] + "-" + this.StartDate.split("-")[1] + "-" + year;
			this.StartDate = d;
			this.StartDateTicks = PriceCalculator.ConvertDateToTicks(this.StartDate);
		}

		this.SetEndDateYear = function(year)
		{
			
			var d = this.EndDate.split("-")[0] + "-" + this.EndDate.split("-")[1] + "-" + year;
			this.EndDate = d;
			this.EndDateTicks = PriceCalculator.ConvertDateToTicks(this.EndDate);

			if(this.StartDateTicks > this.EndDateTicks)
			{
				this.SetEndDateYear(parseInt(year)+1);
			}
		}
	}

	this.SpecialPeriod = function(startDate, endDate, price)
	{
		this.StartDate = startDate;
		this.StartDateTicks = PriceCalculator.ConvertDateToTicks(startDate);
		this.EndDate = endDate;
		this.EndDateTicks = PriceCalculator.ConvertDateToTicks(endDate);
		this.Price = price;
	}

	this.SpecialDiscount = function(startDate, endDate, discount)
	{
		this.StartDate = startDate;
		this.StartDateTicks = PriceCalculator.ConvertDateToTicks(startDate);
		this.EndDate = endDate;
		this.EndDateTicks = PriceCalculator.ConvertDateToTicks(endDate);
		this.Discount = discount;
	}

	this.LongStayDiscount = function(startDays, endDays, discount)
	{
		this.StartDays = startDays;
		this.EndDays = endDays;
		this.Discount = discount;
	}

	this.OtherFee = function(name, fee)
	{
		this.Name = name;
		this.Fee = fee;
	}
}

var SortFunction = new function()
{
	this.Form = function(instanceName)
	{
		var _fElm = null;
		var _dElm = null;
		var _bElm = null;

		this.PageId = "";
		this.PageName = "";
		this.FieldElementId = "";
		this.DirectionElementId = "";
		this.ButtonElementId = "";
		this.FieldIndex = "";
		this.DirectionValue = "";

		this.Fields = new Array();
		this.Directions = new Array();
		
		this.Init = function()
		{
			_fElm = document.getElementById(this.FieldElementId);
			_dElm = document.getElementById(this.DirectionElementId);
			_bElm = document.getElementById(this.ButtonElementId);

			if(!_fElm || !_dElm || !_bElm)
			{
				alert("Target elements not found");
				return;
			}
			
			_bElm.parent = this;
			_bElm.onclick = this.ClickHandler;

			for(var i = 0; i < this.Fields.length; i++)
			{
				var o = document.createElement("option");
				o.value = this.Fields[i].Index;
				o.innerHTML = this.Fields[i].Name;
				if(this.Fields[i].Index.toString() == this.FieldIndex.toString()) o.selected = true;
				_fElm.appendChild(o);				
			}

			for(var i = 0; i < this.Directions.length; i++)
			{
				var o = document.createElement("option");
				o.value = this.Directions[i].Value;
				o.innerHTML = this.Directions[i].Name;
				if(this.Directions[i].Value == this.DirectionValue) o.selected = true;
				_dElm.appendChild(o);				
			}
		}

		this.ClickHandler = function()
		{
			var fieldIndex = _fElm.options[_fElm.selectedIndex].value;
			var sortOrder = _dElm.options[_dElm.selectedIndex].value;

			if(fieldIndex == "0" || sortOrder == "") return;

			var url = this.parent.PageName + "?doshow" + this.parent.PageId + "=0&sortfield" + this.parent.PageId + "=" + fieldIndex + "&direction" + this.parent.PageId + "=" + sortOrder;

			document.location = url;			
		}

		this.AddField = function(name, index)
		{
			var f = new SortFunction.Field(name, index);
			this.Fields.push(f);
		}

		this.AddDirection = function(name, val)
		{
			var d = new SortFunction.Direction(name, val);
			this.Directions.push(d);
		}
	}

	this.Field = function(name, index)
	{
		this.Name = name;
		this.Index = index;
	}

	this.Direction = function(name, val)
	{
		this.Name = name;
		this.Value = val;
	}
}


function OpenSendToFriendWindow(pageId, targetPageId, recId)
{
	var w = window.open("/page" + pageId + ".aspx?targetpage=" + targetPageId + "&propertyid=" + recId,"sendtofriend","width=700,height=400,toolbars=no,resizeable=no");
}

function OpenSendEnquiryWindow(pageId, propertyId)
{
	var sDateElm = document.getElementById("startdate");
	var eDateElm = document.getElementById("enddate");
	var sDate = "";
	if(sDateElm) sDate = sDateElm.value;
	var eDate = "";
	if(eDateElm) eDate = eDateElm.value;

	var w = window.open("/page" + pageId + ".aspx?propertyid=" + propertyId + "&sdate=" + sDate + "&edate=" + eDate,"sendenquiry","width=700,height=500,toolbars=no,resizeable=no");
}

function DatePickerClickHandler(pageId, frmName, fieldName,calId)
{
	openMiniCal(frmName,fieldName,"",calId,0,300,300,pageId,"22");
}

function GoToProperty(contId)
{
	var url = "";
	var recId = document.getElementById("propertyid").value;
	recId = parseInt(recId);
	var error = "";
	var redirectOk = !isNaN(recId);

	switch(contId)
	{
		case "1":
			if(!redirectOk) error = "Der kan kun indtastes tal";
			url = "/page129.aspx?pid=" + recId;
			break;
		case "2":
			if(!redirectOk) error = "Only numbers are allowed";
			url = "/page130.aspx?pid=" + recId;
			break;
		case "3":
			if(!redirectOk) error = "Only numbers are allowed";
			url = "/page131.aspx?pid=" + recId;
			break;
	}

	if(!redirectOk) alert(error);
	if(redirectOk) if(url != "" && recId != "") document.location = url;
}

function SetCalendarCookie(month, year)
{
	var d = new Date();
	var exp = new Date(d.getFullYear(), d.getMonth(), d.getDate()+1);
	var val = month + "," + year;
	Tangora.Cookies.SetCookieValue("tangora","calendar_preset",val,exp);
}

function GetCalendarCookie()
{
	var val = Tangora.Cookies.GetCookieValue("tangora","calendar_preset");
	return val;
}

function CopyFacts()
{
	var source = document.getElementById("facts_wrapper");
	var targets = Tangora.DOM.GetCollectionByClassName("mergefield_main","p","facts_container");
	if(!source || !targets || targets.length < 2) return;
	targets[0].innerHTML = source.outerHTML;
	targets[1].innerHTML = source.outerHTML;
}

function AddItemToShortList(strID)
{
	shortList.AddItem(strID);
	shortList.Save();
	ToggleShortListLinks(strID);
}

function RemoveItemFromShortList(strID)
{
	shortList.RemoveItem(strID);
	shortList.Save();
	ToggleShortListLinks(strID);
}

function NextMonthClickHandler()
{
	calendar._nextMonthClickHandler();
	SetCalendarCookie(calendar._currentMonth,calendar._currentYear);
	SetHeaderValues();
}

function PreviousMonthClickHandler()
{
	calendar._previousMonthClickHandler();
	SetCalendarCookie(calendar._currentMonth,calendar._currentYear);
	SetHeaderValues();
}

function FillHeaderBoxes()
{
	var sel = document.getElementById("month-selector");
	for(var i = 0; i < calendar._monthNames.length; i++)
	{
		var opt = document.createElement("option");
		opt.value = i;
		opt.innerHTML = calendar._monthNames[i];
		if(calendar._currentMonth == i) opt.selected = true;
		sel.appendChild(opt);
	}

	var sel = document.getElementById("year-selector");
	for(var i = calendar._currentYear-5; i <= parseInt(calendar._currentYear)+5; i++)
	{
		var opt = document.createElement("option");
		opt.value = i;
		opt.innerHTML = i;
		if(calendar._currentYear== i) opt.selected = true;
		sel.appendChild(opt);
	}
}

function SetHeaderValues()
{
	var sel = document.getElementById("month-selector");
	for(var i = 0; i < sel.options.length; i++)
	{
		sel.options[i].selected = (calendar._currentMonth == sel.options[i].value);
	}

	var sel = document.getElementById("year-selector");
	for(var i = 0; i < sel.options.length; i++)
	{
		sel.options[i].selected = (calendar._currentYear == sel.options[i].value);
	}
}

function MonthOnChangeHandler(elm)
{
	calendar.SetMonth(elm.options[elm.selectedIndex].value);
	SetCalendarCookie(calendar._currentMonth,calendar._currentYear);
	SetHeaderValues();
}

function YearOnChangeHandler(elm)
{
	calendar.SetYear(elm.options[elm.selectedIndex].value);
	SetCalendarCookie(calendar._currentMonth,calendar._currentYear);
	SetHeaderValues();
}

function ToggleShortListLinks(elmId)
{
	var addLink = document.getElementById("add_to_favorites");
	var removeLink = document.getElementById("remove_from_favorites");

	if(shortList.DoesItemExist(elmId) != "")
	{
		addLink.style.display = "none";
		removeLink.style.display = "block";
	}
	else
	{
		addLink.style.display = "block";
		removeLink.style.display = "none";
	}
}

function SenderInfo()
{
	this.Name = "";
	this.Email = "";
	this.Phone = "";

	this.Save = function()
	{
		Tangora.Cookies.SetCookieValue("tangora_sender","name",this.Name);
		Tangora.Cookies.SetCookieValue("tangora_sender","email",this.Email);
		Tangora.Cookies.SetCookieValue("tangora_sender","phone",this.Phone);
	}
}

function EnquiryFormInit(pId, fId)
{
	if(fId == null || fId == "") fId = "15";

	var elm = document.getElementById("property-name");
	var property = document.getElementById("property");
	var frm = document.getElementById("listform" + fId);

	if(elm && property && property.options.length > 0)
	{
		elm.innerHTML = property.options[property.selectedIndex].innerHTML;
	}

	if(frm)
	{
		var act = frm.action;
		if(act.indexOf("propertyid") == -1)
		{
			act += "&propertyid=" + pId;
			frm.action = act;
		}
	}
}