//JavaScript Calendar v2015
//Author: Robert W. Husted (robert.husted@iname.com)
// Date:  Nov'99
//Author2:Eric Freed (helpdesk@freedfamily.org)
// Date:  Feb'02
//Author3:Rune Sandbakken, http://www.solfaktor.com
// Date:  May'04-July'04.  The code is now an unmaintable, unportable spaghetti monster.   Looks good on IE though.

topBackground   ="white";
bottomBackground="white";
tableBGColor    ="black";
cellColor       ="#EDEDED";
headingCellColor="#FF9500";
headingTextColor="white";
weekColor       ="#BABABA";
headingWeekColor="#FF9500";
dateColor       ="#42352D";
dateColor       ="#2F72B0";
redColor        ="#E10000";
pinkColor        ="#4E9D43";
hoverColor      ="darkred";
fontStyle       ="8pt arial, helvetica";
headingFontStyle="8pt arial, helvetica";
bottomBorder    =true;
//windowSize      ="width=165,height=175";
var windowSize = '';
cal_opentwice	=true; //This is a workaround for IE to make the window come to top when it was already open

//End of customizable section

todayStr = "Idag";
weekdayList  = new Array('Mandag', 'Tisdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag', 'Søndag' );
weekdayArray = new Array('Ma','Ti','On','To','Fr','Lø','Sø');
monthArray = new Array('Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni',
			'Juli', 'August', 'September', 'Oktober', 'November', 'Desember');

var calCtrl, initDate;
var cal  = "loaded";
var isNav= (navigator.appName == "Netscape");
var isIE = !isNav;
var calDateFormat = 'dd/mm/yyyy';
var windowTitle = 'Velg avreise';
var calDate = new Date();
var dRadio = '';
var pm = 3;

var gform;
var lang;

var weekdays = "<TR BGCOLOR='"+headingCellColor+"'><td class='heading'>&nbsp;Uke&nbsp;</td>";
for (i in weekdayArray) {
 weekdays += "<TD class='heading' align=center>"+weekdayArray[i]+"</TD>";
}
if (bottomBorder) weekdays += "<TD rowspan=7 bgcolor=black></TD>";
weekdays += "</TR>";

blankCell= "<TD align=center class='heading' bgcolor='"+cellColor+"'>&nbsp;</TD>";

var longSpace="";
for (i=0; i<50; i++) { longSpace+="&nbsp;" }

calendarBegin =
"<HTML><HEAD>" +
"<STYLE type='text/css'>" +
"<!--" +
"TD.heading { text-decoration: none; color:" + headingTextColor + "; font: " + headingFontStyle + "; }" +
"A.redDay { color: " + redColor + "; text-decoration: none; font: " + fontStyle + "; }" +
"A.pinkDay { color: " + pinkColor + "; text-decoration: none; font: " + fontStyle + "; }" +
"A.weekDay  { color: " + dateColor  + "; text-decoration: none; font: " + fontStyle + "; }" +
"A.weekDay:hover { color: " + hoverColor + "; text-decoration: none; font: " + fontStyle + "; }" +
".text { font-size:11px; font-family:arial }" +
"-->" +
"</STYLE>" +
"</HEAD>" +
"<BODY BGCOLOR='" + bottomBackground + "'" +
"<CENTER>";
if (isNav) {
calendarBegin += 
"<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=0 ALIGN=CENTER BGCOLOR='" +tableBGColor+ "'><TR><TD>";
}
calendarBegin +=
"<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=0 ALIGN=CENTER BGCOLOR='" +tableBGColor+ "'>" +
weekdays +
"<TR>";

calendarEnd = "";
if (bottomBorder) {
  calendarEnd += "<TR><TD colspan=8></TD></TR>";
}
if (isNav) {
  calendarEnd += "</TD></TR></TABLE>";
}
calendarEnd += 
"</TABLE></CENTER>";


var delim, val, DayFormat, DayStr; //used to for next 2 functions to communicate

