function toggleStyle(elementId, style1, style2) {
	var element = document.getElementById(elementId);
	if (trim(element.className) == trim(style1)) {
		element.className = style2;
	} else {
		element.className = style1;
	} 
}

function changeStyle(elementId, styleClass) {
	var element = document.getElementById(elementId);
	if (element.className != styleClass) {
		element.className = styleClass;
	} 
}

function onlyNumbers(e) {
	var keynum;
	var keychar;
	var numcheck;
	
	if(window.event) { 
	// IE
	  keynum = e.charCode;
  } else if(e.which) {
  	// Netscape/Firefox/Opera
	  keynum = e.which;
  }
  if (keynum >= 65 && keynum <= 90) {
		return false;
  }
//	if (numcheck.test(keychar)) {
//		alert(keychar);
//		return false;
//	}
	return true;
}

function onMsisdnKeydown(e) {
	if (!onlyNumbers(e)) {
		return false;
	}
	target = e.target;
   if (target == null) {
     // IE
     target = e.srcElement;
   }
   form = target.form;
}

/* global document event handlers */
var documentOnBlur = document.onblur;
var documentOnKeyPress = document.onkeypress;
document.onblur = documentLostFocus;
document.onkeypress = handleEnterKey;
var focusElementId;
var defaultSubmitId; 
var isCheck = true;

function documentLostFocus(event) {
	focusElementId = null;
	if (documentOnBlur != null) {
		documentOnBlur(event);
	}
}
function handleEnterKey(e) {
	if (e == null) {
		e = window.event;
	}
	if (documentOnKeyPress != null) {
		if (!documentOnKeyPress(e)) {
			return false;
		}
	}
	var keynum;
	if(window.event) { 
	// IE
	  keynum = e.keyCode || e.charCode;
  } else if(e.which) {
  	// Netscape/Firefox/Opera
	  keynum = e.which;
  }
  if (keynum == 13 && defaultSubmitId != null) {
  	var element = document.getElementById(defaultSubmitId);
  	if (element != null) {
  		if (element.tagName == 'A' || element.tagName == 'a') {
		  	element.onclick();
		  } else {
  			element.click();
  		}
  	}
  	return false;
  }
  return true;
}

function closeModal(modalPanelId) {
	focusElementId = null;
	Richfaces.hideModalPanel(modalPanelId)
}

function trim(str) {
   return str.replace(/^\s*|\s*$/g,"");
}

function checkForNull(val) {
	return 	(val == null || val == "") ;
}

function findChild(form, elementId) {
	var formId = form.id;
	for(i = 0; i < form.elements.length; i++) {
		if (form.elements[i].id == formId + ":" + elementId) {
			return form.elements[i];
		}
	}
}

function clearOnFocus(inputElement, event) {
	//clear only if value like "dd************dd"
	var ccNum = new RegExp('^[0-9]{2}.*[0-9]{2}$');
	if (inputElement.value.match(ccNum)) {
		inputElement.value = '';
		inputElement.onfocus = '';
	}
}

function paymentTypeChanged(paymentTypeElement) {
  if (paymentTypeElement == null) {
  	return;
  }
  var newPaymentType = paymentTypeElement.value;
  var form = paymentTypeElement.form;
  if ((newPaymentType == 1 || newPaymentType == 2) &&
  		((newPaymentType == 1 && cardTypeBackup == 2) ||
  		 (newPaymentType == 2 && cardTypeBackup == 1)
  		)
  	 )
  {
	  findChild(form, 'ccNumber').value = '';
	  findChild(form, 'CVC').value = '';
	} else {
	  findChild(form, 'ccNumber').value = ccNumberBackup;
	  findChild(form, 'CVC').value = '***';
	}
}

function cursortWait() {
	document.body.style.cursor = 'wait';
  if (focusElementId != null) {
		document.getElementById(focusElementId).style.cursor = 'wait';
	}
}

