﻿var datedpDivID = "datepicker";
var dateFrameID = "dateFrame";
var dayTitleArray1055=new Array('Pt', 'Sa', 'Ça', 'Pe', 'Cu', 'Ct', 'Pz');
var dayLongArray1055=new Array('Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi','Pazar');
var dayShortArray1055=new Array('P.tesi', 'Salı', 'Çarş.', 'Perş.', 'Cuma', 'C.tesi','Pazar');
var dayMonthArray1055=new Array('Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık');
var dayTitleArray1033=new Array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
var dayLongArray1033=new Array('Monday', 'Tuesday', 'Wednesday', 'Thurday', 'Friday', 'Saturday','Sunday');
var dayShortArray1033=new Array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
var dayMonthArray1033=new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var lblToday1055="Bugün";
var lblToday1033="Today";
var lblClear1055="Temizle";
var lblClear1033="Clear";

//var dayArray = new Array('Pt', 'Sa', 'Ça', 'Pe', 'Cu', 'Ct', 'Pz');

//var dayMedArray = new Array('P.tesi', 'Salı', 'Çarş.', 'Perş.', 'Cuma', 'C.tesi', 'Pazar');
//var monthArray = new Array('Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık');

document.all?document.attachEvent('onclick',closeCalendar):document.addEventListener('click',closeCalendar,false);

function getDateValue(objID)
{
    val=getObj(objID).value
    if(val!=''){
        return new Date(val.substr(6,4),val.substr(3,2)-1,val.substr(0,2));
    }
    return null;
}

function getDateValueString(objID)
{
    return getObj(objID).value;
}


function getObj(objID)
{
    if (document.getElementById) {return document.getElementById(objID);}
    else if (document.all) {return document.all[objID];}
    else if (document.layers) {return document.layers[objID];}
}

function isChild(s,d) {
	while(s) {
		if (s==d) 
			return true;
		s=s.parentNode;
	}
	return false;
}

function closeCalendar(e) {
	e?evt=e:evt=event;
	CSE=evt.target?evt.target:evt.srcElement;
	if (getObj('uniCalendar'))
		if (!isChild(CSE,getObj('uniCalendar')))
		{
			getObj('uniCalendar').style.display='none';
			getObj(dateFrameID).style.display='none';
			getObj(dateFrameID).style.visibility = "hidden";
		}
}


function dateToString(dateVal){
    newDate=new Date(dateVal.substr(0,4),dateVal.substr(4,2)-1,dateVal.substr(6,2));
    return dateVal.substr(6,2)+" "+monthArray[newDate.getMonth()]+" "+dateVal.substr(0,4)+" "+arrDay[newDate.getDay()]
}

function dateToString2(dateVal){
    newDate=new Date(dateVal.substr(4,4),dateVal.substr(2,2)-1,dateVal.substr(0,2));
    return dateVal.substr(0,2)+"."+dateVal.substr(2,2)+"."+dateVal.substr(4,4)+" "+arrDay[newDate.getDay()]
}

function dateToString3(dateVal){
    newDate=new Date(dateVal.substr(0,4),dateVal.substr(4,2)-1,dateVal.substr(6,2));
    return dateVal.substr(6,2)+"."+dateVal.substr(4,2)+"."+dateVal.substr(0,4)+" "+arrDay[newDate.getDay()]
}