function showCalendar(var1,var2,var3) 
{
	var form;
	gform = '';
	dRadio = ''
	if(var2)
	{
		ymfield = var1;
		dfield = var2
		if(var3) lang = var3;
		gymfield = ymfield;
		gdfield = dfield;
		windowSize      ="width=180,height=170";
		var datestring = ymfield.value + '-' + dfield.value;
		var datea = datestring.split('-');
		calDate = new Date(datea[0],datea[1]-1,datea[2]);
	}
	else
	{
		form = var1;
		gform = form;
		windowSize      ="width=200,height=320";
		if(form.m1.value != '' && form.d1.value > 0 && form.m2.value != '' && form.d2.value > 0)
		{
			var mm1 = form.m1.value.split('-');
			var t1 = new Date(mm1[0],mm1[1]-1,form.d1.value);
			var mt1 = calDate.getTime();
			var mm2 = form.m2.value.split('-');
			var t2 = new Date(mm2[0],mm2[1]-1,form.d2.value);
			var diff = (t2.getTime() - t1.getTime()) / 86400000;
			calDate = new Date();
			if(diff > 60) { calDate.setTime(t1.getTime() + 15 * 86400000)}
			else 
			{
				calDate.setTime((t1.getTime() + t2.getTime()) / 2);
				pm = diff / 2;
			}
		}
		else
		{
			if(form.m.value)
			{
				var datea = form.m.value.split('-');
				calDate = new Date(datea[0],datea[1]-1,15);
				form.m1.value = form.m.value;
				form.m2.value = form.m.value;
				form.d1.value = 1;
				form.d2.value = getDaysInMonth();
			}
			else
			{	
				calDate = new Date();
				var t = calDate.getTime();
				calDate.setTime(t + 86400000 * 21);	
			}
			pm = 3;
		}
		ymfield = form.m;
		dfield = form.d;
		lang = form.action.substring(6,8);

		var j;
		dRadio = "<form name=pmf class='text'>Søk på<br />";
		for(var i=0;i<6;i++)
		{
			dRadio += "<label for=" + i + " id=" + i + "><input id=" + i + " type='radio' class='weekDay' name='pm' value='" + i + "'";
			if(i==0){if(pm<1) j=i,dRadio += " checked"; dRadio += ">Eksakt avreisedato"}
			if(i==1){if(pm>0 && pm<3) j=i,dRadio += " checked"; dRadio += '> +/- 1 dag'}
			if(i==2){if(pm>2 && pm<5) j=i,dRadio += " checked"; dRadio += "> +/- 3 dager"}
			if(i==3){if(pm>4 && pm<9) j=i,dRadio += " checked"; dRadio += "> +/- 7 dager"}
			if(i==4){if(pm>8) j=i,dRadio += " checked"; dRadio += "> +/- 14 dager"}
			if(i==5){dRadio += " onClick='parent.opener.allDates()'> +/- alle"}
			dRadio += '<br />';
		}
		dRadio += '</form>';
	}
	if (parseInt(navigator.appVersion)<4) return false;

	//set initial date
	//calDateField = dateField;
	//var datestring = ymfield.value + '-' + dfield.value;
	//var datea = datestring.split('-');
	
	initDate = new Date(calDate);
	calDate.setDate(1);

	if (isNav) rows= "'42,*'";
	else rows= "'30,*'";
	calDocFrameset = 
	"<HTML><HEAD><TITLE>"+ windowTitle + longSpace +"</TITLE></HEAD>\n" +
	"<FRAMESET ROWS="+ rows +" BORDER='0'>\n" +
	"  <FRAME NAME='topCalFrame'  marginwidth='0' marginheight='8'  SRC='javascript:parent.opener.calDocTop' SCROLLING='no'>\n" +
	"  <FRAME NAME='bottomCalFrame' SRC='javascript:parent.opener.calDocBottom' SCROLLING='no'>\n" +
	"</FRAMESET>\n";
	
	calDocBottom = buildBottomCalFrame();
	
	calDocTop =
	"<HTML>" +
	"<HEAD></HEAD>" +
	"<BODY onLoad='' BGCOLOR='" +topBackground+ "'>" +
	"<STYLE>" +
	".inp { font-size: 10px; font-family: verdana, arial, helvetica; color:#2F72B0; width:118px; height:18px; border: solid #7F9DB9 1px; }" +
	".but { font-size: 11px; font-family:arial; color:#ffffff; background-color: #2F72B0; height:20px; }" +
	"</STYLE>" +
	"<CENTER>" + 
	"<FORM NAME='calControl' onSubmit='document.calControl.year.blur();return false;'>" +
	getMonthSelect() +
	"<INPUT NAME='year' VALUE='" +calDate.getFullYear()+ "' TYPE=HIDDEN SIZE=4 MAXLENGTH=4 onChange='parent.opener.setYear()'>" +
	"<NOBR><INPUT " +
	"TYPE=BUTTON CLASS='but' NAME='previousMonth' VALUE=' < ' onClick='parent.opener.setPreviousMonth()'><img src='/img/bdot.gif' width='1' height='1' /><INPUT " +
	"TYPE=TEXT CLASS='inp' STYLE='text-align:center' NAME='ym' VALUE='" + monthArray[month] + " " + year + "' size=13><img src='/img/bdot.gif' width='1' height='1' /><INPUT " +
	"TYPE='hidden' NAME='pm' VALUE='0'><INPUT " +
	"TYPE=BUTTON CLASS='but' NAME='nextMonth' VALUE=' > ' onClick='parent.opener.setNextMonth()'>" +
	"</NOBR>" +
	"</FORM></CENTER>" +
	"<SCRIPT language=JavaScript>" +
	"parent.opener.calCtrl=document.calControl;" +
	"</SCRI" + "PT></BODY></HTML>";
	
	if (isIE&&cal_opentwice) {
 		calWin = window.open('about:blank','calWin','dependent=yes,width=1,height=1,screenX=200,screenY=300,titlebar=yes');
 		calWin.close();
	}
	calWin = window.open('javascript:opener.calDocFrameset','calWin','dependent=yes,'+windowSize+',screenX=200,screenY=300,titlebar=yes');
	if(!var2) if(eval(calWin.frames.bottomCalFrame)) calWin.frames['bottomCalFrame'].document.pmf.pm[j].checked = true;
}


