// $Id: searchSupport.js,v 1.20 2010/04/30 13:43:45 clinton Exp $

function groupPaxTypeChange(ptc, prefix) {
  var selectBox = $(prefix + 'ptc' + "_" + ptc);
  if (selectBox == null) return;

  var groupDiv = $(prefix + 'ptcGroup' + "_" + ptc)
  if ($F(selectBox) == 0) {
    if ($(groupDiv)) {
      $(groupDiv).hide();
      var childTypes = $(groupDiv).select("select");
      for (var i = 0; i < childTypes.length; i++) {
        setDropDown(childTypes[i], 0);
        if (Object.isFunction(childTypes[i].onchange))
          childTypes[i].onchange();
      }
    }
    return;
  }
  
  if ($(groupDiv) != null) $(groupDiv).show();
}

function getCustomTab(tabLabel) {
  var tabset = $('tabbedDayTrips');
  if (tabset == null) tabset = $('tabbedHotels');
  if (tabset == null) return;

  $('customSearchLabel').update(tabLabel);

  //jQuery('#right-panel .tabs div').jqueryTabs('#right-panel .destinations', {wrap: true, currentLi: 1})

  $$("#right-panel ul.destinations > li").invoke('hide');
  $$("#right-panel ul.tabs li").each(function(el){
    el.removeClassName("current")
  });

  $('customSearchTab').addClassName("current");
  $('customResultPage').show();
  $('customSearchTab').show();
}

function customSearch(formId) {
  if (formId == 'hotelSearch' && hotelValidate()){
    getCustomTab(AniteDDB.getText($('hotelLocation')));
  } else if(formId == 'tourSearch' && tourValidate()) {
    getCustomTab(AniteDDB.getText($('tourLocation')));
  } else {
    return false;
  }
  
  $('customResult').update('<div style="text-align:center; height:200px; width:100%; padding-top: 75px"><img src="'+urlBase+'images/loading.gif"/><br/>Please wait</div>');
  new Ajax.Updater('customResult', $(formId).action, {
    parameters: $(formId).serialize(),
    evalJS: 'force',
    onComplete: function (){
      if ($('customSearchJavascript')) {
        try {
          if ($('customSearchJavascript').innerText) eval($('customSearchJavascript').innerText);
          else if ($('customSearchJavascript').textContent) eval($('customSearchJavascript').textContent);
        } catch (e) {
          alert ("Caught " + Object.toJSON(e))
        }
      }
    }
  });
  
  return false;
}

function brochureChange(type, prefix){
  var brochureCode = $F('brochureCode');
  if (prefix == null) {
    prefix = 'paxEntry_';
    switch(type) {
      case 'hotel': prefix= 'htl_paxEntry_'; brochureCode = $F('htl_brochureCode'); break;
      case 'tour': prefix= 'tour_paxEntry_'; brochureCode = $F('tour_brochureCode'); break;
      case 'CI': prefix = 'CI_1_paxEntry_'; break;
    }
  }

  var paxFields = $$('fieldset.paxEntry');
  var validPax = eval('paxTypes_' + brochureCode);
  paxFields.each(function(el) {
    if (el.id.startsWith(prefix)) {
      var ptc = el.id.substring(prefix.length);
      if (validPax.indexOf(ptc) > -1)
        el.show();
      else
        el.hide();
    }
  });
  if (type == 'rail' || type == 'CI') {
    if (PaxQuestionnaire.questions.get(brochureCode)) {
      PaxQuestionnaire.rootQuestion = brochureCode;
    } else {
      PaxQuestionnaire.rootQuestion = 'ROOT';
    }
    var rootQuestion = PaxQuestionnaire.questions.get(PaxQuestionnaire.rootQuestion);
    if (rootQuestion.responses.length == 0 || (rootQuestion.responses.length == 1 && PaxQuestionnaire.responses.get(rootQuestion.responses[0]).ptc == 'ADU')) {
      $(prefix+'CNC').hide();
    } else {
      $(prefix+'CNC').show();
    }

    var convert = 0;
    var cfName = prefix.replace('paxEntry_', 'concessionFields');
    $(cfName).select('input.paxType').each (function (el) {
      var ptc = el.id.split("_").last();
      if (validPax.indexOf(ptc) == -1) {
        convert += parseFloat(el.value);
        el.value = 1;
        PaxQuestionnaire.delConcession(ptc, '');       
      }
    });

    if (convert > 0) {
      var adField = $(prefix+"ADU").select('select')[0];
      convert += parseFloat($F(adField));
      AniteDDB.setValue($(adField), convert);
      displayPaxWarning(null, errorMessage(ERR_RAIL_AGT_PAX_CONVERT));
    }
  }
}

