function checkform ( form ) {
  // see http://www.thesitewizard.com/archive/validation.shtml
  // for an explanation of this script and how to use it on your
  // own website
  var isError = false;
  var isDates = true;
  var listErrors = '';
  // ** START **
  if (form.r1.checked || form.r2.checked) {
      if (form.des.value == "") {
        errorElement('des');
        isError = true;
        listErrors += 'Destination Required<br>';
      }
      if (form.dep.value == "" && form.r1.checked) {
        errorElement('dep');
        isError = true;
        listErrors += 'Departure City Required<br>';
      }
      if (!isDate(form.dd.value)) {
        errorElement('dd');
        isError = true;
        isDates = false;
        listErrors += 'Departing Date Required<br>';
      }
      if (!isDate(form.rd.value)) {
        errorElement('rd');
        isError = true;
        isDates = false;
        listErrors += 'Returning Date Required<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 Specified<br>';
        }
      }
  }
  else if (form.r3.checked) {
      if (form.cru.value == "") {
        errorElement('cru');
        isError = true;
        listErrors += 'Cruise Destination Required<br>';
      }
      if (form.week.value == "") {
        errorElement('week');
        isError = true;
        listErrors += 'Departure Week Required<br>';
      }
  }
  // ** END **
  if (isError == true) {
    errorList('showerror',listErrors);
    return false ;
  }
  else {
    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 errorList (elementId,str) {
    var element;
    if (document.all)
    element = document.all[elementId];
    else if (document.getElementById)
    element = document.getElementById(elementId);
    if (element && element.style)
    element.innerHTML = str + '<br>';
}

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('des_t');
    showElement('des');
    hideElement('cru_t');
    hideElement('cru');
    showElement('dep_t');
    showElement('dep');
    hideElement('wee_t');
    hideElement('wee');
    showElement('tim_t');
    showElement('tim1');
    showElement('tim2');
    showElement('tim3');     
    document.matrix.t[0].checked = true;
}

function showH() {
    showElement('des_t');
    showElement('des');
    hideElement('cru_t');
    hideElement('cru');
    hideElement('dep_t');
    hideElement('dep');
    hideElement('wee_t');
    hideElement('wee');
    showElement('tim_t');
    showElement('tim1');
    showElement('tim2');
    showElement('tim3');        
    document.matrix.t[1].checked = true;
}

function showC() {
    hideElement('des_t');
    hideElement('des');
    showElement('cru_t');
    showElement('cru');
    hideElement('dep_t');
    hideElement('dep');
    showElement('wee_t');
    showElement('wee');
    hideElement('tim_t');
    hideElement('tim1');
    hideElement('tim2');
    hideElement('tim3');        
    document.matrix.t[2].checked = true;
}

/* Calendar */

/* --- Swazz Javascript Calendar ---
/* --- v 1.0 3rd November 2006
By Oliver Bryant
http://calendar.swazz.org */

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 checkClick(e) {
    e ? evt = e : evt = event;
    CSE = evt.target ? evt.target : evt.srcElement;
    if (getObj('fc'))
        if (!isChild(CSE, getObj('fc')))
        getObj('fc').style.display = 'none';
}

function isChild(s, d) {
    while (s) {
        if (s == d)
            return true;
        s = s.parentNode;
    }
    return false;
}

function Left(obj) {
    var curleft = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
        }
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function Top(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}

document.write('<table id="fc" style="position:absolute;border-collapse:collapse;background:#FFFFFF;border:1px solid #ABABAB;display:none;width:200px;" cellpadding=2>');
document.write('<tr><td style="cursor:pointer" onclick="csubm()"><img src="/images/bullet-left.gif"></td><td colspan=5 id="mns" align="center" style="font:bold 13px Arial"></td><td align="right" style="cursor:pointer" onclick="caddm()"><img src="/images/bullet-right.gif"></td></tr>');
document.write('<tr><td align=center style="background:#ABABAB;font:12px Arial">S</td><td align=center style="background:#ABABAB;font:12px Arial">M</td><td align=center style="background:#ABABAB;font:12px Arial">T</td><td align=center style="background:#ABABAB;font:12px Arial">W</td><td align=center style="background:#ABABAB;font:12px Arial">T</td><td align=center style="background:#ABABAB;font:12px Arial">F</td><td align=center style="background:#ABABAB;font:12px Arial">S</td></tr>');
for (var kk = 1; kk <= 6; kk++) {
    document.write('<tr>');
    for (var tt = 1; tt <= 7; tt++) {
        num = 7 * (kk - 1) - (-tt);
        document.write('<td id="v' + num + '" style="width:18px;height:18px">&nbsp;</td>');
    }
    document.write('</tr>');
}
document.write('</table>');

document.all ? document.attachEvent('onclick', checkClick) : document.addEventListener('click', checkClick, false);


// Calendar script
if (new Date() > new Date("2/1/2009")) {
    var now = new Date();
}
else {
    var now = new Date("2/1/2009");
}
var sccm = now.getMonth();
var sccy = now.getFullYear();
var ccm = now.getMonth();
var ccy = now.getFullYear();

