//document.observe('dom:loaded', function(){
//    $('country_select').observe('change', function(){
//        Client.get('country/'+this.value);
//    })
//});
//document.observe('dom:loaded', function(){
//    $('category_id').observe('change', function(){
//        if($('keyword').value != "Search..." && $('keyword').value.length >= 2)
//        {
//            Client.get('product/search?keyword='+ $('keyword').value + '&category_id=' + $('category_id').value);
//        }
//    })
//});

var error_not_number = "Please enter a number";
var error_not_empty = "Please enter ";
var activeEle = null;
if (validator == false || validator == undefined)
{
    try{
        var validator = new Validator();
    }
    catch (e)
    {
        validator = null;
    }
}

function GetObjectMessage(lastMessageObject)
{
    var objmessage = null;
    if (activeEle != null)
    {
        objmessage = $(activeEle).down('.messagebox');
    }
    else
    {
        if (typeof lastMessageObject != 'undefined' && lastMessageObject)
        {
            objs = $$('.messagebox');
            objmessage = objs[objs.length - 1];
        }
        else
            objmessage = $$('.messagebox').first();
    }
    return objmessage;
}

function ShowMessage(text, lastMessageObject)
{
    HideErrorMessage();
    var objmessage = GetObjectMessage(lastMessageObject);
    $(objmessage).show();
    $(objmessage).update(text);
}

function ShowErrorMessage(text, lastMessageObject)
{
    var objmessage = GetObjectMessage(lastMessageObject);
    objmessage.removeClassName('confirm');
    objmessage.addClassName('warning');
    ShowMessage(text, lastMessageObject);
}

function ShowNoticeMessage(text, lastMessageObject)
{
    var objmessage = GetObjectMessage(lastMessageObject);
    if(objmessage.hasClassName('error')){
        objmessage.removeClassName('error');
    }
    if(objmessage.hasClassName('confirm')){
        objmessage.removeClassName('confirm');
    }
    objmessage.addClassName('notice');
    ShowMessage(text, lastMessageObject);
}

function ShowConfirmMessage(text, lastMessageObject)
{
    var objmessage = GetObjectMessage(lastMessageObject);
    if(objmessage.hasClassName('error')){
        objmessage.removeClassName('error');
    }
    if(objmessage.hasClassName('notice')){
        objmessage.removeClassName('notice');
    }
    objmessage.addClassName('confirm');
    ShowMessage(text, lastMessageObject);
}

function HideErrorMessage()
{
    var objmessage = $$('.messagebox');
    if(objmessage.length > 0)
    {
        for (var i = 0; i< objmessage.length; i++)
        {
            $(objmessage[i]).update('');
            $(objmessage[i]).hide();
        }
    }
}

function RemoveHighlight()
{
    var objmessage = $$('.error');
    if(objmessage.length > 0)
    {
        for (var i = 0; i< objmessage.length; i++)
        {
            RemoveHighlightError($(objmessage[i]));
        }
    }
}

function isEmpty (obj, error)
{
    if (obj.alt != '')
        error  = error + obj.alt.toLowerCase();
    else
        error  = "Field not empty " + obj.name.replace(/[\W]/g, '_').replace(/__/g, '_').replace(/_$/g, '').replace(/_/g, '-');
    if (obj.value =='')
    {
        obj.addClassName('error');
        ShowNoticeMessage(error);
        obj.focus();
        return false;
    } else if(obj.hasClassName('error')){
        obj.removeClassName('error');
    }
    return true;
}

function HighlightError(obj, error, lastMessageObject)
{
    RemoveHighlight();
    obj.addClassName('error');
    ShowErrorMessage(error, lastMessageObject);
    obj.focus();
}

function RemoveHighlightError(obj)
{
    if(obj.hasClassName('error')){
        obj.removeClassName('error');
    }
}

function checkNumber(obj, error, lastMessageObject)
{
    if (obj.alt != '')
        error  = "The value of field " + obj.alt + " must be a numeric!";
    else
        error  = "The value of field " + obj.name.replace(/[\W]/g, '_').replace(/__/g, '_').replace(/_$/g, '').replace(/_/g, '-') + " must be a numeric!";
   if (obj.value != '' && isNaN(obj.value))
    {
        obj.addClassName('error');
        ShowNoticeMessage(error, lastMessageObject);
        obj.focus();
        return false;
    } else if(obj.hasClassName('error')){
        obj.removeClassName('error');
    }
    return true;
}

