
window.onload = initAll
var ticketPrices = new Array(42.5,48.0,51.0);

function initAll()
{
    var zero = 0;
    document.getElementById("rowcount").value = 0;
    document.getElementById("form_day").value = "";
    document.getElementById("form_age").value ="none";
    document.getElementById("form_transport").value ="No transport";
    document.getElementById("form_gold").value ="no"
    document.getElementById("form_gold").disabled =false;
    document.getElementById("form_unit_price").value = zero.toFixed(2);
    document.getElementById("form_amount").value =0;
    document.getElementById("alltogether").value =0;
    document.getElementById("form_total_price").value =zero.toFixed(2);
    document.getElementById("form_place").value = "";
    document.getElementById("form_ocasion").value = "";
    document.getElementById("form_req").value = "";
    document.getElementById("calendar-inputField").value ="";

    document.getElementById("form_age").onchange = ageChanged;
    document.getElementById("form_transport").onchange = calcPrices;
    document.getElementById("form_gold").onchange = calcPrices;
    document.getElementById("form_amount").onchange = calcPrices;
}

function onDateSelect(date)
{
    date.setHours(20, 0, 0, 0);
    displayMessage("");
    var now = new Date();
    //now.setHours(12,0,0,0);
    now.setTime(now.getTime() + (1000*3600*24));
    if (now < date)
    {
        date = Calendar.printDate(date, "%a %d-%m-%Y");
        document.getElementById("form_day").value = date;
    }
    else
    {
        document.getElementById("form_day").value = "";
        displayMessage("You are booking within 24 hours, please call our reservations department on (+34) 648 214 095 to confirm availability.");
    }
}

function displayMessage(text)
{
    var warningtr = document.getElementById("warning");
    if (text=="")
    {
        if (warningtr != null)
            warningtr.parentNode.removeChild(warningtr);
    }
    else
    {
        if (warningtr != null)
        {
            warningtr.getElementsByTagName("TD")[0].innerHTML = "Warning: " + text;
        }
        else
        {
            var newTableRow = document.createElement("tr");
            newTableRow.id = "warning";
            var cell = document.createElement("td");
            cell.id = "warning_td";
            cell.innerHTML = "Warning: " + text;
            newTableRow.appendChild(cell)
            var refnode = document.getElementById("ref_node");
            refnode.parentNode.insertBefore(newTableRow, refnode);
        }
    }
}

function isDuplicate()
{
    var new_ticket = document.getElementById("form_age").selectedIndex + "_"
        + document.getElementById("form_transport").selectedIndex + "_"
        + document.getElementById("form_gold").selectedIndex;
    var rows = document.getElementById("rowcount").value;
    for (var i=0;i<rows;i++)
    {
        var details = document.getElementById("details_" + i);
        if (details != null)
        {
            var old_ticket = details.value.toString().substr(0, 5);
            if (new_ticket == old_ticket)
                return true;
        }
    }
    return false;
}

function isGroupBooking()
{
    var rows = document.getElementById("rowcount").value;
    var amounts=new Array(0,0,0);   //adults, children, infants
    for (var i=0;i<rows;i++)
    {
        var details = document.getElementById("details_" + i);
        if (details != null)
        {
            var ticket = details.value.split("_");  //  age_transport_gold_amount...
            amounts[ticket[0]-1] += parseInt(ticket[3]);  // -1 because of "none" in form
        }
    }
    //alert("adults" + amounts[0] + "; children" + amounts[1] + "; infants" + amounts[2]);
    if (amounts[0] > 9 || (amounts[0] + amounts[1] + amounts[2] > 19))
        return true
    else return false;
}

function calcPrices()
{
    var age = document.getElementById("form_age").value;
    var transport = document.getElementById("form_transport").selectedIndex;
    var gold = document.getElementById("form_gold").value;
    var initialPrice = ticketPrices[transport];
    initialPrice += (gold=="yes") ? 10 : 0;
    if (age=="none" || age=="Infant")
    {
        initialPrice = 0;
    }
    else if (age=="Child")
        initialPrice *= 0.5;
    var unitPrice = document.getElementById("form_unit_price");
    unitPrice.value = initialPrice.toFixed(2);
    var amount = document.getElementById("form_amount").value;
    var totalPrice = document.getElementById("form_total_price");
    var total = initialPrice * amount;
    totalPrice.value = total.toFixed(2);
    return total;
}

function adultsOnly()
{
    var day = document.getElementById("form_day").value;
    var age = document.getElementById("form_age").selectedIndex;
    if ((age == 2 || age == 3) && day.indexOf("Mo") >= 0)
        return true;
    else
        return false;
}

