// checkoutBilling.js, included from checkout billing page

// These match to the data in the option value of the payment and saved payment dropdown
// When the option value is split the data should be in the corresponding array index
// ALL payments
var PAYMETHODID_INDEX = 0;
var PAYMENT_METHOD_INDEX = 1;
var POLICY_ID_INDEX = 2;
var BRAND_INDEX = 3;
var FINANCE_INDEX = 4;
// only saved payments 
var PIID_INDEX = 5;
var NICKNAME_INDEX = 6;
var ACCOUNT_INDEX = 7;
var NAMEONCARD_INDEX = 8;
var MONTH_INDEX = 9;
var YEAR_INDEX = 10;
var PRIMARY_INDEX = 11;

var regExpression = /^[0-9]+$/;	

// This function is called when the page is loaded
// It hides the PONumber by default and sets up the
// onChange to show hide the PO and security code
$(function(){
	var walletTable = $('#walletTable');	
	var dropDown = $('#paymentType');
	
	
	// function to show/hide CVV/po for NEW payments
	if ($(dropDown).length == 1) {
		$(dropDown).change(function(){			
			OnChangePaymentDropDown(this);
		});
	}
	
});

function OnChangePaymentDropDown(dropDown) {	

	var option = $(dropDown).find('option:selected');
	var optionValue = $(dropDown).val();	
	if (optionValue != null) {
		// split the delimeted string value of the selected payment type
		// array element 0 should have the payment type brand
		// array element 4 should have the special financing flag		
		// check if credit card details should be cleared
		// this only happens for non-saved payments so the
		// valueArray length = 5
		var valueArray = optionValue.split('|');
		if (valueArray.length == 5 && document.getElementById("ccNum")) {
			var cardNumber = document.getElementById("ccNum").value;
			var length = cardNumber.length;
			if (length >= 12) {
				var maskedValue = cardNumber.substr(0,12);  
				if (maskedValue == "************") {
					// clear out new credit card fields
					document.getElementById("ccName").value = '';
					document.getElementById("ccNum").value = '';
					document.getElementById("expMonth").value = '';
					document.getElementById("addressState").value = ''; 
				}
			}
		}
	} 	
}

function searsAjax( url, opt) 
{ 
    var req = null; 
    var onSuccess = opt.onSuccess;
    var onFailure = opt.onFailure;
    if (window.XMLHttpRequest) 
    {
            req = new XMLHttpRequest();
            if (req)
            {
                    req.onreadystatechange = processReqChange;
                    req.open(opt.method, url, opt.asynchronous);
                    req.send(null);
        }
      
    }
    else if (window.ActiveXObject) 
    {
            req = new ActiveXObject("Microsoft.XMLHTTP");
            if (req) 
            {
                    req.onreadystatechange = processReqChange;
                    req.open(opt.method, url, opt.asynchronous);
                    req.send();
            }
    } 

    if (!req) return;


    function processReqChange() {
            if (req.readyState == 4) {
                if (req.status == 200) {
                      onSuccess(req);
                } 
                else {
              
                onFailure(req);
                }
            } 
    };
}

//Mywallet AssociateId Validation
 
function ValidateAssociateId(form){
	//alert("ksn1");
	iFlag=0;
	var err = document.getElementById("errorMsg"); 
	if(iFlag==0){
	//alert("ksn12"); 
		var userField1 = form.userField1.value;
		if(form.userField1.value !=''){ 
			userField = fnIsNumeric(form.userField1.value);   
			if(userField == false){ 
				iFlag=1;  
				//alert("nAN");
				getObjectInnerTextUserReg(err,"AssociateId can only be a number.");					
				form.userField1.select();
				form.userField1.focus();	 
			}if((userField1.length != 12) && (userField1.length != 17)){
				 iFlag=1;
				 //alert("NSKMRT");
				 getObjectInnerTextUserReg(err,"Associate Id does not belong to either Kmart or Sears.");					
 				 form.userField1.select();
				 form.userField1.focus();	    
		   }
		   if(iFlag==0){
		   	form.submit(); 
		   }	
		}
		else{
			//alert("ksnnull"); 
			getObjectInnerTextUserReg(err,"Please Enter Associate Id .");					
	 		form.userField1.select();
			form.userField1.focus(); 
		}
	}
	
}

function fnIsNumeric(value){
	var regEx = /^[0-9]+$/;
	if (!regEx.test(value)){
		return false;
	}
	return true;	
}

//My Wallet submit function
//the continue checkout when no preapproval banner is not shown.



