// boje
// #D2B48C == Tan
// #F5DEB3 == Cornsilk
// #D2691E == Orange
// 

var WEEKEND = [0,6];
var WEEKENDCOLOR = "#D2B48C";													// tan
var FONTFACE = "Verdana";		var FONTSIZE = 8;		
var BACKCOLOR = "#F5DEB3";
var gNow = new Date();
var ggWinContent;
var ggPosX = -1;				var ggPosY = -1;

/// razni jezici ///
//Calendar.Days = ["Dom","Lun","Mar", "Mie", "Jue", "Vie", "Sab"]
Calendar.Days = ["Sun","Mon","Tue", "Wed", "Thu", "Fri", "Sat"]
Calendar.Months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];			// broj dana u mesecu
Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];			// broj dana u mesecu za prestupne godine

//
function Calendar(p_item, p_month, p_year, p_format) {
	if ((p_month == null) && (p_year == null))return;
	if (p_month == null) {
		this.gMonthName = null;			
		this.gMonth = null;
		this.gYearly = true;
	} else {
		this.gMonthName = Calendar.get_month(p_month);
		this.gMonth = new Number(p_month);
		this.gYearly = false;
	}
	this.gYear = p_year;
	this.gFormat = p_format;
	this.gBGColor = "white";
	this.gFGColor = "black";
	this.gTextColor = "black";
	this.gHeaderColor = "black";
	this.gReturnItem = p_item;
}

//
Calendar.get_month = function Calendar_get_month(monthNo) {
	return Calendar.Months[monthNo]; 
}

//
Calendar.get_daysofmonth = function Calendar_get_daysofmonth(monthNo, p_year) {
	if ((p_year % 4) == 0) {
		if ((p_year % 100) == 0 && (p_year % 400) != 0) {
			return Calendar.DOMonth[monthNo];
		}
		return Calendar.lDOMonth[monthNo];										// za prestupne godine
	} else {
		return Calendar.DOMonth[monthNo];
	}
}

//
Calendar.calc_month_year = function Calendar_calc_month_year(p_Month, p_Year, incr) {
	var ret_arr = new Array();
	if (incr == -1) {
		if (p_Month == 0) {
			ret_arr[0] = 11;				ret_arr[1] = parseInt(p_Year) - 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) - 1;			ret_arr[1] = parseInt(p_Year);
		}
	} else if (incr == 1) {

		if (p_Month == 11) {
			ret_arr[0] = 0;			ret_arr[1] = parseInt(p_Year) + 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) + 1;			ret_arr[1] = parseInt(p_Year);
		}
	}
	return ret_arr;
}

//
new Calendar();
Calendar.prototype.getMonthlyCalendarCode = function() {
	var vCode = "";
	var vHeader_Code = "";
	var vData_Code = "";
	vCode += ("<div id='calendar' align='center'><TABLE BORDER='1' BGCOLOR=\"" + this.gBGColor + "\" style='font-size:" + FONTSIZE + "pt;'>");
	vHeader_Code = this.cal_header();
	vData_Code = this.cal_data();
	vCode += (vHeader_Code + vData_Code);
	vCode += "</TABLE></div>";
	return vCode;
}

//
Calendar.prototype.show = function() {
	var vCode = "";
	var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);		var prevMM = prevMMYYYY[0];
	var prevYYYY = prevMMYYYY[1];
	var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);		var nextMM = nextMMYYYY[0];
	var nextYYYY = nextMMYYYY[1];
	ggWinContent += (
		"<table cellspacing='0' cellpadding='0' style='width:100%; background:" + BACKCOLOR + "; font-size:" + FONTSIZE + "pt;'>" +
		"	<tr>" +
		"		<td id='pmonth' class='btn'>" +
		"			<a href=\"javascript:void(0);\" " + "title='previous month' onClick=\"ISCRTAJ(" + "'" + this.gReturnItem + "', '" + prevMM + "', '" + prevYYYY + "', '" + this.gFormat + "'" + ");" + "\">&laquo;<\/a>" +
		"		</td>" +
		"		<td align='center'>" +
		"			<FONT FACE='" + FONTFACE + "' ><B>" + this.gMonthName + "</B>" +
		"		</td>" +
		"		<td id='nmonth' class='btn'>" +
		"			<a href=\"javascript:void(0);\" " + "title='next month' onClick=\"ISCRTAJ(" +  "'" + this.gReturnItem + "', '" + nextMM + "', '" + nextYYYY + "', '" + this.gFormat + "'" + ");" + "\">&raquo;<\/a>" +
		"		</td>" +
		"	</tr>" +
		"	<tr>" +
		"		<td id='pyear' class='btn'>" +
		"			<a href=\"javascript:void(0);\" " + "title='previous year' onClick=\"ISCRTAJ(" + "'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)-1) + "', '" + this.gFormat + "'" + ");" + "\">&laquo;<\/a>" +
		"		</td>" +
		"		<td align='center'>" +
		"			<FONT FACE='" + FONTFACE + "' ><B>" + this.gYear + "</B><BR>" +
		"		</td>" +
		"		<td id='nyear' class='btn'>" +
		"			<a href=\"javascript:void(0);\" " + "title='next year' onClick=\"ISCRTAJ(" + "'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)+1) + "', '" + this.gFormat + "'" + ");" + "\">&raquo;<\/a>" +
		"		</td>" +
		"	</tr>" +
		"</table>");
	vCode = this.getMonthlyCalendarCode();
	ggWinContent += vCode;
}