var updobj;
function lcs(ielem) {
    updobj = ielem;
    getObj('fc').style.left = Left(ielem);
    getObj('fc').style.top = Top(ielem) + ielem.offsetHeight;
    getObj('fc').style.display = '';

    // First check date is valid
    curdt = ielem.value;
    curdtarr = curdt.split('/');
    isdt = true;
    for (var k = 0; k < curdtarr.length; k++) {
        if (isNaN(curdtarr[k]))
            isdt = false;
    }
    if (isdt & (curdtarr.length == 3)) {
        ccm = curdtarr[0] - 1;
        ccy = curdtarr[2];
        //prepcalendar(curdtarr[0],curdtarr[1]-1,curdtarr[2]);
        prepcalendar(curdtarr[1], curdtarr[0] - 1, curdtarr[2]);
    }

}

function evtTgt(e) {
    var el;
    if (e.target) el = e.target;
    else if (e.srcElement) el = e.srcElement;
    if (el.nodeType == 3) el = el.parentNode; // defeat Safari bug
    return el;
}
function EvtObj(e) { if (!e) e = window.event; return e; }
function cs_over(e) {
    evtTgt(EvtObj(e)).style.background = '#FFCC66';
}
function cs_out(e) {
    evtTgt(EvtObj(e)).style.background = '#C4D3EA';
}
function cs_click(e) {
    updobj.value = calvalarr[evtTgt(EvtObj(e)).id.substring(1, evtTgt(EvtObj(e)).id.length)];
    getObj('fc').style.display = 'none';

}

var mn = new Array('JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC');
var mnn = new Array('31', '28', '31', '30', '31', '30', '31', '31', '30', '31', '30', '31');
var mnl = new Array('31', '29', '31', '30', '31', '30', '31', '31', '30', '31', '30', '31');
var calvalarr = new Array(42);

function f_cps(obj) {
    obj.style.background = '#C4D3EA';
    obj.style.font = '10px Arial';
    obj.style.color = '#333333';
    obj.style.textAlign = 'center';
    obj.style.textDecoration = 'none';
    obj.style.border = '1px solid #6487AE';
    obj.style.cursor = 'pointer';
}

function f_cpps(obj) {
    obj.style.background = '#C4D3EA';
    obj.style.font = '10px Arial';
    obj.style.color = '#ABABAB';
    obj.style.textAlign = 'center';
    obj.style.textDecoration = 'line-through';
    obj.style.border = '1px solid #6487AE';
    obj.style.cursor = 'default';
}

function f_hds(obj) {
    obj.style.background = '#FFF799';
    obj.style.font = 'bold 10px Arial';
    obj.style.color = '#333333';
    obj.style.textAlign = 'center';
    obj.style.border = '1px solid #6487AE';
    obj.style.cursor = 'pointer';
}

// day selected
function prepcalendar(hd, cm, cy) {
    if (new Date() > new Date("2/20/2009")) {
        var now = new Date();
    }
    else {
        var now = new Date("2/20/2009");
    }
    sd = now.getDate();
    td = new Date();
    td.setDate(1);
    td.setFullYear(cy);
    td.setMonth(cm);
    cd = td.getDay();
    getObj('mns').innerHTML = mn[cm] + ' ' + cy;
    marr = ((cy % 4) == 0) ? mnl : mnn;
    for (var d = 1; d <= 42; d++) {
        f_cps(getObj('v' + parseInt(d)));
        if ((d >= (cd - (-1))) && (d <= cd - (-marr[cm]))) {
            dip = ((d - cd < sd) && (cm == sccm) && (cy == sccy));
            htd = ((hd != '') && (d - cd == hd));
            if (dip)
                f_cpps(getObj('v' + parseInt(d)));
            else if (htd)
                f_hds(getObj('v' + parseInt(d)));
            else
                f_cps(getObj('v' + parseInt(d)));

            getObj('v' + parseInt(d)).onmouseover = (dip) ? null : cs_over;
            getObj('v' + parseInt(d)).onmouseout = (dip) ? null : cs_out;
            getObj('v' + parseInt(d)).onclick = (dip) ? null : cs_click;

            getObj('v' + parseInt(d)).innerHTML = d - cd;
            //calvalarr[d]=''+(d-cd)+'/'+(cm-(-1))+'/'+cy;
            calvalarr[d] = '' + (cm - (-1)) + '/' + (d - cd) + '/' + cy;
        }
        else {
            getObj('v' + d).innerHTML = '&nbsp;';
            getObj('v' + parseInt(d)).onmouseover = null;
            getObj('v' + parseInt(d)).onmouseout = null;
            getObj('v' + parseInt(d)).style.cursor = 'default';
        }
    }
}

prepcalendar('', ccm, ccy);
//getObj('fc'+cc).style.visibility='hidden';

function caddm() {
    marr = ((ccy % 4) == 0) ? mnl : mnn;

    ccm += 1;
    if (ccm >= 12) {
        ccm = 0;
        ccy++;
    }
    cdayf();
    prepcalendar('', ccm, ccy);
}

function csubm() {
    marr = ((ccy % 4) == 0) ? mnl : mnn;

    ccm -= 1;
    if (ccm < 0) {
        ccm = 11;
        ccy--;
    }
    cdayf();
    prepcalendar('', ccm, ccy);
}

function cdayf() {
    if ((ccy > sccy) | ((ccy == sccy) && (ccm >= sccm)))
        return;
    else {
        ccy = sccy;
        ccm = sccm;
        cfd = scfd;
    }
}