// Current Version - v2.4 // 11-07 
// Latest Changes: added 'expose' effect to first step
// v2.39 // 11-01 // Changes: Broke Billing name field into first and last
// v2.38 // 8-16 // Changes: Broke name field into first and last
// v2.37 // 8-15 // Changes: Switched shipping in step 1 to radio buttons
// v2.36 // 7-28-2010 //Changes: Changed size of shipping info modal after step 1
// v2.35 // 2-19 // Changes: Added shipping info modal box after step 1

 
var version;
var applyToAll = false;
var appliedToAll;
var shippingdefault = false;
 
var shippingSelected = false;	
 
// JavaScript Document
var specialMessageModalValid=true;
var addressModalValid;
//var step2isInvalid = false;
 
//$('#ShipToCountry').val() == 'US';


$(function() {
	var zIndexNumber = 1000;
	$('div').each(function() {
		$(this).css('zIndex', zIndexNumber);
		zIndexNumber -= 10;
	});
});


function toggleMessage() {
 
if ($('#specialMessage').css("display") == 'none') {
$('#specialMessage').show(); } else {
 
$('#specialMessage').hide();
$('#specialMessage :input').val("");
};
};
 
// text area maxlength helper
function imposeMaxLength(Object, MaxLen)
{
  return (Object.value.length <= MaxLen);
}
 
$(document).ready(function(){
 
// detect app version
fullURL = parent.document.URL;
version = fullURL.substring(fullURL.indexOf('?')+9, fullURL.length);
 
/*
$().keyup(function(e) {
	//alert(e.keyCode);
	if(e.keyCode == 9) {
		$(":input").blur();
	$(".jquery-selectbox-moreButton:first").click();
 
	}
});
*/
 
// Tab Navigation for Steps
$(function () {
			var tabContainers = $('div.tabs > div');	
			$('div.tabs ul.tabNavigation a').click(function () {
				$('#finalBilling').empty();
				RCCart.getFinalBilling();
				tabContainers.fadeOut("fast");
				$('div.tabs ul.tabNavigation a').removeClass('selected');
				$(this).addClass('selected');
				
				// force redraw for ie7
				tabContainers.filter(this.hash).fadeIn("fast");
				
				return false;
			}).filter(':first').click();
			
		var bookmark = location.href.substr(location.href.lastIndexOf('#'));
		$('.tabNavigation a[href="' + bookmark + '"]').click();
		
		$('#first').show();	
		});
 
 
 
// append extra fields for different versions
if (version == "corporate") {
$('#addCardForm').prepend("<div id='corporate'><label for='corporateDiscount' class='corporateDiscount'>Discount %</label><br class='clear' /><input name='corporateDiscount' id='corporateDiscount' type='text' size='2' value='' maxlength='4' /><br class='clear' /><label for='corporateComment' class='corporateComment'>Comment</label><br class='clear' /><textarea name='corporateComment' id='corporateComment' type='text' size='2' value='' cols='10' rows='3'></textarea><br class='clear' /></div>");
};
if (version == "callcenter") {
$('#addCardForm').prepend("<div id='callcenter'><label for='callcenterOperator' class='callcenterOperator'>Operator</label><br class='clear' /><input name='callcenterOperator' id='callcenterOperator' type='text' size='2' value='' maxlength='4' /></div><br class='clear' />");
};
 
// hide the old error box
$("#third .error").hide();
$("select").not("#locations").not("#shippingAddressState").not("#addressModalShipToState").not("#BillToState").not("#shippingAddressProvince").not("#addressModalShipToProvince").not("#BillToProvince").selectbox(); // replace selectboxes
 
$("li.step1").css("background-image", "url(img/navigation_icon1.selected.jpg)");
 
 
 
// manually fix the error messages on the pretty selectboxes
$(".jquery-selectbox-moreButton").click(function() {
$(".jquery-selectbox-moreButton").parent().children("label.error").remove();
});
		
// Show and Hide the optional sections
$('#fakecardMessage').click(function () { 
alert("error");
      $('#specialMessage').hide(); 
});
 
$('#specialMessage').hide();
$('#shippingAddress').hide();
$(".province").hide();
$('.billingProvince').hide();
$('.addressModalShipToProvince').hide();
 
// clear the 'UseBilling'-ed Form
function clearBilling() {
 
		$('#shippingAddress').find(':input').each(function() {
        switch(this.type) {
            case 'text':
            case 'textarea':
                $(this).val("");
                break;
			case 'select-one':
				if ($('#cardShipping').val() != 'useNewAddress'){
				$('#cardShipping').val("useBilling");
				};
				$("#shippingAddressState").val("UseBilling");
				$("#ShipToCountry").val("UseBilling");
				break;
              }
		      
    });
 
};
 
// Hack for IE problems with radio buttons
$(function () {
    if ($.browser.msie) {
        $('input:radio').click(function () {
            this.blur();
            this.focus();
        });
    }
});
 
 // show or hide the shipping
$("input[name='cardShipping']").change(function () {
//console.log("changed!");
if ($("input[name='cardShipping']:checked").val() === 'useNewAddress'){
$('#shippingAddress').show();
} else {
$('#shippingAddress').hide();
clearBilling();};
});
 
// toggle states/provice
$('#ShipToCountry').change(function () { 
if ($('#ShipToCountry').val() == 'US'){
 
$('.state').show();
$('.province').hide();
} else {
$('.state').hide();
$('.province').show();
};
});
 
$('#BillToCountry').change(function () { 
if ($('#BillToCountry').val() == 'US'){
$('.billingState').show();
$('.billingProvince').hide();
shippingdefault = true;
 
} else {
$('.billingState').hide();
$('.billingProvince').show();
shippingdefault = false;
};
 
//RCCart.updateTotals();
//RCCart.updateView();
RCCart.update();
});
 
$('#addressModalShipToCountry').change(function () { 
if ($('#addressModalShipToCountry').val() == 'US'){
$('.addressModalShipToState').show();
$('.addressModalShipToProvince').hide();
} else {
$('.addressModalShipToState').hide();
$('.addressModalShipToProvince').show();
};
});
 
$(".RCCart_items_Step2 .itemRemove :first").parent().parent().append("<div class='applyToAll'><input type='checkbox' id='applyToAllCheckbox' name='applyToAllCheckbox' onclick='applyToAllShipping();'><label for='applyToAllCheckbox'>Use this shipping method for all</label></div>");
 
 
});
 
