/* ********** Kullanılan diğer classlar ********** */
//---		Controls.js
//---		Date.js
//---		//--Strings.js


/* ********** Genel Değişkenler Başlangıç ********** */

//var tempTarih; 		//Tarih işlemleri sırasında geçici olarak kullanmak amacıyla konulan değişken
//var HtmlElement;		//Calendar nesnesinin etkileşim içinde bulunacağı Html text control değişkeni
//var HtmlSender;		//Calendar nesnesinin etkileşim içinde bulunacağı Html button,img vs.. control değişkeni
//var Tarih; 			//Calendar nesnesinin yaratıldığı zaman tarih değerini tutacak olan değişken
var Sure=1000; 		//Calendar nesnesinin takvimi açıldığında mouse out olayında kontrol aralığı
var KalanSure=2; 		//Calendar nesnesinin takvimi mouse out olayında kullanılacak olan süre kontrol değişkeni
//var CalendarPanel; 	//Calendar nesnesinin takviminin içinde gösterileceği div elementi
//var PanelText;			//Calendar nesnesinin takvimin içeriğini barındıran text değişkeni
//var TarihBaz; 			//Tarih listeleme yaparken listelemenin baz alınacağı tarih değerini saklamak için kullanılır.
//var PanelLeft=0;		//Takvim açıldığında takvimin soldan kalack olan değerini verir.
//var PanelTop=0;		//Takvim açıldığında takvimin üstten kalacak değerini verir
var PanelLeftEx=f_isIE()?-30:-20;		//Takvim açıldığında takvimin soldan kalacak değerine ekstra değer ekler
var PanelTopEx=f_isIE()?35:30;		//Takvim açıldığında takvimin üstten kalacak değerine ekstra değer ekler
var PanelWidth=200;	//Takvim açıldığında takvimin default genişliğini tutacak değişken
var Zamanlayici=null;		//Takvimin zaman kontrolünü sağlayan timer
var over = false;     // Mouse'un calendar nesnesinin üzerinde olup olmadığını belirtir
///Daha sonradan eklenen kodlar içerik modülü için
var X=0;//Mouse bağımlı geçici x değeri
var Y=0;//mouse bağımlı geçici  değeri
///

var Aylar = new Array("tr","eng");	 	//Kullanılacak olan ay değerleri için
var Gunler = new Array("tr","eng");		//Kullanılacak olan gün değerleri için
Gunler["tr"] = new Array(
	[ "Pazartesi"	, "P" 	],//Uzun ve kısa halleri
	[ "Salı"		, "S" 	],
	[ "Çarşamba"	, "Ç" 	],
	[ "Perşembe"	, "P" 	],
	[ "Cuma"		, "C" 	],
	[ "Cumartesi"	, "C" 	],
	[ "Pazar"		, "P" 	]
);//Günler
Aylar["tr"] = new Array(
	[ "Ocak"		, "Ock" 	],//Uzun ve kısa halleri
	[ "Şubat"		, "Şbt" 	],
	[ "Mart"		, "Mrt" 	],
	[ "Nisan"		, "Nis" 	],
	[ "Mayıs"		, "May" 	],
	[ "Haziran"	, "Haz" 	],
	[ "Temmuz"		, "Tem" 	],
	[ "Ağustos"	, "Ağu" 	],
	[ "Eylül"		, "Eyl" 	],
	[ "Ekim"		, "Ekm" 	],
	[ "Kasım"		, "Ksm" 	],
	[ "Aralık"		, "Ara" 	]
);//Aylar
Gunler["eng"] = new Array(
	[ "Monday"		, "M" 	],//Uzun ve kısa halleri
	[ "Tuesday"	, "S" 	],
	[ "Wednesday"	, "W" 	],
	[ "Thursday"	, "T" 	],
	[ "Friday"		, "F" 	],
	[ "Saturday"	, "S" 	],
	[ "SUnday"		, "S" 	]
);//Günler
Aylar["eng"] = new Array(
	[ "January"	, "Jan" 	],//Uzun ve kısa halleri
	[ "February"	, "Feb" 	],
	[ "March"		, "Mar" 	],
	[ "April"		, "Apr" 	],
	[ "May"			, "May" 	],
	[ "June"		, "Jun" 	],
	[ "July"		, "Jul" 	],
	[ "August"		, "Aug" 	],
	[ "September"	, "Sep" 	],
	[ "October"	, "Oct" 	],
	[ "November"	, "Nov" 	],
	[ "December"	, "Dec" 	]
);//Aylar
/* ********** Genel Değişkenler Bitiş ********** */