function wrongAge()
{
    var day = document.getElementById("form_day").value;
    if (day == "" || day.indexOf("Mo") == -1)
        return false;
    else
    {
        var rows = document.getElementById("rowcount").value;
        for (var i=0;i<rows;i++)
        {
            var details = document.getElementById("details_" + i);
            if (details != null && (details.value.charAt(0) == 2 || details.value.charAt(0) == 3))
                return true;
        }
    }
    return false;
}

function addrow2()
{
    displayMessage("");
    var cost = calcPrices();
    if (document.getElementById("form_amount").value == 0 || cost == 0 && document.getElementById("form_age").value != "Infant")
        return;
    
    if (isDuplicate())
    {
        displayMessage("Exact ticket already exists. To change the amount remove that ticket first, then and add a new one with amount updated.");
        return;
    }
    if (adultsOnly())
    {
        displayMessage("Sorry but Mondays are adults only.");
        return;
    }
    var rowcount = document.getElementById("rowcount");
    var newTableRow = document.createElement("tr");
    newTableRow.id = "tr_" + rowcount.value;

    var cellDay = document.createElement("td");
    var cellAge = document.createElement("td");
    var cellTransport = document.createElement("td");
    var cellGold = document.createElement("td");
    var cellUnitPrice = document.createElement("td");
    var cellAmount = document.createElement("td");
    var cellTotalPrice = document.createElement("td");

    var cellRemoveButton = document.createElement("td");
    var removeButton = document.createElement("input");
    removeButton.type = "button";
    removeButton.value = "Del";
    removeButton.id = rowcount.value + "_" + cost;
    removeButton.onclick = removeRow;
    var ticketDetails = document.createElement("input");
    ticketDetails.type = "hidden";
    ticketDetails.value =  //document.getElementById("form_day").value + "_"
        document.getElementById("form_age").selectedIndex + "_"
        + document.getElementById("form_transport").selectedIndex + "_"
        + document.getElementById("form_gold").selectedIndex + "_"
        + document.getElementById("form_amount").value + "_"
        + document.getElementById("form_unit_price").value + "_"
        + document.getElementById("form_total_price").value;
    ticketDetails.id = "details_" + rowcount.value;
    cellRemoveButton.appendChild(removeButton);
    cellRemoveButton.appendChild(ticketDetails);

    cellDay.innerHTML = "";//document.getElementById("form_day").value;
    cellAge.innerHTML = document.getElementById("form_age").value;
    cellTransport.innerHTML = document.getElementById("form_transport").value;
    cellGold.innerHTML = (document.getElementById("form_gold").value == "yes") ? "GOLD" : "-";
    cellUnitPrice.innerHTML = document.getElementById("form_unit_price").value;
    cellAmount.innerHTML = document.getElementById("form_amount").value + " x";
    cellTotalPrice.innerHTML = "= " + document.getElementById("form_total_price").value;

    newTableRow.appendChild(cellDay);
    newTableRow.appendChild(cellAge);
    newTableRow.appendChild(cellTransport);
    newTableRow.appendChild(cellGold);
    newTableRow.appendChild(cellAmount);
    newTableRow.appendChild(cellUnitPrice);
    newTableRow.appendChild(cellTotalPrice);
    newTableRow.appendChild(cellRemoveButton);
    var lastrow = document.getElementById("last_row");
    lastrow.parentNode.insertBefore(newTableRow, lastrow);
    //var allRows = table.getElementsByTagName("tr");
    
    //var refRow = allRows.item(allRows.length - 1);
    //var parent = refRow.parentNode;
    //alert(refRow.innerHTML);
    //alert(parent.tagName);
    //parent.insertBefore(newTableRow, refRow);
     //nodeChangingArea.insertBefore(newGraf,oldGraf);

    //var last_row = document.getElementById("last_row");
    //table.in
    //table.appendChild(newTableRow);

    updateYourTotalCost(cost);
    rowcount.value ++;
}

function removeRow()
{
    displayMessage("");
    var info = this.id.split("_");
    //alert("Removing" + info[0]);
    var rowToRemove = document.getElementById("tr_" + info[0]);
    rowToRemove.parentNode.removeChild(rowToRemove);
    updateYourTotalCost(-(info[1]));
}

function updateYourTotalCost(amount)
{
    var alltogether = document.getElementById("alltogether");
    var newvalue = parseFloat(alltogether.value) + parseFloat(amount);
    alltogether.value = newvalue;
    document.getElementById("your_tickets").innerHTML = "Your tickets total cost: " + newvalue.toFixed(2);
}

