$(document).ready(init);

/**
 * Hamper prices:
 */
var hampers = [];
hampers['savoury_std'] = 65;
hampers['savoury_pre'] = 100;
hampers['sweet_sav_std'] = 65;
hampers['sweet_sav_pre'] = 100;
hampers['coffee_std'] = 65;
hampers['coffee_pre'] = 100;
hampers['tea_std'] = 65;
hampers['tea_pre'] = 100;
hampers['sweet_std'] = 65;
hampers['sweet_pre'] = 100;

/**
 * Wine prices:
 */
var wines = [];
wines['white'] = 15;
wines['white_pre'] = 30;
wines['red'] = 15;
wines['red_pre'] = 30;
wines['sparkling'] = 15;
wines['french'] = 150;
var clerk;
function init()
{
    $("#choice").change(processChoice);
    $("#budget").change(processBudget);
    $("#deliver_yes").change(processDelivery);
    $("#deliver_no").change(processDelivery);
    $("#other_budget").change(checkOtherBudget).keyup(checkOtherBudget);
    $("#hamper_type").change(updateTotal);
    $("#chocolate").change(updateTotal);
    $("#soft_toys").change(updateTotal);
    $("#balloons").change(updateTotal);
    $("#vase").change(updateTotal);    
    $("#delivery_area").change(updateTotal);
    $("#wine").change(updateTotal);
    $('#pickup_date').datepicker( { dateFormat: 'dd-mm-yy', onSelect: checkPickupDate });
    $('#delivery_date').datepicker( { dateFormat: 'dd-mm-yy', onSelect: checkDeliveryDate });

    
    clerk = new Clerk();
    clerk.addField('rec_first', checkReceiverFields);
    clerk.addField('rec_last', checkReceiverFields);
    clerk.addField('rec_phone', checkReceiverFields);
    clerk.addField('rec_address', checkReceiverFields);
    clerk.addField('rec_suburb', checkReceiverFields);
    clerk.addField('rec_postcode', checkReceiverFields);
    clerk.addField('choice', '');
    clerk.addField('hamper_type', '');
    clerk.addField('extra', '');
    clerk.addField('chocolate', '');
    clerk.addField('soft_toys', '');
    clerk.addField('balloons', '');
    clerk.addField('vase', '');
    clerk.addField('wine', '');
    clerk.addField('gift_extra', '');
    clerk.addField('card_msg', '');
    clerk.addField("first", "required");
    clerk.addField("last", "required");
    clerk.addField("email", "required|email");
    clerk.addField("phone", "required");
    clerk.addField("pickup_date", checkPickupDate);
    clerk.addField("delivery_date", checkPickupDate);
    clerk.addField("budget", checkBudget);
    clerk.addField("other_budget", checkBudget);
    
    clerk.setEvents(clerk);

    processChoice();
    processBudget();
    processDelivery();
    updateTotal();
}

function getWinePrice(wine)
{
    if (wines[wine] && ! isNaN(wines[wine]))
        return wines[wine];
    else
        return 0.00;
}

function getHamperPrice(hamper)
{
    if (hampers[hamper] && ! isNaN(hampers[hamper]))
        return hampers[hamper];
    else
        return 0.00;
}

function processChoice()
{
    var choice = $("#choice").val();

    switch (choice)
    {
        case 'hamper':
            $("#choice_label").html("<label for='hamper_type'>Select Hamper Type");
            $("#color_style").hide();
            $("#budget").hide();
            $("#budget2").hide();
            $("#hamper_type").show().focus();
        break;

        case 'special':
            $(".special-req").fadeIn('fast');
            $("#special_req").focus();
        break;

        default:
            $(".special-req").fadeOut('fast');
            $("#hamper_type").hide();
            $("#color_style").show();
            $("#budget").show();
            $("#budget2").show();
            $("#choice_label").html("<label for='color_style'>Select Color / Type</label>");
        break;
    }
    updateTotal();
}

function processBudget()
{
    var budget = $("#budget").val();

    switch (budget)
    {
        case 'other':
            $(".other-budget").fadeIn('fast');
            $("#other_budget").focus();
        break;

        default:
            $(".other-budget").fadeOut('fast');
        break;
    }
    updateTotal();
}

