$(document).ready(function() {
    jQuery.validator.addMethod("betterEmail",
        function(value, element) { 
            return this.optional(element) || /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i.test(value); 
        },
    " ");
	$("#qcform").validate({
	    errorElement: "em",
		success: function(label) {
			label.text(" ").addClass("success");
		},
		rules: {
			customeremail:{
				required: true,
				betterEmail: true,
				minlength: 7
			},			
			billing_first_name:{
			    required:true
			},
			billing_last_name:{
			    required:true
			},
			billing_address1:{
			    required:true
			},
			billing_city:{
			    required:true
			},
			billing_country:{
			    required:true
			},
			billing_zip:{
			    required:true
			},
			billing_state_other:{
			    required:true
			},
			shipping_first_name:{
			    required:true
			},
			shipping_last_name:{
			    required:true
			},
			shipping_address1:{
			    required:true
			},
			shipping_city:{
			    required:true
			},
			shipping_country:{
			    required:true
			},
			shipping_zip:{
			    required:true
			},
			shipping_state_other:{
			    required:true
			},
			shipping_method:{
			    required:true
			},
			payment_method:{
			    required:true
			},
			confirm:{
			    required:true
			},
			number:{
			    required:true,
			    creditcard: true
			},
			cvn:{
			    required:true,
			    digits:true,
			    minlength: 3,
			    maxlength: 4
			},
			cc_owner:{
			    required:true
			},
			bank_name: {
			    required:true
			}
		},
		messages: {
			customeremail: " ",
			billing_first_name: " ",
			billing_last_name: " ",
			billing_phone: " ",
			billing_address1: " ",
			billing_city: " ",
			billing_country: " ",
			billing_zip: " ",
			billing_state_other: " ",
			shipping_first_name: " ",
			shipping_last_name: " ",
			shipping_phone: " ",
			shipping_address1: " ",
			shipping_city: " ",
			shipping_country: " ",
			shipping_zip: " ",
			shipping_state_other: " ",
            shipping_method: "Shipping method not selected ",
			payment_method: "Payment method not selected",
			confirm: " ",
			number: " ",
			cvn: " ",
			cc_owner: " ",
			bank_name: " "
		},
		submitHandler: function(form) {
            // do other stuff for a valid form
            var shippingVals = $("input[name='shipping_method']:checked").val().split(":");
            var paymentVals = $("input[name='payment_method']:checked").val().split(":");
            var content='<table><tr><th>Email address</th></tr><tr><td>'+$("#customeremail").val()+'</td></tr></table><br />';
            content+='<table><tr><th>Billing address</th><th>Shipping address</th></tr><tr>';
            //billing info
            content+='<td>'+$("#billing_first_name").val()+' '+$("#billing_last_name").val()+'<br />';
            if($("#billing_company").val()) content += $("#billing_company").val()+'<br />';
            if($("#billing_phone").val()) content += 'Phone: '+$("#billing_phone").val()+' ';
            if($("#billing_fax").val()) content += 'Fax: '+$("#billing_fax").val()+' ';
            if($("#billing_fax").val() || $("#billing_phone").val()) content += '<br />';
            content+=$("#billing_address1").val();
            if($("#billing_address2").val()) content += $("#billing_address2").val();
            content+='<br />';
            content+=$("#billing_city").val()+' ';
            if($("#billing_zip").val()) content+=', '+$("#billing_zip").val();
            if($("#billing_state_other").val()) content+=', '+$("#billing_state_other").val();
            if($("#billing_country").val()) content+=', '+$("#billing_country :selected").text();
            content+='</td>';
            //shipping info
            content+='<td>'+$("#shipping_first_name").val()+' '+$("#shipping_last_name").val()+'<br />';
            if($("#shipping_company").val()) content += $("#shipping_company").val()+'<br />';
            if($("#shipping_phone").val()) content += 'Phone: '+$("#shipping_phone").val()+' ';
            if($("#shipping_fax").val()) content += 'Fax: '+$("#shipping_fax").val()+' ';
            if($("#shipping_fax").val() || $("#shipping_phone").val()) content += '<br />';
            content+=$("#shipping_address1").val();
            if($("#shipping_address2").val()) content += $("#shipping_address2").val();
            content+='<br />';
            content+=$("#shipping_city").val();
            if($("#shipping_zip").val()) content+=', '+$("#shipping_zip").val();
            if($("#shipping_state_other").val()) content+=', '+$("#shipping_state_other").val();
            if($("#shipping_country").val()) content+=', '+$("#shipping_country :selected").text();
            content+='</td>';
            content+='</tr></table><br />';
            
            content += '<table><tr><th>Shipping method</th><th>Payment method</th></tr>';
            content += '<tr><td>'+shippingVals[1]+'</td><td>'+paymentVals[1]+'</td></tr></table><br /><br />';
            content += $("#order_summary").html();
   	        Boxy.confirm(content, function() { form.submit() }, {title: 'Please confirm that order information is correct'});
        }
	});
	
	var customeremail = $("#customeremail");
	customeremail.blur(function() {
	    if(customeremail.val().length>6){
	    if(customeremail.valid()){
            $('#billing_first_name').attr("disabled", !customeremail.valid());
            $('#billing_last_name').attr("disabled", !customeremail.valid());
            $('#billing_company').attr("disabled", !customeremail.valid());
            $('#billing_phone').attr("disabled", !customeremail.valid());
            $('#billing_fax').attr("disabled", !customeremail.valid());
            $('#billing_address1').attr("disabled", !customeremail.valid());
            $('#billing_address2').attr("disabled", !customeremail.valid());
            $('#billing_city').attr("disabled", !customeremail.valid());
            $('#billing_zip').attr("disabled", !customeremail.valid());
            $('#billing_state_other').attr("disabled", !customeremail.valid());
            $('#billing_country').attr("disabled", !customeremail.valid());
        
            $('#shipping_first_name').attr("disabled", !customeremail.valid());
            $('#shipping_last_name').attr("disabled", !customeremail.valid());
            $('#shipping_company').attr("disabled", !customeremail.valid());
            $('#shipping_phone').attr("disabled", !customeremail.valid());
            $('#shipping_fax').attr("disabled", !customeremail.valid());
            $('#shipping_address1').attr("disabled", !customeremail.valid());
            $('#shipping_address2').attr("disabled", !customeremail.valid());
            $('#shipping_city').attr("disabled", !customeremail.valid());
            $('#shipping_zip').attr("disabled", !customeremail.valid());
            $('#shipping_state_other').attr("disabled", !customeremail.valid());
            $('#shipping_country').attr("disabled", !customeremail.valid());
        }
        }
	});

	$("#shipping_first_name").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#shipping_last_name").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#shipping_company").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#shipping_phone").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#shipping_fax").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#shipping_address1").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#shipping_address2").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#shipping_city").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#shipping_zip").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#shipping_state_other").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#shipping_country").change(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	
	$("#billing_first_name").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#billing_last_name").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#billing_company").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#billing_phone").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#billing_fax").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#billing_address1").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#billing_address2").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#billing_city").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#billing_zip").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#billing_state_other").keyup(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	$("#billing_country").change(function(){if($("#sameshipping").is(':checked')) $("#sameshipping").attr("checked",false);});
	
	var sameshipping = $("#sameshipping");
	sameshipping.click(function() {
        if(this.checked) {
            copyBilling2Shipping();
            getShipping();
            getTax();
            $("#price_shipping_span").html('&pound; 0.00');
            $("#price_total_span").html((parseFloat($("input[name='price_total']").val())).toFixed(2));
        }
	});

	$('#shipping_country').change( function() {
	    getShipping();
	    getTax();
        $("#price_shipping_span").html('&pound; 0.00');
        $("#price_total_span").html((parseFloat($("input[name='price_total']").val())).toFixed(2));
	});

    $('#terms_link').click( function() {
        new Boxy($('#terms_and_conditions').html(), {title: 'Terms and conditions'});
        return false;
    });

    $('#cvv_link').click( function() {
        new Boxy($('#terms_and_conditions2').html(), {title: 'What is CVV'});
        return false;
    });

    $('#billing_country').attr("disabled", true);
    $('#shipping_country').attr("disabled", true);
    $('#bt').attr("disabled", false);
    
	//common functions
	function copyBilling2Shipping()
	{
        $('#shipping_first_name').val($('#billing_first_name').val());
        $('#shipping_last_name').val($('#billing_last_name').val());
        $('#shipping_company').val($('#billing_company').val());
        $('#shipping_phone').val($('#billing_phone').val());
        $('#shipping_fax').val($('#billing_fax').val());
        $('#shipping_address1').val($('#billing_address1').val());
        $('#shipping_address2').val($('#billing_address2').val());
        $('#shipping_city').val($('#billing_city').val());
        $('#shipping_zip').val($('#billing_zip').val());
        $('#shipping_state_other').val($('#billing_state_other').val());
        $('#shipping_country').val($('#billing_country').val());
    }
    function isShippingValid()
    {
        if(!$('#shipping_first_name').valid()) return false;
        if(!$('#shipping_last_name').valid()) return false;
        if(!$('#shipping_company').valid()) return false;
        if(!$('#shipping_phone').valid()) return false;
        if(!$('#shipping_fax').valid()) return false;
        if(!$('#shipping_address1').valid()) return false;
        if(!$('#shipping_address2').valid()) return false;
        if(!$('#shipping_city').valid()) return false;
        if(!$('#shipping_zip').valid()) return false;
        if(!$('#shipping_state_other').valid()) return false;
        if(!$('#shipping_country').valid()) return false;
        
        return true;
    }
    function getShipping()
    {
        if(isShippingValid())
        {
            $("#shipload").show();
            $("#shipping_methods").hide('slow');
            $.getJSON("index.php?page=modules/quickcheckout/get_shipping_json",
            { 'shipping[first_name]': $('#shipping_first_name').val(),
              'shipping[last_name]': $('#shipping_last_name').val(),
              'shipping[company]': $('#shipping_company').val(),
              'shipping[phone]': $('#shipping_phone').val(),
              'shipping[fax]': $('#shipping_fax').val(),
              'shipping[address1]': $('#shipping_address1').val(),
              'shipping[address2]': $('#shipping_address2').val(),
              'shipping[city]': $('#shipping_city').val(),
              'shipping[zip]': $('#shipping_zip').val(),
              'shipping[state_other]': $('#shipping_state_other').val(),
              'shipping[country]': $('#shipping_country').val()
            }, function(json){
                $("#shipping_methods").children().remove();
                var element = '';
                $.each(json, function(i,item){
                    element += '<p><input type="radio" name="shipping_method" value="'+item.id+':'+item.name+':'+item.price+'" /> '+item.name+' (+ &pound; '+item.price+')</p>';
                });
                $("#shipping_methods").html(element);
                $("input[name='shipping_method']").bind("click", function(){ getPayment() });
                $("#shipload").hide();
                $("#shipping_methods").show('slow');
            });
        } else $("input[name='shipping_method']").attr("checked", false); 
    }
    
    function getTax()
    {
        if(isShippingValid())
        {
            $.getJSON("index.php?page=modules/quickcheckout/get_tax_json",
            { 'shipping[first_name]': $('#shipping_first_name').val(),
              'shipping[last_name]': $('#shipping_last_name').val(),
              'shipping[company]': $('#shipping_company').val(),
              'shipping[phone]': $('#shipping_phone').val(),
              'shipping[fax]': $('#shipping_fax').val(),
              'shipping[address1]': $('#shipping_address1').val(),
              'shipping[address2]': $('#shipping_address2').val(),
              'shipping[city]': $('#shipping_city').val(),
              'shipping[zip]': $('#shipping_zip').val(),
              'shipping[state_other]': $('#shipping_state_other').val(),
              'shipping[country]': $('#shipping_country').val()
            }, function(json){
                $("input[name='tax_value']").val(json.value);
                //$("input[name='tax_shipping']").val(json.shipping);
                //$("#value_tax_span").html(json.value);
                $("#price_tax_span").html('&pound; '+parseFloat(json.value).toFixed(2));
                $("#price_total_span").html((parseFloat($("input[name='price_total']").val())+parseFloat(json.value)).toFixed(2));
            });
        }
    }
    
    function getPayment()
    {
        if(isShippingValid())
        {
            $("#paymload").show();
            $("#payement_methods").hide('slow');
            $.getJSON("index.php?page=modules/quickcheckout/get_payment_json",
            { 'price_total': parseFloat($("input[name='price_total']").val()).toFixed(2)
            }, function(json){
                $shippingVals = $("input[name='shipping_method']:checked").val().split(":");
                $("#price_shipping_span").html('&pound; '+parseFloat($shippingVals[2]).toFixed(2));
                $("#price_total_span").html((parseFloat($shippingVals[2])+parseFloat($("input[name='price_total']").val())).toFixed(2));

                /*if($("input[name='tax_shipping']").val()=='yes'&&$("input[name='tax_value']").val()>0){
                    $("#price_tax_span").html('&pound; '+((parseFloat($("input[name='price_total']").val())+parseFloat($shippingVals[2]))*parseFloat($("input[name='tax_value']").val())/100).toFixed(2));
                    $("#price_total_span").html((parseFloat($("input[name='price_total']").val()) + parseFloat($shippingVals[2]) + ((parseFloat($("input[name='price_total']").val())+parseFloat($shippingVals[2]))*parseFloat($("input[name='tax_value']").val())/100)).toFixed(2));
                } else if($("input[name='tax_shipping']").val()!='yes'&&$("input[name='tax_value']").val()>0){
                */
                if($("input[name='tax_value']").val()<0){
                    $("#price_total_span").html((parseFloat($("input[name='price_total']").val())+parseFloat($shippingVals[2]) + parseFloat($("input[name='tax_value']").val())).toFixed(2)); //
                }
                
                $("#payement_methods").children().remove();
                $('#cc_form').hide('slow');
                $("input[name='number']").attr("disabled", true);
                $("input[name='cvn']").attr("disabled", true);
                $("input[name='cc_owner']").attr("disabled", true);
                $("input[name='bank_name']").attr("disabled", true);

                var element = '';
                $.each(json, function(i,item){  
                    element += '<p><input type="radio" name="payment_method" value="'+item.id+':'+item.name+'" /> '+item.name;
                    if(item.price!='0.00') element += ' (+ &pound; '+item.price+')';
                    element += '</p>';
                });
                $("#payement_methods").html(element);
                $("#paymload").hide();
                $("#payement_methods").show('slow');
                $("input[name='payment_method']").bind("click", function(){
                     $("#confirm").attr("disabled", false);
                     paymentVals = $("input[name='payment_method']:checked").val().split(":");
                     if(paymentVals[0]=='credit_card'){
                        $('#cc_form').show('slow');
                        $("input[name='number']").attr("disabled", false);
                        $("input[name='cvn']").attr("disabled", false);
                        $("input[name='cc_owner']").attr("disabled", false);
                        $("input[name='bank_name']").attr("disabled", false);
                     }
                     else
                     {
                        $('#cc_form').hide('slow');
                        $("input[name='number']").attr("disabled", true);
                        $("input[name='cvn']").attr("disabled", true);
                        $("input[name='cc_owner']").attr("disabled", true);
                        $("input[name='bank_name']").attr("disabled", true);
                     }
                });
            });
        }  else $("input[name='payment_method']").attr("checked", false); 
    }

});