var call = {
	inputs:new Array(), inputsRow:-1, dt:'', year:'', month:'', day:'', monthLength:'', monthCols:1, monthColStart:'',  monthColEnd:'', curMonth:'', startingDay:'', monthName:'', lang:'tr', act:'', firstInt:true, type:'', currentInput:'',
	daysInMonth:[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
	monthLabels:{"tr":['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'],"en":['January','February','March','April','May','June','July','August','September','October','November','December'],"kr":['Rêbendan','Reşemî','Adar','Avrêl','Gulan','Pûşper','Tîrmeh','Gelawêj','Rezber','Kewçêr','Sermawez','Berfenbar']},
	dayLabels:{"tr":['Pts', 'Sal', 'Çar', 'Per', 'Cum', 'Cts', 'Paz'],"en":['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],"kr":['Duş', 'Sêş', 'Çar', 'Pên', 'în', 'Şemî', 'Yek']},
	langs:['','tr','en','kr'],
	init : function(){
		var body = document.getElementsByTagName('body').item(0);
		//var body = document.getElementById('calcal');
		if (this.firstInt == true){
			var browser = navigator.appName;
			var isIE = true;
			if (browser.search(new RegExp('microsoft',"i")) == -1 )
				isIE = false;
			
			var caldiv = document.createElement('div');
			caldiv.setAttribute('id','callDiv');
			caldiv.setAttribute('class','caldiv');
			caldiv.className = 'caldiv';

			var frm = document.createElement('iframe');
			frm.src = 'javascript:false;';
			if ( isIE == false )
				frm.src = 'javascript:void(0);';	
			frm.setAttribute('class','calFrm');
			frm.className = 'calFrm';
			caldiv.appendChild(frm);
		}else{
			var caldiv = document.getElementById('callDiv');
		}
		caldiv.appendChild(this.createMonths());
		if (this.firstInt == true)
			this.createControls(caldiv);
		body.appendChild(caldiv);		
		
		//postion and styles
		var e = document.getElementById(this.currentInput);
		var pos = this.findPos(e);
		caldiv.style.left = pos[0]+'px';
		caldiv.style.top = (pos[1] + e.offsetHeight)+'px';
		caldiv.style.width = 206 * (this.inputs[this.inputsRow].monthCol + 1)+'px';

		if (this.firstInt == true){
			if ( isIE == false ){
				caldiv.style.width = (caldiv.offsetWidth - 4)+'px';
				caldiv.style.height = (caldiv.offsetHeight - 8)+'px';
			}
		}

		if (caldiv.style.visibility != "visible")
			caldiv.style.visibility="visible";		
		this.firstInt = false;
	},
	newGrup:function(grpId, dateFormat, pickPast, pickFuture, over, monthCol, departureId, rturnId, lang){
		//call.newGrup('groupId','dateFormat',pickPast,pickFuture,'cols','inputId','inputId');
		this.inputCheck(grpId);
		if (this.inputsRow == -1){
			pickPast = (pickPast != true)?false:true;
			pickFuture = (pickFuture != true)?false:true;
			over = (over == '')?0:over;
			monthCol = parseInt(monthCol)-1;
			var d = this.createDate('','','','');
			this.inputsRow = this.inputs.length;
			this.inputs[this.inputsRow] = {"grpId":grpId, "calId":"callDiv", "dateFormat":dateFormat,  "pickFuture":pickFuture, "pickPast":pickPast, "over":over, "monthCol":monthCol, "curDate":d, "toDay":d, "selDate":d, 	"departure":{ "id":departureId, 	"date":d, "curMonth":d, "monthColStart":this.createDate('','','',1), 	"monthColEnd": this.createDate('','',d.getMonth() + monthCol,'end') }, "rturn":{ "id":rturnId, "date":d, "curMonth":d, "monthColStart":this.createDate('','','',1), "monthColEnd": this.createDate('','',d.getMonth() + monthCol,'end') } };
			this.lang = this.langs[lang];
		}
	},
	createMonths:function(){
		if (this.firstInt == true){
			var months = document.createElement('div');
			months.setAttribute('id','months');
			months.setAttribute('class','months');
			months.className = 'months';
		}else{
			var months = document.getElementById('months');
		}
		months.innerHTML = "";
		this.monthColStart = this.createDate(this.curMonth,'','',1);
		this.monthColEnd = this.createDate(this.curMonth,'',this.curMonth.getMonth() + this.inputs[this.inputsRow].monthCol,'end');
		for (ii=0;ii<=this.inputs[this.inputsRow].monthCol;ii++){
			if (ii == 0){
				this.dt = this.monthColStart;
				months.appendChild(this.createMonth());
			}else{
				this.dt = this.createDate(this.monthColStart,'','n','');
				months.appendChild(this.createMonth());
			}
		}
		return months;
	},
	createMonth:function(){
		var inp = this.inputs;
		var cur = this.inputsRow;
		var st = this.createDate(this.dt,'','',1);
		var m = st.getMonth();
		var y = st.getFullYear();
		var startingDay = st.getDay()-1;
		if (startingDay == -1)
			startingDay = 6;

		monthLength = this.daysInMonth[m];
		
		if (m == 1) {//February 29 control
			 if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
				monthLength = 29;
		}
		var monthName = this.monthLabels[this.lang][m];

		var month = document.createElement('div');
		month.setAttribute('id','month');
		month.setAttribute('class','month');
		month.className = 'month';

		var calhead = document.createElement('div');
		calhead.setAttribute('class','calhead');
		calhead.className = 'calhead';

		var monthHeader = document.createElement('div');
		monthHeader.setAttribute('class','monthHeader');
		monthHeader.className = 'monthHeader';


		if (inp[cur].over != 0){
			var monthCol = document.createElement('div');
			monthCol.setAttribute('id','monthCol');
			monthCol.setAttribute('class','monthCol');
			monthCol.className = 'monthCol';
			this.createMonthSelectBox(monthCol);
			monthHeader.appendChild(monthCol);

			var yearCol = document.createElement('div');
			yearCol.setAttribute('id','yearCol');
			yearCol.setAttribute('class','yearCol');
			yearCol.className = 'yearCol';
			this.createYearSelectBox(yearCol);
			monthHeader.appendChild(yearCol);

		}else{
			var selMonth = document.createElement('p');
			selMonth.innerHTML = monthName+" "+y;
			monthHeader.appendChild(selMonth);
		}
		
		calhead.appendChild(monthHeader);
		
		var dayHeader = document.createElement('div');
		dayHeader.setAttribute('class','dayHeader');
		dayHeader.className = 'dayHeader';
		
		for (i=0; i<this.dayLabels[this.lang].length; i++){
			var dayLbl = document.createElement('p');
			dayLbl.innerHTML = this.dayLabels[this.lang][i];
			dayHeader.appendChild(dayLbl);
		}

		
		calhead.appendChild(dayHeader);
		month.appendChild(calhead);

		var day =1;
		var inMounth = false;
		var week,wd,tmpTime,tmpDate;
		var toDay = inp[cur].toDay;
		var selDate = inp[cur][this.type].date;
		var pickPast = inp[cur].pickPast;
		var pickFuture = inp[cur].pickFuture;

		for (r=0; r<6; r++){
			week = document.createElement('div');
			week.setAttribute('class','week');
			week.className = 'week';
			for (c=0; c<7;c++){
				wd = document.createElement('p');
				if ((r == 0 && startingDay == c) || inMounth ){
					tmpDate=this.createDate(this.dt,'','',day);
					wd.val = new Object(tmpDate);
					if (day == 1)
						inMounth = true;
					if (day == monthLength)
						inMounth = false;
					wd.innerHTML = day;
					if ((tmpDate < toDay && pickPast == false) || (tmpDate > toDay && pickFuture == false)){
						wd.setAttribute('class','oldDate');
						wd.className = 'oldDate';
					}else {
						if (c >= 5){
							wd.setAttribute('class','weekEnd');
							wd.className = 'weekEnd';
						}else{
							wd.setAttribute('class','weekIn');
							wd.className = 'weekIn';
						}
						if (tmpDate.getTime() == inp[cur].departure.date.getTime()){
							wd.setAttribute('class','departureDate');
							wd.className = 'departureDate';
						} 
						if (tmpDate.getTime() == inp[cur].rturn.date.getTime()){
							wd.setAttribute('class','rturnDate');
							wd.className = 'rturnDate';
						}
						if (tmpDate.getTime() == toDay.getTime()){
							wd.setAttribute('class','toDoday');
							wd.className = 'toDoday';
						}
						wd.onclick = function(){call.setInput(this.val); return false;};
					}
					day++;
				}else{
					wd.innerHTML = "";
					wd.setAttribute('class','oldDate');
					wd.className = 'oldDate';
				}
				week.appendChild(wd);
			}
			month.appendChild(week);
		}
		return month;
	},
	createControls:function(caldiv){
		var inp = this.inputs;
		var cur = this.inputsRow;
		var calControls = document.createElement('div');
		calControls.setAttribute('class','calControls');
		calControls.className = 'calControls';		
		
		var gotoPrev = document.createElement('a');
		gotoPrev.setAttribute("id","gotoPrev");
		gotoPrev.setAttribute("href","#");
		gotoPrev.innerHTML = "«";
		gotoPrev.onclick = function(){call.changeMonth('p'); return false;};
		calControls.appendChild(gotoPrev);
		caldiv.appendChild(calControls);

		var calControls2 = document.createElement('div');
		calControls2.setAttribute('class','calControls2');
		calControls2.className = 'calControls2';

		var closeCal = document.createElement('a');
		closeCal.setAttribute("id","closeCal");
		closeCal.setAttribute("href","#");
		closeCal.innerHTML = "×";
		closeCal.onclick = function(){call.hide(); return false;};
		calControls2.appendChild(closeCal);

		var gotoNext = document.createElement('a');
		gotoNext.setAttribute("id","gotoNext");
		gotoNext.setAttribute("href","#");
		gotoNext.innerHTML = "»";
		gotoNext.onclick = function(){call.changeMonth('n'); return false;};
		calControls2.appendChild(gotoNext);
		caldiv.appendChild(calControls2);
	},
	createYearSelectBox:function(yearCol){
		var inp = this.inputs;
		var cur = this.inputsRow;
		var y = this.dt.getFullYear();
		yearCol.innerHTML = '';
		var selYear = document.createElement('select');
		selYear.setAttribute('id','selYear');
		selYear.onchange = function(){call.changeYear(this.value); return false;};
		var ov = inp[cur].over;
		var start = inp[cur].toDay.getFullYear(); 
		var end = start + ov;
		if (ov < 0){
			for (i=start;i>end; i--){
				var op = document.createElement('option');
				op.setAttribute('value',i);
				op.innerHTML=i;
				if (i == y){
					op.setAttribute('selected','selected');
					op.selected=true;
				}

				selYear.appendChild(op);
			}
		}else{
			for (i=start; i<end; i++){
				var op = document.createElement('option');
				op.setAttribute('value',i);
				op.innerHTML=i;
				if (i == y){
					op.setAttribute('selected','selected');
					op.selected=true;
				}

				selYear.appendChild(op);
			}
		}
		yearCol.appendChild(selYear);
	},
	createMonthSelectBox:function(monthCol){
		var m = this.dt.getMonth();
		monthCol.innerHTML = '';

		var selMonth = document.createElement('select');
		selMonth.setAttribute('id','selMonth');
		selMonth.onchange = function(){call.changeMonth(this.value); return false;};
		
		for (i=0; i<12; i++){
			var op = document.createElement('option');
			op.setAttribute('value',i);
			op.innerHTML=this.monthLabels[this.lang][i];
			if (i == m){
				op.setAttribute('selected','selected');
				op.selected=true;
			}

			selMonth.appendChild(op);
		}
		
		monthCol.appendChild(selMonth);
	},
	inputCheck:function(grpId){
		this.inputsRow = -1;
		var lng = this.inputs.length;
		for (i=0; i<this.inputs.length; i++){
			if (this.inputs[i].grpId == grpId){
				this.inputsRow = i;
				break;
			}
		}
	},
	view:function(grpId,inputId){
		call.inputCheck(grpId);
		if (this.inputsRow != -1 )	{

			this.currentInput = inputId;
			var c = this.inputsRow;

			if (this.inputs[c].departure.id == inputId){
				this.type = 'departure';
			}else if (this.inputs[c].rturn.id == inputId){
				this.type = 'rturn';
			}
			
			//input degerlerini oku ve degiskenleri guncelle
			if (this.inputs[c].rturn.id != ''){
				var rturnInput = document.getElementById(this.inputs[c].rturn.id);
				this.inputs[c].rturn.date = this.strToDate(rturnInput.value,this.inputs[c].dateFormat);
			}

			if (this.inputs[c].departure.id != ''){
				var departureInput = document.getElementById(this.inputs[c].departure.id);
				this.inputs[c].departure.date = this.strToDate(departureInput.value,this.inputs[c].dateFormat);
			}
			
			if (this.inputs[c][this.type].date < this.inputs[c][this.type].monthColStart || this.inputs[c][this.type].date > this.inputs[c][this.type].monthColEnd ){
				this.curMonth = this.monthColStart =  this.createDate(this.inputs[c][this.type].date,'','',1);
				this.monthColEnd = this.createDate(this.inputs[c][this.type].date,'',this.inputs[c][this.type].date.getMonth() + this.inputs[this.inputsRow].monthCol,'end');
			}else{
				this.curMonth = this.monthColStart = this.inputs[c][this.type].monthColStart;
				this.monthColEnd = this.inputs[c][this.type].monthColEnd;
			}


			this.init();
		}
	},
	hide:function(){
		document.getElementById(this.inputs[this.inputsRow].calId).style.visibility="hidden"; 
	},
	changeMonth:function(v){
		var c = this.inputsRow;
		var tmpDate = this.createDate(this.curMonth,'',v,'');
		if ((tmpDate <= this.inputs[c].toDay && this.inputs[c].pickPast == true) || (tmpDate.getMonth() == this.inputs[c].toDay.getMonth() ) || (tmpDate > this.inputs[c].toDay && this.inputs[c].pickFuture == true)){
			this.curMonth = tmpDate;
			this.init();
		}
	},
	changeYear:function(year){
		var tmpDate = this.createDate(this.curMonth,year,'','');
		this.curMonth = tmpDate;
		this.init();
	},
	setInput:function(dt){
		var c = this.inputsRow;
		var e = this.currentInput;
		
		this.inputs[c][this.type].monthColStart = this.monthColStart;
		this.inputs[c][this.type].monthColEnd = this.monthColEnd;

		this.inputs[c].curDate = dt;
		this.inputs[c].selDate = dt;

		if (this.inputs[c].departure.id == this.currentInput){
			this.inputs[c].departure.date = dt;
		}else if (this.inputs[c].rturn.id == this.currentInput){
			this.inputs[c].rturn.date = dt;
		}
		
		if (this.type == 'departure' && this.inputs[c].rturn.id != ''){
			var rturnInput = document.getElementById(this.inputs[c].rturn.id);
			var rturnInputDate = this.strToDate(rturnInput.value,this.inputs[c].dateFormat);
			if (this.inputs[c].departure.date > this.inputs[c].rturn.date && this.inputs[c].departure.date > rturnInputDate){
				rturnInput.value = ''; 
				this.inputs[c].rturn.date= dt;
			}
		}else if (this.type == 'rturn' && this.inputs[c].departure.id != ''){
			var departureInput = document.getElementById(this.inputs[c].departure.id);
			var departureInputDate = this.strToDate(departureInput.value,this.inputs[c].dateFormat);
			if (this.inputs[c].rturn.date < this.inputs[c].departure.date && this.inputs[c].rturn.date < departureInputDate){
				departureInput.value = ''; 
				this.inputs[c].departure.date = dt;
			}
		}
		
		document.getElementById(e).value = this.formatOutput(this.inputs[c].curDate,this.inputs[c].dateFormat);
		document.getElementById(this.inputs[this.inputsRow].calId).style.visibility="hidden"; 
	},
	createDate:function(dt,y,m,d){
		if (dt == ''){
			dt = new Date();  
		}
		if (y == ''){y = dt.getFullYear();}
		
		if (m === '')
			m = dt.getMonth();
		else if (m == 'p' )
			m = dt.getMonth()-1;
		else if (m == 'n')
			m = dt.getMonth()+1;

		if (m == 12){
			m=0;
			y++;
		}else if (m == -1){
			m=11;
			y--;
		}
		if (d == ''){d = dt.getDate();}
		if (d == 'end' || d > this.daysInMonth[m] ){ d = this.daysInMonth[m];}

		return new Date(y,m,d);
	},
	formatOutput:function(d,f){
		var ds=0,dc='',ms=0,mc='',ys=0,yc='',c;
		var day=d.getDate(), month=d.getMonth()+1, year=d.getFullYear();
		for (i=0;i<f.length;i++){
			c = f.charAt(i); 
			if( c == 'd' || c == 'D'){
				ds++;
				dc+= c;
			}else if(c == 'm' || c == 'M'){
				ms++;
				mc+=c;
			}else if(c == 'y' || c == 'Y'){
				ys++;
				yc+=c;
			}
		}
		if (ds > 1){
			day = d.getDate();
			if (day < 10)
				day = '0'+day;
		}
		if (ms > 1){
			if (month < 10)
				month = '0'+month;
		}
		year = ''+d.getFullYear();
		year = year.substr(year.length-ys);
		f = f.replace(new RegExp(dc,"i"),day);
		f = f.replace(new RegExp(mc,"i"),month);
		f = f.replace(new RegExp(yc,"i"),year);
		return f;
	},
	strToDate:function(d,f){
		var ds=0,dc='',ms=0,mc='',ys=0,yc='',c;
		if (d.length != f.length){
			return new Date();
		}
		for (i=0;i<f.length;i++){
			c = f.charAt(i); 
			v = d.charAt(i); 
			if( c == 'd' || c == 'D'){
				ds++;
				dc+= v;
			}else if(c == 'm' || c == 'M'){
				if (parseInt(v) === 0 && ms === 0)
					continue;
				ms++;
				mc+=v;
			}else if(c == 'y' || c == 'Y'){
				ys++;
				yc+=v;
			}
		}
		return this.createDate('', parseInt(yc), parseInt(mc) -1, parseInt(dc));
	},
	findPos:function(obj){
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
		return [curleft,curtop];
	}
}