function dateDirection(dateVal,day){
//newDate=new Date(dateVal.substr(6,4),dateVal.substr(3,2)-1,dateVal.substr(0,2));
newDate=new Date(dateVal.substr(0,4),dateVal.substr(4,2)-1,dateVal.substr(6,2));
newDate.setDate(newDate.getDate()+day);
reDay=newDate.getDate()
reMonth=newDate.getMonth()+1
reYear=newDate.getFullYear()
if(reDay<10){reDay="0"+reDay}
if(reMonth<10){reMonth="0"+reMonth}
//return reDay+"."+reMonth+"."+reYear
return reYear.toString()+reMonth.toString()+reDay.toString()
}

 
function displayDatePicker(dateField)
{
  var dateFieldName=dateField.id
  var displayBelowThisObject=dateField
  var targetDateField = dateField;
  var takvimDisplay=eval(dateFieldName+"TakvimDisplay")
  var takvimX=eval(dateFieldName+"TakvimX")
  var takvimY=eval(dateFieldName+"TakvimY")
  //var targetDateField = document.getElementsByName (dateFieldName).item(0);
  // takvimin gösterileceği x, y koordinatları belirleniyor
  var x = displayBelowThisObject.offsetLeft;
  var y = displayBelowThisObject.offsetTop + displayBelowThisObject.offsetHeight ;
  switch (takvimDisplay){
    case 'Right':x+=displayBelowThisObject.offsetWidth;y-=displayBelowThisObject.offsetHeight;break;
    case 'RightBottom':x+=displayBelowThisObject.offsetWidth;break;
  }
  // margin'ler hesaplanıp takvimin gösterileceği nesnenin tam altında olması için x ve y'ye bu boşluklar ekleniyor
  var parent = displayBelowThisObject;
  while (parent.offsetParent) {
    parent = parent.offsetParent;
    x += parent.offsetLeft;
    y += parent.offsetTop ;
  }
  // takvimin çizilmesi için drawDatePicker'a textbox ve x,y koordinatları gönderildi

  x=parseInt(x)+parseInt(takvimX);
  y=parseInt(y)+parseInt(takvimY);
  drawDatePicker(targetDateField, x, y);
}

function takvimOnResize()
{
  var dpDiv = document.getElementById(datedpDivID);
  var dpFrame = document.getElementById(dateFrameID);
  dpFrame.style.width = dpDiv.offsetWidth;
  dpFrame.style.height = dpDiv.offsetHeight;
}

/*  takvimin anahatlarını ve özelliklerini belirleyen metod */
function drawDatePicker(targetDateField, x, y)
{
  //x=x+16;
  var dt = getFieldDate(targetDateField.value);
 
  // takvim tablosu datedpDivID adlı bir div içerisinde yer alıyor. Oluşturulmamış ise oluşturuluyor. 
  if (!document.getElementById(datedpDivID)) {
    var newNode = document.createElement("div");
    newNode.setAttribute("id", datedpDivID);
    newNode.setAttribute("class", "dpDiv");
    newNode.setAttribute("style", "visibility: hidden;");
    newNode.onresize=takvimOnResize;

    var newNode2 = document.createElement("iframe");
    newNode2.setAttribute("id", dateFrameID);
    newNode2.setAttribute("frameBorder", "0");
    newNode2.setAttribute("scrolling", "no");
    newNode2.setAttribute("width", "0");
    newNode2.setAttribute("height", "0");
    newNode2.setAttribute("src", "javascript:false;");
    newNode2.setAttribute("style", "position: absolute;display: none;visibility:hidden");

    document.body.appendChild(newNode);
    document.body.appendChild(newNode2);
  }else{
      var dpDiv = document.getElementById(datedpDivID);
      var dpFrame = document.getElementById(dateFrameID);/*
      alert(dpDiv.style.visibility)
      alert(dpDiv.style.display)
      alert(dpFrame.style.visibility)
      alert(dpFrame.style.display)*/
      
      dpDiv.style.visibility = "hidden";
      dpDiv.style.display = "none";

      dpFrame.style.visibility = "hidden";
      dpFrame.style.display = "none";
  }
 
  // takvim x,y koordinatlarına kaydırılıyor ve visibility'si ayarlanıyor
  var dpDiv = document.getElementById(datedpDivID);
  var dpFrame = document.getElementById(dateFrameID);
  dpDiv.style.position = "absolute";
  dpDiv.style.left = x + "px";
  dpDiv.style.top = y + "px";
  dpDiv.style.visibility = (dpDiv.style.visibility == "visible" ? "hidden" : "visible");
  dpDiv.style.display = (dpDiv.style.display == "block" ? "none" : "block");
  dpDiv.style.zIndex = 999999999;

  dpFrame.style.position = dpDiv.style.position;
  dpFrame.style.left = dpDiv.style.left;
  dpFrame.style.top = dpDiv.style.top;
  dpFrame.style.visibility = dpDiv.style.visibility;
  dpFrame.style.display = dpDiv.style.display;
  dpFrame.style.zIndex = 999999998;
 
  // ve takvimin oluşturulması için refreshDatePicker metodu çağırılıyor
  refreshDatePicker(targetDateField.id, dt.getFullYear(), dt.getMonth(), dt.getDate());
}

