var cardValidationError = '';
var isCardBalanceFetched = false;
var fetchProgressMsg = 'Fetching';
var fetchProgressCount = 0;

function checkBalance() {
	var errors = validateRubiosCardNumber();
	if (errors == "") {
		fetchCardBalance(
			document.getElementById('cardid').value.replace(/[ -]/g,""),
			document.getElementById('cardexpdate').value.replace(/[ -]/g,"")
		);
	} else {
		alert(errors);
	}
}

function validateRubiosCardNumber() {
	var errors = '';
	var cNumber = document.getElementById('cardid').value.strip();
	if ( cNumber == "") {
		errors += '- Your Rubios Card Number is required.\n';
	} else {
		var stripped = cNumber.replace(/[ -]/g,"");
		if (stripped.length != 19 || isNaN(stripped)) {
			errors += '- Your Rubios Card Number is not valid.\n';
		}
	}
	var expCode = document.getElementById('cardexpdate').value.strip();
	if ( expCode == "") {
		errors += '- Your Rubios Card Expiration Code is required.\n';
	} else {
		var stripped = expCode.replace(/[ -]/g,"");
		if (stripped.length < 4 || isNaN(stripped)) {
			errors += '- Your Rubios Card Expiration Code is not valid.\n';
		}
	}

	return errors;
}

function fetchCardBalance(cNumber, expCode) {
	isCardBalanceFetched = false;
	resetFetchProgress();
	document.getElementById("balance").innerHTML = "";
	var url = '../util/getCardBalance.php';
	var pars = {cnum: cNumber, expcode: expCode};

	var myAjax = new Ajax.Request(
	url,
	{
		method: 'post',
		parameters: pars,
		onSuccess: showBalance,
		onException: showException
	});

	showCardBalanceProgress();
}

function showException(){

	alert("There was a problem with retrieving your balance.  Please try at a later time.");
}

function showCardBalanceProgress() {
	if (!isCardBalanceFetched) {
		if (fetchProgressCount >= 5) {
			resetFetchProgress();
		}
		fetchProgressCount++;
		fetchProgressMsg += ".";
		document.getElementById("balance").innerHTML = fetchProgressMsg;
		setTimeout("showCardBalanceProgress()", 500);
	}
}

function resetFetchProgress() {
	fetchProgressMsg = "Fetching";
	fetchProgressCount = 0;
}

function showBalance(resultObj) {
	isCardBalanceFetched = true;
	//var resultText = resultObj.responseText;
	var resultText = resultObj.responseXML.firstChild.firstChild.nodeValue;
	if (resultText == "GIFTCARD_SYSTEM_ERROR" || resultText == "GIFTCARD_ERROR_BADCREDENTIALS") {
		document.getElementById("balance").innerHTML = "";
		alert("The system is currently unavailable. Please try again later.");
	} else if (resultText == "GIFTCARD_ERROR_NOTRELOADABLE" || resultText == "GIFTCARD_ERROR_INVALIDCARD") {
		document.getElementById("balance").innerHTML = "";
		alert("The card number is not valid or not reloadable.");
	} else {
		document.getElementById("balance").innerHTML = "Balance: $" + resultText;
	}
}