/****************************************
Date Picker Javascript Class
Version 1.0 Author: Phithaya.
Created: 11/04/2008
Last Update: 11/12/2008 15:20:01
*****************************************/

var wdDisplayFormat             = 'short';
var prefix                      = 'kr_dp';
var target_link                 = [];
var datedigit                   = [];
var dp_numberNightsDisplay_flag = [];
var dp_CheckDate_flag           = [];
var dp_PostDateFormat           = [];
var dp_DisplayCalendar          = [];


//===== Prepare to show a date picker linked to three select controls
function dp_readLinked(tg, type)
{
  if(type == 'select')
  {
    $('#'+prefix+'_'+tg).val( 
      ($('#'+prefix+'_m_'+tg).val().length < 2 ? '0' : '') + $('#'+prefix+'_m_'+tg).val() + '/' + 
      ($('#'+prefix+'_d_'+tg).val().length < 2 ? '0' : '') + $('#'+prefix+'_d_'+tg).val() + '/' +  
      $('#'+prefix+'_y_'+tg).val()
    );
  }
  else if(type == 'input')
  {
    if( $('#'+prefix+'_'+type+'_value_'+tg).attr('ref').search('-') > -1 )
    {
      var d = $('#'+prefix+'_'+type+'_value_'+tg).attr('ref').split('-');
      $('#'+prefix+'_'+tg).val( d[1] + '/' + d[2] + '/' + d[0] );
    }
    else
    {
      $('#'+prefix+'_'+tg).val(
        $('#'+prefix+'_'+type+'_value_'+tg).attr('ref').substring(4, 6) + '/' +
        $('#'+prefix+'_'+type+'_value_'+tg).attr('ref').substring(6, 8) + '/' +
        $('#'+prefix+'_'+type+'_value_'+tg).attr('ref').substring(0, 4)
      );
    }
    
  }
  else if(type == 'calendar')
  {
    var d = $('#'+tg).attr('ref').split('-');
    $('#'+prefix+'_'+tg).val( d[1] + '/' + d[2] + '/' + d[0] );
  }
  else
  {
    $('#'+prefix+'_'+tg).val(
      $('#'+prefix+'_'+type+'_'+tg).val().substring(4, 6) + '/' +
      $('#'+prefix+'_'+type+'_'+tg).val().substring(6, 8) + '/' +
      $('#'+prefix+'_'+type+'_'+tg).val().substring(0, 4)
    );
  }
  
  return {};
}

//===== Update three select controls to match a date picker selection
function dp_updateLinked(dt, tg, type, format)
{
  if( type == 'select' )
  {
    if(datedigit[tg] == 2)
    {
      $('#'+prefix+'_m_'+tg).val( dt.substring(0, 2) );
      $('#'+prefix+'_d_'+tg).val( dt.substring(3, 5) );
    }
    else
    {
      $('#'+prefix+'_m_'+tg).val(Number(dt.substring(0, 2)));
      $('#'+prefix+'_d_'+tg).val(Number(dt.substring(3, 5)));
    }
    
    $('#'+prefix+'_y_'+tg).val(dt.substring(6, 10));
    $('#'+prefix+'_d_'+tg).change();
  }
  else if( type == 'input' )
  {
    var tg_no = target_link[tg];
    var date = new Date(dt.substring(6, 10), dt.substring(0, 2)-1, dt.substring(3, 5));
    //console.log(date);
    $('#'+prefix+'_'+type+'_'+tg).val( $.datepicker.formatDate(format, date, $.datepicker._inst[tg_no]._settings) )
    $('#'+prefix+'_'+type+'_value_'+tg).attr('ref', dt.substring(6, 10)+'-'+dt.substring(0, 2)+'-'+dt.substring(3, 5));
    $('#'+prefix+'_'+type+'_value_'+tg).val( $.datepicker.formatDate(dp_PostDateFormat[tg], date, $.datepicker._inst[tg_no]._settings) );
  }
  else if( type == 'calendar' )
  {
    var tg_no = target_link[tg];
    var date = new Date(dt.substring(6, 10), dt.substring(0, 2)-1, dt.substring(3, 5));
    
    $('#'+tg).val( $.datepicker.formatDate(dp_PostDateFormat[tg], date, $.datepicker._inst[tg_no]._settings) );
    $('#'+tg).attr('ref', dt.substring(6, 10)+'-'+dt.substring(0, 2)+'-'+dt.substring(3, 5));
  }
  else
  {
    $('#'+prefix+'_'+type+'_'+tg).val(
      dt.substring(6, 10) + 
      dt.substring(0, 2) + 
      dt.substring(3, 5)
    );
  }
}