function validateRequired (id)
{
    id = '#' + id + ' input.required';
    var arr_required = $$(id);
    for(var i = 0; i< arr_required.length; i++)
    {
        if (!isEmpty($(arr_required[i]), error_not_empty)){
            return false;
        }
        if($(arr_required[i]).hasClassName('validateIllegalChars') && !validateIllegalCharByElement($(arr_required[i]))){
            return false;
        }
        if($(arr_required[i]).hasClassName('validateEmail') && !validateEmailByElement($(arr_required[i]))){
            return false;
        }
        if($(arr_required[i]).hasClassName('validateNumber') && !checkNumber($(arr_required[i]), error_not_number)){
            return false;
        }
    }
    return true;
}

function validateEmailByElement(elem)
{
    var regular = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (elem.value != '' && !regular.test(elem.value)) {
        if (elem.alt != '')
            var error = elem.alt + " must be a valid e-mail address.";
        else
            var error  = "The value of field " + elem.name.replace(/[\W]/g, '_').replace(/__/g, '_').replace(/_$/g, '').replace(/_/g, '-') + " must be a valid e-mail address";

        elem.addClassName('error');
        ShowNoticeMessage(error);
        elem.focus();
        return false;
    } else if(elem.hasClassName('error')){
        elem.removeClassName('error');
    }
    return true;
}

function validateNumber (id)
{
    id = '#' + id + ' input.validateNumber';
    var arr_required_number = $$(id);
    for(var i = 0; i< arr_required_number.length; i++)
    {
        if (!checkNumber($(arr_required_number[i]), error_not_number)){
            return false;
        }
        if($(arr_required_number[i]).hasClassName('validateIllegalChars') && !validateIllegalCharByElement($(arr_required_number[i]))){
            return false;
        }
    }
    return true;
}

function validateEmail (id)
{
    id = '#' + id + ' input.validateEmail';
    var arr_required_email = $$(id);
    for(var i = 0; i< arr_required_email.length; i++)
    {
        if(!validateEmailByElement($(arr_required_email[i])))
            return false;
    }
    return true;
}

function validateIllegalChars(id)
{
    id = '#' + id + ' input.validateIllegalChars';
    var arr_required_illegal = $$(id);
    for(var i = 0; i< arr_required_illegal.length; i++)
    {
        if (!validateIllegalCharByElement($(arr_required_illegal[i]))) {
          return false;
        }
    }
    return true;
}

function validateIllegalCharByElement(elem)
{
    var illegalChars = /^([A-Za-z0-9_ ])*$/;
    //var illegalChars = /^([\w-\s\.]+)*$/;
    var reg = new RegExp(illegalChars);
    if (elem.value != '' && !elem.value.match(illegalChars)) {
        var error = "The value of field " + elem.alt + " can not include special characters";
        elem.addClassName('error');
        ShowNoticeMessage(error);
        elem.focus();
        return false;
    } else if(elem.hasClassName('error')){
        elem.removeClassName('error');
    }
    return true;
}

function validatePhone(id)
{
    id = '#' + id + ' input.validatePhone';
    var arr_required_tel = $$(id);
    for(var i = 0; i< arr_required_tel.length; i++)
    {
        if (!validatePhoneByElement($(arr_required_tel[i]))) {
          return false;
        }
    }
    return true;
}

function validatePhoneByElement(elem)
{
    var regChars = /[\(\)\.\-\ ]/g;
    var reg = new RegExp(regChars);
    if (elem.value != '' && isNaN(elem.value.replace(regChars, ''))) {
        var error = "Invalid phone number, please try again.";
        elem.addClassName('error');
        ShowNoticeMessage(error);
        elem.focus();
        return false;
    } else if(elem.hasClassName('error')){
        elem.removeClassName('error');
    }
    return true;
}

function ValidateForm(id)
{
    RemoveHighlight();
    HideErrorMessage();
    if (!validateRequired(id) || !validateNumber (id) || !validateEmail(id) || !validateIllegalChars(id) || !validatePhone(id))
    {
        return false;
    }
    return true;
}