/* ********** Calendar Fonksiyonu Başlagıç ********** */

//   Tarih seçmek için kullanılacak olan Calendar nesnesinin constructer'ı
//   Element değişkeni value değerinden tarih alınacak 
// 		veya value değerine tarih atanacak olan HTML elementidir.
//   Eğer bu element gönderilmemişse Calendar constructer'ı işlem gerçekleştirmez ve uyarı verir
//   Element var fakat element içinde herhangi bir değer yoksa veya değer yalnışsa o anki sistem tarihi baz olarak alınır.


		function Calendar( _id, _HtmlElement, _HtmlSender, _Dil, _CalendarPanel )
		{
			try
			{
				if (!_id)
					return ShowError ( 'Lütfen id giriniz...' );
				this.id = _id;
				if ( !_HtmlElement ) 
					return ShowError ( 'Element belirlemelisiniz...' );
					
				if ( !_HtmlSender ) 
					return ShowError ( 'Sender belirlemelisiniz...' );

				this.CalendarPanel = getElement( (_CalendarPanel)?_CalendarPanel:'CalendarPanel' );
				if ( !this.CalendarPanel )
					return ShowError( "Lütfen sayfaya CalendarPanel ekleyiniz..." );
				
				//Değişkenler
				this.TarihBaz;
				this.PanelText;
				this.tempTarih;
				this.Dil = _Dil;

				//Kulanılacak olan html elementlerin ayarlanmaları
				this.HtmlElement = _HtmlElement;
				this.HtmlSender = _HtmlSender;
				
				//CalendarPanel'in görünmez olmasını sağlamak
				/***********************************/
				
				this.CalendarPanel.style.visibility = "hidden";
				/*document.forms[0].onclick=function ()
				{
					var tempElement = getElement('CalendarPanel');
					tempElement.innerHTML = "";
					with (tempElement.style)
					{
						visibility = "hidden";
						left = "-10px";
						top = "-10px";
					}
				}*/
				/* ********** ShowCalendar Fonksiyonu Başlangıç ********** */

				//   Calendar nesnesinin Takvim olarak gösterilmesi için   
				//   Belirtilen tipe göre gösterim işlemi yapar

					this.ShowCalendar = function ( Tip, getFromElement )
					{
						if ( getFromElement==true )
							this.getDateFromElement();
						switch ( Tip )
						{
							case 'm':
								this.ShowForMonth();
							break;
							case 'y':
								this.ShowForYear();
							break;
							default://case 'g':
								this.ShowForDay();
							break;
						}
						OverCalendar();
					}

				/* ********** ShowCalendar Fonksiyonu Bitiş ********** */
				
				/* ********** getDateFromElement Fonksiyonu Başlangıç ********** */

				//   Calendar nesnesi ile çalışacak olan elementin içeriğindeki değeri almak için


				this.getDateFromElement = function ( )
				{
					this.Tarih = IsDateT( this.HtmlElement.value );
					this.Tarih   = ( !this.Tarih )?new Date():this.Tarih;
					this.TarihBaz = this.Tarih;
					this.HtmlElement.value = returnDate(this.Tarih);
				}


				/* ********** getDateFromElement Fonksiyonu Bitiş ********** */
				
				/* ********** SetCalendarPanel Fonksiyonu Başlangıç ********** */

				//    CalendarPanel'in içeriğini ve durumunu ayarlamak için   

				this.SetCalendarPanel = function ( Text, Show )
				{
					//this.CalendarPanel = getElement( 'CalendarPanel' );
					//Açılacak takvimin pozisyonunu ayarlamak
					this.PanelLeft =this.HtmlSender.offsetLeft+ this.HtmlSender.offsetWidth;// //Bu satır takvimin HtmlSender nesnesinin hemen sağında çıkmasını sağlar
					this.PanelTop = this.HtmlSender.offsetTop; //; //Bu satır takvimin HtmlSender nesnesinin hemen altında çıkmasını sağlar
					this.HtmlParent = this.HtmlSender.offsetParent
					while (this.HtmlParent != null) {
						this.PanelLeft += this.HtmlParent.offsetLeft;
						this.PanelTop  += this.HtmlParent.offsetTop;
						this.HtmlParent = this.HtmlParent.offsetParent;
					}
					this.CalendarPanel.innerHTML = Text;
					this.PanelTop -= (this.CalendarPanel.offsetHeight - this.HtmlSender.offsetHeight);
					this.PanelLeft -= this.HtmlSender.offsetWidth;
					with( this.CalendarPanel.style ) {
						width 	= ( Show )?PanelWidth + "px":"2px";
						left  	= ( (( Show )?this.PanelLeft:-3))+"px";
						top		= ( (( Show )?this.PanelTop:-3))+"px";
						visibility = ( Show )?"visible":"hidden";
					}
				}
		
				/* ********** SetCalendarPanel Fonksiyonu Bitiş ********** */

				this.ShowForDay = ShowCalendarForDay;
				this.ShowForMonth = ShowCalendarForMonth;
				this.ShowForYear = ShowCalendarForYear;
				/* ********** SetElementDate Fonksiyonu Başlangıç ********** */

				//    CalendarPanel'in içeriğini ve durumunu ayarlamak için   


				this.SetElementDate = function ( DateValue )
				{
					this.HtmlElement.value = DateValue;
					try {f_onChange(getElement("ascAnket1_txtBirth"));}
					catch(hata){}
					this.SetCalendarPanel( "", false );
					OverCalendar();
				}
		
				/* ********** SetElementDate Fonksiyonu Başlangıç ********** */
				/* ********** KalanSureKontrol Fonksiyonu Başlangıç ********** */

				//   Takvim ekranı görüntülenmesinden sonra kapama kontrolü   


				this.KalanSureKontrol = function()
				{
					this.SetCalendarPanel( "", false );
					OverCalendar();
				}


				/* ********** KalanSureKontrol Fonksiyonu Bitiş ********** */
				/* ********** NavMonth Fonksiyonu Başlangıç ********** */

				//   Takvim ekranını belirtilen ay kadar eklendikten sonra gösterir


				this.NavMonth = function ( month )
				{
					this.TarihBaz = AddMonth( this.TarihBaz, month );
					this.ShowCalendar('g', false);
				}


				/* ********** NavMonth Fonksiyonu Bitiş ********** */
				/* ********** NavYear Fonksiyonu Başlangıç ********** */

				//   Takvim ekranını belirtilen ay kadar eklendikten sonra gösterir   


				this.NavYear = function ( year )
				{
					this.TarihBaz = AddYear( this.TarihBaz, year );
					this.ShowCalendar('g',false);
				}


				/* ********** NavYear Fonksiyonu Bitiş ********** */

			}
			catch(Hata)
			{
				return ShowError ( Hata.description );
			}
		}