function buildBottomCalFrame() {       
var calDoc = calendarBegin;
month=calDate.getMonth();
year =calDate.getFullYear();
day  =initDate.getDate();
var columnCount=0;
var days = getDaysInMonth();
if (day > days) day = days;
var firstOfMonth = new Date (year, month, 1);
var startingPos  = (firstOfMonth.getDay() + 6) % 7;
days += startingPos;

calDoc += "<td align=center class='heading' bgcolor='" + weekColor + "'>" + getWeek(year,month,1) + "</td>";

for (i=0; i < startingPos; i++) {
 calDoc += blankCell;
 columnCount++;
}
var currentDay=0;
for (i=startingPos; i < days; i++) { 
 currentDay = i-startingPos+1;

 dayType = dayColor(currentDay, month, year);
  //dayType = "redDay";
  //else
  //dayType = "weekDay";
 

 calDoc +="<TD align=center bgcolor='" +cellColor+ "'>" +
          "<a class='" +dayType+ "' href='javascript:parent.opener.returnDate(" + 
          currentDay + ")'>&nbsp;" + currentDay + "&nbsp;</a></TD>";

 columnCount++;
 if (columnCount % 7 == 0) calDoc += "</TR><TR><td align=center class='heading' bgcolor='" + weekColor + "'>" + getWeek(year,month,currentDay + 1) + "</td>";
}
for (i=days; i<42; i++)  {
 calDoc += blankCell;
 columnCount++;
 if (columnCount % 7 == 0) {
  calDoc += "</TR>";
  if (i<41) calDoc += "<TR><td bgcolor='" + weekColor + "'></td>";
 }
}
calDoc += calendarEnd + dRadio;
if(lang == 'se') {
calDoc = calDoc.replace('Uke','Vk')
calDoc = calDoc.replace('alle','alla')
calDoc = calDoc.replace(/ager/g,'agar')
calDoc = calDoc.replace(/Velg/g,'Välg')
calDoc = calDoc.replace(/ø/g,'ö')
calDoc = calDoc.replace(/eise/g,'ese')
calDoc = calDoc.replace(/dato/g,'datum')
calDoc = calDoc.replace(/ksakt/g,'xakt')
}
if(lang == 'dk') 
{
calDoc = calDoc.replace('Uke','Uge')
calDoc = calDoc.replace('eise','ejse')
calDoc = calDoc.replace('Søk','Søg')
calDoc = calDoc.replace('avrej','afrej')
}
	return calDoc;
}

