var j = Class.extend({
	
	days : new Array('Pzt', 'Sal', 'Crs', 'Prs', 'Cum', 'Cts', 'Paz'),
	months : new Array('Ocak', 'Subat', 'Mart', 'Nisan', 'Mayis', 'Haziran', 'Temmuz', 'Agustos', 'Eylül', 'Ekim', 'Kasim', 'Aralik'),
	minYear : 1900,
	maxYear : 2010,
	currentDay : 0,
	currentMonth : 0,
	currentYear : 0,
	currentObj : null,
	
	construct : function() {
		if (window.addEventListener) { window.addEventListener("load", this.init, false); } else if (window.attachEvent) { window.attachEvent('onload', this.init); }
	},
	
	init : function() {
		var div = null;
		try { div = document.body.appendChild(document.createElement("DIV")); } catch (e) { return; }
		div.id = "calendar_ultimate";
		with(div.style) { position = "absolute"; left = "50px"; top = "100px"; display = "none"; zIndex = "+999"; }
		div.className = "calendarDiv";
		var tb = div.appendChild(document.createElement("TABLE"));
			var tbd = tb.appendChild(document.createElement("TBODY"));
				tbd.id = "calendar_tbd";
				var tr = tbd.appendChild(document.createElement("TR"));
					var td = tr.appendChild(document.createElement("TD"));
					td.colSpan = "3";
					var str = "<select name='calendar_month' onchange='calendar.setMonth(this.value);' class='calendarSelect'>";
					for (var i=0; i<12; i++) {
						str += "<option value='"+i+"'>"+calendar.months[i]+"</option>";
					}
					td.innerHTML = str;
					
					var td = tr.appendChild(document.createElement("TD"));
					td.colSpan = "3";
					str = "<select name='calendar_year' onchange='calendar.setYear(this.value);' class='calendarSelect'>";
					for (var i=calendar.minYear; i<calendar.maxYear+1; i++) {
						str += "<option value='"+i+"'>"+i+"</option>";
					}
					str += "</select>";
					td.innerHTML = str;
					
					var td = tr.appendChild(document.createElement("TD"));
					td.innerHTML = "<input type='button' value='x' onclick='calendar.hide();' class='calendarClose'>";
				var tr = tbd.appendChild(document.createElement("TR"));
					for (var i=0; i<7; i++) {
						var td = tr.appendChild(document.createElement("TD"));
						td.className = "calendarDays";
						td.innerHTML = calendar.days[i];
					}
	},
	
	setMonth : function(val) {
		calendar.currentMonth = parseInt(val);
		calendar.set();
	},
	
	setYear : function(val) {
		calendar.currentYear = parseInt(val);
		calendar.set();
	},
	
	setDate : function(month, year) {
		calendar.currentMonth = parseInt(month);
		calendar.currentYear = parseInt(year);
		calendar.set();
	},
	
	set : function() {
		var tbd = document.getElementsByTagName("TBODY")["calendar_tbd"];
		tbd.getElementsByTagName("SELECT")["calendar_month"].selectedIndex = calendar.currentMonth;
		tbd.getElementsByTagName("SELECT")["calendar_year"].selectedIndex = calendar.currentYear - calendar.minYear;
		var chd = tbd.getElementsByTagName("TR").length;
		
		for (var i=2; i<chd; i++) {
			tbd.removeChild(tbd.getElementsByTagName("TR")[2]);
		}
		
		var tracker = 0;
		var tr = tbd.appendChild(document.createElement("TR"));
		for (var i=0; i<calendar.dayStart(calendar.currentMonth, calendar.currentYear); i++) {
			var td = tr.appendChild(document.createElement("TD"));
			td.innerHTML = "&nbsp;";
			tracker++;
		}
		for (var i=1; i<calendar.getDaysinMonth(calendar.currentMonth, calendar.currentYear)+1; i++) {
			var td = tr.appendChild(document.createElement("TD"));
			td.innerHTML = i.toString();
			td.onmouseover = calendar.changeClassOver;
			td.onmouseout = calendar.changeClassOut;
			td.onclick = calendar.process;
			if (calendar.currentDay == i) 
				td.className = "calendarDaySelected";
			else
				td.className = "calendarDayOut";
			td.align = "center";
			tracker++;
			if (tracker == 7) {
				tr = tbd.appendChild(document.createElement("TR"));
				tracker = 0;
			}
		}
	},
	
	dayStart : function(month, year) {
		var checkDate = new Date(year,month,1);
		var st = checkDate.getDay();
		st = st - 1;
		if (st < 0) st = 6;
		return st;
	},
	
	getDaysinMonth : function(month, year) {
		if (month == 1) {
			return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
		} else {
			return ((month % 2 == 0) ? 31 : 30 );
		}
	},
	
	show : function(obj) {
		if (obj.value == "") {
			var d = new Date();
			calendar.setDate(d.getMonth(), d.getFullYear());
			calendar.currentDay = d.getDate();
		} else {
		    var month=obj.value.substring(3,5);
		    var year=obj.value.substring(6,11);
			var day = obj.value.substring(0,2);
			month = month-1;
			calendar.currentDay = day;
			calendar.setDate(month, year);
		}
		calendar.set();
		calendar.currentObj = obj;
		var pos = core.findObjectPosition(obj);
		var posX = pos[0] + pos[2];
		var posY = pos[1];
		core.gID("calendar_ultimate").style.left = posX + "px";
		core.gID("calendar_ultimate").style.top = posY + "px";
		core.gID("calendar_ultimate").style.display = "";
	},
	
	hide : function() {
		core.gID("calendar_ultimate").style.display = "none";
	},
	
	process : function(e) {
		var obj = (core.browser=="ie") ? window.event.srcElement : e.target; 
		var day = (obj.innerHTML.length == 1) ? "0" + obj.innerHTML : obj.innerHTML;
		var cc = parseInt(calendar.currentMonth);
		var month = ((cc+1).toString().length == 1) ? "0" + (cc+1).toString() : (cc+1).toString();
		var tDate = day + "." + month + "." + calendar.currentYear;
		calendar.currentObj.value = tDate;
		calendar.currentObj.style.border='2px inset #ffffff';
		calendar.hide();
	},
	
	changeClassOver : function(e) {
		var obj = (core.browser=="ie") ? window.event.srcElement : e.target; 
		if (obj.className == "calendarDaySelected") return;
		obj.className="calendarDayOver";
	}, 
	
	changeClassOut : function(e) {
		var obj = (core.browser=="ie") ? window.event.srcElement : e.target; 
		if (obj.className == "calendarDaySelected") return;
		obj.className="calendarDayOut";
	}
	
});

var calendar = new j();