//===== Prevent selection of invalid dates through the select controls 
function dp_checkLinkedDays(tg)
{
  var daysInMonth = 32 - new Date( $('#'+prefix+'_y_'+tg).val(), $('#'+prefix+'_m_'+tg).val() - 1, 32 ).getDate(); 
  
  $('#'+prefix+'_d_'+tg+' option').attr('disabled', false); 
  $('#'+prefix+'_d_'+tg+' option:gt(' + (daysInMonth - 1) +')').attr('disabled', true); 
  
  if ($('#'+prefix+'_d_'+tg).val() > daysInMonth)
    $('#'+prefix+'_d_'+tg).val(daysInMonth);
  
} 

//===== Highlight date range
function dp_highlightDay(dt, tg1, tg2, type)
{
  if(type == 'select')
  {
    var fd = new Date( $('#'+prefix+'_y_'+tg1).val(), $('#'+prefix+'_m_'+tg1).val() - 1, $('#'+prefix+'_d_'+tg1).val() );
    var td = new Date( $('#'+prefix+'_y_'+tg2).val(), $('#'+prefix+'_m_'+tg2).val() - 1, $('#'+prefix+'_d_'+tg2).val() );
  }
  else if(type == 'input')
  {
    var d = $('#'+prefix+'_input_value_'+tg1).attr('ref').split('-');
    var fd = new Date( d[0], d[1] - 1, d[2] );
    
    var d = $('#'+prefix+'_input_value_'+tg2).attr('ref').split('-');
    var td = new Date( d[0], d[1] - 1, d[2] );
    
  }
  else if(type == 'calendar')
  {
    var d = $('#'+tg1).attr('ref').split('-');
    var fd = new Date( d[0], d[1] - 1, d[2] );
    
    var d = $('#'+tg2).attr('ref').split('-');
    var td = new Date( d[0], d[1] - 1, d[2] );
  }
  
  if(dt >= fd && dt <= td && fd < td)
    return [true, 'datepicker_currentDay'];
  return [true, ''];
}

//===== Fix date select
function dp_fixdate(dt, tg, wd)
{
  var _wd = dt.getDay();
  if(_wd == 0) _wd = 7;
  
  if(_wd == wd)
    return [true, ''];
  return [false, ''];
}

//===== Weekday display
function dp_setWkd(tg, format, type)
{
  if( type == 'select' )
  {
    var d = new Date($('#'+prefix+'_y_'+tg).val(), $('#'+prefix+'_m_'+tg).val()-1, $('#'+prefix+'_d_'+tg).val()).getDay();
  }
  else if( type == 'input' )
  {
    var d = $('#'+prefix+'_input_value_'+tg).attr('ref').split('-');
    d     = new Date( d[0], d[1] - 1, d[2] ).getDay();
  }
  else if( type == 'calendar' )
  {
    var d = $('#'+tg).attr('ref').split('-');
    d     = new Date( d[0], d[1] - 1, d[2] ).getDay();
  }
  
  var tg_no = target_link[tg];
  
  if( format.toLowerCase() == 'short' )
  {
    var day = $.datepicker._inst[tg_no]._settings.dayNamesShort[d];
    wdDisplayFormat = 'short';
  }
  else
  {
    var day = $.datepicker._inst[tg_no]._settings.dayNames[d];
    wdDisplayFormat = 'full';
  }
  
  
  $('#'+prefix+'_setWkd_'+tg).html('('+day+')');
}

