/* setup month enums */
var jan = 0;
var feb = 1;
var mar = 2;
var apr = 3;
var may = 4;
var jun = 5;
var jul = 6;
var aug = 7;
var sep = 8;
var oct = 9;
var nov = 10;
var dec = 11;
 
/* set day ops with values for bitwise operations */
var none = 0;
var sun = 1;
var mon = 2;
var tue = 4;
var wed = 8;
var thu = 16;
var fri = 32;
var sat = 64;
 
var today = new Date();
 
// create an array for each month of the year, and populate the
// months there are water with the days they are guaranteed.
var guarWaterDaysByMonth = new Array(12);
 
// setup parameters - change these as needed    
//var priceUpperOffSeason = 26.00;
//var priceLowerOffSeason = 22.00;
//var priceLowerChildOffSeason = 18.00;
// 
var priceUpperStd = 29.00;
var priceLowerStd = 29.00;
var priceLowerChildStd = 20.00;

var priceUpper = 0.00;
var priceLower = 0.00;
var priceLowerChild = 0.00;
 
 var discount11 = 0;
 var discount1 = 0;
var discount330 = 0.00;
var discount5 = 0.00;
 
var taxRate = 0.0975;
var riverFee = 2.00;
 
var seasonStart = new Date(today.getFullYear(),2,15);
var seasonEnd = new Date(today.getFullYear(),11,1);
 
 
function initPage() {  
// just select each month and OR together the predefined day constants
// ie: guarWaterDaysByMonth[may] = mon | wed | fri
guarWaterDaysByMonth[jan] = none;
guarWaterDaysByMonth[feb] = none;
guarWaterDaysByMonth[mar] = none;
guarWaterDaysByMonth[apr] = none;
guarWaterDaysByMonth[may] = tue | wed | thu;
guarWaterDaysByMonth[jun] = tue | wed | thu | sat;
guarWaterDaysByMonth[jul] = tue | wed | thu | sat;
guarWaterDaysByMonth[aug] = tue | wed | thu | sat;
guarWaterDaysByMonth[sep] = none;
guarWaterDaysByMonth[oct] = none;
guarWaterDaysByMonth[nov] = none;
guarWaterDaysByMonth[dec] = none;
// end setup parameters - do not change code after this
 
 priceUpper = priceUpperStd;
 priceLower = priceLowerStd;
 priceLowerChild = priceLowerChildStd;
 changeTime();
 
 
  var date = new Date();
  date = getNextRecommendedDay();
  document.getElementById("txtDate").value = getDateString(date);
  checkDate(getDateString(date));
  document.getElementById("txtPriceUpper").value = formatCurrency(priceUpper);
  document.getElementById("txtPriceLower").value = formatCurrency(priceLower);
  document.getElementById("txtPriceLowerChild").value = formatCurrency(priceLowerChild);
  recalcUpper();
  recalcLower();
  recalcLowerChild();
  updateItemName();
}
 
function recalcUpper() {
    var numUpper = document.getElementById("txtNumUpper").value * 1;
    document.getElementById("txtPriceUpperTotal").value = formatCurrency(numUpper * priceUpper);
    recalcTotal();
}
 
function recalcLower() {
    var numLower = document.getElementById("txtNumLower").value * 1;
    document.getElementById("txtPriceLowerTotal").value = formatCurrency(numLower * priceLower);
    recalcTotal();
}
 
 function recalcLowerChild() {
    var numLowerChild = document.getElementById("txtNumLowerChild").value * 1;
    document.getElementById("txtPriceLowerChildTotal").value = formatCurrency(numLowerChild * priceLowerChild);
    recalcTotal();
}
 
function validateOrder(trackerString) {
    var numUpper = document.getElementById("txtNumUpper").value * 1;
    var numLower = document.getElementById("txtNumLower").value * 1;
    var numLowerChild = document.getElementById("txtNumLowerChild").value * 1;
    var numTotal = numUpper + numLower + numLowerChild;
 
    if (numTotal > 0) {
// begin the following line does not appear to be needed 7/19/09
//        document.getElementById("btnGoogle").click;
// end
// log the click to analytics
        pageTracker._trackPageview(trackerString);
        return true;
    } else {
        alert("You do not have any trips selected.");
        return false;
    }
}
 
