/**
 * browser sniffing
 */
//var fDom=document.getElementById?1:0;
//var fExp=navigator.userAgent.toLowerCase().indexOf('msie')!=-1?1:0;
//var fMenu=0;
//var oDefaultDesc=null;

var g_sUserAgemt=navigator.userAgent.toLowerCase();
var g_fDOM=document.getElementById?1:0;
var g_fNS=g_sUserAgemt.indexOf('mozilla')!=-1&&g_sUserAgemt.indexOf('compatible')==-1?1:0;
var g_fIE=g_sUserAgemt.indexOf('msie')!=-1?1:0;
var g_fOpr5=g_sUserAgemt.indexOf('opera 5')!=-1||g_sUserAgemt.indexOf('opera/5')!=-1?1:0;
var g_fDOMNS=g_fDOM&&g_fNS?1:0;
var g_fDOMIE=g_fDOM&&g_fIE?1:0;
var g_fNS4=g_fNS&&!g_fDOM&&document.layers?1:0;
var g_fIE4=g_fIE&&!g_fDOM&&document.all?1:0;

/**
 * calendar
 */
function showCalendar(sAction, sParam, fNoWrite)
{
	if(!g_fCalendarReady)
	{
		// group by same date
		for(var i=0;i<g_aCalendarItems.length;i++)
			for(var j=(i+1);j<g_aCalendarItems.length;j++)
				if(g_aCalendarItems[i][0] == g_aCalendarItems[j][0])
				{
					g_aCalendarItems[i][4][g_aCalendarItems[i][4].length] = j;
					g_aCalendarItems[j][4][g_aCalendarItems[j][4].length] = i;
				}
		g_fCalendarReady=1;
	}

	var sHTML="";
	switch(sAction)
	{
		case "today":
		case "first":
			var dtNow = new Date();
			g_nCalendarMonth = dtNow.getMonth();
			g_nCalendarYear = dtNow.getYear();
			if(g_nCalendarYear < 2000) g_nCalendarYear = g_nCalendarYear + 1900;		// Y2K Fix, Isaac Powell, http://onyx.idbsu.edu/~ipowell
		case "current":
			sHTML = displayCalendar(g_nCalendarMonth, g_nCalendarYear);
			break;

		case "next":
			if(++g_nCalendarMonth >= 12) { g_nCalendarMonth = 0; g_nCalendarYear++; }
			sHTML = displayCalendar(g_nCalendarMonth, g_nCalendarYear);			
			break;

		case "prev":
			if(--g_nCalendarMonth < 0) { g_nCalendarMonth = 11; if(g_nCalendarYear > 1000) g_nCalendarYear--; }
			sHTML = displayCalendar(g_nCalendarMonth, g_nCalendarYear);
			break;

		case "month":
			g_nCalendarYear = parseInt(sParam.substr(0,4));
			g_nCalendarMonth = parseInt(trimMonthStr(sParam.substr(5,2)))-1;
			sHTML = displayCalendar(g_nCalendarMonth, g_nCalendarYear);		
			break;
						
		case "day":
			sHTML = displayCalendarDay(sParam);
			break;

		default:
			alert("humpf,\n ikke valgt handling for kalenderen!!?!");
			return;
	}
	if(fNoWrite != true)
		writeCalendar(sHTML);
	else
		return sHTML;
}

function writeCalendar(sHTML)
{
	if(g_fDOMIE)
		document.all["idCalendar"].innerHTML = sHTML;
	else if(g_fDOM)
		document.getElementById("idCalendar").innerHTML = sHTML;
	else
	{
		// ikke støttet enda !!?!
		//alert("write:\n" + sHTML);
	}
}

