var day_of_week = new Array('M','T','O','T','F','L','S');
var month_of_year = new Array('januari','februari','mars','april','maj','juni','juli','augusti','september','oktober','november','december');

var TR_start = '<TR>';
var TR_end = '</TR>';

var highlight_start = '<TD class=today><B><CENTER>';
var highlight_end   = '</CENTER></B></TD>';

var selDay_start = '<TD class="selDay"><B><CENTER>';
var selDay_end   = '</CENTER></B></TD>';

var TD_start = '<TD class="day"><CENTER>';
var TD_end = '</CENTER></TD>';

var week_start = '<TD class="week"><CENTER>';
var week_end =  '</CENTER></B></TD>';

var firstLabelDayName;
var secondLabelDayName;
/*

var firstCalDivName = '';
var firstCalHiddenName = '';

var endCalDivName = '';
var endCalHiddenName = '';

var firstDropDayName = '';
var firstDropMonthName = '';

var secondDropDayName = '';
var secondDropMonthName = '';
*/

function GetNextMonth(date)
{

if(date.getMonth()==11)
	nDate = DateFromString(parseInt(date.getFullYear()+1) +"-" +"01" +"-01");
else	
	{		
	sDate = date.getFullYear() +"-" +parseInt(date.getMonth()+2) +"-01";		
	nDate = DateFromString(sDate);
	}

return StringFromDate(nDate);
}

function GetPrevMonth(date)
{
if(date.getMonth()==0)
	nDate = DateFromString(parseInt(date.getFullYear()-1) +"-" +"12" +"-01");
else	
	{			
	sDate = date.getFullYear() +"-" +date.getMonth() +"-01";		
	nDate = DateFromString(sDate);
	}

nDate.setMonth(nDate.getMonth()+1);
nDate.setDate(nDate.getDate()-1);

return StringFromDate(nDate);
}