/* DatePicker'ı oluşturan metod (her güncellemeden sonra çağırılıyor)*/
function refreshDatePicker(dateFieldName, year, month, day)
{
  /* Argüman gönderilmemiş ise bugün kullanılır. Başka şekilde ay ve yıl'ın gönderilmesi
  gerekmektedir. (eğer gün gönderilmiş ise daha sonra seçili şekilde gösterilecektir) */
  var thisDay = new Date();
 
  if ((month >= 0) && (year > 0)) {
    thisDay = new Date(year, month, 1);
  } else {
    day = thisDay.getDate();
    thisDay.setDate(1);
  }
 
  takvimFormat=eval(dateFieldName+"TakvimFormat")
  takvimLangID=eval(dateFieldName+"TakvimLangID")
  isYear=eval(dateFieldName+"TakvimisYear")
  isSmall=eval(dateFieldName+"TakvimisSmall")
  dayArray=eval("dayTitleArray"+takvimLangID)
  dayLong=eval("dayLongArray"+takvimLangID)
  dayShort=eval("dayShortArray"+takvimLangID)
  monthArray=eval("dayMonthArray"+takvimLangID)
  lblTodayStr=eval("lblToday"+takvimLangID)
  lblClearStr=eval("lblClear"+takvimLangID)
  // takvim tablosunu oluşturma başlangıcı
  var cssSuffix;
  if(isSmall==1){
    cssSuffix="Small";
  }else{
    cssSuffix="";
  }
  
  
  var htmlYear;
  if(isYear==1){
    htmlYear=getYearCombo(dateFieldName,thisDay,cssSuffix);
  }else{
    htmlYear="<div class=\"dpLblYear"+cssSuffix+"\">"+thisDay.getFullYear()+"</div>";
  }
  

  var html = "<table cols=7 class='dpTable' cellspacing=0 cellpadding=0 id='uniCalendar'>\r\n";

  html += "<tr>";
  html += "<td colspan=7 style='height:2px;'></td></tr>";
  html += "<tr><td colspan=4><table cellspacing=0 cellpadding=0><tr><td style=\"width:10%\">" + adjustMonthButton(dateFieldName, thisDay, -1, "<IMG SRC=\""+imgTakvimSol+"\" border=\"0\" />", monthArray[(thisDay.getMonth()+11) % 12] + " " + (thisDay.getFullYear() + parseInt((thisDay.getMonth() + 11) / 12) - 1));
  html += "</td><td style=\"width:80%;\" class=\"dpDateStr\">" + monthArray[thisDay.getMonth()] + "&nbsp;</td><td style=\"width:10%\">";
  html += adjustMonthButton(dateFieldName, thisDay, 1, "<IMG SRC=\""+imgTakvimSag+"\" border=\"0\" />", monthArray[(thisDay.getMonth()+1) % 12] + " " +(thisDay.getFullYear() + parseInt((thisDay.getMonth() + 1) / 12))) + "</td></tr></table></td>\r\n";
  html += "<td colspan=3><table cellspacing=0 cellpadding=0><tr><td>" + adjustYearButton(dateFieldName, thisDay, -1, "<IMG SRC=\""+imgTakvimSol+"\" border=\"0\" />", monthArray[thisDay.getMonth()] + " " + (thisDay.getFullYear()-1));
  html += "</td><td class=\"dpDateStr\">" + htmlYear + "</td><td>";
  html += adjustYearButton(dateFieldName, thisDay, 1, "<IMG SRC=\""+imgTakvimSag+"\" border=\"0\" />", monthArray[thisDay.getMonth()] + " " + (thisDay.getFullYear()+1)) + "</td></tr></table></td>\r\n";
  html += "</tr>\r\n";
  html += "<td colspan=7 style='height:2px;'></td></tr>";

  // günlerin kısaltmalarını ilk satıra yazıyoruz
  html += "<tr>";
  for(i = 0; i < dayArray.length; i++)
    html += "<td class='dpDayTD"+cssSuffix+"'>" + dayArray[i] + "</td>\r\n";
  html += "</tr>\r\n";
 
  // günleri ay'a uygun olarak tabloya ekliyoruz
  html += "<tr>";
  
  // normalde pazar olan haftanın ilk gününü pazartesi yapabilmek için yapılan işlem
  var blankCount = thisDay.getDay();
  if (blankCount != 0)
    blankCount -= 1;
  else
    blankCount = 6;  

  // ilk önce ayın ilk gününden önceki boşluklar
  for (i = 0; i < blankCount; i++)
    html += "<td class='dpTDBlank"+cssSuffix+"'>&nbsp;</td>\r\n";
    
  // takvim'e günler yerleştiriliyor
  do {
    dayNum = thisDay.getDate();
      switch(takvimFormat){
           case "DDMMYYYY": thisDayStr="";break;
           case "DDMMYYYYShortDayStr": thisDayStr=" " + dayShort[thisDay.getDay() + 6 - (7*parseInt((thisDay.getDay()+5)/6))];break;
           case "DDMMYYYYDayStr": thisDayStr=" " + dayLong[thisDay.getDay() + 6 - (7*parseInt((thisDay.getDay()+5)/6))];break;
      }
    
    onClick = " onclick=\"updateDateField('" + dateFieldName + "', '" + getDateString(thisDay,thisDayStr) + "');\">";

    if (dayNum == day)
      html += "<td class='dpsTD"+cssSuffix+"' title='" + dayNum + " " + monthArray[thisDay.getMonth()] + " (*)' onMouseOut='this.className=\"dpsTD"+cssSuffix+"\";' onMouseOver='this.className=\"dpsTDHover"+cssSuffix+"\";' " + onClick + dayNum + "</td>\r\n";
    else{
      if (thisDay.getDay() != 6 && thisDay.getDay() != 0)  
        html += "<td class='dpTD"+cssSuffix+"' title='" + dayNum + " " + monthArray[thisDay.getMonth()] + "' onMouseOut='this.className=\"dpTD"+cssSuffix+"\";' onMouseOver=' this.className=\"dpTDHover"+cssSuffix+"\";' " + onClick + dayNum + "</td>\r\n";
      else
        html += "<td class='dpwTD"+cssSuffix+"' title='" + dayNum + " " + monthArray[thisDay.getMonth()] + "' onMouseOut='this.className=\"dpwTD"+cssSuffix+"\";' onMouseOver=' this.className=\"dpwTDHover"+cssSuffix+"\";' " + onClick + dayNum + "</td>\r\n";
    }
    // Eğer gün pazar ise yeni bir satır'a geçilir
    if (thisDay.getDay() == 0) 
      html += "</tr>\r\n <tr>";
    
    // gün arttırılıyor
    thisDay.setDate(thisDay.getDate() + 1);
  } while (thisDay.getDate() > 1)

  // son kalan boşluklar tabloya ekleniyor
  if (thisDay.getDay() > 1) {
    for (i = 8; i > thisDay.getDay(); i--){
      html += "<td class='dpTDBlank"+cssSuffix+"'>&nbsp;</td>\r\n";
    }
  }
  html += "</tr>\r\n";
  
  // kullanıcının bugün'e gitmesi ve takvimi kapatabilmesi için buton eklendi
  html += "<tr>";
  html += "<td colspan=4 class='dpTodayButtonTD'><a href='javascript:;' class='dpTodayButton' onClick='refreshDatePicker(\"" + dateFieldName + "\");'>"+lblTodayStr+"</button></td>\r\n";
  html += "<td colspan=3 class='dpTodayButtonTD'><a href='javascript:;' class='dpTodayButton' onClick='updateDateField(\"" + dateFieldName + "\",\"\");'>"+lblClearStr+"</button></td>\r\n";
  html += "</tr>\r\n";
//updateDateField 
  // ve tablo kapatılıyor
  html += "</table>\r\n";

//document.getElementById("TextArea1").value=html;
  var dpDiv = document.getElementById(datedpDivID);
  dpDiv.innerHTML = html;
  var dpFrame = document.getElementById(dateFrameID);
  dpFrame.style.width = dpDiv.offsetWidth;
  dpFrame.style.height = dpDiv.offsetHeight;
}