function displayCalendar(month, year)
{       
	month = parseInt(month);
	year = parseInt(year);
	
	var i = 0;
	var days = getDaysInMonth(month+1, year);
	var dtFirstOfMonth = new Date(year, month, 1);
	var startingPos = dtFirstOfMonth.getDay();
	var sContent = "";
	var i;
	var nToken=0;
	days += startingPos;
	if((g_fNS4) || (g_fIE4))
	{
		sContent = "<a href=\"" + g_sCalendarURL + "\">Se hva som skjer...</a>";
	}
	else
	{
		sContent = g_sCalendarHeader;

		var sCalendarMonth = g_sCalendarMonth;
		if((nToken = sCalendarMonth.indexOf("%s", 0)) >= 0)
		{
			sCalendarMonth = sCalendarMonth.substr(0, nToken) + 
								g_aShortMonths[month]+" "+year+
								sCalendarMonth.substr(nToken + 2);
		}
		sContent += sCalendarMonth;
		
		sContent += "<tr>";
		for(i=0;i<g_aShortDays.length;i++)
			sContent+="<td class=\"CalendarDayTitle\" align=\"center\">"+g_aShortDays[i]+"</td>"
//		sContent+="</tr><tr>";		fjernet fordi rekke er unødvendig. Blir skrevet fra "(i%7 == 0) sContent+="</tr><tr>";" linje 148
		
		if(g_fFirstDayOfWeek == 1)
		{
			startingPos--;
			if(startingPos==-1)
			{
				startingPos=6; 
				days+=6;
			}
			else days--;
		}
/* mod svale 09.05.05 - løkke lagte ekstra tom rekke på toppen - fjernet
		for(i=0;i<startingPos;i++)
		{
			if(i%7 == 0) sContent+="</tr><tr>";
			sContent+="<td>&nbsp;</td>";
		}
*/
//	for(i=startingPos;i<days;i++) 	
	for(i=0;i<days;i++) 			//Endret startpunkt til 0 får å få fram tomme celler i begynnelsen av måneden
	{
			if(i%7 == 0) sContent+="</tr><tr>";
			sContent+="<td align=\"center\" class=\"CalendarDay\">";

			day = i-startingPos+1;
			var linkS = year+"-"+fullMonthStr(month)+"-"+fullDayStr(day) + " 00:00:00"; //bygg dato som ser ut som cgi varianten
			if(g_aCalendarItemMap[linkS] >= 0)
			{
				if(g_aCalendarItems[g_aCalendarItemMap[linkS]][4].length>0)
					sContent += "<a href=\"javascript:showCalendar('day','"+g_aCalendarItemMap[linkS]+"');\" class=\"CalendarDay\" title=\""+g_sCalendarShowListTip+"\">"+day+"</a>";
				else
					sContent += "<a href=\""+g_aCalendarItems[g_aCalendarItemMap[linkS]][1]+"\" class=\"CalendarDay\" title=\""+g_aCalendarItems[g_aCalendarItemMap[linkS]][2]+"\n"+g_aCalendarItems[g_aCalendarItemMap[linkS]][3]+"\">"+day+"</a>"; 
			}
			else
/*	mod - svale: Lagt til sjekk for får å vise tomme celler før første dag i måneden (nødvendig pga endringer over)  ORG: "sContent+=day;" */
			{
				if(day > 0)
					sContent+=day;
				else
					sContent+="&nbsp;"
			}
/*end mod svale*/
			sContent+="</td>";
		}
/* mod -svale: lagt til ny løkke for å få fylt ut med tomme celler på slutten av måneden*/
	if(days <= 35)			j= 35;
	else 					j= 42;

	for(i=days;i<j;i++)		
	{
		sContent+="<td class=\"CalendarDay\">&nbsp;</td>";
	}
/*end mod svale*/

sContent+="</tr>";
		sContent+=g_sCalendarFooter;
	}
//window.prompt("CalendarHTML", sContent);
	return sContent;
}

function displayCalendarDay(iId)
{
	var sDato = g_aCalendarItems[iId][0].toString()
	var i_dato = sDato.slice(5,7)
	s_day = sDato.slice(8,10)
	s_friendlymonth = g_aShortMonths[trimMonthStr(i_dato)-1]; //måned
	var sContent = g_sCalendarHeader;
	
	var sCalendarDay = g_sCalendarDay;
	if((nToken = sCalendarDay.indexOf("%s", 0)) >= 0)
	{
		sCalendarDay = sCalendarDay.substr(0, nToken) + 
						s_day+". "+s_friendlymonth+
						sCalendarDay.substr(nToken + 2);
	}
	sContent += sCalendarDay;
	
	var sDetails = g_aCalendarItems[iId][3];
	if(sDetails) sDetails = "<br><span>"+replaceStr(sDetails,"\n","<br>")+"</span>";
	sContent += "<tr><td class=\"CalendarDayList\"><a href=\""+g_aCalendarItems[iId][1]+"\" title=\""+g_aCalendarItems[iId][2]+"\">"+g_aCalendarItems[iId][2]+"</a>" + sDetails+ "</td></tr>";
								
	for(var i=0;i<g_aCalendarItems[iId][4].length;i++)
	{
		var o_ary = g_aCalendarItems[g_aCalendarItems[iId][4][i]];
		sDetails = o_ary[3];
		if(sDetails) sDetails = "<br><span>"+replaceStr(sDetails,"\n","<br>")+"</span>";
		sContent+="<tr><td class=\"CalendarDayList\"><a href=\""+o_ary[1]+"\" title=\""+o_ary[2]+"\">"+o_ary[2]+"</a>" + sDetails+ "</td></tr>";
	}	
//	sContent +=	"</td></tr>";	mod -svale: Tror dette blir dobbelt opp
	sContent+=g_sCalendarFooter;
//window.prompt("CalendarHTML", sContent);
	return sContent;
}

function getDaysInMonth(nMonth, nYear)
{
	var nDays=31;	//(nMonth==1 || nMonth==3 || nMonth==5 || nMonth==7 || nMonth==8 || nMonth==10 || nMonth==12) nDays=31;
	if(nMonth==4 || nMonth==6 || nMonth==9 || nMonth==11) nDays = 30;
	else if(nMonth==2)
	{
		if(((nYear % 4)==0) && ((nYear % 100)!=0) || ((nYear % 400)==0))	// leap year
			nDays=29;
		else 
			nDays=28;
	}
	return nDays;
}

function trimMonthStr(sMonth)
{
	s_dato = ((sMonth.charAt(0)=="0") ? sMonth.slice(1) : sMonth);
	return s_dato;
}

function fullMonthStr(sMonth)
{
	sMonth++;
	return ((sMonth<10) ? (sMonth="0"+sMonth) : sMonth);
}

function fullDayStr(sDay)
{
	return ((sDay<10) ? (sDay="0"+sDay) : sDay);
}

/**
 * replaceStr
 */
function replaceStr(sStr, sToken, sReplace)
{
	var nToken=0;
	var nTokenLen = sToken.length;
	while((nToken = sStr.indexOf(sToken, nToken)) >= 0)
		{ sStr = sStr.substr(0, nToken) + sReplace + sStr.substr(nToken + nTokenLen); nToken+=nTokenLen; }
	return sStr;
}