//
Calendar.prototype.showY = function() {
	var vCode = "";
	var i;
	var prevYYYY = parseInt(this.gYear) - 1;
	var nextYYYY = parseInt(this.gYear) + 1;
	ggWinContent += (
		"<table cellspacing='0' cellpadding='0' style='width:100%; background:" + BACKCOLOR + "; font-size:" + FONTSIZE + "pt;'>" +
		"	<tr>" +
		"		<td id='pyear' class='btn'>" +
		"			<a href='javascript:void(0);' " + "title='previous year' onClick='ISCRTAJ(" +  "'" + this.gReturnItem + "', null, '" + prevYYYY + "', '" + this.gFormat + "'" + ");" + "'>&laquo;<\/a>" +
		"		</td>" +
		"		<td align=center>" +
		"			<FONT FACE='" + FONTFACE + "' ><B>" + (this.gYear) +"</B>" +
		"		</td>" +
		"		<td id='nyear' class='btn'>" + 
		"			<a href='javascript:void(0);' " + "title='next year' onClick='ISCRTAJ(" + "'" + this.gReturnItem + "', null, '" + nextYYYY + "', '" + this.gFormat + "'" + ");" + "'>&raquo;<\/a>" +
		"		</td>" +
		"	</tr>" +
		"</table>");
	ggWinContent += ("<table cellspacing='0' cellpadding='5' style='width:100%; background:" + BACKCOLOR + "; font-size:" + FONTSIZE + "pt;'><TR>");
	var j;
	for (i=0; i<12; i++) {
		ggWinContent += "<TD ALIGN='center' VALIGN='top'>";
		this.gMonth = i;
		this.gMonthName = Calendar.get_month(this.gMonth);
		vCode = this.getMonthlyCalendarCode();
		ggWinContent += (this.gMonthName + "/" + this.gYear + "<BR>");
		ggWinContent += vCode;
		ggWinContent += "</TD>";
		if (i == 3 || i == 7) {
			ggWinContent += "</TR><TR>";
			}

	}

	ggWinContent += "</TR></TABLE></font><BR>";
}

//
Calendar.prototype.cal_header = function() {
	var vCode = "";
	vCode += "	<tr>";
	vCode += "		<TD WIDTH='14%'><FONT FACE='" + FONTFACE + "' COLOR='" + this.gHeaderColor + "'><B>"+Calendar.Days[0]+"</B></FONT></TD>";
	vCode += "		<TD WIDTH='14%'><FONT FACE='" + FONTFACE + "' COLOR='" + this.gHeaderColor + "'><B>"+Calendar.Days[1]+"</B></FONT></TD>";
	vCode += "		<TD WIDTH='14%'><FONT FACE='" + FONTFACE + "' COLOR='" + this.gHeaderColor + "'><B>"+Calendar.Days[2]+"</B></FONT></TD>";
	vCode += "		<TD WIDTH='14%'><FONT FACE='" + FONTFACE + "' COLOR='" + this.gHeaderColor + "'><B>"+Calendar.Days[3]+"</B></FONT></TD>";
	vCode += "		<TD WIDTH='14%'><FONT FACE='" + FONTFACE + "' COLOR='" + this.gHeaderColor + "'><B>"+Calendar.Days[4]+"</B></FONT></TD>";
	vCode += "		<TD WIDTH='14%'><FONT FACE='" + FONTFACE + "' COLOR='" + this.gHeaderColor + "'><B>"+Calendar.Days[5]+"</B></FONT></TD>";
	vCode += "		<TD WIDTH='14%'><FONT FACE='" + FONTFACE + "' COLOR='" + this.gHeaderColor + "'><B>"+Calendar.Days[6]+"</B></FONT></TD>";
	vCode += "	</tr>";
	return vCode;
}