function submitenter(myfield,e)
{
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;

	if (keycode == 13)
	{
		myfield.form.submit();
		return false;
	}
	else return true;
}

function addtocart()
{
	HideErrorMessage();
    var id = $('proid_select').value;
	var qty = $('productdetail_qty').value;
    if(!checkNumber($('productdetail_qty'), 'Please enter a numeric!', true)) return false;
	var url = url_app+'/cart/add/'+id+'/'+qty;
	Client.ajax(url, {
		messagebox: 'ajax_message',
        method: 'post',
        parameters: {'category_id': $F('productdetail_category_id')},
		onComplete: function(response){
            GetMinicart();
		}
	});
}

function GetMinicart()
{
    Client.ajax(url_app + '/ajax/GetMinicart', {
        onComplete: function(response){
            $('mini_cart').update(response);
        }
    });
}

function CheckFormSendtofriend()
{
	if(!ValidateForm('frmSendToFriends'))
	{
		return false;
	}
	return true;
}

function CheckRegisterCustomer(id)
{
    HideErrorMessage();
    RemoveHighlight();
    activeEle = 'frm_register_customer';
    if (!ValidateForm('frm_register_customer'))
	{
		return false;
	}
	if (!ValidateCustomerPassword()) return false;
    if(!CheckCustomerEmail(id, $F('register[customer][email]')))
        return false;
	$(id).submit();
}


function CheckRegisterAffiliate(id)
{
    HideErrorMessage();
    RemoveHighlight();
    activeEle = 'frm_register_affiliate';
    if (!ValidateForm('frm_register_affiliate'))
    {
        return false;
    }
    if (!ValidateAffiliatePassword()) return false;

    if($F('firstname').length < 2)
    {
        ShowNoticeMessage('Your First Name must contain a minimum of 2 characters');
        $('firstname').addClassName('error');
        return false;
    }

    if($F('lastname').length < 2)
    {
        ShowNoticeMessage('Your Last Name must contain a minimum of 2 characters');
        $('lastname').addClassName('error');
        return false;
    }

    if($F('city').length < 2)
    {
        ShowNoticeMessage('Your Last Name must contain a minimum of 2 characters');
        $('city').addClassName('error');
        return false;
    }

    if($F('zipcode').length < 4)
    {
        ShowNoticeMessage('Your Zip Code must contain a minimum of 4 characters');
        $('zipcode').addClassName('error');
        return false;
    }

    if($F('phone').length < 3)
    {
        ShowNoticeMessage('Your Telephone Number must contain a minimum of 3 characters');
        $('phone').addClassName('error');
        return false;
    }

    if($F('register_affiliate_state') == '')
    {
        ShowNoticeMessage('Please enter your state');
        $('address_state').addClassName('error');
        return false;
    }

    if(!CheckAffiliateEmail(id, $F('register[affiliate][email]')))
        return false;

    return true;
}


function CheckChangeinfoAffiliate(id)
{
    HideErrorMessage();
    RemoveHighlight();
    activeEle = 'frm_changeinfo_affiliate';
    if (!ValidateForm('frm_changeinfo_affiliate'))
    {
        return false;
    }

    $(id).submit();
}


function ValidateFormChangePassword(id)
{
    activeEle = 'frm_changepass_customer';
    if ($F('curent_password').length < 6)
    {
        HighlightError($('curent_password'), 'Your current password should contain more than 6 characters');
        return false;
    }

    if ($F('password').length < 6)
    {
        HighlightError($('password'), 'Your new password should contain more than 6 characters');
        return false;
    }
    if ($F('repassword').length < 6)
    {
        HighlightError($('repassword'), 'Your new password confirmation should contain more than 6 characters');
        return false;
    }
    if ($F('password') != $F('repassword'))
    {
        HighlightError($('password'), 'The new password confirmation must match your new password!');
        return false;
    }
//    Client.ajax(url_app + '/ajax/CheckCustomerPasswd', {
//          method: 'post',
//          messagebox:'ajax_customer_change_pass',
//          parameters: {'customer_id': $F('customer_id'),'password' : $F('curent_password')},
//          onSuccess: function(transport) {
//             var data = transport.responseText;
//             if(data.length == '')
//             {
//                 $('frm_changepass_customer').submit();
//             }
//          }
//    });
    return true;
}