// highlight the breadbcrumbs (clean this up with iterative function- inelegant as is)
breadcrumbs = function() {
if ($("#first").css("display") == "inline-block"){
$("li.step1").css("background-image", "url(img/navigation_icon1.selected.jpg)");
$("li.step2").css("background-image", "url(img/navigation_icon2.unselected.jpg)");
$("li.step3").css("background-image", "url(img/navigation_icon3.unselected.jpg)");
};
if ($("#second").css("display") == "inline-block"){
$("li.step1").css("background-image", "url(img/navigation_icon1.unselected.jpg)");
$("li.step2").css("background-image", "url(img/navigation_icon2.selected.jpg)");
$("li.step3").css("background-image", "url(img/navigation_icon3.unselected.jpg)");
};
if ($("#third").css("display") == "inline-block"){
 
$("li.step1").css("background-image", "url(img/navigation_icon1.unselected.jpg)");
$("li.step2").css("background-image", "url(img/navigation_icon2.unselected.jpg)");
$("li.step3").css("background-image", "url(img/navigation_icon3.selected.jpg)");
} };
breadcrumbs();
 
// Go to the second step



function step2() {
if (RCCart.quantity == 0){
alert("Your Cart is Empty!");} else {

$.mask.close();
//var url = "#TB_inline?height=370&width=680&inlineId=shippingMessageModal";
//var tb = tb_show("Please Note:", url);
setTimeout("tb_show('Please Note:', '#TB_inline?height=370&width=680&inlineId=shippingMessageModal');", 500);

};
};