/* ********** Calendar Fonksiyonu Bitiş ********** */






/* ********** returnDate Fonksiyonu Başlangıç ********** */

//   Calendar nesnesinin Tarih değerini text olarak döndürmek için   


			function returnDate ( rDate)
			{
				return ( ( rDate.getDate()<10?'0':'' ) + rDate.getDate() +'.'	//Gun
						+ ( (( rDate.getMonth() + 1)<10)?'0':'')				//ondan küçük değerlerde iki hane yapmak için
						+ ( rDate.getMonth() + 1)+ '.' 							//Ay ( javascripte ay değeri 0 dan başladığı için bir fazlası gönderiliyor )
						+   rDate.getFullYear() );								//Yıl
			}


/* ********** returnDate Fonksiyonu Bitiş ********** */






/* ********** ShowCalendarForDay Fonksiyonu Başlangıç ********** */

//   Calendar nesnesinin günlar için Takvim olarak gösterilmesi


		function ShowCalendarForDay (  )
		{
			this.PanelText = "<table id=\"calendar\" cellspacing=\"0\" cellpadding=\"0\" summary=\"Month calendar\" onMouseOver=\"OverCalendar();\" onMouseOut=\"OutCalendar('" + this.id + "');\">\n";
			//Header kısmı başlangıç
			this.PanelText += "\t<tr ><td colspan='7'>";
			//Ay ve yıl tarihleri için küçük tablo
			this.PanelText += "<table class=\"ustsatir\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" summary=\"Month calendar\"><tr>";// Tablo/Satır başlangıcı
			
			this.PanelText += "<td style=\"width:4%;  align:center;\"><a href='javascript:;' onclick='" + this.id + ".NavMonth(-1)'>«</a><td>";//Aylar geri linki
			this.PanelText += "<td style=\"width:45%; align:center;\"><a href=\"javascript:;\" onclick=\"" + this.id + ".ShowCalendar( 'm', false );\">"+Aylar[this.Dil][ this.TarihBaz.getMonth() ][ 0 ] + "</a></td>";//Aylar seçenek linki
			this.PanelText += "<td style=\"width:4%;  align:center;\"><a href='javascript:;' onclick='" + this.id + ".NavMonth(1)'>»</a></td>";//Aylar ileri linki
			this.PanelText += "<td style=\"width:4%;  align:center;\">&nbsp;</td>";//Araya boşluk vermek için
			this.PanelText += "<td style=\"width:4%;  align:center;\"><a href='javascript:;' onclick='" + this.id + ".NavYear(-1)'>«</a></td>"; //Yıllar geri linki
			this.PanelText += "<td align=\"center\" style=\"width:35%; align:center;\"><a href=\"javascript:;\" onclick=\"" + this.id + ".ShowCalendar( 'y', false );\">" + this.TarihBaz.getFullYear() + "</a></td>";//Yıllar seçenek linki
			this.PanelText += "<td style=\"width:4%;  align:center;\"><a href='javascript:;' onclick='" + this.id + ".NavYear(1)'>»</a></td>";//Yıllar ileri linki

			this.PanelText += "</tr></table>";//Tablo Satır bitişi
			//Ay ve yıl tarihleri için küçük tablo
			this.PanelText += "</td></tr>\n";
			
			
			//Gün baş harfleri satırı Başlangıç
			this.PanelText += "\n\t<tr>";
			for ( i=0; i<Gunler[this.Dil].length; 
					this.PanelText += ((i==0)?"\t\t" : "") + "<td title=\"" + Gunler[this.Dil][ i ][ 0 ] +"\">" + Gunler[this.Dil][ i ][ 1 ] + "</td>" + ((i==Gunler[this.Dil].length-1)?"\n" : "") 
					, i++ );
			this.PanelText += "\t</tr>\n";
			// Gün baş harfleri satırı bitiş
			//Header kısmı bitiş
			this.tempTarih = this.TarihBaz;
			this.tempTarih = AddDate ( this.tempTarih, this.tempTarih.getDate()*(-1) );
			if ( this.tempTarih.getDay()!=1 )
				this.tempTarih = AddDate( this.tempTarih, (this.tempTarih.getDay())*(-1)+1);
			for ( hafta=0 ; hafta<5 || this.tempTarih.getMonth() == this.TarihBaz.getMonth(); hafta++)
			{
				this.PanelText += "\t<tr>\n\t\t";
				for ( gun=0; gun<7; gun++ )
				{
				
						this.PanelText += "<td ";
						if (CompareDates( this.Tarih, this.tempTarih )==0)
							this.PanelText += "class='today'>";
						else if (this.TarihBaz.getMonth() == this.tempTarih.getMonth() )
							this.PanelText += " class='tarih'>";
						else
							this.PanelText += " class='empty'>";
						
						this.PanelText += "<a href='javascript:;' onclick=\"" + this.id + ".SetElementDate('" ;
						this.PanelText += returnDate( this.tempTarih ) + "');\">";
						this.PanelText += this.tempTarih.getDate();
						this.PanelText += "</a></td>";
						this.tempTarih=AddDate(this.tempTarih,1);
				}
				this.PanelText += "\t</tr>\n";
			}
			this.PanelText += "</table>\n";
			this.SetCalendarPanel( this.PanelText, true );
		}