function ValidateCustomerPassword()
{
    if ($F('password').length < 6)
    {
        HighlightError($('password'), 'Your password should contain at least 6 characters');
        return false;
    }
    if ($F('repassword').length < 6)
    {
        HighlightError($('repassword'), 'Your password confirmation should contain more than 6 characters');
        return false;
    }
    if ($F('password') != $F('repassword'))
    {
        HighlightError($('password'), 'The password confirmation must match your password');
        return false;
    }

    return true;
}

function ValidateAffiliatePassword()
{
    if ($F('password').length < 6)
    {
        HighlightError($('password'), 'Your password should contain at least 6 characters');
        return false;
    }
    if ($F('repassword').length < 6)
    {
        HighlightError($('repassword'), 'Your password confirmation should contain more than 6 characters');
        return false;
    }
    if ($F('password') != $F('repassword'))
    {
        HighlightError($('password'), 'The password confirmation must match your password');
        return false;
    }

    return true;
}

function changeShippingBlock(country_id, state_id, postcode_id)
{
    if(country_id =='checkout_address_billing_country_id' && $('same_address2').checked ) return false;
    FadeOut();
    new Ajax.Request(url_app + '/ajax/GetShippingBlock', {
          method: 'post',
          parameters: {'country_id': $F(country_id),'state' : $F(state_id),'postalcode' : $F(postcode_id)},
          onSuccess: function(transport) {
             var state = transport.responseText;
             $('shipping_rate_block').update(state);
             setTimeout('FadeIn()', 500);
          }
    });
}

function change_country_shipping(country_id, name, div_state_id, state_id ,postcode_id)
{
    if (country_id != '')
    {
        new Ajax.Request(url_app + '/country/LoadState', {
          method: 'post',
          parameters: {'country_id': $F(country_id), 'name':name},
          onSuccess: function(transport) {
              var text = transport.responseText;
              $(div_state_id).update(text);
              $(state_id).observe('change', function(){
                   changeShippingBlock(country_id, state_id, postcode_id);
              });
              changeShippingBlock(country_id, state_id, postcode_id);
          }
        });
    }
}

// FIXME: Violate namming convention
function change_country(country_id, name, div_state_id)
{
    if (country_id != '')
    {
        new Ajax.Request(url_http + '/country/LoadState', {
          method: 'post',
          parameters: {'country_id': $F(country_id), 'name':name},
          onSuccess: function(transport) {
              var text = transport.responseText;
              $(div_state_id).update(text);
          }
        });
    }
}

function checkCustomer (cus_email)
{
	new Ajax.Request(url_app + '/customer/AjaxCheckCustomer', {
	  method: 'post',
      messagebox:'ajax_login_checkout_error',
	  parameters: {'email': cus_email, 'password': $F('LoginPassword')},
	  onComplete: function(transport) {
	  	var text = transport.responseText;
	  	if (text == '0')
	  	{
            HighlightError($("LoginEmail"), 'Invalid email or password');
			$("LoginEmail").setStyle({color:"#000000", border:'1px solid red'});
			$("LoginEmail").value = cus_email;
            $("LoginEmail").focus();
			$("LoginPassword").value ='';
			$("LoginEmail").enable();
			$("LoginPassword").enable();
	  	}
	  	else
	  	{
            window.location = url_https+'/checkout/';
	  	}
	  }
	});
}
function LoginCheck(id)
{
	activeEle = 'frm_login_checkout';
    var cus_email = $F("LoginEmail");
	if (!ValidateForm(id))
	{
		return false;
	}
	$("LoginEmail").disable();
	$("LoginPassword").disable();
	$("LoginEmail").setStyle("color", "#ff0000");
	$("LoginEmail").value = "Loading ... ";
	if (!checkCustomer(cus_email))
	{
		return false;
	}
	return false;
}

function CustomerLoginByPress(myfield,e)
{
    HideErrorMessage();
    var keycode;
    if (window.event) keycode = window.event.keyCode;
    else if (e) keycode = e.which;

    if (keycode == 13)
    {
        LoginCheck('frm_login_checkout');
        return false;
    }
}
var is_loaded_address = false;
function load_address(id, type)
{
    is_loaded_address = false;
    var aid = '';
    if(id != '')
    {
        aid = $F(id);
        if ($F(id) == '') return false;
    }
	new Ajax.Request(url_app + '/ajax/GetAddress', {
	  method: 'post',
	  parameters: {'address_id': aid, 'address_type': type},
	  onSuccess: function(transport) {
	  	var text = transport.responseText;
	  	if (type == 2)
	  	{
	  		$('checkout_billing_address').update(text);
	  	}
	  	else
	  	{
	  		$('checkout_shipping_address').update(text);
	  	}
	  }
	});
	is_loaded_address = true;
	return false;
}