//===== Check correct date for both Arrival/Departure date
function dp_CheckDate(tg, tg1, tg2, numOfDay, wdDisplay, type, format, trick_on)
{
  var trick_on = trick_on || 0;
  
  if(type == 'select')
  {
    var kr_tmp_fdate = new Date( $('#'+prefix+'_y_'+tg1).val(), Number($('#'+prefix+'_m_'+tg1).val()) - 1, $('#'+prefix+'_d_'+tg1).val() );
    var kr_tmp_tdate = new Date( $('#'+prefix+'_y_'+tg2).val(), Number($('#'+prefix+'_m_'+tg2).val()) - 1, $('#'+prefix+'_d_'+tg2).val() );
  }
  else if(type == 'input')
  {
    var d = $('#'+prefix+'_input_value_'+tg1).attr('ref').split('-');
    var kr_tmp_fdate = new Date( d[0], d[1] - 1, d[2] );
    var d = $('#'+prefix+'_input_value_'+tg2).attr('ref').split('-');
    var kr_tmp_tdate = new Date( d[0], d[1] - 1, d[2] );
  }
  else if(type == 'calendar')
  {
    var d = $('#'+tg1).attr('ref').split('-');
    var kr_tmp_fdate = new Date( d[0], d[1] - 1, d[2] );
    var d = $('#'+tg2).attr('ref').split('-');
    var kr_tmp_tdate = new Date( d[0], d[1] - 1, d[2] );
  }
  
  //=== Num Day is not set
  if( numOfDay <= 0 )
  {
    if(tg == 'f' && kr_tmp_fdate > kr_tmp_tdate )
    {
      var str_date = ((kr_tmp_fdate.getMonth()+1) < 10 ? '0' : '') + (kr_tmp_fdate.getMonth()+1) + '/' + (kr_tmp_fdate.getDate() < 10 ? '0' : '') + kr_tmp_fdate.getDate() + '/' + kr_tmp_fdate.getFullYear();
      dp_updateLinked(str_date, tg2, type, format);
      if(wdDisplay == 1)
        dp_setWkd(tg2, wdDisplayFormat, type);
    }
    else if( tg == 't' && trick_on && kr_tmp_fdate > kr_tmp_tdate  )
    {
      var str_date = ((kr_tmp_tdate.getMonth()+1) < 10 ? '0' : '') + (kr_tmp_tdate.getMonth()+1) + '/' + (kr_tmp_tdate.getDate() < 10 ? '0' : '') + kr_tmp_tdate.getDate() + '/' + kr_tmp_tdate.getFullYear();
      dp_updateLinked(str_date, tg1, type, format);
      if(wdDisplay == 1)
        dp_setWkd(tg1, wdDisplayFormat, type);
    }
  }
  
  //=== Num of day grater than 0
  else
  {
    if(tg == 'f' && (kr_tmp_fdate >= kr_tmp_tdate || ((kr_tmp_tdate - kr_tmp_fdate)/86400000) < numOfDay) )
    {
      if(type == 'select')
        var kr_tmp_tdate = new Date( $('#'+prefix+'_y_'+tg1).val(), Number($('#'+prefix+'_m_'+tg1).val()) - 1, $('#'+prefix+'_d_'+tg1).val() );
      else if(type == 'input')
      {
        var d = $('#'+prefix+'_input_value_'+tg1).attr('ref').split('-');
        var kr_tmp_tdate = new Date( d[0], d[1] - 1, d[2] );
      }
      else if(type == 'calendar')
      {
        var d = $('#'+tg1).attr('ref').split('-');
        var kr_tmp_tdate = new Date( d[0], d[1] - 1, d[2] );
      }
      
      kr_tmp_tdate.setDate( kr_tmp_tdate.getDate() + numOfDay );
      var str_date = ((kr_tmp_tdate.getMonth()+1) < 10 ? '0' : '') + (kr_tmp_tdate.getMonth()+1) + '/' + (kr_tmp_tdate.getDate() < 10 ? '0' : '') + kr_tmp_tdate.getDate() + '/' + kr_tmp_tdate.getFullYear();
      dp_updateLinked(str_date, tg2, type, format);
      if(wdDisplay == 1)
        dp_setWkd(tg2, wdDisplayFormat, type);
    }
    else if(tg == 't' && trick_on && (kr_tmp_fdate >= kr_tmp_tdate || ((kr_tmp_tdate - kr_tmp_fdate)/86400000) < numOfDay)  )
    {
      if(type == 'select')
        kr_tmp_fdate = new Date( $('#'+prefix+'_y_'+tg2).val(), Number($('#'+prefix+'_m_'+tg2).val()) - 1, $('#'+prefix+'_d_'+tg2).val() );
      else if(type == 'input')
      {
        var d = $('#'+prefix+'_input_value_'+tg2).attr('ref').split('-');
        var kr_tmp_fdate = new Date( d[0], d[1] - 1, d[2] );
      }
      else if(type == 'calendar')
      {
        var d = $('#'+tg2).attr('ref').split('-');
        var kr_tmp_fdate = new Date( d[0], d[1] - 1, d[2] );
      }
      
      kr_tmp_tdate.setDate( kr_tmp_tdate.getDate() - numOfDay );
      var str_date = ((kr_tmp_tdate.getMonth()+1) < 10 ? '0' : '') + (kr_tmp_tdate.getMonth()+1) + '/' + (kr_tmp_tdate.getDate() < 10 ? '0' : '') + kr_tmp_tdate.getDate() + '/' + kr_tmp_tdate.getFullYear();
      dp_updateLinked(str_date, tg1, type, format);
      if(wdDisplay == 1)
        dp_setWkd(tg1, wdDisplayFormat, type);
    }
  }
  //console.log(kr_tmp_fdate+' -- '+kr_tmp_tdate);
}