function recalcTotal() {
 
    var totalUpper = stripDollar(document.getElementById("txtPriceUpperTotal").value) * 1;
    var totalLower = stripDollar(document.getElementById("txtPriceLowerTotal").value) * 1;
    var totalLowerChild = stripDollar(document.getElementById("txtPriceLowerChildTotal").value) * 1;
   
    var numUpper = document.getElementById("txtNumUpper").value * 1;
    var numLower = document.getElementById("txtNumLower").value * 1;
    var numLowerChild = document.getElementById("txtNumLowerChild").value * 1;
    var numTotal = numUpper + numLower + numLowerChild;
   
   
   
 
    var subTotal = formatCurrency(totalUpper + totalLower + totalLowerChild);
    var totalTax = ((stripDollar(subTotal) * 1.00) * taxRate) + (numTotal * riverFee);
   
    var total = formatCurrency((1 * stripDollar(subTotal)) + totalTax);
 
    document.getElementById("txtTax").value = formatCurrency(totalTax);
    document.getElementById("txtSubTotal").value = subTotal;
    document.getElementById("txtTotal").value = total;
    document.getElementById("tax").value = stripDollar(formatCurrency(totalTax * 1));
    document.getElementById("amount").value = subTotal;
 
    updateItemName();
}
 
function formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
        cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
        num = num.substring(0,num.length-(4*i+3))+','+
    num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') + '$' + num + '.' + cents);
}
 
 
function getSelectedTime() {
    // get selected time
    var time = "";
    var radios = document.getElementById ('radios');
    if (radios) {
      var inputs = radios.getElementsByTagName ('input');
      if (inputs) {
        for (var i = 0; i < inputs.length; ++i) {
          if (inputs[i].type == 'radio' && inputs[i].name == 'rdbTime' && inputs[i].checked)
            time =  inputs[i].value;
        }
      }
    }

   return time;
}


function updateItemName() {
 
    var time = getSelectedTime();
    // paypal
    var itemname = "Rafting - ";
    itemname += document.getElementById("txtDate").value;
    itemname += " " + time;
    itemname += " - " + document.getElementById("txtNumUpper").value;
    itemname += " Upper, ";
    itemname += document.getElementById("txtNumLower").value;
    itemname += " Lower (adults), "; 
    itemname += document.getElementById("txtNumLowerChild").value;
    itemname += " Lower (children)";
    document.getElementById("item_name").value = itemname;
   
    // google
    var numUpper = document.getElementById("txtNumUpper").value * 1;
    var numLower = document.getElementById("txtNumLower").value * 1;
    var numLowerChild = document.getElementById("txtNumLowerChild").value * 1;
    var numTotal = numUpper + numLower + numLowerChild;
   
    var totalUpper = stripDollar(document.getElementById("txtPriceUpperTotal").value) * 1;
    var totalLower = stripDollar(document.getElementById("txtPriceLowerTotal").value) * 1;
    var totalLowerChild = stripDollar(document.getElementById("txtPriceLowerChildTotal").value) * 1;
   
    var subTotal = formatCurrency(totalUpper + totalLower + totalLowerChild);
    var totalTax = ((stripDollar(subTotal) * 1.00) * taxRate) + (numTotal * riverFee);
   
    var total = formatCurrency((1 * stripDollar(subTotal)) + totalTax);
  
  
    var itemCount = 0;  
   
    // get time string
    var radios = document.getElementById ('radios');
    if (radios) {
      var inputs = radios.getElementsByTagName ('input');
      if (inputs) {
        for (var i = 0; i < inputs.length; ++i) {
          if (inputs[i].type == 'radio' && inputs[i].name == 'rdbTime' && inputs[i].checked)
            time =  inputs[i].value;
        }
      }
    }
 
    var dateAndTime = document.getElementById("txtDate").value +" "+ time;
    if (numUpper > 0) {
        itemCount++;
        document.getElementById("divItem"+itemCount).disabled = false;
        document.getElementById("item_name_"+itemCount).disabled = false;
        document.getElementById("item_description_"+itemCount).disabled = false;
        document.getElementById("item_quantity_"+itemCount).disabled = false;
        document.getElementById("item_price_"+itemCount).disabled = false;
        document.getElementById("item_name_" + itemCount).value = "Upper River";
        document.getElementById("item_description_" + itemCount).value = dateAndTime + "- Fully guided whitewater rafting trip. Ages 8+";
        document.getElementById("item_quantity_" + itemCount).value = numUpper;
        document.getElementById("item_price_" + itemCount).value = stripDollar(document.getElementById("txtPriceUpper").value);
    }
    if (numLower > 0) {
        itemCount++;
        document.getElementById("divItem"+itemCount).disabled = false;
        document.getElementById("item_name_"+itemCount).disabled = false;
        document.getElementById("item_description_"+itemCount).disabled = false;
        document.getElementById("item_quantity_"+itemCount).disabled = false;
        document.getElementById("item_price_"+itemCount).disabled = false;
        document.getElementById("item_name_" + itemCount).value = "Lower River Adult";
        document.getElementById("item_description_" + itemCount).value = dateAndTime + "- Fully guided mild whitewater trip with fun splashing and swimming or just relaxing in the boat. Ages 11+";
        document.getElementById("item_quantity_" + itemCount).value = numLower;
        document.getElementById("item_price_" + itemCount).value = stripDollar(document.getElementById("txtPriceLower").value);
    }
    if (numLowerChild > 0) {
        itemCount++;
        document.getElementById("divItem"+itemCount).disabled = false;
        document.getElementById("item_name_"+itemCount).disabled = false;
        document.getElementById("item_description_"+itemCount).disabled = false;
        document.getElementById("item_quantity_"+itemCount).disabled = false;
        document.getElementById("item_price_"+itemCount).disabled = false;
        document.getElementById("item_name_" + itemCount).value = "Lower River Child";
        document.getElementById("item_description_" + itemCount).value = dateAndTime + "- Fully guided mild whitewater trip with fun splashing and swimming or just relaxing in the boat. Ages 3-10";
        document.getElementById("item_quantity_" + itemCount).value = numLowerChild;
        document.getElementById("item_price_" + itemCount).value = stripDollar(document.getElementById("txtPriceLowerChild").value);
    }
    if (itemCount > 0) {
        //add river fee and tax
        itemCount++;
        document.getElementById("divItem"+itemCount).disabled = false;
        document.getElementById("item_name_"+itemCount).disabled = false;
        document.getElementById("item_description_"+itemCount).disabled = false;
        document.getElementById("item_quantity_"+itemCount).disabled = false;
        document.getElementById("item_price_"+itemCount).disabled = false;
        document.getElementById("item_name_" + itemCount).value = "Taxes and fees";
        document.getElementById("item_description_" + itemCount).value = "Includes all taxes and river fees";
        document.getElementById("item_quantity_" + itemCount).value = 1;
        document.getElementById("item_price_" + itemCount).value = totalTax;
    }
   
    for (var j = itemCount+1; j < 5; j++) {
        document.getElementById("divItem"+j).disabled = true;
        document.getElementById("item_name_"+j).disabled = true;
        document.getElementById("item_description_"+j).disabled = true;
        document.getElementById("item_quantity_"+j).disabled = true;
        document.getElementById("item_price_"+j).disabled = true;
        document.getElementById("item_currency_"+j).disabled = true;
 
    }
}
 