function checkCheckoutForm()
{
    $('btnproceed').disable().setStyle({backgroundColor: '#999', cursor:'default'}).value = "Processing...";
    activeEle = 'checkout_billing_address';
    if (!ValidateForm('checkout_billing_address'))
    {
        enableButton('btnproceed', 'Proceed');
        return false;
    }
    activeEle = 'checkout_shipping_address';
    if ($('same_address2').checked && !ValidateForm('checkout_shipping_address'))
	{
		enableButton('btnproceed', 'Proceed');
        return false;
	}
	if (!CheckCreditCard())
	{
		enableButton('btnproceed', 'Proceed');
        return false;
	}
    $('checkout_orders_comment').value = $('checkout_orders_comment_tmp').value.escapeHTML();
    if (!$F('is_loggedin'))
    {
        activeEle = 'checkout_register';
        if (!ValidateCustomerPassword())
        {
            enableButton('btnproceed', 'Proceed');
            return false;
        }
        Client.ajax(url_app + '/ajax/CheckCustomer', {
            method: 'post',
            messagebox: 'ajax_checkout_register',
            parameters: {'email': $F('checkout[email]')},
            onSuccess: function(response) {
                if (response.responseText.length == '')
                {
                    $('checkout_customer_password_temp').value = $('password').value;
                    $('frm_checkout_card').submit();
                }
            }
        });
        enableButton('btnproceed', 'Proceed');
        return false;
    }
    $('frm_checkout_card').submit();
}

function enableButton(id, val)
{
    $(id).enable();
    $('btnproceed').setStyle({backgroundColor: '#000'});
    if(val != '')
        $(id).value = val;
}

function submitCheckoutForm()
{
	$('checkout_payment').submit();
}

function changeShipping()
{
    activeEle = 'shipping_rate_block';
    new Ajax.Request(url_app + '/ajax/SetShippingMehod', {
        method: 'post',
        parameters: {'shipping_method_id': $F('shipping_id')},
        onSuccess: function(transport) {
            var cart_total = transport.responseText.evalJSON();
            if (cart_total.error)
                ShowNoticeMessage(cart_total.message);
            else
            {
                if($('shiping_discount') && cart_total.ship_discount)
                    $('shiping_discount').update(cart_total.ship_discount);
                if($('tax') && cart_total.tax)
                    $('tax').update(cart_total.tax);
                if($('gift') && cart_total.gift)
                    $('gift').update(cart_total.gift);
                $('shiping_cost').update(cart_total.shipping);
                $('grand_total').update(cart_total.grand_total);
            }
        }
    });
}

function change_address()
{
    if( $('shipping_id') ) {
        FadeOut();
        new Ajax.Request(url_app + '/ajax/GetBlockAddress', {
            method: 'post',
            parameters: {'shipping_method_id': $F('shipping_id')},
            onSuccess: function(transport) {
                text = transport.responseText;
                $('shipping_rate_block').update(transport.responseText);
                setTimeout('FadeIn()', 500);
            }
        });
    } else if( $('shipping_country')) {
        FadeOut();
        new Ajax.Request(url_app + '/ajax/GetShippingBlock', {
            method: 'post',
            parameters: {'country_id': $F('shipping_country'),'state' : $F('shipping_state'),'postalcode' : $F('delivery_postalcode')},
            onSuccess: function(transport) {
                var state = transport.responseText;
                $('shipping_rate_block').update(state);
                setTimeout('FadeIn()', 500);
            }
        });
    }
}

function GetBlockAddress() {

    new Ajax.Request(url_app + '/ajax/GetBlockAddress', {
        method: 'post',
        parameters: {'country_id': $F('shipping_country'), 'state' : $F('shipping_state'), 'postalcode' : $F('delivery_postalcode')},
        onSuccess: function(transport) {
            var state = transport.responseText;
            $('ablock_state').update(state);
        }
    });
}