function writeCalendar() {
calDocBottom = buildBottomCalFrame();
calWin.frames['bottomCalFrame'].document.open();
calWin.frames['bottomCalFrame'].document.write(calDocBottom);
calWin.frames['bottomCalFrame'].document.close();
}

function setToday() {
calDate = new Date();
returnDate(calDate.getDate());
}

function setYear() {
var year = calCtrl.year.value;
if (isFourDigitYear(year)) {
calDate.setFullYear(year);
writeCalendar();
}
}

function setPreviousYear() {
calCtrl.year.value--;
setYear();
}

function setNextYear() {
calCtrl.year.value++;
setYear();
}

function setPreviousMonth() {
var year = calCtrl.year.value;
if (isFourDigitYear(year)) {
 var month = calCtrl.month.value;
 if(month == '') month = calDate.getMonth();
 if (month == 0) {
  month = 11;
  if (year > 1000) {
   year--;
   calDate.setFullYear(year);
   calCtrl.year.value = year;
  }
 } else {
  month--;
 }
 calDate.setMonth(month);
 //calCtrl.month.selectedIndex = month;
 calCtrl.ym.value = monthArray[month] + " " + year;
 calCtrl.month.value = month;
 writeCalendar();
}
}

function setNextMonth() {
var year = calCtrl.year.value;
if (isFourDigitYear(year)) {
 var month = calCtrl.month.value;
 if(month == '') month = calDate.getMonth();
 if (month == 11) {
  month = 0;
  year++;
  calDate.setFullYear(year);
  calCtrl.year.value = year;
 } else {
  month++;
 }
 calDate.setMonth(month);
 //calCtrl.month.selectedIndex = month;
 calCtrl.ym.value = monthArray[month] + " " + year;
 calCtrl.month.value = month;
 writeCalendar();
}
}

function getDaysInMonth()  {
var days=28;
var month=calDate.getMonth()+1;
var year =calDate.getFullYear();
if (month==1||month==3||month==5||month==7||month==8||month==10||month==12) {
 days=31;
} else if (month==4 || month==6 || month==9 || month==11) {
 days=30;
} else if (month==2 && ( (year%4)==0 && (year%100)!=0 || (year%400)==0 )) {
 days=29;
}
return (days);
}

function isFourDigitYear(year) {
if (year.length != 4 || isNaN(year)) {
calCtrl.year.value = calDate.getFullYear();
calCtrl.year.select();
calCtrl.year.focus();
return false;
}
return true;
}

function getMonthSelect() {
var activeMonth = calDate.getMonth();
monthSelect = "<input type=hidden value='' NAME='month'>";
//for (i in monthArray) {
//if (i == activeMonth) {
    //monthSelect += "<OPTION SELECTED>" + monthArray[i] + "\n";
//}
//else {
    //monthSelect += "<OPTION>" + monthArray[i] + "\n";
//}
//}
//monthSelect += "</SELECT>";
return monthSelect;
}

function jsReplace(inString, find, replace) {
var outString = "";
if (!inString) return "";
if (inString.indexOf(find) != -1) {
t = inString.split(find);
return (t.join(replace));
}
else {
return inString;
}
}

function doNothing() {
}

function makeTwoDigit(inValue) {
var numVal = parseInt(inValue, 10);
if (numVal < 10) {
  return("0" + numVal);
}
else {
  return numVal;
}
}

