/***********************************************************
 Filename: 		calendar.js
 Version:		1.0
 Author:		Godofredo Timajo
 Website:		http://www.geocities.com/wrong_move18
 Location:		Philippines
 Description: 	Date picker for date type of field.
 
 Date format:
 	YYYY-MM-DD or YYYY/MM/DD
 
 How to use:
	  1. Copy calendar.js to your directory 
      2. Create a script tag in your head tag
			Ex. <script type='text/javascript' src='calendar.js'></script>
	  3. Create a div with an id name
	  		Ex. <div id="calendar_div"></div>
	  4. Set the year range. (DEFAULT: Current year to current year + 5)
		3.1. In your body tag insert an onLoad event.
		3.2. Type in CALENDAR.setYears(<yearToStart>, <yearsCount>);
				Ex. <body onLoad="CALENDAR.setYears(2007, 10);">
	  5. Place link into a button or anchor link. Use CALENDAR.init function.
			
			CALENDAR.init attributes:
				dID	= id name of a div or any tag
				saveTo = id name of a field or tag where the date will be placed
			
			Ex.
				For anchor link:
					<a href="javascript: CALENDAR.init('calendar_div', 'date_field');">SHOW CALENDAR</a>
				For input button:
					<input type="button" name="cal_button" value="CALENDAR" onClick="CALENDAR.init('calendar_div', 'date_field');" />
												or
					<button onClick="CALENDAR.init('calendar_div', 'date_field');">CALENDAR</button>
				For image:
					<img src="cal.gif" onClick="CALENDAR.init('calendar_div', 'date_field');" />
	   6. Enjoy!
 
 Demo:
 	http://www.geocites.com/wrong_move18/calendar
 Note:
	Please do not remove this comment or just acknowledge the author.
	Thank You!
				
************************************************************/


var browser = navigator.appName;
var cur = new Date();
var dragging = false;
var hDist = 0;
var vDist = 0;
var prevT = 0;
var prevL = 0;


/*
function trim(str){
	tmp = str.substr(0,1);
	while (tmp == " "){
		str = str.substr(1, str.length - 1);	
		tmp = str.substr(0,1);
	}
	tmp = str.substr(str.length - 1,1);
	while (tmp == " "){
		str = str.substr(0, str.length - 1);
		tmp = str.substr(str.length - 1,1);
	}
	return str;
}
*/
function getCoords(e){
	if (document.layers){
        xCoord = e.x;
        yCoord = e.y;
	}else if (document.all){
        xCoord = event.clientX;
        yCoord = event.clientY;
	}else if (document.getElementById){
        xCoord = e.clientX;
        yCoord = e.clientY;
	}	
	try{
	hDist = xCoord - parseInt(document.getElementById(CALENDAR.divID).style.left);
	vDist = yCoord - parseInt(document.getElementById(CALENDAR.divID).style.top);
	if (((vDist<20)&&(vDist>0))&&((hDist<190)&&(hDist>0)))
		dragging = true;
	}catch(err){}
	
}

function stopDrag(){
	dragging = false;
	try{
	prevT = document.getElementById(CALENDAR.divID).style.top;
	prevL = document.getElementById(CALENDAR.divID).style.left;
	}catch(err){}
}

function dragNow(e){
	if (dragging){
		if (document.layers){
			xCoord = e.x;
			yCoord = e.y;
		}else if (document.all){
			xCoord = event.clientX;
			yCoord = event.clientY;
		}else if (document.getElementById){
			xCoord = e.clientX;
			yCoord = e.clientY;
		}

		var w,h;
		if (self.innerHeight) // all except Explorer
		{
			w = self.innerWidth;
			h = self.innerHeight;
		}
		else if (document.documentElement && document.documentElement.clientHeight)
			// Explorer 6 Strict Mode
		{
			w = document.documentElement.clientWidth;
			h = document.documentElement.clientHeight;
		}
		else if (document.body) // other Explorers
		{
			w = document.body.clientWidth;
			h = document.body.clientHeight;
		}
		
		var maxLeft, maxTop;
		
		maxLeft = w - 150;
		maxTop = h - 140;

		leftX = xCoord - hDist;
		topY = yCoord - vDist;

		if (leftX<0) leftX=0;
		if (topY<0) topY=0;

		if (leftX>maxLeft) leftX=maxLeft;
		if (topY>maxTop) topY=maxTop;
		
		document.getElementById(CALENDAR.divID).style.left = leftX;
		document.getElementById(CALENDAR.divID).style.top = topY;
	}
}