//check credit card
function CheckCreditCard() {
	activeEle = 'checkout_payment_block';
    var gate = $F('checkout[payment_method]');
	if (gate == "2") {
		var regx = /^([a-zA-Z 0-9_.-])+$/;
		var creditOwner = $F('checkout_cc_owner');
		var creditNumber = $F('checkout_cc_number');
		var ownerStatus = regx.test(creditOwner);
		var numberStatus = regx.test(creditNumber);
		if (ownerStatus == false) {
            HighlightError($("checkout_cc_owner"), 'Please enter a valid credit card owner');
			return false;
		} else if (numberStatus == false) {
            HighlightError($("checkout_cc_number"), 'Please enter a valid credit card number!');
			return false;
		}
	}
	if (ValidCreditCard() == false) {
        //HighlightError($("checkout_cc_number"), 'Invalid credit card, please try again!');
		return false;
	}
	return true;
}

function ValidCreditCard() {
    var gate = false;
    if ($('checkout[payment_method]2'))
        gate = gate || $('checkout[payment_method]2').checked;
    if ($('checkout[payment_method]7'))
        gate = gate || $('checkout[payment_method]7').checked;

	if (gate) {
		var type = $F("checkout_cc_type");
		type = type.toLowerCase().strip();
		var number = $F("checkout_cc_number");
		number = number.toLowerCase().strip();

        if ($F("checkout_cc_owner_firstname") == '')
        {
            HighlightError($("checkout_cc_owner_firstname"), 'Invalid First name, please try again!', true);
            return false;
        }

        if ($F("checkout_cc_owner_lastname") == '')
        {
            HighlightError($("checkout_cc_owner_lastname"), 'Invalid Last name, please try again!', true);
            return false;
        }

		var validCreditCard = CheckCreditCardnumber(number, type);
        if (!validCreditCard)
        {
            HighlightError($("checkout_cc_number"), 'Invalid credit card, please try again!', true);
            return false;
        }
        if (!CheckExpireDateCard())
        {
            RemoveHighlight();
            ShowNoticeMessage('Invalid expiration date!', true);
            return false;
        }
		var cvv = $F("checkout_cc_cvv");
		if (cvv.length == 0) {
            HighlightError($("checkout_cc_cvv"), 'Please fill in cvv!', true);
			return false;
		} else if (isNaN(cvv) || cvv.length > 5) {
            HighlightError($("checkout_cc_cvv"), 'Cvv number not correct, please try again!', true);
			return false;
		}
	}
	return true;
}

function CheckCreditCardnumber(cardNumber, cardType) {
  	var isValid = false;
  	var ccCheckRegExp = /[^\d ]/;
  	isValid = !ccCheckRegExp.test(cardNumber);
  	if (isValid) {
   		var cardNumbersOnly = cardNumber.replace(/ /g,"");
    	var cardNumberLength = cardNumbersOnly.length;
    	var lengthIsValid = false;
    	var prefixIsValid = false;
    	var prefixRegExp;

    	switch(cardType) {
      		case "6": //mastercard
        		lengthIsValid = (cardNumberLength == 16);
        		prefixRegExp = /^5[1-5]/;
        		break;
        	case "8": //Discover
        		lengthIsValid = (cardNumberLength == 16);
        		prefixRegExp = /^6[0-5]/;
        		break;
      		case "5": //visa
        		lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        		prefixRegExp = /^4/;
        		break;
      		case "7": //American Express
        		lengthIsValid = (cardNumberLength == 15);
        		prefixRegExp = /^3(4|7)/;
        		break;
      		default:
        		prefixRegExp = /^$/;
                ShowNoticeMessage('Card type not found');
    	}
    	prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    	isValid = prefixIsValid && lengthIsValid;
  	}

  	if (isValid) {
    	var numberProduct;
    	var numberProductDigitIndex;
    	var checkSumTotal = 0;

    	for (digitCounter = cardNumberLength - 1;
			digitCounter >= 0;
			digitCounter --) {
      		checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      		digitCounter --;
      		numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      		for (var productDigitCounter = 0;
				 productDigitCounter < numberProduct.length;
        		productDigitCounter ++) {
        		checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter));
      		}
    	}
    	isValid = (checkSumTotal % 10 == 0);
  	}

  	return isValid;
}