function isDateGuaranteed(date) {
    var month = date.getMonth();
    // temporary code for memorial day weekend
    var extraDay = new Date(2010, 08, 01);
    var extraDay2 = new Date(2010, 08, 02);
    var extraDay3 = new Date(2010, 08, 04);
    var extraDay4 = new Date(2009, 08, 03);
    if ((compareJustDate(extraDay,date)) || (compareJustDate(extraDay2,date)) || (compareJustDate(extraDay3,date)) || (compareJustDate(extraDay4,date))) {
        return true;
    }
    // end temporary code
    var dateBinaryOp = Math.pow(2,date.getDay()) * 1;
 
    if ((guarWaterDaysByMonth[month] & dateBinaryOp) > 0) {
        return true;
    } else {
        return false;
    }
 
}
 
function compareJustDate(date1, date2) {
    return ((date1.getMonth() == date2.getMonth()) &&
    (date1.getDate() == date2.getDate()) &&
    (date1.getFullYear() == date2.getFullYear()));   
}
 
 function noRafting(date) {
    if (compareJustDate(date, new Date(2010,08,05))) {
        // we're rafting low water sunday labor day weekend
        return false;
    }
    if (isInSeason(date) && !(isDateGuaranteed(date))) {
        return ((date <= new Date(2010,08,04)) || (date.getDay() == 0))
    } else {
        return false;
    }
 }
 