function cursortAuto() {
	document.body.style.cursor = 'auto';
  if (focusElementId != null) {
		document.getElementById(focusElementId).style.cursor = 'auto';
	}
}

function showFloatPanel() {
	Richfaces.showModalPanel("floatPanel", {top:"auto", left:"auto"});
}

function hideFloatPanel() {
	Richfaces.hideModalPanel('floatPanel');
	var ieVersion=RichFaces.getIEVersion();
	if (ieVersion&&ieVersion<7) {
		s = document.getElementsByTagName("select");
		for(i = 0; i < s.length; i++) {
			if(s[i].style.visibility == 'hidden') {
				s[i].style.visibility = '';
			}
		}
	}
}

function CreditCardDetailsFormMessages() {
	this.pleaseEnter = "Please enter your ";
	this.ccNumberRequired = "Credit card number cannot be left blank.";
	this.invalidCard = "Payment type is not detected, please check your credit card number.";
	this.invalidMasterCard = "It seems that your credit card is not a MasterCard. Please check and try again?";
	this.invalidVisa = "It seems that your credit card is not a Visa.  Please check and try again?";
	this.exclamation = "!";
	this.invalidCc15No = "Credit card number must contain 15 digits";
	this.invalidCc16No = "Credit card number must contain 16 digits";
	this.invalidCVCSpaces = "The Security code cannot contain spaces before or after the number";
	this.invalidCVC3Digits = "Security code should contain 3 digits.";
	this.invalidCVC4Digits = "Security code should contain 4 digits.";
}

ccFormMessages = new CreditCardDetailsFormMessages();

function validateCCForm(form, newCard) {
	if (!isCheck) {
		isCheck = true;
		return true;
	}

	function checkRequiredInput(id) {
		input = document.getElementById(form.id + ":" + id);
		if (input) {
			return input && !input.value;
		} else {
			return false;
		}
	}
	
	if (checkRequiredInput('firstName')) {
		alert(ccFormMessages.pleaseEnter + "first name" + ccFormMessages.exclamation);
		findChild(form, 'firstName').focus();
		return false ;
	}

	if(checkRequiredInput('lastName')) {
		alert(ccFormMessages.pleaseEnter + "last name" + ccFormMessages.exclamation);
		findChild(form, 'lastName').focus();
		return false ;
	}

	if(checkRequiredInput('address1')) {
		alert(ccFormMessages.pleaseEnter + "address" + ccFormMessages.exclamation);
		findChild(form, 'address1').focus();
		return false ;
	}

	if(checkRequiredInput('cityTown')) {
		alert(ccFormMessages.pleaseEnter + "city" + ccFormMessages.exclamation);
		findChild(form, 'cityTown').focus();
		return false ;
	}

	if(checkRequiredInput('postalCode')) {
		alert(ccFormMessages.pleaseEnter + "postal code" + ccFormMessages.exclamation);
		findChild(form, 'postalCode').focus();
		return false ;
	}

	// cc number check
// if this is a new card or cc number field was visited (onfocus != null) and not empty (user typed something after onfocus).
  var ccVisa = new RegExp('^[4].*$');
  var ccMC = new RegExp('^[5][1-5].*$');
  var cardType = -1;
  if (findChild(form, 'ccNumber').value.match(ccVisa)) {
	  cardType = 1;
  }
  if (findChild(form, 'ccNumber').value.match(ccMC)) {
	  cardType = 2;
  }
  
  if (-1 == cardType) {
	  alert(ccFormMessages.invalidCard);
	  findChild(form, 'ccNumber').focus();
	  return false ;
  }
  
  if (newCard ||
  		(
  			("'" + findChild(form, 'ccNumber').onfocus + "'").indexOf('clearOnFocus') == -1
  			&& !checkForNull(findChild(form, 'ccNumber').value)
  		)
  	 ) 
  {
		if(checkForNull(findChild(form, 'ccNumber').value))
		{
			alert(ccFormMessages.ccNumberRequired);
			findChild(form, 'ccNumber').focus();
			return false ;
		}
		
		ccNumber = findChild(form, 'ccNumber');
		if (cardType == 2 && !ccNumber.value.match("^5.*")) { // master card
			if (!confirm(ccFormMessages.invalidMasterCard)) {
				return false ;
			}
		} else if (cardType == 1 && !ccNumber.value.match("^4.*")) {
			if (!confirm(ccFormMessages.invalidVisa)) {
				return false ;
			}
		}
	  var ccre16 = new RegExp('^[0-9]{16}$');
	  var ccre15 = new RegExp('^[0-9]{15}$');
		if (cardType == 3 && !ccNumber.value.match(ccre15))
		{
			alert(ccFormMessages.invalidCc15No);
			return false ;
		}
	
		if ((cardType == 2 && !ccNumber.value.match(ccre16))
			|| (cardType == 1 && !ccNumber.value.match(ccre16)))
		{
			alert(ccFormMessages.invalidCc16No);
			ccNumber.focus();
			return false ;
		}
	}
  	if (findChild(form, 'CVC')) {
  		return checkCVC(form);
  	} else {
  		return true;
  	}
}

