var MONTHS_DAY_COUNT = [31,28,31,30,31,30,31,31,30,31,30,31] ;
var WEEK_NAMES = ["Pt", "Sa", "&Ccedil;a", "Pe", "Cu", "Ct", "Pz"] ;
var MONTH_NAMES = ["Ocak", "\u015Eubat", "Mart", "Nisan", "May\u0131s", "Haziran", "Temmuz", "A\u011Fustos", "Eyl\u00FCl", "Ekim", "Kas\u0131m", "Aral\u0131k"] ;
var YEARS_RANGE = {start:1980, end:2007} ;
var ACalendar_TODAY_BUTTON_LABEL = 'Bug\u00FCn\u00FC G\u00F6ster' ;

function ACalendar(objectID) {
	ABase.register(
		{
			name:'ACalendar',
			id: objectID,
			object: this
		}
	) ;
}


ACalendar.prototype.init = ABase.init ;

ACalendar.prototype.first = function() {
	this.container.onChangeGenerate() ;
}

ACalendar.prototype.generate_dates = function() {
	var container = this.container ;
	var controls = container.controls ;
	var TABLE = document.createElement('TABLE') ;
	TABLE.border = 0 ;
	//TABLE.cellPadding = 4 ;
	TABLE.cellSpacing = 0 ;
	TABLE.className = 'ACalendar-Dates-Table ' + container.id + "-Dates-Table" ;
	var TBODY = document.createElement('TBODY') ;
	TABLE.appendChild(TBODY) ;
	var TR = document.createElement('TR') ;
	TR.className = 'ACalendar-Week-Names ' + container.id + '-Week-Names' ;
	for (var i = 0 ; i < WEEK_NAMES.length ; i++) {
		var TD = document.createElement('TD') ;
		TD.innerHTML = WEEK_NAMES[i] ;
		TR.appendChild(TD) ;
	}
	TBODY.appendChild(TR) ;

	var dt = container.dt ;
	
	var iday = (new Date(dt.getFullYear(), dt.getMonth(), 1)).getDay() ;
	var ihafta = iday == 0 ? 7 : iday ;
	var idays = MONTHS_DAY_COUNT[dt.getMonth()] ;
	
	var rowsLength = Math.ceil((ihafta + idays)/7) ;
	var i = 2 - ihafta ;
	var day ;
	
	for (var a = 0 ; a < rowsLength ; a++) {
		var TR = document.createElement('TR') ;
		for (var b = 0 ; b < 7 ; b++, i++) {
			var TD = document.createElement('TD') ;
			TD.container = container ;
			if (i > 0 && idays >= i) {
				day = i < 10 ? "0" + i : i ;
				TD.id = container.id + "Day" + day ;
				TD.unselectable = true ;
				TD.innerHTML = day ;
				TD.className = 'ACalendar-Date-Cell ' + container.id + "-Date-Cell" ;
				TD.onclick = function() {
					if (!container.dateSelectable) {
						return ;
					}
					container.controls.date.value = this.innerHTML ;
					this.container.onChangeGenerate() ;
					if (container.dateOnClick) {
						container.dateOnClick() ;
					}
				}
				TD.onmouseover = function() {
					if (!container.dateSelectable) {
						return ;
					}
					if (this.className.startsWith('ACalendar-Activated-Date ' + container.id + "-Activated-Date")) {
						return ;
					}
					this.className = 'ACalendar-Date-Cell ' + container.id + "-Date-Cell " + 'ACalendar-Date-Cell-MOver ' + container.id + "-Date-Cell-MOver" ;
					//this.style.backgroundColor = "#FFD9D9" ;
				}
				TD.onmouseout = function() {
					if (!container.dateSelectable) {
						return ;
					}
					if (this.className.startsWith('ACalendar-Activated-Date ' + container.id + "-Activated-Date")) {
						return ;
					}
					this.className = 'ACalendar-Date-Cell ' + container.id + "-Date-Cell"
					//this.style.backgroundColor = "" ;
				}
				if (container.controls.date.value == i) {
					TD.className = 'ACalendar-Activated-Date ' + container.id + '-Activated-Date' ;
				}
				
				if (
					(new Date()).getDate() == i
					&& (new Date()).getMonth() == dt.getMonth() 
					&& (new Date()).getFullYear() == dt.getFullYear() 
				) {
					TD.className = 'ACalendar-Today ' + TD.className + ' ' + this.id + '-Today'  ;
				}
			}
			
			TR.appendChild(TD) ;
		}
		TBODY.appendChild(TR) ;
	}
	container.main.innerHTML = "" ;
	container.main.appendChild(TABLE) ;
}



ACalendar.prototype.on_init_date = function() {
	var container = this.container ;
	var controls = container.controls ;
	var date = controls.date = document.createElement('INPUT') ;
	date.type = "HIDDEN" ;
	date.name = "date" ;
	date.value = num2digit(this.dt.getDate()) ;
	container.header.appendChild(date) ;
}

