var datedpDivID = "datepicker";
var dayArray = new Array('Pts.', 'Sa.', '&#199;ar.', 'Per.', 'Cu.', 'Cts.', 'Pz.');
var dayMedArray = new Array('Pazartesi', 'Sal&#305;', '&#199;ar&#351;amba', 'Perşembe', 'Cuma', 'Cumartesi', 'Pazar');
var monthArray = new Array('Ocak', '&#350;ubat', 'Mart', 'Nisan', 'May&#305;s', 'Haziran', 'Temmuz', 'A&#287;ustos', 'Eyl&#252;l', 'Ekim', 'Kas&#305;m', 'Aral&#305;k');
var arrDay2 = new Array('Pazar','Pazartesi', 'Sal&#305;', 'Çarşamba', 'Per&#351;embe', 'Cuma', 'Cumartesi');
var arrDay = new Array('Pazar','P.tesi', 'Sal&#305;', '&#199;ar&#351;.', 'Per&#351;.', 'Cuma', 'C.tesi');

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(dateFieldName, displayBelowThisObject)
{
  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 ;

  // 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
  switch (dateFieldName){
  case 'txtHotelDate':y=y-175;x=x-10;break;
  case 'txtCarBDate' :y=y-200;x=x-90;break;
  }
  
  drawDatePicker(targetDateField, x, y);
  //SeferSorgula();
}