/* ********** ShowCalendarForDay Fonksiyonu Bitiş ********** */





/* ********** ShowCalendarForMonth Fonksiyonu Başlangıç ********** */

//   Calendar nesnesinin aylar için Takvim olarak gösterilmesi


		function ShowCalendarForMonth (  )
		{
			this.PanelText = "<table id=\"calendar\" onMouseOver=\"OverCalendar();\" onMouseOut=\"OutCalendar('" + this.id + "');\" onselectstart=\"return false;\" cellspacing=\"0\" cellpadding=\"0\" summary=\"Month calendar\">\n";
			this.PanelText += "\t<tr>";
			this.PanelText += "<td colspan='6'><a href=\"javascript:;\" onclick=\"" + this.id + ".ShowCalendar( 'y', false );\">" + this.TarihBaz.getFullYear() + "</a></td></tr>\n";
			for ( i=0; i<Aylar[this.Dil].length; i++ )
			{
				if (i!=0 && (i%3)==0)
					this.PanelText += "\t</tr>";
				if (i==0)
					this.PanelText +="\n\t<tr>\n" ;
				this.PanelText += "<td class='" + ((i==this.TarihBaz.getMonth())?"today":"gun" );//Aktif ayı seçili olarak getirmek için
				this.PanelText += "' title=\"" + Aylar[this.Dil][ i ][ 0 ] +"\">" ;//Ay alt bilgisi
				this.PanelText += "<a href=\"javascript:;\" onclick=\"" + this.id + ".NavMonth(" + ( i-this.TarihBaz.getMonth())+ ")\">";//Seçilecek aya navigasyon linki eklenmesi
				this.PanelText += Aylar[this.Dil][ i ][ 1 ] + "</a>";//Ay yazımı
				this.PanelText += "</td>\n" ;
			}
			this.PanelText += "\t</tr>\n";
			this.PanelText += "</table>\n";
			this.SetCalendarPanel( this.PanelText, true );
		}