//
Calendar.prototype.cal_data = function() {
	var vDate = new Date();
	vDate.setDate(1);
	vDate.setMonth(this.gMonth);
	vDate.setFullYear(this.gYear);
	var vFirstDay=vDate.getDay();
	var vDay=1;
	var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
	var vOnLastDay=0;
	var vCode = "";
	vCode = vCode + "<TR>";
	for (i=0; i<vFirstDay; i++) {
		vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(i) + "><FONT FACE='" + FONTFACE + "'>&nbsp;</FONT></TD>";
	}
	for (j=vFirstDay; j<7; j++) {
		vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT FACE='" + FONTFACE + "'>" + 
			"<A HREF='javascript:void(0);' " + 
				"onMouseOver=\"window.status='set date to " + this.format_data(vDay) + "'; return true;\" " +
				"onMouseOut=\"window.status=' '; return true;\" " +
				"onClick=\"document." + this.gReturnItem + ".value='" + 
				this.format_data(vDay) + 
				"';ggPosX=-1;ggPosY=-1;nd();nd();\">" + 
				this.format_day(vDay) + 
			"</A>" + 
			"</FONT></TD>";
		vDay=vDay + 1;
	}
	vCode = vCode + "</TR>";
	for (k=2; k<7; k++) {
		vCode = vCode + "<TR>";

		for (j=0; j<7; j++) {
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT FACE='" + FONTFACE + "'>" + 
				"<A HREF='javascript:void(0);' " +
					"onMouseOver=\"window.status='set date to " + this.format_data(vDay) + "'; return true;\" " +
					"onMouseOut=\"window.status=' '; return true;\" " +
					"onClick=\"document." + this.gReturnItem + ".value='" + 
					this.format_data(vDay) + 
					"';window.scroll(0,ggPosY);ggPosX=-1;ggPosY=-1;nd();nd();\">" + 
				this.format_day(vDay) + 
				"</A>" + 
				"</FONT></TD>";
			vDay=vDay + 1;

			if (vDay > vLastDay) {
				vOnLastDay = 1;
				break;
			}
		}

		if (j == 6)
			vCode = vCode + "</TR>";
		if (vOnLastDay == 1)
			break;
	}
	for (m=1; m<(7-j); m++) {
		if (this.gYearly)
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) + 
			"><FONT FACE='" + FONTFACE + "' COLOR='gray'>&nbsp;</FONT></TD>";
		else
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) + 
			"><FONT FACE='" + FONTFACE + "' COLOR='gray'>" + m + "</FONT></TD>";
	}
	
	return vCode;
}

//
Calendar.prototype.format_day = function(vday) {
	var vNowDay = gNow.getDate();
	var vNowMonth = gNow.getMonth();
	var vNowYear = gNow.getFullYear();

	if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
		return ("<FONT COLOR=\"RED\"><B>" + vday + "</B></FONT>");
	else
		return (vday);
}

//
Calendar.prototype.write_weekend_string = function(vday) {
	var i;
	for (i=0; i<WEEKEND.length; i++) {
		if (vday == WEEKEND[i])
			return (" BGCOLOR=\"" + WEEKENDCOLOR + "\"");
	}
	return "";
}