/* Ay değiştirme butonunu oluşturan metod */
function adjustMonthButton(dateFieldName, dateVal, adjust, label, butTitle)
{
  var newMonth = (dateVal.getMonth () + adjust) % 12;
  var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
  if (newMonth < 0) {
    newMonth += 12;
    newYear += -1;
  }
  //var  strReturn="<a href='javascript:;' class='dpButton' title='" + butTitle + "' onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");'>" + label + "</a>";
  var  strReturn="<a href='javascript:refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");' class='dpButton' title='" + butTitle + "'>" + label + "</a>";
  return strReturn
}

/* Yıl değiştirme butonunu oluşturan metod */
function adjustYearButton(dateFieldName, dateVal, adjust, label, butTitle)
{
  var newYear = dateVal.getFullYear() + adjust;
 
  return "<a href='javascript:;' class='dpButton' title='" + butTitle + "' onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + dateVal.getMonth() + ");'>" + label + "</a>";
}


/* Seçilen günü textbox'a gönderilecek string şeklinde hazırlayan metod ör: 03/09/2006 */
function getDateString(dateVal,dateDayStr)
{
  var dayString = "00" + dateVal.getDate();
  var monthString = "00" + (dateVal.getMonth()+1);

  dayString = dayString.substring(dayString.length - 2);
  monthString = monthString.substring(monthString.length - 2);

  return dayString + "." + monthString + "." + dateVal.getFullYear() + dateDayStr;
}