function step2confirmed() {
tb_remove();
$('#first').hide();
$('#second').show();
breadcrumbs();
RCCart.update();
RCCart.updateTotals();
$('.RCCart_items_Step2 .itemRemove').css({'margin-left':'428px', 'background-position' : '0px 0px'});
};

// apply the shipping to all items
function applyToAllShipping() {
 
if ($('input[name="applyToAllCheckbox"]').attr("checked") == true){
//alert("start");
var first = $(".RCCart_items_Step2 .itemRemove :first").parent().parent().attr("class").substring(14, 16);
applyToAll = true;
appliedToAll = first;
 
for( var current in RCCart.items){
//alert("hit");
	var thisItemID = parseFloat(current.substring(1,2))+1;
	RCCart.items[current].shippingmethod = RCCart.items[first].shippingmethod;
	RCCart.items[current].shippingcost = RCCart.items[first].shippingcost;
	$(".RCCart_items_Step2 .ShippingMethod").val(RCCart.items[first].shippingmethod);
	$(".RCCart_items_Step2 .ShippingMethod").attr("disabled", true); 
	//RCCart.items[first].shippingcost = RCCart.items[first].shippingcost;
	//alert(RCCart.items[current].shippingcost);
	};
	} else {
	applyToAll = false;
	$(".RCCart_items_Step2 .ShippingMethod").attr("disabled", false); 
	appliedToAll = null;
	};
	RCCart.updateShipping();
	RCCart.updateTotals();
	RCCart.updateView();
//alert("end");
	};
 
function step2back() {
$('#second').hide();
$('#first').show();
breadcrumbs();
 
};
 
//
// Validations
//
function TryCardType(number) {
 
//         number = GetCardType(number);
		 if (number != "") {
 
		 $("#CardType").val(GetCardType(number));
		  $("#CardType").parents('.jquery-selectbox').unselectbox();
		  $("#CardType").selectbox();
		 //alert(GetCardType(number));
		 }
        };
 
 function GetCardType(number)
        {           
            var re = new RegExp("^4");
            if (number.match(re) != null)
                return "VisaCard";
            re = new RegExp("^(34|37)");
            if (number.match(re) != null)
                return "AmExCard";
            re = new RegExp("^5[1-5]");
            if (number.match(re) != null)
                return "MasterCard";
            re = new RegExp("^6011");
            if (number.match(re) != null)
                return "DiscoverCard";
 
            return "";
        };
 
 
// Phone Method
jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, ""); 
	return this.optional(element) || phone_number.length > 9 &&
		phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");
// PostCode Method
jQuery.validator.addMethod("postCode", function(input, element) {
//input = input.replace(/\s+/g, "");
return input.match(/^\d{5}-\d{4}|\d{5}|[A-Z]\d[A-Z] \d[A-Z]\d$/);
}, "Please specify a valid postal code");
// Check for defaults
jQuery.validator.addMethod("useBilling", function(input, element) {
if (input == "UseBilling" || input == "useBilling" || input == "" || input == "undefined" || input == null || input == "null" || input == "Select One" ) {
return false; } else {
return true;}
}, "This field is required");
 
 
// Check quantity of cards
function validateAddCardForm(){
$('#addCardForm').validate({
	errorLabelContainer: $("#addCardForm div.error"),
	rules: {
		cardQuantity: { 
			required:true
			},
		corporateDiscount: {
			number:true
		}
	},
	messages: {
		corporateDiscount: {
			number:"Please Enter a Valid Percentage"
		}
	 }
	});
return $('#addCardForm').valid();
};