function CheckExpireDateCard()
{
    var date_card_year = parseInt($F('checkout_creditcard_expdate_year'), 10);
    var date_card_month = parseInt($F('checkout_creditcard_expdate_month'), 10);
    var current_date = new Date();
    var current_year = current_date.getFullYear();
    var current_month = current_date.getMonth() + 1;
    if (date_card_year > current_year)
        return true;
    else if (date_card_year == current_year)
    {
        if(date_card_month >= current_month)
            return true;
    }
    return false;
}

var is_shipping_checked = true;
function ChangeShippingAddress()
{
    if ($('same_address1').checked && is_shipping_checked == true)
    {
        is_shipping_checked = false;
        $('checkout_shipping_address').hide();
        changeShippingBlock('checkout_address_billing_country_id', 'checkout_address_billing_state' ,'BillingPostcode');
    }
    if ($('same_address2').checked &&is_shipping_checked == false)
    {
        is_shipping_checked = true;
        $('checkout_shipping_address').show();
        changeShippingBlock('checkout_address_shipping_country_id', 'checkout_address_shipping_state' ,'ShippingPostcode');
    }
}

function ChangeDefaultAddress(obj)
{
	$('selected_address_id').value= obj.value;
}

function SetDefaultAddress()
{
	HideErrorMessage();
    if ($F('selected_address_id') == '')
	{
        ShowNoticeMessage('Please select an address');
		return false;
	}
	Client.ajax(url_app + '/ajax/SetDefaultAddress', {
	  method: 'post',
      messagebox: 'ajax_message',
	  parameters: {'address_id': $F('selected_address_id'), 'address_type': $F('address_type')},
	  onComplete: function(transport)
      {
        Client.ajax(url_app + '/ajax/GetDefaultAddress', {
          method: 'post',
          parameters: {'address_id': $F('selected_address_id')},
          onComplete: function(transport){
              $('primary_address').update(transport);
          }
        });
	  	var text = transport.responseText;

	  }
	});
}

function DeleteAddress()
{
	HideErrorMessage();
    if ($F('selected_address_id') == '')
	{
        ShowNoticeMessage('Please select an address');
		return false;
	}
	if (confirm('Are you sure?'))
	{
		Client.ajax(url_app + '/ajax/DeleteAddressbook', {
		  method: 'post',
		  parameters: {'address_id': $F('selected_address_id'), 'address_type': $F('address_type')},
		  onComplete: function(transport) {
		  	if (transport == '1')
		  	{
				$('address-'+ $F('selected_address_id')).remove();
				$('selected_address_id').value= '';
                ShowNoticeMessage('item(s) have been deleted');
		  	}
            else
                ShowNoticeMessage(transport);
		  }
		});
	}
}

function CheckRegisterCheckout()
{
    if (!ValidateCustomerPassword()) return false;
    $('checkout_password').value= $F('password');
    checkCheckoutForm();
}

function InsertEmail(obj)
{
    $('login_mail_address').update(obj.value);
}

function echeck(str) {

        var at="@"
        var dot="."
        var lat=str.indexOf(at)
        var lstr=str.length
        var ldot=str.indexOf(dot)
        if (str.indexOf(at)==-1){
           alert("Invalid E-mail ID")
           return false
        }

        if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
            alert("Invalid e-mail address, please try again")
           return false
        }

        if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
            alert("Invalid e-mail address, please try again")
            return false
        }

         if (str.indexOf(at,(lat+1))!=-1){
            alert("Invalid e-mail address, please try again")
            return false
         }

         if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
            alert("Invalid e-mail address, please try again")
            return false
         }

         if (str.indexOf(dot,(lat+2))==-1){
            alert("Invalid e-mail address, please try again")
            return false
         }

         if (str.indexOf(" ")!=-1){
            alert("Invalid e-mail address, please try again")
            return false
         }

          return true
    }


function CheckCustomerEmail(id, email)
{
    Client.ajax('http://www.joshsfrogs.com' + '/ajax/CheckCustomer', {
        method: 'post',
        messagebox: 'ajax_message',
        parameters: {'email': email},
        onComplete: function(response) {
            if (response.length == '')
            {
                $(id).submit();
            }
        }
    });
    return false;
}