function ticket_form_send()
{
    displayMessage("");
    if (document.getElementById("form_day").value == "")
    {
        displayMessage("Please specify the date before submitting.");
        return false;
    }
    if (wrongAge())
    {
        displayMessage("Sorry but Mondays are for adults only. To continue with selected day, please remove Children and Infants from your order.");
        return false;
    }
    if (isGroupBooking())
    {
        displayMessage("Your order classifies as a group booking. Please contact us directly first.");
        return false;
    }
    if (!confirm("Move to payment page?"))
        return false;
    if (document.getElementById("alltogether").value > 0)
    {
        var separator = "T";
        var rows = document.getElementById("rowcount").value;
        var custom = "";
        for (var i=0;i<rows;i++)
        {
            var details = document.getElementById("details_" + i);
            if (details != null)
                custom += details.value + separator;
        }
        //custom += document.getElementById("form_place").value + separator;
        //custom += document.getElementById("form_ocasion").value + separator;
        //custom += document.getElementById("form_req").value + separator;
        //custom += document.getElementById("form_day").value + separator;
        custom += document.getElementById("alltogether").value;
        ajaxFunction(custom);
        
        //document.getElementById("form_custom").value= custom;
        //alert(document.getElementById("form_custom").value);
        return false;
    }
    else
    {
        displayMessage("Your tickets total cost is 0.");
        return false;
    }
}

function ajaxFunction(custom)
{
 var ajaxRequest;  // The variable that makes Ajax possible!
 try
 {
   // Opera 8.0+, Firefox, Safari
   ajaxRequest = new XMLHttpRequest();
 }
 catch (e)
 {
    // Internet Explorer Browsers
    try
    {
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
        try
        {
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e)
        {
            // Something went wrong
            alert("Your browser broke!");
            return false;
        }
    }
 }
 // Create a function that will receive data
 ajaxRequest.onreadystatechange = function()
 {
     if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200)
     {
        //var ajaxDisplay = document.getElementById('ajaxDiv');
        //alert(ajaxRequest.responseText);
        //document.getElementById("ticket_form").submit();
        document.getElementById("form_custom").value= ajaxRequest.responseText;
        document.forms[0].submit();
        //return ajaxRequest.responseText;
        //ajaxDisplay.innerHTML = ajaxRequest.responseText;
     }
 }
 // Now get the value from user and pass it to
 // server script.
 var accommodation = document.getElementById('form_place').value;
 var occasion = document.getElementById('form_ocasion').value;
 var req = document.getElementById('form_req').value;
 var day = document.getElementById("form_day").value;

var url = "ajax.php";
var params = "ac=" + accommodation + "&oc=" + occasion + "&re=" + req + "&da=" + day + "&ti=" + custom;
ajaxRequest.open("POST", url, true);

//Send the proper header information along with the request
ajaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajaxRequest.setRequestHeader("Content-length", params.length);
ajaxRequest.setRequestHeader("Connection", "close");
ajaxRequest.send(params);

/*  GET METHOD
 var queryString = "?ac=" + accommodation ;
 queryString +=  "&oc=" + occasion + "&re=" + req;
 ajaxRequest.open("GET", "ajax.php" + queryString, true);
 ajaxRequest.send(null);
 */
}

function ageChanged()
{
    var age = document.getElementById("form_age");
    var gold = document.getElementById("form_gold");
    if (age.value == "none")
    {
        //unitPrice.value = 0;
        //totalPrice.value = 0;
        gold.disabled=false;
    }
    else if (age.value == "Child"  || age.value=="Infant")
    {
        gold.value = "no";
        gold.disabled=true;
    }
    else if (age.value == "Adult")
    {
        gold.disabled=false;
    }
    calcPrices();
}

function isInteger (s)
{
      var i;
      if (isEmpty(s))
      if (isInteger.arguments.length == 1) return 0;
      else return (isInteger.arguments[1] == true);
      for (i = 0; i < s.length; i++)
      {
         var c = s.charAt(i);
         if (!isDigit(c)) return false;
      }
      return true;
}

function isEmpty(s)
{
    return ((s == null) || (s.length == 0))
}

function isDigit (c)
{
    return ((c >= "0") && (c <= "9"))
}


function keyHit()
{
    calcPrices();
    
    //var enter = 13;
    //var thisKey = (evt) ? evt.which : window.event.keyCode;
    //alert(thisKey);
    //if (thisKey == enter)
    //{
    //    calcPrices();
    //}
    //else if (thisKey > 47 && thisKey < 58)

}