function submitWallet(check, formname){
	if(check == "return"){   
	    formname.URL.value="UserAccountView"; 			
	}
	if(check == "add"){		
		formname.URL.value="MyWalletView"; 		  
	}

	var paymentForm;
	paymentForm = document.PaymentTypeForm;
	var piId=paymentForm.piId.value;	 
	
	//if piId is not empty then the user is editing the card	
	if (piId != '') {
		// Saved payment type is being used
		//paymentForm.formType.value = addOrEditPayment;
		

		var paymentValue = paymentForm.savedPaymentType.value;
		var paymentArray = paymentValue.split('|');
		 
		// assign basic payment values, method, id, etc.
		assignPaymentValues(paymentForm, paymentArray);

		paymentForm.piId.value = paymentArray[PIID_INDEX];
		paymentForm.card_nickname.value = paymentArray[NICKNAME_INDEX];
	//	paymentForm.account.value = paymentForm.savedPaymentType.value;
	//	paymentForm.cc_nameoncard.value = paymentForm.savedPaymentType.value;
	//	paymentForm.expire_month.value = paymentForm.savedPaymentType.value;
	//	paymentForm.expire_year.value = paymentForm.savedPaymentType.value;
		paymentForm.checkPrimary.value = paymentArray[PRIMARY_INDEX];
		paymentForm.addingNewCard.value = '';
		
		var creditCardNumber = maskCreditCardNumber(paymentForm.ccNum.value);  
		var brand = paymentArray[3];
	 	var nicknameForSpecialSearsCards = (brand == searsCard || brand == searsPlusCard || brand == searsPremier) 
	 											&& (paymentForm.account.value.length != 16);
		
		if (paymentForm.cc_nameoncard){ 
			var nameOnCard = paymentForm.cc_nameoncard.value;
			var expiryMonth = paymentForm.expire_month.value;
			var expiryYear = paymentForm.expire_year.value;
			if (nicknameForSpecialSearsCards) {
				paymentForm.card_nickname.value = brand +','+ nameOnCard +creditCardNumber;
			} 
			else {
				paymentForm.card_nickname.value = brand +','+ nameOnCard +creditCardNumber+'Exp'+expiryMonth+'/'+expiryYear; 
			}
		}
		if (!validateCreditCard(paymentForm, brand,true)){
			document.getElementById("errorMsg").style.display="";
			return false;
		}
		 
		
	} else {
		// New payment type is being added
		/* 
		if (savedPaymentsExist) {
			// if saved payments exist then this is adding a new payment type
			// for registered users
			paymentForm.addingNewCard.value = 'Y';
			
			// if registered user already has a primary card then this one isn't
			if (paymentForm.hasPrimaryCard.value == 'Y')
				paymentForm.checkPrimary.value = 'N';
			else
				paymentForm.checkPrimary.value = 'Y';
		} else {
			paymentForm.addingNewCard.value = '';
			paymentForm.addingCardToBilling.value = ''; 
			paymentForm.formType.value = ''; 
			paymentForm.checkPrimary.value = 'Y';
		}
		*/
		var paymentDropDown = document.getElementById("ccType");
		var paymentValue = paymentDropDown.value;
//alert("paymentValue  "+paymentValue);			
		if (paymentValue == null || paymentValue == '') {
			err = document.getElementById("errorMsg");
			//alert("ksn0");
			getObjectInnerText(err,"Please enter a payment method before continuing");
			//alert("ksnextn");
			window.scrollTo(1,1);
			return false; 
			
			
		}
	
		var paymentArray = paymentValue.split('|');
		assignPaymentValues(paymentForm, paymentArray);
		
		var creditCardNumber = maskCreditCardNumber(paymentForm.ccNum.value);  
		var brand = paymentArray[3];
	 	var nicknameForSpecialSearsCards = (brand == searsCard || brand == searsPlusCard || brand == searsPremier) 
	 											&& (paymentForm.account.value.length != 16);
		
		if (paymentForm.cc_nameoncard){ 
			var nameOnCard = paymentForm.cc_nameoncard.value;
			var expiryMonth = paymentForm.expire_month.value;
			var expiryYear = paymentForm.expire_year.value;
			if(expiryMonth== null || expiryMonth== ''){
				expiryMonth = document.getElementById("expMonth").value;
				paymentForm.expire_month.value=expiryMonth;
			}
			if(expiryYear== null || expiryYear== ''){
				expiryYear = document.getElementById("addressState").value;
				paymentForm.expire_year.value=expiryYear;
			}
			if (nicknameForSpecialSearsCards) {
				paymentForm.card_nickname.value = brand +','+ nameOnCard +creditCardNumber;
			} 
			else {
				paymentForm.card_nickname.value = brand +','+ nameOnCard +creditCardNumber+'Exp'+expiryMonth+'/'+expiryYear; 
			}
		}
		
		if (!validateCreditCard(paymentForm, brand,true)){
			document.getElementById("errorMsg").style.display="";
			return false;
		}
	}
	var chk=paymentForm.agreeTerms.checked;
	if(!chk==true){
			err = document.getElementById("errorMsg");
			getObjectInnerText(err,"Please read and Agree to the terms of Service");
			//alert("ksn"); 
			window.scrollTo(1,1); 
			return false;
 
	}
	//alert("1111");
	if(chk==true){
		//alert("before");
		paymentForm.submit(); 
		//alert("before1"); 
		return true;
	}

}