function showPaxNote(){
  $('paxNotes') && $('paxNotes').hide();
  return;
}

function initSearchPanel(){
  $$('select.ageRestricted').each(function(el) {
    Event.observe(el, 'change', searchPanelGetAges.bindAsEventListener(el));
  });
  $$('select.member').each(function(el) {
    Event.observe(el, 'change', showPaxNote);
  });
  $$('.ageSpec').each(function(el) {
    Event.observe(el, 'click', searchPanelGetAges.bindAsEventListener(el));
  });
  ['depdate', 'retdate', 'pkgdate', 'hotelindate', 'hoteloutdate','tourstart', 'tourend'].each (function (d) {
    if ($(d) != null) buildDays(d);
  });
  
  if ($('ageRangeFloaty') == null) fetchFloaty('ageRange', 'ageRangeFloaty');
  if ($('paxQuestionnaire') == null) fetchFloaty('paxQuestionnaire','paxQuestionnaire');
  if ($('paxWarning') == null) fetchFloaty('paxWarning','paxWarning');

  showPaxNote();
}
Event.observe(window, 'load', initSearchPanel);

function fetchFloaty(fileName, floatyName) {
  log("Fetch " + fileName);
  new Ajax.Updater(document.body, urlBase+'/floaty/'+fileName+'.jsp',{
    insertion: 'bottom',
    onComplete: function(){
      jQuery(".floaty").decorateBlocks({
        cornerSize:21,
        cap:{
          top:true,
          bottom:true
        },
        shadowSize:8
      });
    }
  });
}

function countPax(fieldset, groupPrefix) {
  if (fieldset == null || $(fieldset) == null) return 0;
  if (groupPrefix == null) groupPrefix = '';
  var paxTypes = $(fieldset).select('select.paxType', 'input.paxType');
  var totalPax = 0;
  for (var i = 0; i < paxTypes.length; i++) {
    var idSplit = paxTypes[i].id.split("_");
    var ptcCode = idSplit[idSplit.length-1];
    if (ptcCode == 'CNC') continue;
    if ($(groupPrefix+'ptcGroup_'+ptcCode) != null) {
      var subTotal = countPax($(groupPrefix+'ptcGroup_'+ptcCode), groupPrefix);
      AniteDDB.setValue($(paxTypes[i]), subTotal);
      totalPax += subTotal;
    } else {
      totalPax += parseFloat($F(paxTypes[i]));
    }
  }
  return totalPax;
}

function countByType(fieldset, type) {
  var paxFields = $(fieldset).select('select.paxType', 'input.paxType');
  var total = 0;
  for (var i = 0; i < paxFields.length; i++) {
    var idSplit = paxFields[i].id.split("_");
    var ptcCode = idSplit[idSplit.length-1];
    if (paxTypes.get(ptcCode) && paxTypes.get(ptcCode).category == type)
      total += parseFloat($F(paxFields[i]));
  }
  return total;
}

function countAdults(fieldset) {
  return countByType(fieldset, 'Adult');
}

function countChilds(fieldset) {
  return countByType(fieldset, 'Child');
}

function buildDates(prefix) {
  if (prefix == null) return;
  var dateMap = eval(prefix + "Map");
  if (!dateMap[0]) return;
  var monthDDB = $(prefix+"_mon");
  if (monthDDB == null) return;
  AniteDDB.populate(monthDDB, dateMap);
  buildDays(prefix);
}

function dateChange(prefix, event) {
  var hiddenField = $(prefix);
  if (!hiddenField) return
  hiddenField.value = $F(prefix+"_mon")+""+$F(prefix+"_day");
  if ($F(prefix+"_day") == ' ') hiddenField.value = '';
}