function checkCVC(form){
	if (!isCheck) {
		isCheck = true;
		return true;
	}
	CVC = findChild(form, 'CVC');
	var re = new RegExp('^ | $');
	if(CVC.value.match(re)) {
		alert(ccFormMessages.invalidCVCSpaces);
		CVC.focus();
		return false ;
	}

	re = new RegExp('^[0-9][0-9][0-9]$');
	if(!CVC.value.match(re)) {
		alert(ccFormMessages.invalidCVC3Digits);
		CVC.focus();
		return false ;
	}

	return true;	
}

var cvcWindow;
function showCvcTips(contextPath) {
  var width = 480;
  var height = 300;
  var cvcPageLocation = contextPath + "/security-code-tip.jsf";
	if (cvcWindow == null || cvcWindow.closed) {
		cvcWindow = window.open(
			cvcPageLocation, 
			"cvcWindow", 
			"status=false,toolbar=false,location=false,scrollbars=auto,resizable=yes,dependent=true," + 
			"width=" + width +
			",height=" + height + 
			",top=" + (window.screen.availHeight / 2 - height / 2) +
			",left=" + (window.screen.availWidth / 2 - width / 2)
		);
		if (window.focus()) {
			cvcWindow.focus();
		} else if (window.blur) {
			cvcWindow.focus();
		}
	} else {
		if (window.focus()) {
			cvcWindow.focus();
		} else if (window.blur) {
			cvcWindow.focus();
		}
		cvcWindow.location.href=cvcPageLocation;
	}
}

function lockConfirmPaymentButton(submitElementId) {
	if (document.getElementById('buyCreditInProgress') == null) {
		return true;
	}
	if (submitElementId != null) {
		submitElement = document.getElementById(submitElementId); 
		submitElement.style.display='none';
		submitElement.parentNode.style.display='none';
		submitElement.parentNode.parentNode.style.display='none';
	}
	document.getElementById('buyCreditInProgress').style.display='block';
	return true;
}

function lockSubmitButton(buttonId) {
	submitButton = document.getElementById(buttonId); 
	if (submitButton != null) {
		submitButton.disabled = true;

	}
	return true;
}

function focusInputField(formId, inputId) {
	var inputs = document.getElementsByTagName('input');
	for(i=0; i < inputs.length; i++) {
		var elementId = inputs[i].id;
		if (inputs[i].id.match(".*" + formId + ".*" + inputId)) {
			inputs[i].focus();
			break;
		}
	}		
}
function setDontCheck() {
	isCheck = false;
}
function setCheck() {
	isCheck = true;
}

function hide(domElement) {
	domElement.style.display = "none";
}

function show(domElement) {
	domElement.style.display = "";
}