// assigns the basic payment instruction values
function assignPaymentValues(paymentForm, paymentArray) {
	paymentForm.payMethodId.value = paymentArray[PAYMETHODID_INDEX];
	paymentForm.payment_method.value = paymentArray[PAYMENT_METHOD_INDEX];
	paymentForm.policyId.value = paymentArray[POLICY_ID_INDEX];
	//alert(paymentForm.policyId.value); 
	paymentForm.cc_brand.value = paymentArray[BRAND_INDEX]; 
	//alert ("PAYMENT VALUES  "+paymentForm.payMethodId.value+"   "+paymentForm.payment_method.value+"  "+paymentForm.policyId.value+"  "+paymentForm.cc_brand.value);
}

var EDPPaymentMethods_INVALID_EXPIRY_DATE = 'Please enter expiration month and year for the Card';

function validateCreditCard(formName, brand,creditVal) {
	if (formName.cc_nameoncard != null && trimStr(formName.cc_nameoncard.value) == "") {
		err = document.getElementById("errorMsg");
		getObjectInnerText(err,"Please enter a valid name");
		//alert("ksn");
		window.scrollTo(1,1);
		return false;   
		//alert("ksn1"); 
	}
	// account is checked for StandardAmex, StandardMasterCard, StandardVisa, StandardLOC and StandardCheck
	if ((creditVal) && ((formName.account != null && formName.account.value == "" ) ||	!creditCardNoValidation(formName.account.value))) {
		err = document.getElementById("errorMsg");
		getObjectInnerText(err,'Please enter a valid credit card number');
		window.scrollTo(1,1);
		return false;	
	} 

	// assign the current month and year to credit cards that don't require validation
	if ((brand == searsCard || brand == searsPlusCard || brand == searsPremier) && 
			formName.account.value.length != 16) { 
    
		if((formName.expire_month != null && formName.expire_month.value  == "") 
			|| (formName.expire_year != null && formName.expire_year.value  == "")){
			var currentExpiryMonth = current_month_index + 1;
			if (parseInt(currentExpiryMonth) < 10) {
				currentExpiryMonth = "0" + currentExpiryMonth;
			}
			var currentExpiryYear = current_year;
			formName.expire_year.value = currentExpiryYear;
			formName.expire_month.value = currentExpiryMonth;  
		}
	}
	else {
		if ((formName.expire_month != null && formName.expire_month.value  == "") 
				|| (formName.expire_year != null && formName.expire_year.value  == "")) {
			err = document.getElementById("errorMsg");
			getObjectInnerText(err,EDPPaymentMethods_INVALID_EXPIRY_DATE);
			window.scrollTo(1,1);
			return false;
		}
	}	
	
	return true;
}

function creditCardNoValidation(accountNo){ 
	var regExpressionForAccount = /^[0-9,*]+$/;    
	if (!regExpressionForAccount.test(accountNo)){  
		return false;
	}
	else{
		return true;
	}
}

function maskCreditCardNumber(cardNumber) { 
	var length = cardNumber.length;
	var unmaskedValue = cardNumber.substr(length - 4,4);  
	var mask = '*';
  	for(i=1 ;i < length - 4; i++){
  		mask = mask+"*";   
    }

	return (mask + unmaskedValue);
}

function autoOff(TextBoxId){
	if(document.getElementById(TextBoxId)){
		document.getElementById(TextBoxId).autocomplete = "off"; 
	}
}

function fnDelete(url) {
		retval=confirm("Are you sure to delete the credit card");
					
		if(retval){					
			document.location.href = url;					      					
		} else {
			return;
		}
	}
	
function ajaxCallForWallet(strId) {
    document.getElementById("saveError").style.display = 'none'; 
    document.getElementById("callout").style.display = 'none'; 
    var addressPageOpt = {
	    method: 'GET', 
	    asynchronous: true,
	    postBody: '',

	    //Handle successful response
	    onSuccess: function(t) { 
	    	document.getElementById("expressResult").innerHTML = t.responseText;
	    	var response = document.getElementById("cardError").value;
	    	sendOmnitureExpressCheckoutDefault("ExpressDefaultProfile"); 
	    	if(response == 'true'){
	    		document.getElementById("saveErrorWallet").style.display = ''; 
	    	}
	    	else{
	    		document.getElementById("calloutWallet").style.display = ''; 
	    		// set the cookie to indicate that a default was set in this session
    			document.cookie = "expressPayment=Y;";
	    	}
    	},
    	
        // Handle other errors 
        onFailure: function(t) {
           document.getElementById("saveErrorWallet").style.display = '';   
        } 
       
    };   
        
    var urlString="";

    if (document.getElementById("expressPayment2") && document.getElementById("expressPayment2").checked == true)
    {
    	urlString = "DefaultCard=PayPal" ;
    } 
    else if (document.getElementById("expressPayment3") && document.getElementById("expressPayment3").checked == true)
    {
    	urlString = "DefaultCard=eBillme" ;
    } 
    else 
    	urlString = "DefaultCard=" + document.getElementById("expressCC").value ;
    urlString = urlString + "&storeId=" +strId;
    
    var url = "ExpressAddDefaultAddressAndCardCmd?"+urlString;
    
    new searsAjax(url, addressPageOpt);  
      
}
	