function CheckAffiliateEmail(id, email)
{
    Client.ajax('http://www.joshsfrogs.com' + '/ajax/CheckAffiliate', {
        method: 'post',
        asynchronous: true,
        messagebox: 'ajax_message',
        parameters: {'email': email},
        onComplete: function(response) {
            if (response.length == '')
            {
                $(id).submit();
            }
        }
    });
    return false;
}

function removeAddress(id, type)
{
    var address_selected = $F(id)
    if(address_selected != '' && confirm('Are you sure?'))
    {
        Client.ajax(url_app + '/ajax/DeleteAddressbook', {
          method: 'post',
          parameters: {'address_id': address_selected},
          onComplete: function(transport) {
              if (transport == '1')
                {
                    ShowConfirmMessage('item(s) have been deleted');
                    load_address('', type);
                }
                else
                {
                    ShowNoticeMessage(transport);
                }
          }
        });
    }
}

function RefreshShippingRate()
{
    var url = url_app + '/ajax/RefreshShippingRate';
    Client.ajax(url, {
        onComplete: function(response){
            $('shipping_rate_block').update(response);
        }
    });
}

function ApplyDiscount()
{
    Client.ajax(url_app + '/checkout/applydiscount', {
      method: 'post',
      messagebox:'ajax_message',
      parameters: {'couponcode': $F('couponcode')},
      onComplete: function(transport) {
        var text = transport.responseText;
        //window.location = window.location.href;RefreshShippingRate
            var url = url_app + '/ajax/RefreshShippingRate';
            Client.ajax(url, {
                onComplete: function(response){
                    $('shipping_rate_block').update(response);
                }
            });
      }
    });
}

function GetElementPosition(elemID){
    var offsetTrail = document.getElementById(elemID);
    var offsetLeft = 0;
    var offsetTop = 0;
    var offsetHeight = $(elemID).getHeight();
    var offsetWidth = $(elemID).getWidth();
    while (offsetTrail){
    offsetLeft += offsetTrail.offsetLeft;
    offsetTop += offsetTrail.offsetTop;
    offsetTrail = offsetTrail.offsetParent;
    }
    if (navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != 'undefined'){
    offsetLeft += document.body.leftMargin;
    offsetTop += document.body.topMargin;
    offsetHeight += document.body.clientHeight;
    offsetWidth += document.body.clientWidth;
    }
    return {left:offsetLeft,top:offsetTop,height:offsetHeight,width:offsetWidth};
}

function submitCheckoutOrder(){

  $('frm_checkout_order').submit();
}

function changePayment(obj){
    if(obj.value == 2 || obj.value == 7)
        $('payment_creditcard').show();
    else $('payment_creditcard').hide();
}


function UseGift()
{
    var usegift = $('usegift').value;
    new Ajax.Request(url_app + '/checkout/usegift/' + usegift, {
      method: 'get',
      onSuccess: function(transport) {
           var url_shipping = url_app + '/ajax/RefreshShippingRate';
           var url_discount = url_app + '/ajax/RefreshDiscountCoupon';
           var url_paymentmethod = url_app + '/checkout/RefreshPaymentmethod';
           Client.ajax(url_shipping, {onComplete: function(response){$('shipping_rate_block').update(response);}});
           Client.ajax(url_discount, {onComplete: function(response){$('apply_discount_block').update(response);}});
           if($('checkout_payment_block'))
                Client.ajax(url_paymentmethod, {onComplete: function(response){$('checkout_payment_block').update(response);}});
      }
    });
}

function estimatorpopupWindow(URL) {
    window.open(URL, 'productsshippingestimator','toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=800,height=600')
}

function checkSubmitPostcode()
{
    var shippostalcode = $F("shippostcode");
    if (shippostalcode == '')
    {
        alert('You must provide a postal code to ship to.');
        return false;
    }
    else if (!shippostalcode.match(/(^[0-9a-zA-Z]+)$/))
    {
        alert('Post code must be characters in the alphabet or numbers');
        return false;
    }
    return true;
}

function set_paypal_process(order_id)
{
    if(order_id)
    {
        new Ajax.Request(url_app + '/ajax/SetPaypalProcess/' + order_id, {
          method: 'post',
          onSuccess: function(transport) {
          }
        });
    }
}