ACalendar.prototype.on_init_years = function() {
	var container = this.container ;
	var controls = container.controls ;
	var years = controls.years = document.createElement('SELECT') ;
	years.name = "years" ;
	years.container = container ;
	years.onchange = function() {
		container.onChangeGenerate() ;
		if (container.yearsOnChange) {
			container.yearsOnChange() ;
		}
	}
	years.className = 'ACalendar-Years ' + this.id + "-Years" ;
	for (var i = YEARS_RANGE.start ; i <= YEARS_RANGE.end ; i++) {
		var option = document.createElement("OPTION") ;
		if (document.all) {
			option.innerText = i ;
		} else {
			option.text = i ;
		}
		option.value = i ;
		option.selected = i == this.dt.getFullYear() ; 
		years.appendChild(option) ;
	}
	container.header.appendChild(years) ;
}

ACalendar.prototype.on_init_months = function() {
	var container = this.container ;
	var controls = container.controls ;

	var months = controls.months = document.createElement('SELECT') ;
	months.name = "months" ;
	months.container = container ;
	months.onchange = function() {
		container.onChangeGenerate() ;
		if (container.monthsOnChange) {
			container.monthsOnChange() ;
		}
	}
	months.className = 'ACalendar-Months ' + this.id + "-Months" ;
	for (var i = 0 ; i < MONTH_NAMES.length ; i++) {
		var option = document.createElement("OPTION") ;
		option.value = num2digit(i + 1) ;
		if (document.all) {
			option.innerText = MONTH_NAMES[i] ;
		} else {
			option.text = MONTH_NAMES[i] ;
		}
		option.selected = i == this.dt.getMonth() ;
		months.appendChild(option) ;
	}
	container.header.appendChild(months) ;
}

ACalendar.prototype.on_init_set_default_date = function() {
	var container = this.container ;
	var form = this.form ;
	if (form && form.targetObject && form.targetObject.value && form.targetObject.value.match(/^\d{1,2}.\d{1,2}.\d{2,4}$/)) {
		var dit = form.targetObject.value.split(/[^0-9]/) ;
		container.dt = this.dt = container.dt = new Date(dit[2], dit[1]-1, dit[0]) ;
	}
}

ACalendar.prototype.on_instance_today_button = function() {
	var container = this.container ;
	var controls = container.controls ;
	
	var bugun = controls.bugun = document.createElement('INPUT') ;
	bugun.type = "BUTTON" ;
	bugun.name = "bugun" ;
	bugun.value = ACalendar_TODAY_BUTTON_LABEL ;
	bugun.className = 'ACalendar-Today-Button ' + this.id + "-Today-Button" ;
	bugun.onclick = function() {
		var today = new Date() ;
		with (controls) {
			date.value = num2digit(today.getDate()) ;
			months.value = num2digit(today.getMonth() + 1) ;
			years.value = today.getFullYear() ;
		}
		container.onChangeGenerate() ;
	}
	container.footer.appendChild(bugun) ;
}

ACalendar.prototype.on_instance_container = function() {
	var container = this.container = $table(3, 1) ;
	//container.border = 1 ;
	container.className = 'ACalendar-Container ' + this.id + "-Container" ;
	container.header = container.rows[0].cells[0] ;
	container.header.style.height = '15px' ;
	container.main = container.rows[1].cells[0] ;
	container.main.className = 'ACalendar-Main ' + this.id + "-Main" ;
	container.main.vAlign = 'top' ;
	container.footer = container.rows[2].cells[0] ;
	this.dt = container.dt = new Date() ;
	container.controls = {} ;
}

ACalendar.prototype.onChangeGenerate = function() {
	var container = this.container ;
	var controls = container.controls ;
	var dt = container.dt ;
	
	dt.setDate(controls.date.value) ;
	dt.setMonth(controls.months.value-1) ;
	dt.setYear(controls.years.value) ;
	container.generate_dates() ;
	this.runForForm() ;
	if (this.onChange) {
		this.onChange() ;
	}
}

ACalendar.prototype.runForForm = function() {
	var form = this.form ;
	var dt = this.dt ;
	if (!form) {
		return ;
	}

	if (this.container.style.display == 'none') {
		return ;
	}
	
	var day = dt.getDate() ;
	var month = dt.getMonth() + 1 ;
	var year = dt.getFullYear() ;

	form.targetObject.value = num2digit(day) + form.seperator + num2digit(month) + form.seperator + year ;
	
}

ACalendar.prototype.on_init_prepare_form = function() {
	var container = this.container ;
	var form = this.form ;
	if (!form) {
		return ;
	}
	container.style.display = 'none' ;
	form.fireObject.onfocus = function() {
		with (container.style) {
			left = Dom.x(this) ;
			top = Dom.y(this) + this.offsetHeight ;
			position = 'absolute' ;
			display = 'block' ;
		}
	}
	
	document.registerEvent(
		document, 
		"click", 
		function() {
			var element = event.srcElement ;
			if (form.fireObject != element && !Dom.isOwner(element, container)) {
				container.style.display = 'none' ;
			}
		}
	)
	
}

/*
var calendar1 = new ACalendar('Calendar1') ;
calendar1.owner = $("azat") ;
calendar1.dateSelectable = true ;

calendar1.form  = {
	targetObject: $("birthday"),
	fireObject: $("birthdayBtn"),
	seperator: '.'
}

calendar1.onChange = function() {
	
}
calendar1.monthsOnChange = function() {
	
}
calendar1.yearsOnChange = function() {
	
}

calendar1.dateOnClick = function() {
	
}


calendar1.init() ;
*/