function isInSeason(date) {
    var adjustForCalendarYear = 0;
   
    var standardizedStartDate = new Date(date.getFullYear(), seasonStart.getMonth() - 1, seasonStart.getDate());
    var standardizedEndDate = new Date(date.getFullYear(), seasonEnd.getMonth() - 1, seasonEnd.getDate());
   /*
    if (date.getDate() == 1) {
      alert(getDateString(date) + " start=" + getDateString(standardizedStartDate) + " end=" + getDateString(standardizedEndDate));
    }
   */
    if ((date >= standardizedStartDate) && (date <= standardizedEndDate)) {
        return true;
    } else {
        return false;
    }
}
   
 
function getNextRecommendedDay() {
    // the "next best day" is defined as
    //   at least today
    //   there is guaranteed water
    //   check at most the next 7 days, if nothing guaranteed, then just use now
    var nextDate = new Date();
    nextDate.setDate(today.getDate());
    for (var i = 0; i < 7; i++) {
        if (isDateGuaranteed(nextDate)) {
       
            return nextDate;
        }
        nextDate.setDate(nextDate.getDate() + 1);
    }
    // ok, nothing guaranteed, set date to next rafting day
    nextDate.setDate(today.getDate());
    for (var i = 0; i < 365; i++) {
        if (!noRafting(nextDate)) {
            return nextDate;
        }
        nextDate.setDate(nextDate.getDate() + 1);
    }

    // just set date for today-- should never get here
    nextDate = new Date();
    nextDate.setDate(today.getDate());
    return nextDate;
}
   
function checkDate(string) {
    var date = getFieldDate(string);
    var divDate = document.getElementById("divDateWaterWarning");
    var divDateLowerChild = document.getElementById("divDateLowerChildWarning");
    var divDateLowerAdult = document.getElementById("divDateLowerAdultWarning");
    var divUpperLowWater = document.getElementById("divUpperLowWater");
    var div1noRaft = document.getElementById("div1NoRaft");
    div1noRaft.style.display = "none";
    if (isDateGuaranteed(date)) {
    // clear message
        divDate.style.display ="none";
        divDateLowerChild.style.display = "none";
        divDateLowerAdult.style.display = "none";
        divUpperLowWater.style.display = "none";
    } else {
    // display warning
        divDate.style.display ="block";
        divDateLowerChild.style.display = "block";
        divDateLowerAdult.style.display = "block";
        var noRaftDate = new Date(2009,07,09);
        if (compareJustDate(noRaftDate,date)) {
            divUpperLowWater.style.display = "none";
            div1noRaft.style.display = "block";
        } else {
            divUpperLowWater.style.display = "block";
        }
    }
 
    var divBookedDate = document.getElementById('div1Booked');
    var div2BookedDate = document.getElementById('div2Booked');
    var div3BookedDate = document.getElementById('div3Booked');
    var bookedDate = new Date(2009,07,08);
    if (compareJustDate(bookedDate,date)) {
        divBookedDate.style.display = "block";
        div2BookedDate.style.display = "block";
        div3BookedDate.style.display = "block";
    } else {
        divBookedDate.style.display = "none";
        div2BookedDate.style.display = "none";
        div3BookedDate.style.display = "none";
    }
 
    updateItemName();
}
 
 
 function getDiscount(time) {
    switch(time) {
        case "11:00":
            return discount11;
            break;
        case "1:00":
            return discount1;
            break;
        case "3:30":
            return discount330;
            break;
        case "5:00":
            return discount5;
            break;
        default:
            return 0;
            break;
   }
}
    
function changeTime() {
    updateItemName();
    var divLowerChild11Note = document.getElementById("divLowerChild11Note");
    var divLowerAdult11Note = document.getElementById("divLowerAdult11Note");
    var time = getSelectedTime();
    if (time=="11:00") {
        divLowerChild11Note.style.display = "block";
        divLowerAdult11Note.style.display = "block";
    } else {
        divLowerChild11Note.style.display = "none";
        divLowerAdult11Note.style.display = "none";
    }
    var timeDiscount = getDiscount(time);
    priceUpper = priceUpperStd - timeDiscount
    priceLower = priceLowerStd - timeDiscount;
    priceLowerChild = priceLowerChildStd - timeDiscount;
    
      document.getElementById("txtPriceUpper").value = formatCurrency(priceUpper);
  document.getElementById("txtPriceLower").value = formatCurrency(priceLower);
  document.getElementById("txtPriceLowerChild").value = formatCurrency(priceLowerChild);
  recalcUpper();
  recalcLower();
  recalcLowerChild();
    recalcTotal();
}
 
function stripDollar(string) {
    return string.substring(1);
}
 
 
function datePickerClosed(txtBox) {
    checkDate(txtBox.value);
}