/* ********** ShowCalendarForMonth Fonksiyonu Bitiş ********** */





/* ********** ShowCalendarForYear Fonksiyonu Başlangıç ********** */

//   Calendar nesnesinin yıllar için Takvim olarak gösterilmesi


		function ShowCalendarForYear ( )
		{
			this.PanelText = "<table id=\"calendar\"  cellspacing=\"0\" cellpadding=\"0\" summary=\"Month calendar\" onMouseOver=\"OverCalendar();\" onMouseOut=\"OutCalendar('" + this.id + "');\" onselectstart=\"return false;\">\n";
			this.PanelText += "\t<tr>\n";
			this.PanelText += "<td><a href=\"javascript:;\" onclick=\"" + this.id + ".TarihBaz = AddYear(" + this.id + ".TarihBaz,-24);" + this.id + ".ShowForYear ( );\">«</a></td>";
			this.PanelText += "<td colspan='3'><a href=\"javascript:;\" onclick=\"" + this.id + ".ShowCalendar( 'm', false );\">"+Aylar[this.Dil][ this.TarihBaz.getMonth() ][ 0 ] + "</a></td>";
			this.PanelText += "<td><a href=\"javascript:;\" onclick=\"" + this.id + ".TarihBaz = AddYear(" + this.id + ".TarihBaz,+24);" + this.id + ".ShowForYear ( );\">»</a></td></tr>\n";
			for ( i=this.TarihBaz.getFullYear()-12,j=0; i<=this.TarihBaz.getFullYear()+12; j++,i++ )
			{
				if (j==5)
				{
					this.PanelText += "\t</tr>";
					j=0;
				}
				if (j==0)
					this.PanelText +="\n\t<tr>\n" ;
				this.PanelText += ((j==0)?"\t\t" : "") + "<td class='" + (( i-this.TarihBaz.getFullYear() != 0)?"gun":"today") +"' title=\"" + i +"\">" ;
				this.PanelText += "<a href=\"javascript:;\" onclick=\"" + this.id + ".NavYear(" + ( i-this.TarihBaz.getFullYear())+ ")\">" + i + "</a>";
				this.PanelText += "</td>\n" ;
			}
			this.PanelText += "\t</tr>\n";
			this.PanelText += "</table>\n";
			this.SetCalendarPanel( this.PanelText, true );
		}


/* ********** ShowCalendarForYear Fonksiyonu Bitiş ********** */






/* ********** OverCalendar Fonksiyonu Başlangıç ********** */

//   Mouse nesnesi Calendar nesnesinin Takvimi üzerinde gezdği sürece 
//		takvim ekranının görüntülenmesi için   


		function OverCalendar ()
		{
			if (Zamanlayici)
				clearTimeout( Zamanlayici );
		}


/* ********** OverCalendar Fonksiyonu Bitiş ********** */






/* ********** OutCalendar Fonksiyonu Başlangıç ********** */

//   Mouse nesnesi Calendar nesnesinin Takvimi üzerinden ayrıldığnda 
//		sürece takvim ekranının uzun süre görüntülenmemesi için   


		function OutCalendar (_id)
		{
			Zamanlayici = setTimeout( _id+'.KalanSureKontrol()', KalanSure * Sure );
		}


/* ********** OverCalendar Fonksiyonu Bitiş ********** */
