// rollover images
// TBD // change to jQuery

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

// image preloader
function preLoadImages() {
	var cache = [];
	var args_len = arguments.length;
	for (var i = args_len; i--;) {
		var cacheImage = document.createElement('img');
		cacheImage.src = arguments[i];
		cache.push(cacheImage);
	}
}

// grey out the inputs
function textReplacement(input){ //input focus text function
	var originalvalue = input.val();
	input.focus( function(){
		if( jQuery.trim(input.val()) == originalvalue ){ input.val('').css("color", "#000"); }
	});
	input.blur( function(){
		if( jQuery.trim(input.val()) == '' ){ input.val(originalvalue).css("color", "#999"); }
	});
	// make sure to reset before submit
	jQuery("form").submit( function() {
		if( jQuery.trim(input.val()) == originalvalue ){ input.val('').css("color", "#000"); }
	});
}

jQuery(document).ready(function(){
	
		// preload the images
		preLoadImages("https://secure3.convio.net/bread/assets/images/donations/msg_arrow.gif");
		
		// grey out the inputs
		jQuery(".prefill").each(function() {
			textReplacement(jQuery(this).css("color", "#999"));
		});

		
		// detect credit card type
		jQuery('#card_number').keyup(function () {
			switch(jQuery(this).val().substring(0,1)) {
				case "6":
					jQuery('#discover').attr("checked","checked");
					break;
				case "5":
					jQuery('#mastercard').attr("checked","checked");
					break;
				case "4":
					jQuery('#visa').attr("checked","checked");
					break;
			}
		});

		// #######################################################
		// validation
		//  has to be after the greying out of the inputs
		// #######################################################

		jQuery("#purchase_form").validate({
			rules: { 
				"level_id": "required", 
				"billing.name.first": "required", 
				"billing.name.last": "required", 
				"donor.email": {
					required: true, 
					email: true
				},
				"billing.address.street1": "required", 
				"billing.address.city": "required", 
				"billing.address.state": "required", 
				"billing.address.zip": "required", 
				"card_number": {
					required: true, 
					creditcard: true
				},
				"card_type": "required",
				"shipping.name.first": "required", 
				"shipping.name.last": "required",
				"shipping.address.street1": "required", 
				"shipping.address.city": "required", 
				"shipping.address.state": "required", 
				"shipping.address.zip": "required"
			},
			messages: {
				"level_id": "Please choose your donation level.",
				"chooseDestination": "Please choose which you want to support.",
				"other_amount": {
					required: "Please specify an amount.",
					number: "The amount must be a valid number.",
					min: "The minimum donation possible is $5."
				},
				"donor.email": {
					required: "Please provide your email address.",
					email: "Your email address must be in the format of name@domain.com"
				},
				"billing.name.first": "Please provide your name.",
				"billing.name.last": "Please provide your name.",
				"billing.address.street1": "Please provide your address.",
				"billing.address.city": "Please provide your city.",
				"billing.address.state": "Please provide your state.",
				"billing.address.zip": "Please provide your ZIP code.",
				"card_number": {
					required: "Please provide your credit card number.",
					creditcard: "Please provide a valid credit card number."
				},
				"card_type": "Please choose your credit card type.",
				"shipping.name.first": "Please provide a first name.",
				"shipping.name.last": "Please provide a last name.",
				"shipping.address.street1": "Please provide an address.",
				"shipping.address.city": "Please provide a city.",
				"shipping.address.state": "Please provide a state.",
				"shipping.address.zip": "Please provide a ZIP code."
			},
			errorElement: "div",
			wrapper: "div",  // a wrapper around the error message
			errorPlacement: function(error, element) {
				if (element.attr('type') == 'radio'){
					element = element.closest('fieldset');
				}
				position = element.position();
				error.insertBefore(element);
				error.addClass('message');  // add a class to the wrapper
				error.css('left', position.left + element.outerWidth() + 2);
				error.css('top', position.top-2);
			}
		});	
		
	});

