﻿
function validateCheckout()
{
    var formIsValid = true;
    if (Cookie.read("shoppingCart"))
    {
        var clientName = $('checkoutForm').getElementById('billingNameTxt');
        var clientEmail = $('checkoutForm').getElementById('billingEmailTxt');
        var clientPhone = $('checkoutForm').getElementById('billingPhoneTxt');
        var clientAddress = $('checkoutForm').getElementById('billingAddressTxt');
        var clientTown = $('checkoutForm').getElementById('billingTownTxt');
        var clientState = $('checkoutForm').getElementById('billingStateTxt');
        var clientZip = $('checkoutForm').getElementById('billingZipTxt');
        var creditCardTypes = $('checkoutForm').getElementById('creditCardTypes');
        var nameOnCard = $('checkoutForm').getElementById('nameOnCard');
        var plainCardNum = $('checkoutForm').getElementById('plainCardNum');
        var expirationMonth = $('checkoutForm').getElementById('expirationMonth');
        var expirationYear = $('checkoutForm').getElementById('expirationYear');
        var cvc = $('checkoutForm').getElementById('cvc');
        var cvcDigitRegExp = /(^\d{3}$)|(^\d{4}$)/; // 3 or 4 numbers
        var creditCardRegExp = /(^\d{12}$)|(^\d{13}$)|(^\d{14}$)|(^\d{15}$)|(^\d{16}$)|(^\d{18}$)|(^\d{19}$)/; // 12,13,14,15,16,18 or 19 digits
        var nameAlphaNumeric = /^[A-Za-z0-9 ]+$/;

        if(cvc.get('value') == "")
        {
            cvc.focus();
            cvc.getNext('span').set('text','* Required');
            cvc.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else if(cvc.get('value').search(cvcDigitRegExp))
        {
            cvc.focus();
            cvc.getNext('span').set('text','* Invalid');
            cvc.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            cvc.getNext('span').set('text',' ');
        }
        
        if(expirationMonth.get('value') == "" || expirationYear.get('value') == "")
        {
            expirationYear.focus();
            expirationYear.getNext('span').set('text','* Required');
            expirationYear.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            expirationYear.getNext('span').set('text',' ');
        }
        
        if(plainCardNum.get('value') == "")
        {
            plainCardNum.focus();
            plainCardNum.getNext('span').set('text','* Required');
            plainCardNum.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else if(plainCardNum.get('value').search(creditCardRegExp))
        {
            plainCardNum.focus();
            plainCardNum.getNext('span').set('text','* Invalid');
            plainCardNum.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else if(!luhn(plainCardNum.get('value')))
        {
            plainCardNum.focus();
            plainCardNum.getNext('span').set('text','* Invalid card number');
            plainCardNum.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            plainCardNum.getNext('span').set('text',' ');
        }
                
        if(nameOnCard.get('value') == "")
        {
            nameOnCard.focus();
            nameOnCard.getNext('span').set('text','* Required');
            nameOnCard.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else if(nameOnCard.get('value').search(nameAlphaNumeric))
        {
            nameOnCard.focus();
            nameOnCard.getNext('span').set('text','* Invalid');
            nameOnCard.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            nameOnCard.getNext('span').set('text',' ');
        }
                
        if(creditCardTypes.get('value') == "")
        {
            creditCardTypes.focus();
            creditCardTypes.getNext('span').set('text','* Required');
            creditCardTypes.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            creditCardTypes.getNext('span').set('text',' ');
        }

        if(clientZip.get('value') == "")
        {
            clientZip.focus();
            clientZip.getNext('span').set('text','* Required');
            clientZip.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            clientZip.getNext('span').set('text',' ');
        }
        
        if(clientState.get('value') == "")
        {
            clientState.focus();
            clientState.getNext('span').set('text','* Required');
            clientState.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            clientState.getNext('span').set('text',' ');
        }
        
        if(clientTown.get('value') == "")
        {
            clientTown.focus();
            clientTown.getNext('span').set('text','* Required');
            clientTown.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            clientTown.getNext('span').set('text',' ');
        }

        if(clientAddress.get('value') == "")
        {
            clientAddress.focus();
            clientAddress.getNext('span').set('text','* Required');
            clientAddress.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            clientAddress.getNext('span').set('text',' ');
        }
        
        if(clientPhone.get('value') == "")
        {
            clientPhone.focus();
            clientPhone.getNext('span').set('text','* Required');
            clientPhone.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            clientPhone.getNext('span').set('text',' ');
        }

        if(clientEmail.get('value') == "")
        {
            clientEmail.focus();
            clientEmail.getNext('span').set('text','* Required');
            clientEmail.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            if(!checkEmail(clientEmail.get('value')))
            {
                clientEmail.focus();
                clientEmail.getNext('span').set('text','* Invalid Email');
                clientEmail.getNext('span').addClass('validationActive');
                formIsValid = false;
            }
            else
            {
                clientEmail.getNext('span').set('text',' ');
            }
        }

        if(clientName.get('value') == "")
        {
            clientName.focus();
            clientName.getNext('span').set('text','* Required');
            clientName.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            clientName.getNext('span').set('text',' ');
        }

        if($('addressDifferentCB').checked == true)
        {
            var clientAddress = $('checkoutForm').getElementById('deliveryAddressTxt');
            var clientTown = $('checkoutForm').getElementById('deliveryTownTxt');
            var clientState = $('checkoutForm').getElementById('deliveryStateTxt');
            var clientZip = $('checkoutForm').getElementById('deliveryZipTxt');

            if(clientZip.get('value') == "")
            {
                clientZip.focus();
                clientZip.getNext('span').set('text','* Required');
                clientZip.getNext('span').addClass('validationActive');
                formIsValid = false;
            }
            else
            {
                clientZip.getNext('span').set('text',' ');
            }
            
            if(clientState.get('value') == "")
            {
                clientState.focus();
                clientState.getNext('span').set('text','* Required');
                clientState.getNext('span').addClass('validationActive');
                formIsValid = false;
            }
            else
            {
                clientState.getNext('span').set('text',' ');
            }
            
            if(clientTown.get('value') == "")
            {
                clientTown.focus();
                clientTown.getNext('span').set('text','* Required');
                clientTown.getNext('span').addClass('validationActive');
                formIsValid = false;
            }
            else
            {
                clientTown.getNext('span').set('text',' ');
            }

            if(clientAddress.get('value') == "")
            {
                clientAddress.focus();
                clientAddress.getNext('span').set('text','* Required');
                clientAddress.getNext('span').addClass('validationActive');
                formIsValid = false;
            }
            else
            {
                clientAddress.getNext('span').set('text',' ');
            }
        }
    }
    else
    {
        formIsValid = false;
    }
    
    return formIsValid;
}

//When country DDL is altered
var countryChange = function ()
{
    if (Cookie.read("shoppingCart"))
    {
        var selectOptions;
        if($('addressDifferentCB').checked == true)
        {
            if($('deliveryTitle').hasClass('hidden'))
            {
                $('deliveryTitle').removeClass('hidden');
                $('deliveryDetails').removeClass('hidden');
                $('deliveryTitle').addClass('visible');
                $('deliveryDetails').addClass('visible');
            }
            selectOptions = $('deliveryCountryTxt');
        }
        else
        {
            if($('deliveryTitle').hasClass('visible'))
            {
                $('deliveryTitle').removeClass('visible');
                $('deliveryDetails').removeClass('visible');
                $('deliveryTitle').addClass('hidden');
                $('deliveryDetails').addClass('hidden');
            }
            selectOptions = $('billingCountryTxt');
        }

        var postageUK = "United Kingdom";
        var postageIreland = "Ireland";
        var postageEurope1 = "Austria:Belgium:Denmark:France:Finland:Germany:Greece:Iceland:Italy:Luxembourg:Netherlands:Norway:Portugal:Spain:Sweden:Switzerland:Vatican City";
                              
        var country = $(selectOptions);

        for(var i = 0; i < country.length; i++)
        {
            if(country[i].selected)
            {
                $('shippingOptions').empty(); 
                if(postageUK.contains(country[i].value))
                {
                    var listItemArray = $('cartTotal').getChildren('li');
                    var itemsTotal = listItemArray[0].get('text');
                    var deliveryTotal;
                    
                    if((+itemsTotal.substring(itemsTotal.lastIndexOf('£')+1)) > 15)
                    {
                        var option1 = new Element('option',{'value':'0.00','text':'Economy Shipping (3-7 days) FREE'})
                        var option2 = new Element('option',{'value':'1.99','text':'1st Class (1-3 days) £1.99'})
                        var option3 = new Element('option',{'value':'6.95','text':'Next Business day: £6.95'})
                        deliveryTotal = 0;
                    }
                    else
                    {
                        var option1 = new Element('option',{'value':'1.99','text':'Economy Shipping (3-7 days) £1.99'})
                        var option2 = new Element('option',{'value':'2.99','text':'1st Class (1-3 days) £2.99'})
                        var option3 = new Element('option',{'value':'6.95','text':'Next Business day: £6.95'})
                        deliveryTotal = 1.99;
                    }
                    $('shippingOptions').adopt(option1,option2,option3);
                   
                    var listItemArray = $('cartTotal').getChildren('li');
                    var itemsTotal = listItemArray[0].get('text');
                    var orderTotal = (+itemsTotal.substring(itemsTotal.lastIndexOf('£')+1)) + deliveryTotal;
                    listItemArray[1].set('text','Postage & Packaging £'+deliveryTotal.toFixed(2));
                    listItemArray[2].set('text','Total Order £'+orderTotal.toFixed(2));

                }
                else if(postageIreland.contains(country[i].value))
                {
                    var deliveryTotal;
                    var listItemArray = $('cartTotal').getChildren('li');
                    var itemsTotal = listItemArray[0].get('text');
                    if((+itemsTotal.substring(itemsTotal.lastIndexOf('£')+1)) > 70)
                    {
                        deliveryTotal = 0;
                    }
                    else
                    {
                        deliveryTotal = 5.95;
                    }
                    
                    var option1 = new Element('option',{'value':deliveryTotal.toFixed(2),'text':'£5.95 (Free for orders over £70)'})
                    $('shippingOptions').adopt(option1);
                    
                    var listItemArray = $('cartTotal').getChildren('li');
                    var itemsTotal = listItemArray[0].get('text');
                    var orderTotal = (+itemsTotal.substring(itemsTotal.lastIndexOf('£')+1)) + deliveryTotal;
                    listItemArray[1].set('text','Postage & Packaging £'+deliveryTotal.toFixed(2));
                    listItemArray[2].set('text','Total Order £'+orderTotal.toFixed(2));
                }
                else if(postageEurope1.contains(country[i].value))
                {
                    var numItems = $('itemCount').get('text');
                    var deliveryTotal = ((+numItems.substring(7)) - 1) + 9.95;
                    
                    var option1 = new Element('option',{'value':deliveryTotal.toFixed(2),'text':'£9.95 plus £1 per additional item'})
                    $('shippingOptions').adopt(option1);
                    
                    var listItemArray = $('cartTotal').getChildren('li');
                    var itemsTotal = listItemArray[0].get('text');
                    var orderTotal = (+itemsTotal.substring(itemsTotal.lastIndexOf('£')+1)) + deliveryTotal;
                    listItemArray[1].set('text','Postage & Packaging £'+deliveryTotal.toFixed(2));
                    listItemArray[2].set('text','Total Order £'+orderTotal.toFixed(2));
                }
                else
                {
                    var numItems = $('itemCount').get('text');
                    var deliveryTotal = (((+numItems.substring(7)) - 1)*2) + 14.95;

                    var option1 = new Element('option',{'value':deliveryTotal.toFixed(2),'text':'£14.95 plus £2 per additional item'})
                    $('shippingOptions').adopt(option1);
                    
                    var listItemArray = $('cartTotal').getChildren('li');
                    var itemsTotal = listItemArray[0].get('text');
                    var orderTotal = (+itemsTotal.substring(itemsTotal.lastIndexOf('£')+1)) + deliveryTotal;
                    listItemArray[1].set('text','Postage & Packaging £'+deliveryTotal.toFixed(2));
                    listItemArray[2].set('text','Total Order £'+orderTotal.toFixed(2));
                }
            }
        }
    }
};

//When shipping DDL is altered
function shippingChange(selectOptions)
{
    if (Cookie.read("shoppingCart"))
    {
        var shippingOptions = $(selectOptions);

        for(var i = 0; i < shippingOptions.length; i++)
        {
            if(shippingOptions[i].selected)
            {
                var listItemArray = $('cartTotal').getChildren('li');
                var itemsTotal = listItemArray[0].get('text');
                var orderTotal = (+itemsTotal.substring(itemsTotal.lastIndexOf('£')+1)) + (+shippingOptions[i].value);
                listItemArray[1].set('text','Postage & Packaging £'+shippingOptions[i].value);
                listItemArray[2].set('text','Total Order £'+orderTotal.toFixed(2));
            }
        }
    }
}

function validateForm()
{

    var formIsValid = true;
    var clientName = $('contactForm').getElementById('nameTxt');
    var clientEmail = $('contactForm').getElementById('emailTxt');
    var clientEnquiry = $('contactForm').getElementById('enquiryTxt');

    if(clientEnquiry.get('value') == "")
    {
        clientEnquiry.focus();
        clientEnquiry.getNext('span').set('text','* Required');
        clientEnquiry.getNext('span').addClass('validationActive');
        formIsValid = false;
    }
    else
    {
        clientEnquiry.getNext('span').set('text',' ');
    }
    
        
    if(clientEmail.get('value') == "")
    {
        clientEmail.focus();
        clientEmail.getNext('span').set('text','* Required');
        clientEmail.getNext('span').addClass('validationActive');
        formIsValid = false;
    }
    else
    {
        if(!checkEmail(clientEmail.get('value')))
        {
            clientEmail.focus();
            clientEmail.getNext('span').set('text','* Invalid Email');
            clientEmail.getNext('span').addClass('validationActive');
            formIsValid = false;
        }
        else
        {
            clientEmail.getNext('span').set('text',' ');
        }
    }

    if(clientName.get('value') == "")
    {
        clientName.focus();
        clientName.getNext('span').set('text','* Required');
        clientName.getNext('span').addClass('validationActive');
        formIsValid = false;
    }
    else
    {
        clientName.getNext('span').set('text',' ');
    }
    return   formIsValid;
}

function checkEmail(email)
{
    var filter = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    if (!filter.test(email))
    {
        return false;
    }
    else
    {
        return true;
    }

}

function luhn (cc) { 
   var sum = 0; 
   var i; 
  
   for (i = cc.length - 2; i >= 0; i -= 2) { 
      sum += Array (0, 2, 4, 6, 8, 1, 3, 5, 7, 9) [parseInt (cc.charAt (i), 10)]; 
   } 
   for (i = cc.length - 1; i >= 0; i -= 2) { 
      sum += parseInt (cc.charAt (i), 10); 
   } 
   return (sum % 10) == 0; 
}

function rangeChange(rangeSelect)
{
    window.location = "/" + $(rangeSelect).get('value');
}