//
Calendar.prototype.format_data = function(p_day) {
	var vData;
	var vMonth = 1 + this.gMonth;
	vMonth = (vMonth.toString().length < 2) ? "0" + vMonth : vMonth;
	var vMon = Calendar.get_month(this.gMonth).substr(0,3).toUpperCase();
	var vFMon = Calendar.get_month(this.gMonth).toUpperCase();
	var vY4 = new String(this.gYear);
	var vY2 = new String(this.gYear.substr(2,2));
	var vDD = (p_day.toString().length < 2) ? "0" + p_day : p_day;
	switch (this.gFormat) {
		case "MM\/DD\/YYYY" : vData = vMonth + "\/" + vDD + "\/" + vY4; break;
		case "MM\/DD\/YY" : vData = vMonth + "\/" + vDD + "\/" + vY2; 	break;
		case "MM-DD-YYYY" : vData = vMonth + "-" + vDD + "-" + vY4;		break;
		case "YYYY-MM-DD" : vData = vY4 + "-" + vMonth + "-" + vDD;		break;
		case "MM-DD-YY" : vData = vMonth + "-" + vDD + "-" + vY2;		break;
		case "DD\/MON\/YYYY" : vData = vDD + "\/" + vMon + "\/" + vY4;	break;
		case "DD\/MON\/YY" : vData = vDD + "\/" + vMon + "\/" + vY2;	break;
		case "DD-MON-YYYY" : vData = vDD + "-" + vMon + "-" + vY4;		break;
		case "DD-MON-YY" : vData = vDD + "-" + vMon + "-" + vY2;		break;
		case "DD\/MONTH\/YYYY" : vData = vDD + "\/" + vFMon + "\/" + vY4;	break;
		case "DD\/MONTH\/YY" : vData = vDD + "\/" + vFMon + "\/" + vY2;		break;
		case "DD-MONTH-YYYY" : vData = vDD + "-" + vFMon + "-" + vY4;		break;
		case "DD-MONTH-YY" : vData = vDD + "-" + vFMon + "-" + vY2;			break;
		case "DD\/MM\/YYYY" : vData = vDD + "\/" + vMonth + "\/" + vY4;		break;
		case "DD\/MM\/YY" : vData = vDD + "\/" + vMonth + "\/" + vY2;		break;
		case "DD-MM-YYYY" : vData = vDD + "-" + vMonth + "-" + vY4;			break;
		case "DD-MM-YY" : vData = vDD + "-" + vMonth + "-" + vY2;			break;
		default : vData = vMonth + "\/" + vDD + "\/" + vY4;
	}
	return vData;
}

//
function ISCRTAJ(p_item, p_month, p_year, p_format) {
	gCal = new Calendar(p_item, p_month, p_year, p_format);
	gCal.gBGColor="#F5DEB3";
	gCal.gLinkColor="black";
	gCal.gTextColor="black";
	gCal.gHeaderColor="brown";
	ggWinContent = "";
	if (gCal.gYearly) {
		if (ggPosX == -1) ggPosX = 10;
		if (ggPosY == -1) ggPosY = 10;
		gCal.showY();
		}
	else {
		gCal.show();
		}
	if (ggPosX == -1 && ggPosY == -1) {
		overlib(ggWinContent, AUTOSTATUSCAP, STICKY, CLOSECLICK, CSSSTYLE, TEXTSIZEUNIT, "pt", TEXTSIZE, 8, CAPTIONSIZEUNIT, "pt", CAPTIONSIZE, 8, CLOSESIZEUNIT, "pt", CLOSESIZE, 8, CAPTION, "Select a date", OFFSETX, 20, OFFSETY, -20);
		if ( (ns4) || (ie4) ) {
		        ggPosX = parseInt(over.left);
		        ggPosY = parseInt(over.top);
			} else if (ns6) {
			ggPosX = parseInt(over.style.left);
			ggPosY = parseInt(over.style.top);
			}
		}
	else {
		overlib(ggWinContent, AUTOSTATUSCAP, STICKY, CLOSECLICK, CSSSTYLE, TEXTSIZEUNIT, "pt", TEXTSIZE, 8, CAPTIONSIZEUNIT, "pt", CAPTIONSIZE, 8, CLOSESIZEUNIT, "pt", CLOSESIZE, 8, CAPTION, "Select a date", FIXX, ggPosX, FIXY, ggPosY);
		}
	window.scroll(ggPosX, ggPosY);
}

// mesecni kalendar
function MESECNI_KALENDAR() {
	p_item = arguments[0];
	if (arguments[1] == null) {
		p_month = new String(gNow.getMonth()); 
	} else {
		p_month = arguments[1];
	}
	if (arguments[2] == "" || arguments[2] == null) {
		p_year = new String(gNow.getFullYear().toString());
	} else {
		p_year = arguments[2];
	}
	if (arguments[3] == null) {
		p_format = "YYYY-MM-DD";
	} else {
		p_format = arguments[3];
	}
	ISCRTAJ(p_item, p_month, p_year, p_format);
}

// godisnji kalendar
function GODISNJI_KALENDAR() {
	p_item = arguments[0];
	if (arguments[1] == "" || arguments[1] == null) {
		p_year = new String(gNow.getFullYear().toString());
	} else {
		p_year = arguments[1];
	}
	if (arguments[2] == null) {
		p_format = "YYYY-MM-DD";
	} else {
		p_format = arguments[2];
	}
	ISCRTAJ(p_item, null, p_year, p_format);
}