/* TextBox'taki tarihi, Date nesnesine çeviren metod*/
function getFieldDate(dateString)
{
  var dateVal;
  var dArray;
  var d, m, y;
 
  try {
    dArray = dateString.split(".");
    if (dArray) {
      d = parseInt(dArray[0], 10);
      m = parseInt(dArray[1], 10) - 1;
      y = parseInt(dArray[2], 10);

      dateVal = new Date(y, m, d);
    } else if (dateString) {
      dateVal = new Date(dateString);
    } else {
      dateVal = new Date();
    }
  } catch(e) {
    alert("hata");
    dateVal = new Date();
  }
 
  return dateVal;
}

// Textbox'taki değeri takvimde seçilen tarih ile değiştiren ve takvimi otomatik olarak kapatan metod
function updateDateField(dateFieldName, dateString)
{
    //var btn=document.getElementById(dateFieldName+"_")
    //alert(dateFieldName+)
  var targetDateField = document.getElementById(dateFieldName);
  //if (dateString)
    targetDateField.value = dateString;
 
  var dpDiv = document.getElementById(datedpDivID);
  var dpFrame = document.getElementById(dateFrameID);
  
  dpDiv.style.visibility = "hidden";
  dpDiv.style.display = "none";

  dpFrame.style.visibility = "hidden";
  dpFrame.style.display = "none";
  try{
  targetDateField.focus();
  }catch(e){}
  if(targetDateField.onchange!=null)
  targetDateField.onchange();
}

function getYearCombo(dateFieldName,dateValue,cssSuffix){
var dayValue=dateValue.getDate()
var monthValue=dateValue.getMonth()
var yearValue=dateValue.getFullYear()
var yearMax,yearMin;
var d=new Date();

if(yearValue>d.getFullYear()){
    yearMax=yearValue+5;
}else{yearMax=d.getFullYear()+5}

if(yearValue<d.getFullYear()-105)
{
    yearMin=yearValue-5;
}else
{
    yearMin=d.getFullYear()-105;
}

var strCmb="<SELECT class=\"dpComboYear"+cssSuffix+"\" onchange=\"refreshDatePicker('"+dateFieldName+"',this.value,"+ monthValue+","+ dayValue+")\">";
var strYear="";

while(yearMax>=yearMin)
{
	strYear=yearMax.toString();
	if(yearMax==yearValue)
	{strCmb+="<option value="+strYear+" selected>"+strYear+"</option>";}
	else
	{strCmb+="<option value="+strYear+">"+strYear+"</option>";}

    yearMax--;
}

strCmb+="</SELECT>"
return strCmb; 
}
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();