CALENDAR = {
	divID : "",
	outputTo : "",
	mSet : -1,
	dSet : -1,
	ySet : -1,
	start : cur.getFullYear(),
	years : 5,
	delimiter : "-",
	
	createCalendar : function(){
		var calendar = "";
		//calendar += "<form name='cal'>";
		calendar += "<table width='150' cellpadding='1' cellspacing='0' border='0' style='border: solid 1px #CCCCCC; background: #FFFFFF;'>";
		calendar += "<tr><td align='center'>";
		calendar += "<table width='100%' cellpadding='0' cellspacing='0' border='0' style='background: #EEEEEE'>";
		//title start
		calendar += "<tr style='background: #006699; cursor: move' id='titleBar'>";
		calendar += "<td align='left' style='font: bold 8pt \"Arial\"; color: #FFFFFF; padding-left: 3px;'> CALENDAR</td>";
		calendar += "<td align='right' style='padding-right: 3px;'><a href='javascript: CALENDAR.hide();' style='text-decoration: none; color: #FFFFFF; font: bold 8pt \"Arial\" wider; '>X</a></td>";
		calendar += "</tr>";
		//title end
		//month-year start
		calendar += "<tr style='font: bold 8pt \"Arial\"; color: #000000;'>";
		calendar += "<td align='center'>MONTH<br /><select name='mn' id='mn' style='font: normal 8pt \"Arial\";' onchange='CALENDAR.loadDays();'></select></td>";
		calendar += "<td align='center'>YEAR<br /><select name='yr' id='yr' style='font: normal 8pt \"Arial\";' onchange='CALENDAR.loadDays();'></select></td>";
		calendar += "</tr>";
		//month-year end
		calendar += "</table>";
		calendar += "</td></tr>";
		calendar += "<tr><td align='center' id='daysBox' colspan='2'></td></tr>"
		calendar += "</table>";
		//calendar += "</form>";
		document.getElementById(this.divID).style.display = 'block';
		document.getElementById(this.divID).innerHTML = calendar;
	},
	
	setYears : function(yStart, yCount){
		this.start = parseInt(yStart);
		this.years = parseInt(yCount);
	},
	
	init : function(dID, saveTo, otherCal){
		try{
			if(otherCal!=undefined){
				if(otherCal.constructor == Array){
					for(var i=0 in otherCal){
						if(otherCal[i]!=dID){
							this.divID = otherCal[i];
							CALENDAR.hide();
						}
					}
				}
				else if(otherCal==''){
				}
				else{
					this.divID = 'cal_'+otherCal;
					CALENDAR.hide();
				}
			}
		} catch(err){}
		
		this.divID = dID;
		this.outputTo = saveTo;
		
		var styleIT = document.getElementById(this.divID).style;
		
		styleIT.position = 'absolute';
		styleIT.zIndex = '32';
		//styleIT.top = prevT;
		//styleIT.left = prevL;
		styleIT.width = '150px';
		
		var data = document.getElementById(this.outputTo).value;
	
		this.ySet = -1;
		this.mSet = -1;
		this.dSet = -1;
		
		
		if(trim(data) != ""){
			this.delimiter = (data.indexOf('-') == -1)?(data.indexOf('/') == -1)?"":"/":"-";
			var tmp = new Array();
			if(this.delimiter != ""){
				tmp = data.split(this.delimiter);
				if(tmp[0].length == 4) try{this.ySet=parseInt(+tmp[0])}catch(err){};
				if((tmp[1].length == 1) || (tmp[1].length == 2)) try{this.mSet=parseInt(+tmp[1])}catch(err){};
				if((tmp[2].length == 1) || (tmp[2].length == 2)) try{this.dSet=parseInt(+tmp[2])}catch(err){};
			}
		}
		this.createCalendar();
		this.loadMonths();
		this.loadYears();
		this.loadDays();
	},
	
	loadMonths : function(){
		var mon = Array("JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER");
		//var monthSel = document.cal.mn.options;
		var monthSel = doc('mn').options;
		var selected = "";
		monthSel.length = 0;
		
		for(i=0; i<12; i++){
			selected = (parseInt(this.mSet-1) == i)?"selected":"";
			monthSel[monthSel.length] = new Option(mon[i], i ,selected);
		}
		for(i=0; i<12; i++){
			if(monthSel[i].value == parseInt(this.mSet -1))
				monthSel[i].selected = "selected";
		}
	
	},
	
	loadYears : function(){
		//var yearSel = document.cal.yr.options;
		var yearSel = doc('yr').options;
		var selected = "";
		yearSel.length = 0;
		for(i=parseInt(this.start); i<parseInt(this.start + this.years); i++){
			selected = (parseInt(this.ySet) == i)?"selected":"";
			yearSel[yearSel.length] = new Option(i, i, selected);
		}
		for(i=0; i<yearSel.length; i++){
			if(yearSel[i].value == parseInt(this.ySet))
				yearSel[i].selected = "selected";
		}
	},
	
	loadDays : function(){
		var nDays = Array('31', '28', '31', '30', '31', '30', '31', '31', '30', '31', '30', '31');
		var m = doc('mn').value;
		var y = doc('yr').value;
		var daysCode = "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style='border: solid 1px #CCCCCC; font: bold 8pt \"Arial\"' >\n";
		var wkEnder = 1;
		
		// check for leap year
		if (y%4 == 0) nDays[1] = '29';
		daysCode += "<tr style='background-color: #DDDDDD; text-align: center'><th>S</th><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th></tr>"
		// week start
	
		var wkStart = this.tryDate((parseInt(m)+1) + "/01/" + y);
	
		for(i=0; i<wkStart; i++){
			if (wkEnder == 1){
				daysCode += "\t<tr>\n";
			}
			
			daysCode += "\t\t<td>&nbsp;</td>\n";
			
			if(wkEnder == 7){
				daysCode += "\t</tr>\n";
				wkEnder = 0;	
			}
			wkEnder++;
		}
		// days output
		for(i=1; i<=nDays[m]; i++){
			if (wkEnder == 1){
				daysCode += "\t<tr>\n";
			}
			dayBG = "#EEEEEE";
			//alert("this.ySet: "+this.ySet+"\tyr: "+document.cal.yr.value+"\nthis.mSet: "+this.mSet+"\t\t\tmn: "+document.cal.mn.value+"\nthis.dSet: "+this.dSet+"\t\tdy: "+i);
			
			//if((this.ySet == parseInt(document.cal.yr.value)) && (this.mSet == (parseInt(document.cal.mn.value) + 1)) && (parseInt(this.dSet) == i))
			if((this.ySet == parseInt(doc('yr').value)) && (this.mSet == (parseInt(doc('mn').value) + 1)) && (parseInt(this.dSet) == i))
				dayBG = "#FF0000";
				
			daysCode += "\t\t<td align='center'  style='background-color: "+dayBG+";'><a style=\"text-decoration: none; color: #333; font-weight: bold; \" href=\"javascript: CALENDAR.throwDate('" + y + this.delimiter + (parseInt(m)+1) + this.delimiter + i + "');\">" + i +"</a></td>\n";
			
			if(wkEnder == 7){
				daysCode += "\t</tr>\n";
				wkEnder = 0;	
			}
			wkEnder++;
		}
		daysCode += "</table>\n";
		document.getElementById('daysBox').innerHTML = daysCode;
		
	},
	
	throwDate : function(date){
		var dg = document.getElementById(this.outputTo);
		if (dg.tagName == "INPUT")
			dg.value = date;
		else
			dg.innerHTML = date;
		this.hide();
	},
	
	tryDate : function(dt){
		var d = new Date(dt);
		return d.getDay();
	},
	
	hide : function(){
		document.getElementById(this.divID).style.display = 'none';
		document.getElementById(this.divID).innerHTML = '';
	}


}/*
document.onmousedown = getCoords;
document.onmouseup = stopDrag;
document.onmousemove = dragNow;*/