// Check to be sure a shipping address option has been set
function validateAddCardShipping(){
$('#cardShipping').validate({
errorLabelContainer: $("#cardShippingError"),
rules: {
			cardShipping: "required"
},
messages: {
		cardShipping: {
			required:"Please Select a Shipping Option"
		}
	 }
});
//console.log("Shipping Option has been Selected");
return $('#cardShipping').valid();
}
 
// Check address on shipping address
function validateAddNewAddress(){
	$('#addNewShipping').validate( {
		focusCleanup: true,
		rules: {
			//shippingAddressCompany: "required",
			shippingAddressNameFirst: "required",
			shippingAddressNameLast: "required",
			shippingAddressLine1: "required",
			shippingAddressCity: "required",
			shippingAddressProvince: {
				required:  {
					depends: function(element) {
					return $('#ShipToCountry').val() == "CA";
					}
				},
				useBilling:  {
					depends: function(element) {
					return $('#ShipToCountry').val() == "CA";
					}
				}
			},
			shippingAddressState: {
				required:  {
					depends: function(element) {
					return $('#ShipToCountry').val() == "US";
					}
				},
				useBilling:  {
					depends: function(element) {
					return $('#ShipToCountry').val() == "US"; 
					}
				}
			},
			shippingAddressZip: {
				required: true,
				postCode: true
			},
			shippingAddressPhone: {
				required: true,
				phoneUS: true
			},
			ShipToCountry: {
				required:  true,
				useBilling:  true
			}
			
		}
	});
 
return $('#addNewShipping').valid();
};
 
// check the change this modal box submission
function validateAddressModalForm(){
$('#addressModalForm').validate( {
rules: {
	addressModalShipToNameFirst: "required",
	addressModalShipToNameLast: "required",
	addressModalShipToStreet: "required",
	addressModalShipToCity: "required",
			addressModalShipToProvince: {
				required:  {
					depends: function(element) {
					return $('#addressModalShipToCountry').val() == "CA";
					}
				},
				useBilling:  {
					depends: function(element) {
					return $('#addressModalShipToCountry').val() == "CA";
					}
				}
			},
			addressModalShipToState: {
				required:  {
					depends: function(element) {
					return $('#addressModalShipToCountry').val() == "US";
					}
				},
				useBilling:  {
					depends: function(element) {
					return $('#addressModalShipToCountry').val() == "US"; 
					}
				}
			},	addressModalShipToZip: {
      required: true,
      postCode: true
			},
	addressModalShipToPhone: {
      required: true,
      phoneUS: true
    }
  }
}
);
 
 
return $('#addressModalForm').valid();
};
 
 
 
// Check validations before confimation page
function step2Validation() {
 
$('#billingForm').validate( {
 focusCleanup: true,
  rules: {
	NameOnCard: "required",
	CardNumber: {
      required: true,
      creditcard: true
    },
	CardType: "required",
	CVVCode:  {
      required: true,
      number: true
    },
	ExpirationMonth: "required",
	ExpirationYear:  {
      required: true,
      number: true
    },
	BillToNameFirst: "required",
	BillToNameLast: "required",
	BillToEmail: {
      required: true,
      email: true
    },
	BillToPhone: {
      required: true,
      phoneUS: true
    },
	BillToStreet: "required",
	BillToCity: "required",
	BillToZip: {
      required: true,
      postCode: true
    },
	BillToState: {
				required:  {
					depends: function(element) {
					return $('#BillToCountry').val() == "US";
					}
				},
				useBilling:  {
					depends: function(element) {
					return $('#BillToCountry').val() == "US";
					}
				}
			},
	BillToProvince: {
				required:  {
					depends: function(element) {
					return $('#BillToCountry').val() == "CA";
					}
				},
				useBilling:  {
					depends: function(element) {
					return $('#BillToCountry').val() == "CA";
					}
				}
		}
  }
} );
 
RCCart.update();
 
$('.ShippingMethod').each(function () {
	var targetID = $(this).attr("name");
	//alert(targetID);
	if (RCCart.items[targetID].shippingmethod == "Please Select"){
	shippingSelected = false;
	alert("Please Select your Shipping Method.");
	$('#third').hide();
	$('#second').show();
	return false;
}
	else { 
	//alert("all set");
	shippingSelected = true}});
 
if ($('#billingForm').valid()==true && shippingSelected == true){
	$('#second').hide();
	$('#third').show();
	breadcrumbs();
	//RCCart.update();
	RCCart.updateTotals();
	RCCart.getFinalBilling();
	} else { 
	//$(".jquery-selectbox-moreButton").parent().children("label.error").appendTo($(".jquery-selectbox-moreButton").parent().parent());
	//alert("There was a problem with your order");
	$('#third').hide();
	$('#second').show();
}
//return $('#billingForm').valid();
 
 
};
 
 
 
 
 