function buildDays(prefix) {
  if (prefix == null) return;
  var minDate = formatDate(new Date, 'yyMMdd');
  if ($(prefix).mindate && $(prefix).mindate.length == 6) minDate = $(prefix).mindate;


  log("buildDays("+prefix+"), minDate = " + minDate);
  var dateMap = eval(prefix + "Map");
  var dayDDB = $(prefix+"_day");
  var monthDDB = $(prefix+"_mon");
  var curDay = parseFloat($F(dayDDB));
  AniteDDB.clear(dayDDB);
  dayDDB.options[0] = new Option(' ',' ');

  var origDate = $F(monthDDB)+"" + $F(dayDDB);
  var selMonth = $F(monthDDB);
  if (selMonth == null) {
    if (!monthDDB.disabled)
      alert(errorMessage(ERR_RAIL_NO_SERVICE, {
        direction: (prefix == 'retdate' ?'return':'')
      }));
    return;
  }

  if (dateMap.size() == 0) {
    if (selMonth.length != 4) return;
    var dayCount = date_stringHowManyDays(parseFloat(selMonth.substr(2,2)), parseFloat(selMonth.substr(0,2)));

    for(var i = 0; i < dayCount; i++) {
      var dayString = (i+1).toPaddedString(2)
      if (selMonth+""+dayString >= minDate)
        dayDDB.options[dayDDB.options.length] = new Option(i+1, (i+1).toPaddedString(2), false, ((i+1) == curDay));
    }
  } else {
    for (var i = 0; i < dateMap.length; i++) {
      if (dateMap[i].month == selMonth) {
        for (var j = 0; j < dateMap[i].days.length; j++) {
          var day = parseFloat(dateMap[i].days[j]);
          var dayString = day.toPaddedString(2)
          if (selMonth+""+dayString >= minDate)
            dayDDB.options[dayDDB.options.length] = new Option(day, dayString, false, (day == curDay));
        }
        break;
      }
    }
  }
  if (dayDDB.options.length == 1 && (AniteDDB.getSelectedIndex(monthDDB) < (monthDDB.options.length-1))) {
    AniteDDB.setSelectedIndex(monthDDB, AniteDDB.getSelectedIndex(monthDDB)+1);
    buildDays(prefix);
  }
  if (dayDDB.options.length == 1 && (AniteDDB.getSelectedIndex(monthDDB) == (monthDDB.options.length-1))) {
    AniteDDB.setSelectedIndex(monthDDB, monthDDB.options.length-1);
    AniteDDB.setSelectedIndex(dayDDB, 0);
    $(prefix).value = '';
    return;
  }
  if (origDate != $F(monthDDB)+"" + $F(dayDDB)) {
    $(prefix).fire("anite:dateChange");
  }
}

function enableDate(prefix) {
  if (prefix == 'retdate' && !$('type_return').checked ) {
    disableDate(prefix);
    return;
  }
  $(prefix+'_mon') && $(prefix+'_mon').enable();
  $(prefix+'_day') && $(prefix+'_day').enable();
  buildDates(prefix);
  buildDays(prefix);
  dateChange(prefix);
  if ($(prefix+'_mon').options.length == 0) {
    if (prefix == 'retdate') {
      $('type_oneway').checked = true;
      $('type_return').checked = false;
      tripTypeSelect('OW');
    }
  }
  if ($(prefix).mindate && ($(prefix).mindate.length == 6) && $F(prefix) < $(prefix).mindate) {
    advanceDate(prefix, $(prefix).mindate)
  }
  enableCalendar(prefix);
}

function advanceDate(prefix, mindate) {
  var month = $(prefix+'_mon');
  var day = $(prefix+'_day');

  while (($F(month)+""+$F(day)).length !=6 || ($F(month)+""+$F(day) < mindate)) {
    if (AniteDDB.getSelectedIndex(day)+1 <  day.options.length){
      AniteDDB.setSelectedIndex(day, AniteDDB.getSelectedIndex(day)+1);
    } else if (AniteDDB.getSelectedIndex(month)+1 < month.options.length) {
      AniteDDB.setSelectedIndex(month, AniteDDB.getSelectedIndex(month)+1);
      buildDays(prefix);
      AniteDDB.setSelectedIndex(day, 1);
    } else {
      break;
    }
  //if (!confirm(($F(month)+""+$F(day)).length +"\n"+ $F(month)+""+$F(day) +"\n"+ mindate)) return;
  }
  $(prefix).fire('anite:dateChange');
}

function disableDate(prefix) {
  $(prefix+'_mon') && $(prefix+'_mon').disable();
  $(prefix+'_day') && $(prefix+'_day').disable();
  if ($(prefix)) $(prefix).value = '';
  disableCalendar(prefix);
}

function log (msg) {
  if ($('log')) $('log').insert({
    top: msg + "<br/>"
  });
}