function processDelivery()
{
   var pickup = ($("#deliver_no").attr('checked')) ? true : false;
   switch (pickup)
   {
       case true:
           $("#delivery_label").html("<label for='pickup_date'>Pickup Date (dd-mm/yyyy)</label>");
           $(".pickup").fadeIn('fast'); //pickup date
           $(".delivery").fadeOut('fast');
       break;

       case false:
           $("#delivery_label").html("<label for='delivery_date'>Delivery Date (dd-mm/yyyy)</label>");
           $(".pickup").fadeOut('fast'); //pickup date
           $(".delivery").fadeIn('fast');
       break;

   }
}

function checkOtherBudget()
{
    var budget = $("#other_budget").val();
    if (isNaN(budget))
    {
        alert("Please provide numbers only for the budget.");
        $("#other_budget").val("0.00").focus();
    }
    updateTotal();
}

function isNum(thing)
{
    return (thing != "" && ! isNaN(thing));
}

function updateTotal()
{
    var total = 0.00;
    var choice = $("#choice").val();
    var budget = parseInt($("#budget").val());
    var hamper = getHamperPrice($("#hamper_type").val());
    var wine = getWinePrice($("#wine").val());
    var chocolate = parseInt($("#chocolate").val());
    var softToys = parseInt($("#soft_toys").val());
    var vases = parseInt($("#vase").val());
    var balloons = parseInt($("#balloons").val());
    var deliveryCharge = (isNum($("#delivery_area").val())) ? parseInt($("#delivery_area").val()) : 0.00;

    if (isNum(budget))
        total += budget;
    else if ($("#budget").val()=='other')
    {
        budget = parseInt($("#other_budget").val());
        if (isNum(budget))
            total += budget;
    }

    if (choice=='hamper' && isNum(hamper))
        total += hamper;

    if (isNum(wine))
        total += wine;

    if (isNum(chocolate))
        total += chocolate;
    
    if (isNum(vases))
        total += vases;
        
    if (isNum(balloons))
        total += balloons;        
        
    if (isNum(softToys))
        total += softToys;

    total += deliveryCharge;
    
    if (! isNum(total))
        total = 0.00;
    if (total.toFixed)
        total = total.toFixed(2);

    $(".total").html("$" + total);
    $("#total").val(total);
}

function checkPickupDate()
{
    var date = $("#pickup_date").val();
    if ($("#pickup_date").is(":hidden") || date != '')
    {
        clerk.addOkMsg("pickup_date");
        return true;
    }
    clerk.addError("pickup_date", "Please provide a pickup date.");
    return false;
}

function checkDeliveryDate()
{
    var date = $("#delivery_date").val();
    if ($("#delivery_date").is(":hidden") || date != '')
    {
        clerk.addOkMsg("delivery_date");
        return true;
    }
    clerk.addError("delivery_date", "Please provide a delivery date.");
    return false;
}

function checkBudget()
{
	var choice = $("#choice").val();
	if (choice == 'hamper')
	   return true;
    var budget = parseInt($("#budget").val());
    if (isNum(budget) && budget > 0)
    {
        clerk.addOkMsg("budget");
        return true;
    }
    budget = parseInt($("#other_budget").val());
    
    if (isNum(budget) && budget > 0)
    {
        clerk.addOkMsg("other_budget");
        return true;
    }

    if ($("#budget").val() == 'other')
        clerk.addError("other_budget", "Please provide a valid budget.");
    else
        clerk.addError("budget", "Please provide a valid budget.");
    return false;
}


function checkForm()
{
    return clerk.validate();
}

function checkReceiverFields()
{
    var fields = ['first', 'last', 'phone', 'address', 'suburb', 'postcode'];
    var size = fields.length;
    var field = '';
    var visible = (! $("#rec_first").is(":hidden"));
    
    if (! visible)
        return true;
    var valid = true;
    for (var i =0; i < size; i++)
    {        
        field = "rec_" + fields[i];
        if (! clerk.validate_required(field))
        {
            clerk.addError(field, "This field is required.");
            valid = false;
        }
        else
            clerk.addOkMsg(field);
    }

    return valid;

}