//
// add the card	   
function addValidCard(){
// check valid quantity
if (validateAddCardForm() == true && validateAddCardShipping() == true) {
 
// if new address, check if valid
	if ($("input[name='cardShipping']:checked").val() == 'useNewAddress' && validateAddNewAddress()==false){
	//$("#addNewShipping .jquery-selectbox-moreButton").parent().children("label.error").appendTo($(".jquery-selectbox-moreButton").parent().parent());
	
		alert("Error with Shipping Address!");
 
		} else {
		
			// Replace blank billing forms with 'useBilling'
			var shippingArray =  $('#shippingAddress :input')
			for( i=0; i<shippingArray.length; i++) {
				if (shippingArray[i].value == '' || shippingArray[i].value == 'blank') {
				shippingArray[i].value = "UseBilling";
				} 
			};
 
			// pass the form variables to the cart
			RCCart.add( 
    			'price='+$('#cardValue').val(), 
                'quantity='+ $('#cardQuantity').val(),
                'messageTo=' + $('#messageTo').val(),
                'messageFrom=' + $('#messageFrom').val(),
                'messageBody=' + $('#messageBody').val(),
                'ShipToCountry=' + $('#ShipToCountry').val(),
				'ShipToCompany=' + $('#shippingAddressCompany').val(),
                'ShipToNameFirst=' + $('#shippingAddressNameFirst').val(),
				'ShipToNameLast=' + $('#shippingAddressNameLast').val(),
                'ShipToStreet=' + $('#shippingAddressLine1').val(),
				'ShipToStreet2=' + $('#shippingAddressLine2').val(),
                'ShipToPhone=' + $('#shippingAddressPhone').val(),
				
                'ShipToCity=' + $('#shippingAddressCity').val(),
                'ShipToState=' + $('#shippingAddressState').val(),
                'ShipToProvince=' + $('#shippingAddressProvince').val(),
				'ShipToZip=' + $('#shippingAddressZip').val(),
                'ShippingMethod=Please Select'            
                 );
				 
				 // Replace blank message forms with 'none'
			$('#specialMessage :input').val(" ");
		
			$('#shippingAddress').find(':input').each(function() {
				switch(this.type) {
					case 'text':
					case 'textarea':
						$(this).val("");
						break;
				case 'select-one':
					if ($('#cardShipping').val() != 'useNewAddress'){
						$(this).val("useBilling");
					};
					break;
                }
		      //alert($("#shippingAddressState").val());
			  });
			  
			  // trigger the expose effect
			  $("#step1_cart").expose({
					closeOnClick: false,
					//color:'#000',
					onBeforeLoad: function() {
						this.getMask().prependTo('body');
					},
					onLoad: function() {
						$('#buyMoreCards').fadeIn('fast');
						//form.css({backgroundColor: '#c7f8ff'});
					},
					onClose: function() {
						$('#buyMoreCards').fadeOut('fast');
						$('#cardQuantity').focus();
						$('#cardShipping input:radio').attr('checked', false);
						//form.css({backgroundColor: null});
					}
				});
	}
} else {alert("Please choose where we should ship your gift card(s) to.");};
};
 

 
 