function renderCal(Calendar,divName,hiddenName)
{

	if(!Calendar || Calendar=="")
		{
		Calendar = new Date();	
		}
	else
		Calendar = DateFromString(Calendar);


		
	dateCompare = new Date();
	dateCompare.setDate(dateCompare.getDate()+validDepartureDateFromNow); /*+3 innnan ändring 22/1-07*/
	if(DateFromString(StringFromDate(Calendar)) < DateFromString(StringFromDate(dateCompare)))
	{
		alert("Du har valt ett f\u00F6r tidigt datum : " + StringFromDate(Calendar));
		return;
	}
		
	selDateString = StringFromDate(Calendar);	
	selDate = DateFromString(selDateString);


	var year = Calendar.getFullYear();	   
	var month = Calendar.getMonth();   
	var weekday = Calendar.getDay();   

	var todayDate = new Date();
	var DAYS_OF_WEEK = 7;
	var DAYS_OF_MONTH = 31;    
	var cal;    

	/*alert(StringFromDate(Calendar));*/
		
	var dateSegs = StringFromDate(Calendar).split("-");	
	y = dateSegs[0];
	m = dateSegs[1];
	d = dateSegs[2];
		
	/*alert(d.substring(0,1));*/
	if (d.substring(0,1) == "0")
	{	
		d = d.substring(1,2);
	}
		
	if (divName == firstCalDivName)
	{
		/*alert(divName);*/
		select(firstDropMonthName, m + "-" + y);
		select(firstDropDayName, d);
	}
	else
	{
		/*alert(divName);*/
		select(secondDropMonthName, m + "-" + y);
		select(secondDropDayName, d);
	}

	Calendar.setDate(1);    




	cal =  '<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0  width=210><TR><TD>';
	cal += '<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 class=text width=210>' + TR_start;
	cal += '<TD class=title><a href="javascript:renderCal(\'' +GetPrevMonth(Calendar) +'\',\'' +divName +'\',\'' +hiddenName +'\');"><img src=' + calendarPrevUrl + ' vspace=0 hspace=0 border=0 /></a></TD>';
	cal += '<TD class=title COLSPAN="' + parseInt(parseInt(DAYS_OF_WEEK)-1) + '" ><CENTER><B>';
	cal += month_of_year[month]  + '   ' + year + '</B>' + TD_end;
	cal += '<TD class=title align="right"><a href="javascript:renderCal(\'' +GetNextMonth(Calendar) +'\',\'' +divName +'\',\'' +hiddenName +'\');"><img src=' + calendarNextUrl + ' vspace=0 hspace=0 border=0 /</a></TD>';
	cal += TR_end +TR_start;

	cal += week_start + "&nbsp;" + TD_end;

	for(index=0; index < DAYS_OF_WEEK; index++)
	{
		cal += week_start + day_of_week[index] + week_end;
	}

	if(Calendar.getDay()!=1)
	{
		cal += TD_end + TR_end;
		cal += TR_start;
		cal += week_start + 'v. ' + getWeekNr(Calendar) + TD_end;	

		if(Calendar.getDay()==0)
		{		
			for(index=0; index<6; index++)
				cal += TD_start + '&nbsp;' + TD_end;	
		}
		else
		{	
			for(index=0; index<Calendar.getDay()-1; index++)
				cal += TD_start + '&nbsp;' + TD_end;	
		}
	}


	for(index=0; index < DAYS_OF_MONTH; index++)
	{
	if( Calendar.getDate() > index )
	{
	week_day = Calendar.getDay();
	  
	if(week_day == 1)
	{	
		cal += TR_start;	
		cal += week_start + 'v.' + getWeekNr(Calendar) + TD_end;	
	}  
	  
	if(week_day != DAYS_OF_WEEK)
	{  
	var day  = Calendar.getDate();
	dayString = "<a class=todayLink onclick='hideCalendars();' href='javascript:renderCal(\"" +StringFromDate(Calendar) +"\",\"" +divName +"\",\"" +hiddenName +"\")'>" +day +"</a>";    
	selDayString = "<a class=selDayLink onclick='hideCalendars();' href='javascript:renderCal(\"" +StringFromDate(Calendar) +"\",\"" +divName +"\",\"" +hiddenName +"\")'>" +day +"</a>";    
	    
	if( StringFromDate(todayDate)==StringFromDate(Calendar))
		{
		cal += highlight_start + dayString + highlight_end + TD_end;
		}  
	else if(StringFromDate(selDate)==StringFromDate(Calendar))
		{  
		cal += selDay_start + selDayString + selDay_end + TD_end;  
		}  
	else
		{
		cal += TD_start + dayString + TD_end;
		}
	}
	  
	if(week_day == DAYS_OF_WEEK)
		cal += TR_end;
		
	}
	   
	Calendar.setDate(Calendar.getDate()+1);
	}

	cal += '</TD></TR></TABLE></TABLE>'; 

	if (document.getElementById(divName) != null) 
	{
	document.getElementById(divName).innerHTML = cal;
	}
	else{
	/*alert('row 207: ' + document.getElementById(divName));*/
	}

	if (document.forms[0][hiddenName] != null) 
	{
	document.forms[0][hiddenName].value = selDateString;
	}
	else{
	/*alert('row 215: ' + document.forms[0][hiddenName]);*/
	}

	if(divName!=endCalDivName)
	{
		if(document.forms[0][endCalHiddenName])
		{
			curToDateString = document.forms[0][endCalHiddenName].value;
			curToDate = DateFromString(curToDateString);
			
			curFromDate = DateFromString(selDateString);
			
			if(curToDate<curFromDate) 
			{
				var newDate = DateFromString(selDateString);
				newDate.setDate(newDate.getDate()+7);
				renderCal(StringFromDate(newDate), endCalDivName, endCalHiddenName);
			}
		}
		else{
		/*alert('row 235: ' + document.forms[0][endCalHiddenName]);*/
		}
	}
	//document.forms[0].JSCal1_hidCalendarDate.value = selDateString;
	/*
	alert(document.forms[0].JSCal1_hidCalendarDate.value)
	alert(document.forms[0](hiddenName).value);
	alert(document.forms[0].JSCal1_hidCalendarDate.value)
	*/
	if (divName == firstCalDivName){
		if (firstLabelDayName != null && document.getElementById(firstLabelDayName)){
			document.getElementById(firstLabelDayName).innerHTML = dayName(DateFromString(selDateString).getDay());
		}
	}
	else{
		if (secondLabelDayName != null && document.getElementById(secondLabelDayName)){
			document.getElementById(secondLabelDayName).innerHTML = dayName(DateFromString(selDateString).getDay());
		}
	}
	/*alert(firstCalHiddenName);
	alert(firstCalHiddenName);*/
	if (document.forms[0][firstCalHiddenName] != null && document.forms[0][firstCalHiddenName].value != "" && document.forms[0][endCalHiddenName].value != ""){
		var fromDate = DateFromString(document.forms[0][firstCalHiddenName].value);
		var toDate = DateFromString(document.forms[0][endCalHiddenName].value);
		//alert("From :" +StringFromDate(fromDate) + "\nTo: " + StringFromDate(toDate));
		var millisecondsDay = 1000*60*60*24;

		//var intNights = Math.ceil((toDate.getTime()-fromDate.getTime())/(millisecondsDay));
		var intNights = Math.round((toDate.getTime() - fromDate.getTime())/millisecondsDay);
		//alert((toDate.getTime() - fromDate.getTime())/millisecondsDay);
		/*alert(intNights);*/
	    
		if (intNights < 1)
		{
			var errorMessage;
			var showErrorMessage = false;
			if (intNights < 0)
			{
				errorMessage = "Du har valt ett felaktigt datum, utcheckningsdatum är tidigare än incheckningsdatum";
				
				showErrorMessage = true;
			}
			else if (!sameDeparureDateAndReturnDateAllowed && intNights < 1)
			{
				
				errorMessage = "Du har valt ett felaktigt datum, utcheckningsdatum är samma som incheckningsdatum";
				
				showErrorMessage = true;
			}
	        
			if (showErrorMessage) 
			{
				alert(errorMessage);
	        
				var date = fromDate;
				date.setDate(date.getDate()+1);
				var stringDate = StringFromDate(date);
				renderCal(stringDate, divName, hiddenName);
				return;
			}
		}
	if (document.getElementById('spanNumberOfNights') != null)
			document.getElementById('spanNumberOfNights').innerHTML = intNights;
	}
}
function dayName(day)
{
	if(day==1)return "M\u00E5ndag";
	if(day==2)return "Tisdag";
	if(day==3)return "Onsdag";
	if(day==4)return "Torsdag";
	if(day==5)return "Fredag";
	if(day==6)return "L\u00F6rdag";
	if(day==0)return "S\u00F6ndag";
}