/*  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;");
    document.body.appendChild(newNode);
  }
 
  // takvim x,y koordinatlarına kaydırılıyor ve visibility'si ayarlanıyor
  var dpDiv = document.getElementById(datedpDivID);
  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 = 99999;
 
  // ve takvimin oluşturulması için refreshDatePicker metodu çağırılıyor
  refreshDatePicker(targetDateField.name, 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);
  }

  // takvim tablosunu oluşturma başlangıcı
  var html = "<table cols=7 class='dpTable' style=\"width:170px;\">\r\n";

  // Ay, yıl ayar butonlarının bulunduğu ve ay, yıl bilgilerinin gösterildiği bar
  /* 1. görünüş
  html += "<tr class='dpTitleTR'>";
  html += "<td colspan=2 class='dpButtonTD'>" + adjustYearButton(dateFieldName, thisDay, -1, "&lt;&lt;&nbsp;", monthArray[thisDay.getMonth()] + " " + (thisDay.getFullYear()-1));
  html += adjustMonthButton(dateFieldName, thisDay, -1, "&lt;", monthArray[(thisDay.getMonth()+11) % 12] + " " + (thisDay.getFullYear() + parseInt((thisDay.getMonth() + 11) / 12) - 1)) + "</td>\r\n";
  html += "<td colspan=3 class='dpTitleTD'> <div class='dpTitleText'>" + monthArray[thisDay.getMonth()] + " " + thisDay.getFullYear() + "</div> </td>\r\n";
  html += "<td colspan=2 class='dpButtonTD'>" + adjustMonthButton(dateFieldName, thisDay, 1, "&gt;", monthArray[(thisDay.getMonth()+1) % 12] + " " +(thisDay.getFullYear() + parseInt((thisDay.getMonth() + 1) / 12)));
  html += adjustYearButton(dateFieldName, thisDay, 1, "&nbsp;&gt;&gt;", monthArray[thisDay.getMonth()] + " " + (thisDay.getFullYear()+1)) + "</td>\r\n";
  html += "</tr>\r\n";*/
  
  /* 2. görünüş*/
  html += "<tr class='dpTitleTR'>";
  html += "<td colspan=4 class='dpTitleTD' style=\"width:90px;\"><br><div class='dpTitleText'>" + adjustMonthButton(dateFieldName, thisDay, -1, "<IMG SRC=\"images/takvim/left_arrow.gif\" border=\"0\" />", monthArray[(thisDay.getMonth()+11) % 12] + " " + (thisDay.getFullYear() + parseInt((thisDay.getMonth() + 11) / 12) - 1));
  html += "&nbsp;" + monthArray[thisDay.getMonth()] + "&nbsp;";
  html += adjustMonthButton(dateFieldName, thisDay, 1, "<IMG SRC=\"images/takvim/right_arrow.gif\" border=\"0\" />", monthArray[(thisDay.getMonth()+1) % 12] + " " +(thisDay.getFullYear() + parseInt((thisDay.getMonth() + 1) / 12))) + "</div></td>\r\n";
  html += "<td colspan=3 class='dpTitleTD' style=\"width:80px;\"><br><div class='dpTitleText'>" + adjustYearButton(dateFieldName, thisDay, -1, "<IMG SRC=\"images/takvim/left_arrow.gif\" border=\"0\" />", monthArray[thisDay.getMonth()] + " " + (thisDay.getFullYear()-1));
  html += "&nbsp;" + thisDay.getFullYear() + "&nbsp;";
  html += adjustYearButton(dateFieldName, thisDay, 1, "<IMG SRC=\"images/takvim/right_arrow.gif\" border=\"0\" />", monthArray[thisDay.getMonth()] + " " + (thisDay.getFullYear()+1)) + "</div></td>\r\n";
  html += "</tr>\r\n";
 
  // günlerin kısaltmalarını ilk satıra yazıyoruz
  html += "<tr class='dpDayTR'>";
  for(i = 0; i < dayArray.length; i++)
    html += "<td class='dpDayTD'>" + dayArray[i] + "</td>\r\n";
  html += "</tr>\r\n";
 
  // günleri ay'a uygun olarak tabloya ekliyoruz
  html += "<tr class='dpTR'>";
  
  // 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='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' " + "&nbsp;" + "</td>\r\n";
    
  // takvim'e günler yerleştiriliyor
  do {
    dayNum = thisDay.getDate();
    onClick = " onclick=\"updateDateField('" + dateFieldName + "', '" + getDateString(thisDay) + "');\">";

    if (dayNum == day)
      html += "<td class='dpDayHighlightTD' title='" + dayNum + " " + monthArray[thisDay.getMonth()] + " (Bugün)' onMouseOut='this.className=\"dpDayHighlightTD\";' onMouseOver='this.className=\"dpTDHover\";' " + onClick + "<div class='dpDayHighlight'>" + dayNum + "</div>" + "</td>\r\n";
    else{
      if (thisDay.getDay() != 6 && thisDay.getDay() != 0)  
        html += "<td class='dpTD' title='" + dayNum + " " + monthArray[thisDay.getMonth()] + "' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' " + onClick + dayNum + "</td>\r\n";
      else
        html += "<td class='dpwTD' title='" + dayNum + " " + monthArray[thisDay.getMonth()] + "' onMouseOut='this.className=\"dpwTD\";' onMouseOver=' this.className=\"dpTDHover\";' " + 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 class='dpTR'>";
    
    // gün arttırılıyor
    thisDay.setDate(thisDay.getDate() + 1);
  } while (thisDay.getDate() > 1)

  // son kalan boşluklar tabloya ekleniyor
  if (thisDay.getDay() > 0) {
    for (i = 6; i > thisDay.getDay(); i--){
      html += "<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' &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 class='dpTodayButtonTR'>";
  html += "<td colspan=4 class='dpTodayButtonTD'><a href='javascript:;' class='dpTodayButton' title='Bug&#252;n`e gitmek i&#231;in t&#305;klay&#305;n' onClick='refreshDatePicker(\"" + dateFieldName + "\");'>Bug&#252;n</button></td>\r\n";
  html += "<td colspan=3 class='dpTodayButtonTD'><a href='javascript:;' class='dpTodayButton' style=\"color:red\" title='Kapatmak i&#231;in t&#305;klay&#305;n' onClick='updateDateField(\"" + dateFieldName + "\");'>Kapat</button></td>\r\n";
  html += "</tr>\r\n";
 
  // ve tablo kapatılıyor
  html += "</table>\r\n";
 
  document.getElementById(datedpDivID).innerHTML = html;
}

/* 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;
  }
 
  return "<a href='javascript:;' class='dpButton' title='" + butTitle + "' onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");'>" + label + "</a>";
}

/* 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)
{
  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();
}

/* 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 targetDateField = document.getElementsByName (dateFieldName).item(0);
  if (dateString)
    targetDateField.value = dateString;
 
  var dpDiv = document.getElementById(datedpDivID);
  dpDiv.style.visibility = "hidden";
  dpDiv.style.display = "none";
 
  targetDateField.focus();
  SeferSorgula();
}