//===== dp_numberNightsDisplay
function dp_numberNightsDisplay(div_id, tg1, tg2, wdDisplay, type, format, numNights_txt1, numNights_txt2)
{
  var div_id = div_id || 'lengthStay_div';
  
  if(type == 'select')
  {
    var kr_tmp_fdate = new Date( $('#'+prefix+'_y_'+tg1).val(), $('#'+prefix+'_m_'+tg1).val() - 1, $('#'+prefix+'_d_'+tg1).val() );
    var kr_tmp_tdate = new Date( $('#'+prefix+'_y_'+tg2).val(), $('#'+prefix+'_m_'+tg2).val() - 1, $('#'+prefix+'_d_'+tg2).val() );
  }
  else if(type == 'input')
  {
    var d = $('#'+prefix+'_input_value_'+tg1).attr('ref').split('-');
    var kr_tmp_fdate = new Date( d[0], d[1] - 1, d[2] );
    var d = $('#'+prefix+'_input_value_'+tg2).attr('ref').split('-');
    var kr_tmp_tdate = new Date( d[0], d[1] - 1, d[2] );
  }
  else if(type == 'calendar')
  {
    var d = $('#'+tg1).attr('ref').split('-');
    var kr_tmp_fdate = new Date( d[0], d[1] - 1, d[2] );
    var d = $('#'+tg2).attr('ref').split('-');
    var kr_tmp_tdate = new Date( d[0], d[1] - 1, d[2] );
  }
  
  var numNights  = (kr_tmp_tdate - kr_tmp_fdate) / 86400000;
  var numNights_txt = (numNights > 1 ? numNights_txt2 : numNights_txt1);
  $('#'+div_id).html(numNights +' '+numNights_txt);
}

