(function($) {
    $.widget("ui.combobox", {
        _create: function() {
            var self = this;
            var select = this.element.hide(),
					selected = select.children(":selected"),
					value = selected.val() ? selected.text() : "";
            var input = $("<input>")
					.insertAfter(select)
					.val(value)
					.autocomplete({
					    delay: 0,
					    minLength: 0,
					    source: function(request, response) {
					        var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
					        response(select.children("option").map(function() {
					            var text = $(this).text();
					            if (this.value && (!request.term || matcher.test(text)))
					                return {
					                    label: text.replace(
											new RegExp(
												"(?![^&;]+;)(?!<[^<>]*)(" +
												$.ui.autocomplete.escapeRegex(request.term) +
												")(?![^<>]*>)(?![^&;]+;)", "gi"
											), "<strong>$1</strong>"),
					                    value: text,
					                    option: this
					                };
					        }));
					    },
					    select: function(event, ui) {
					        ui.item.option.selected = true;
					        //select.val( ui.item.option.value );
					        self._trigger("selected", event, {
					            item: ui.item.option
					        });
					    },
					    change: function(event, ui) {
					        if (!ui.item) {
					            var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"),
									valid = false;
					            select.children("option").each(function() {
					                if (this.value.match(matcher)) {
					                    this.selected = valid = true;
					                    return false;
					                }
					            });
					            if (!valid) {
					                // remove invalid value, as it didn't match anything
					                $(this).val("");
					                select.val("");
					                return false;
					            }
					        }
					    }
					})
					.addClass("ui-widget ui-widget-content ui-corner-left ui-custom");

            input.data("autocomplete")._renderItem = function(ul, item) {
                return $("<li></li>")
						.data("item.autocomplete", item)
						.append("<a>" + item.label + "</a>")
						.appendTo(ul);
            };

            $("<button>&nbsp;</button>")
					.attr("tabIndex", -1)
					.attr("title", "Show All Items")
					.insertAfter(input)
					.button({
					    icons: {
					        primary: "ui-icon-triangle-1-s"
					    },
					    text: false
					})
					.removeClass("ui-corner-all")
					.addClass("ui-corner-right ui-button-icon ui-button-dd")
					.click(function() {
					    // close if already visible
					    if (input.autocomplete("widget").is(":visible")) {
					        input.autocomplete("close");
					        return;
					    }

					    // pass empty string as value to search for, displaying all results
					    input.autocomplete("search", "");
					    input.focus();
					    return false;
					});
        }
    });
})(jQuery);


$(function() {
    $("#dd").datepicker({ minDate: +1, maxDate: '+1Y', defaultDate: '2/1/2012', onSelect: function (dateText, inst) { var the_date = new Date(dateText); $("#rd").datepicker('option', 'minDate', the_date); } });
    $("#rd").datepicker({ minDate: +1, maxDate: '+1Y' });
    $("#radio").buttonset();
    $("input:submit").button().addClass("ui-state-active-top");
    $("#des, #dep, #cru, #dt, #rt, #cw").combobox();
    $($('.ui-autocomplete-input')[4]).css('width', '67px')
    $($('.ui-autocomplete-input')[5]).css('width', '67px')
});

function checkform ( form ) {
  var isError = false;
  var isDates = true;
  var listErrors = '';
  // ** START **
  if (form.radio1.checked || form.radio2.checked) {
      if (form.des.value == "") {
        isError = true;
        listErrors += 'Your Destination<br>';
      }
      if (form.dep.value == "" && form.radio1.checked) {
        isError = true;
        listErrors += 'Your Departure City<br>';
      }
      if (!isDate(form.dd.value)) {
        isError = true;
        isDates = false;
        listErrors += 'Your Departure Date<br>';
      }
      if (!isDate(form.rd.value)) {
        isError = true;
        isDates = false;
        listErrors += 'Your Return Date<br>';
      }
      if (isDates == true) {
        var date1 = new Date(form.rd.value)
        var date2 = new Date(form.dd.value)
        if (date1 <= date2) {
          isError = true;
          listErrors += 'Invalid Dates<br>';
        }
      }
  }
  else if (form.radio3.checked) {
      if (form.cru.value == "") {
        errorElement('cru');
        isError = true;
        listErrors += 'Your Cruise Destination<br>';
      }
      if (form.cw.value == "") {
        errorElement('cw');
        isError = true;
        listErrors += 'Your Departure Week<br>';
      }
  }
  // ** END **
  //isError = false;
  if (isError == true) {
      genDialog('Please Try Again', '<b>Woops!<b><br><br>It looks like you left something out, we need to know:<br><br>' + listErrors, true);
      return false ;
  }
  else {
      genDialog('Please Wait...', '<br><img src=/img/loader.gif align=left width=60 height=60 style=margin-left:30px;margin-right:50px;>Please wait, we are putting the finishing touches on your <b>Ultimate Spring Break Package</b>.<br><br>Be patient, this search can take up to <b>90 seconds</b>.', true, false, false);
    run_search();
    return true;
  }
}

function isDate(dateStr) {

    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
    var matchArray = dateStr.match(datePat); // is the format ok?

    if (matchArray == null) {
        return false;
    }

    month = matchArray[1]; // p@rse date into variables
    day = matchArray[3];
    year = matchArray[5];

    if (month < 1 || month > 12) { // check month range
        return false;
    }
    if (day < 1 || day > 31) {
        return false;
    }
    if ((month==4 || month==6 || month==9 || month==11) && day==31) {
        return false;
    }
    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day==29 && !isleap)) {
            return false;
        }
    }
    return true; // date is valid
}

function errorElement (elementId) {
    var element;
    if (document.all)
    element = document.all[elementId];
    else if (document.getElementById)
    element = document.getElementById(elementId);
    if (element && element.style)
    element.style.backgroundColor = '#EA4647';
}

/* Dynamic Matrix List */

function hideElement(elementId) {
    var element;
    if (document.all)
        element = document.all[elementId];
    else if (document.getElementById)
        element = document.getElementById(elementId);
    if (element && element.style)
        element.style.display = 'none';
}
function showElement(elementId) {
    var element;
    if (document.all)
        element = document.all[elementId];
    else if (document.getElementById)
        element = document.getElementById(elementId);
    if (element && element.style)
        element.style.display = '';
}
function hideIndexElement(elementId, iBot, iTop) {
    for (var x = 2; x <= iTop; x++) {
        showElement(elementId + x);
    }
    for (var x = iBot + 2; x <= iTop; x++) {
        hideElement(elementId + x);
    }
}

function showHF() {
    showElement('m_des');
    hideElement('m_cru');
    showElement('m_dep');
    hideElement('m_travel_week');
    showElement('m_travel_flex');
}

function showH() {
    showElement('m_des');
    hideElement('m_cru');
    hideElement('m_dep');
    hideElement('m_travel_week');
    showElement('m_travel_flex');
}

function showC() {
    hideElement('m_des');
    showElement('m_cru');
    hideElement('m_dep');
    showElement('m_travel_week');
    hideElement('m_travel_flex');
}
