$(function() {
	var imgCache = [];
	
	$.preLoadImg = function() {
			var argsLen = arguments.length;
			for (var i = argsLen; i--;) {
				var domImg = document.createElement('img');
					domImg.src = arguments[i];
					imgCache.push(domImg);
			}
	}
	
	$.preLoadImg('page-navigation/commercial/commercial-up.jpg',
				 'page-navigation/about-us/photo-gallery-up.jpg',
				 'page-navigation/why-post-alarm/the-post-difference-up.jpg',
				 'page-navigation/residential/videofied-up.jpg',
				 'page-navigation/support/faq-up.jpg',
				 'page-navigation/contact-us/request-new-yard-sign-up.jpg');
				 
	var m_paymentMethod,
		m_animating

	$(document).ready(function() {
		$('input[type="radio"]').change( function() { 
			var this_radio_set = $('input[name="'+$(this).attr("name")+'"]'); 

			for (var i=0; i < this_radio_set.length;i++) {

				if ( $(this_radio_set[i]).is(':checked') ){
					switch($(this_radio_set[i]).attr('value')){
						case "creditCard":
							showCreditCard();
							break;

						case "check":
							showCheck();
							break;
					}
					
					$("#recurringOption").slideDown();
					break;
				}
			} 
		});

		document.forms[0].elements["ccnum"].onkeypress = isNumberKey;		
		document.forms[0].elements["ckaba"].onkeypress = isNumberKey;
		document.forms[0].elements["ckacct"].onkeypress = isNumberKey;	

		$('#recurringBilling').change(function(){		
			if(this.checked){
				$("#firstBillDate").html('First Recurring Billing Date is: ' + getRecurStartDate());
				$("#firstBillDate").show();
			}else{
				$("#firstBillDate").hide();
			}
		});

		$("#billPayForm").submit(function(a){
			if(chkForm($('#billPayForm :input'))){
				switch(m_paymentMethod){
					case "creditCardPayment":
						$("#ccname").attr('value', $("#firstname").val() + ' ' + $("#lastname").val());
					
						$("#action").attr('value', 'ns_quicksale_cc');
						$("#checkPayment").empty().remove();
						break;
					case "checkPayment":
						$("#action").attr('value', 'ns_quicksale_check');
						$("#creditCardPayment").empty().remove();
						break;
				}

				// Flag Auto Renew
				if ($('#recurringBilling').is(':checked')){
					var answer = confirm("You have chosen the recurring billing option which will begin on " + getRecurStartDate() + "\n\nIf you do not want this to  automatically charge your Credit/Bank account each month click CANCEL and de-select the option box and continue again. Otherwise click OK to proceed.");
					if (answer){
						$("#recur_create").attr('value', '1');
						$("#recur_billingcycle").attr('value', '2');
						$("#recur_billingmax").attr('value', '-1');
						$("#recurStart").attr('value', getDaysToNextMonth());
						$("#recurAmount").attr('value', $("#amount").val());
					}else{
						return false;
					}
				}else{
					$("#recur_create").remove();
					$("#recur_billingcycle").remove();
					$("#recur_billingmax").remove();
					$("#recurStart").remove();
					$("#recurAmount").remove();
				}

				$("#billPayForm").prepend('<input type="hidden" id="merchantpin" name="merchantpin" value="pEMFnJwoZNPtpnfLGGaT6fCUzX6IdMvx">');
				
				return true;
			}else{
			
				if(!m_animating){
					m_animating = true;
					
					var animContainer = ($.browser.webkit) ? 'body' : 'html';
					
					
					$(animContainer).animate({scrollTop:$("#inner_rightpart").offset().top}, 1000, function(){
						m_animating = false;
					});
				}
			
				return false;	
			}
		}); 
	});
	
	function getRecurStartDate(){
		var date = new Date();
		var curDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
			curDate.setHours(0);
			date.setTime(curDate.getTime() + (getDaysToNextMonth() * 24 * 60 * 60 * 1000)); 
	
		return date.toDateString();
	}


	function showCreditCard(){
		$("#checkPayment").slideUp('slow', function(){
			$("#creditCardPayment").slideDown();
			$("#btnSubmit").css('display', 'block');
		})

		$("#bpAction").attr('value', 'ns_quicksale_check');

		m_paymentMethod = 'creditCardPayment'
	}

	function showCheck(){
		$("#creditCardPayment").slideUp('slow', function(){
			$("#checkPayment").slideDown();
			$("#btnSubmit").css('display', 'block');
		})

		$("#bpAction").attr('value', 'ns_quicksale_cc');

		m_paymentMethod = 'checkPayment'
	}

	function chkForm(p_elements){

		p_elements.each(function(p_index, p_value){
				
			switch($(this).attr('class')){
				case "reqFullName":			
					if(!chkFullName($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(chkFullName($(this).val())){
								clearError(this);	
							}
						});
					}
					break;
				case "reqValue":
					if(!chkValue($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(chkValue($(this).val())){
								clearError(this);	
							}
						});
					}
					break;
				case "reqName":
					if(!chkName($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(chkName($(this).val())){
								clearError(this);	
							}
						});
					}
					break;
				case "reqAddr":
					if(!chkAddr($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(chkAddr($(this).val())){
								clearError(this);	
							}
						});
					}
					break;
				case "reqCity":
					if(!chkCity($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(chkCity($(this).val())){
								clearError(this);	
							}
						});
					}
					break;	
				case "reqOption":				
					if(!reqOption($(this).attr("selectedIndex"))){
						showError(this);
						$(this).blur(function(){
							if(reqOption($(this).attr("selectedIndex"))){
								clearError(this);	
							}
						});
					}
					break;
				case "reqZip":
					if(!reqZip($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(reqZip($(this).val())){
								clearError(this);	
							}
						});
					}
					break;
				case "reqEmail":
					if(!isEmail($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(isEmail($(this).val())){
								clearError(this);	
							}
						});
					}
					break;
				case "reqDate":
					if(!isDate($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(isDate($(this).val())){
								clearError(this);	
							}
						});
					}
					break;					
				case "reqInvoice":
					if(!reqInvoice($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(reqInvoice($(this).val())){
								clearError(this);	
							}
						});
					}
					break;
				case "reqDollar":
					if(!reqInvoice($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(reqInvoice($(this).val())){
								clearError(this);	
							}
						});
					}
					break;
				case "reqCreditCard":
					if(!isCreditCard($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(isCreditCard($(this).val())){
								clearError(this);	
							}
						});
					}
					break;
				case "reqRoutingNum":
					if(!reqRoutingNum($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(reqRoutingNum($(this).val())){
								clearError(this);	
							}
						});
					}
					break;
				case "reqCheckAcctNum":
					if(!reqCheckAcctNum($(this).val())){
						showError(this);
						$(this).blur(function(){
							if(reqCheckAcctNum($(this).val())){
								clearError(this);
							}
						});
					}
					break;	
			}
		});

		var nonPayment = (m_paymentMethod == 'checkPayment') ? 'creditCardPayment' : 'checkPayment';

		$('#' + nonPayment + ' input, #' + nonPayment +  ' select').each(function(p_index, p_value){
			clearError(p_value);
		});
		
		if($(".errInput").length == 0){
			return true;
		}else{
			return false;
		}
	}
	function chkFullName(p_value){
		var spaces = p_value.split(' ');
		if(spaces.length < 2){
			return false;
		}
		return true;
	}

	function chkName(p_value){
		if(p_value.length < 2) return false;
		return true;
	}

	function chkAddr(p_value){
		var spaces = p_value.split(' ');
		if(spaces.length < 2){
			return false;
		}
		return true;
	}

	function chkCity(p_value){
		if(p_value.length < 2) return false;
		return true;
	}

	function reqOption(p_selectedIndex){
		if(p_selectedIndex == 0) return false;
		return true;
	}

	function reqZip(p_value){
		var regExp = /(^\d{5}$)|(^\d{5}-\d{4}$)/
		
		if(!regExp.test(p_value)){
			return false;
		}
		
		return true;
	}

	function reqInvoice(p_value){
		if(p_value.length < 3) return false;
		return true;
	}
	
	function isDate(p_value){
		var regExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/ 
		
		if(!regExp.test(p_value)) return false;

		var curDate = new Date();
		var payDate = new Date(p_value);

		if(curDate >= payDate){
			return false;
		}
		
		return true;
	}
	
	function chkValue(p_value){
		if(p_value.length < 2) return false;
		return true;
	}

	function reqDollar(p_value){
		// Check Transaction Amount
		var amountExp  = /^((\$\d*)|(\$\d*\.\d{2})|(\d*)|(\d*\.\d{2}))$/
		if(p_value.indexOf(".") == -1){
			return false;
		}
		else if(!amountExp.test(p_value)){
			return false;
		}
		return true;
	}

	function reqRoutingNum(p_value){
		if(p_value.length < 8) return false;
		return true;
	}

	function reqCheckAcctNum(p_value){
		if(p_value.length < 8) return false;
		return true;
	}

	function isEmail(emailStr){
		var emailPat=/^(.+)@(.+)$/
		var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
		var validChars="\[^\\s" + specialChars + "\]"
		var quotedUser="(\"[^\"]*\")"
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
		var atom=validChars + '+'
		var word="(" + atom + "|" + quotedUser + ")"
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
		var matchArray=emailStr.match(emailPat)

		if (matchArray==null) return false;

		var user=matchArray[1];
		var domain=matchArray[2];

		if (user.match(userPat)==null) return false;

		var IPArray=domain.match(ipDomainPat)
		if (IPArray!=null) {
			for (var i=1;i<=4;i++) {
				if (IPArray[i]>255) return false;
			}
			return true;
		}

		var domainArray=domain.match(domainPat)
		if (domainArray==null) return false;

		var atomPat=new RegExp(atom,"g")
		var domArr=domain.match(atomPat)
		var len=domArr.length

		if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) return false;
		if (len<2) return false;

		return true; 
	}

	function isCreditCard(p_value) {
		var ccNum;
		var odd = 1;
		var even = 2;
		var calcCard = 0;
		var calcs = 0;
		var ccNum2 = "";
		var aChar = '';
		var cc;
		var r;

		ccNum = p_value;

		for(var i = 0; i != ccNum.length; i++) {

			aChar = ccNum.substring(i,i+1);

			if(aChar == '-') continue;
			ccNum2 = ccNum2 + aChar;
		}

		cc = parseInt(ccNum2);

		if(cc == 0) return false;

		r = ccNum.length / 2;

		if(ccNum.length - (parseInt(r)*2) == 0) {
			odd = 2;
			even = 1;
		}

		for(var x = ccNum.length - 1; x > 0; x--) {

			r = x / 2;
			if(r < 1)  r++;

			if(x - (parseInt(r) * 2) != 0) {
				calcs = (parseInt(ccNum.charAt(x - 1))) * odd;
			}else {
				calcs = (parseInt(ccNum.charAt(x - 1))) * even;
			}

			if(calcs >= 10) calcs = calcs - 10 + 1;

			calcCard  = calcCard + calcs;
		}

		calcs = 10 - (calcCard % 10);

		if(calcs == 10) calcs = 0;

		if(calcs == (parseInt(ccNum.charAt(ccNum.length - 1)))){
			return true;
		}else{
			return false;
		}
	}

	function isNumberKey(evt){
		var charCode = (arguments.length == 0) ? event.keyCode : evt.which; 
		if (charCode > 31 && (charCode < 48 || charCode > 57)){
			return false;
		}else{
			return true;
		}
	}

	function showError(p_node){
	
		$(p_node).addClass('errInput');

		switch($(p_node).prev().get(0).nodeName.toLowerCase()){
			case "span":
			case "div":
			case "h1":
			case "h2":
				$(p_node).prev().addClass('errLabel');
				break;
			case "p":
				$(p_node).prev().addClass('errLabel');
				$(p_node).prev().prev().addClass('errLabel');
				break;
		}
	}
	
	function clearError(p_node){
		$(p_node).removeClass('errInput');
		$(p_node).prev().removeClass('errLabel');
		
		if($(p_node).prev().get(0).nodeName.toLowerCase() == "p"){
			$(p_node).prev().prev().removeClass('errLabel');
		}
	}
	
	function getDaysToNextMonth(){
		var newDate = new Date();
		var oneDay =1000*60*60*24

		var nextMonth = newDate.getMonth() + 1;
		var nextMonthYear = newDate.getFullYear();

		if(nextMonth === 12){
			// Reset To January
			nextMonth = 0;
			nextMonthYear = nextYear + 1;
		}

		var startBilling = new Date(nextMonthYear, nextMonth, 1 );
		var daysToBilling = Math.floor((startBilling.getTime()-newDate.getTime()) / oneDay);
		
		return daysToBilling + 1;
	}
	
	function getDaysToNextFriday(){
		var curDay = new Date().getDay();

		if(curDay <= 4){
			return 5 - curDay;
		}
		else if(curDay == 5){
			return 7;
		}
		else{
			return 6
		}
	}

});

















