function DateFromString(dateStr)
{
	segs = dateStr.split("-");						
	y = segs[0];
	m = segs[1];
	d = segs[2];

	d = new Date(y,m-1,d);		
	return d;	
}

function DateFromDateTime(date)
{
	stringDate = StringFromDate(date);		
	return DateFromString(stringDate);
}

function getWeekNr(today)
{	
	if(today.getMonth()==0 && (today.getDay()==0 || today.getDay()>4))
	{	
		return getWeekNr(DateFromString(today.getFullYear()-1 +"-12-31"));
	}

	Year = takeYear(today);
	Month = today.getMonth();
	Day = today.getDate();
	now = Date.UTC(Year,Month,Day+1,0,0,0);
	var Firstday = new Date();
	Firstday.setYear(Year);
	Firstday.setMonth(0);
	Firstday.setDate(1);
	then = Date.UTC(Year,0,1,0,0,0);
	var Compensation = Firstday.getDay();
	if (Compensation > 3) Compensation -= 4;
	else Compensation += 3;
	NumberOfWeek =  Math.round((((now-then)/86400000)+Compensation)/7);
	return NumberOfWeek;
}


function takeYear(theDate)
{
	x = theDate.getFullYear();
	var y = x % 100;
	y += (y < 38) ? 2000 : 1900;
	return y;
}


function StringFromDate(date)
{
	return date.getFullYear() +"-" +ensureTwoDig(date.getMonth()+1) +"-" +ensureTwoDig(date.getDate());
}

function ensureTwoDig(val)
{
tmp = "0" +val;		
return tmp.substring(tmp.length-2);
}

function select(select, value)
{
	if (document.getElementById(select) != null) 
	{
		select = document.getElementById(select);
		
		for (var i = 0; i < select.options.length; i++)
		{
			if (select.options[i].value == value)
			{
				select.selectedIndex = select.options[i].index;
			}
		}
	}
	else
	{
		if (document.forms[0][select] != null){
			select = document.forms[0][select];
			
			for (var i = 0; i < select.options.length; i++)
			{
				if (select.options[i].value == value)
				{
					select.selectedIndex = select.options[i].index;
				}
			}
		}
		else {
			/*alert('row 323: ' + document.getElementById(select));
			*/
		}
	}
}

function changeCalendarValue(day, month, calDivName, calHiddenName)
{
	if (document.forms[0][day] != null && document.forms[0][month] != null && document.getElementById(calDivName) != null && document.forms[0][calHiddenName] != null) 
	{
		day = document.forms[0][day];
		month =  document.forms[0][month];
		
		var intDay = day.options[day.selectedIndex].value;
		var intMonth = month.options[month.selectedIndex].value;
		
		dateSegs = intMonth.split("-");
		m = dateSegs[0];
		y = dateSegs[1];
		
		var stringDate = y + '-' + m + '-' + intDay;
		
		/*alert(stringDate);*/
		renderCal(stringDate, calDivName, calHiddenName);
	}
	else
	{
		/*
		var text = 'day: ' + document.getElementById(day);
		text += '\n month: ' + document.getElementById(month);
		text += '\n calDivName: ' + document.getElementById(calDivName);
		text += '\n calHiddenName: ' + document.getElementById(calHiddenName);
		alert('changeCalendarValue IE ok: \n' + text);
		
		var text2 = 'day: ' + document.forms[0][day];
		text2 += '\n month: ' + document.forms[0][month];
		text2 += '\n calDivName: ' + document.getElementById(calDivName);
		text2 += '\n calHiddenName: ' + document.forms[0][calHiddenName];
		alert('changeCalendarValue 2: \n' + text2);
		*/
	}
}

function showLayer(showCal, hideCal)
{
	showCal.style.visibility = "visible";
	hideCal.style.visibility = "hidden";
}
function hideCalendars()
{ 
	document.getElementById('cal1').style.visibility = "hidden";
	document.getElementById('cal2').style.visibility = "hidden";
}

function showHideLayer(showCal, hideCal)
{
	// reposition calendar if screen res is too small
	position = findPos(showCal);
	/*alert("left: " + position[0] + ", top: " + position[1] + ", screen.width: " + screen.availWidth);*/
	if ((position[0] + 210) > screen.width)
	{
		showCal.style.left = (screen.width - 210);
	}
	//
	
	if (showCal.style.visibility == "visible")
	{
		showCal.style.visibility = "hidden";
		hideCal.style.visibility = "hidden";
	}
	else{
		showCal.style.visibility = "visible";
		hideCal.style.visibility = "hidden";
	}
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}