function returnDate(inDay) 
{
	calDate.setDate(inDay);
	var day        =calDate.getDate();
	var month      =calDate.getMonth()+1;
	var year       =calDate.getFullYear();
	var yearString =""+year;
	var monthString=monthArray[calDate.getMonth()];
	var monthAbbr  =monthString.substring(0,3);
	var weekday    =weekdayList[calDate.getDay()];
	var weekdayAbbr=weekday.substring(0,3);

	if(gform)
	{
		for(pm=0;pm<5;pm++)
		{
			if(calWin.frames['bottomCalFrame'].document.pmf.pm[pm].checked)
			{
				if(pm==4) pm=14;
				if(pm==3) pm=7;
				if(pm==2) pm=3;
				break;
			}
		}
		var dd1 = new Date();
		dd1.setTime(calDate.getTime() - 86400000 * pm);
		var dd2 = new Date();
		dd2.setTime(calDate.getTime() + 86400000 * pm);
		gform.d1.value = dd1.getDate();
		gform.d2.value = dd2.getDate();
		gform.m1.value = dd1.getYear() + '-' + makeTwoDigit(dd1.getMonth() + 1);
		gform.m2.value = dd2.getYear() + '-' + makeTwoDigit(dd2.getMonth() + 1);
		if(gform.m.type != 'hidden') gform.m.value = calDate.getYear() + '-' + (calDate.getMonth() + 1);
	}
	else
	{
		gdfield.value = makeTwoDigit(day);
		gymfield.value = year + '-' + makeTwoDigit(month);
		gdfield.focus();
	}
	calWin.close();
}

function allDates()
{
	gform.d1.value = '';
	gform.d2.value = '';
	gform.m1.value = '';
	gform.m2.value = '';
	if(gform.d) gform.d.value = '';
	calWin.close();
}

function dayTh(d) {
if (d==1||d==21||d==31)
	return "st"
if (d==2||d==22)
	return "nd"
if (d==3||d==23)
	return "rd"
return "th"
}


function getWeek(year,month,day) {
    var when = new Date(year,month,day);
    var newYear = new Date(year,0,1);
    var modDay = newYear.getDay();
    if (modDay == 0) modDay=6; else modDay--;

    var daynum = ((Date.UTC(y2k(year),when.getMonth(),when.getDate(),0,0,0) -
                 Date.UTC(y2k(year),0,1,0,0,0)) /1000/60/60/24) + 1;

    if (modDay < 4 ) {
        var weeknum = Math.floor((daynum+modDay-1)/7)+1;
    }
    else {
        var weeknum = Math.floor((daynum+modDay-1)/7);
        if (weeknum == 0) {
            year--;
            var prevNewYear = new Date(year,0,1);
            var prevmodDay = prevNewYear.getDay();
            if (prevmodDay == 0) prevmodDay = 6; else prevmodDay--;
            if (prevmodDay < 4) weeknum = 53; else weeknum = 52;
        }
    }

    return + weeknum;
}

function dayColor(day,month,year)
{
	var d = new Date(year,month,day);
	if(d.getDay() == 0) return 'redDay';
	if(month == 11 && (day == 24 || day == 31)) return 'pinkDay';
	if(month == 11 && (day == 26 || day == 26)) return 'redDay';
	if(month == 4 && ((day == 1 && lang != 'dk') || (day == 17 && lang == 'no'))) return 'redDay';
	if(month == 0 && day == 1) return 'redDay';
	if(lang == 'se' && month == 0 && day == 5) return 'redDay';
	if(lang == 'dk' && month == 5 && day == 5) return 'redDay'; //Grundlovsdag

	if(year == 2005)
	{
		if(month == 3 && day == 22 && lang == 'dk') return 'redDay'; //Bededag
		if(month == 4 && (day == 5 || day == 16)) return 'redDay'; //Kr himmelfart + pinse
		if(month == 2 && ((day == 24 && lang != 'se') || day == 25 || day == 28)) return 'redDay'; //Påske
	}
	if(year == 2006)
	{
		if(month == 4 && (day == 25 || (day == 12 && lang == 'dk'))) return 'redDay'; //Kr himmelfart/bede
		if(month == 5 && day == 5) return 'redDay'; //Pinse
		if(month == 3 && ((day == 13 && lang != 'se') || day == 14 || day == 17)) return 'redDay'; //Påske
	}

	if(year == 2007)
	{
		if(month == 4 && (day == 28 || day == 17 || (day == 4 && lang == 'dk'))) return 'redDay'; //Kr himmelfart,pinse,bededag
		if(month == 3 && ((day == 5 && lang != 'se') || day == 6 || day == 9)) return 'redDay'; //Påske
	}


	if(lang == 'no');
	if(d.getDay() == 6) return 'pinkDay';
	return 'weekDay';
}

function y2k(number) { return (number < 1000) ? number + 1900 : number; }


