var lastError = null;
var lastPv = 0;
var slots = 5;
var lastCartItemToDelete = null;
var targ = null;

function registrationForm(activity_code) {
	checkInventory(activity_code);
	var action = toggleRegBlock(activity_code);
	if (action == 'popShow') {
		//if the bottom of the form is over the fold, slide it up
		var regObj = document.getElementById('reg'+activity_code);
		slide(regObj);
	}
	return false;
}

function getCart() {
	var dataUrl = 'dsp_Cart.cfm?c=1';
	//perform ajax call
	ajaxCall(dataUrl,displayCart,1);
	var cart = document.getElementById('cart_container');
	cart.innerHTML = strCartLoading;
	return false;
}

//display the page content
function displayCart(http) {
	var cart = document.getElementById('cart_container');
	cart.innerHTML = http.responseText;
}

function addToCart(activityCode,orderId,formName,seasonPrefix,userId) {
	
	var firstName = document.getElementById(formName+'fn').value;
	var lastName = document.getElementById(formName+'ln').value;

	var existingClassItems = document.getElementById('cartItems' + activityCode);
	if (existingClassItems) {
		var classParticipants = existingClassItems.getElementsByTagName("li");
		for (var i=0; i < classParticipants.length; i++) {
			var fullName = firstName + " " + lastName;
			var particpantFragment = classParticipants[i].innerHTML;
			if (particpantFragment.substring(particpantFragment.length - fullName.length).toLowerCase() == fullName.toLowerCase()) {
				if (!confirm("A participant by the name of \"" + fullName + "\" is already in your cart for this class.\n\nClick OK to continue and add this participant to your cart.\n\nClick Cancel to prevent this duplication.")) {
					document.getElementById(formName+'fn').value = 'Firstname';
					document.getElementById(formName+'ln').value = 'Lastname';
					return false;
				}
				break;
			}
		}
	}
	
	var slotStatus = document.getElementById('slots'+activityCode).innerHTML;
	if (slotStatus == 'Loading') {
		alert(strPleaseWaitForInventoryCheck);
		return false;
	} 
	lastActivityCode = activityCode;
	if (firstName.length == 0 || lastName.length == 0) {
		alert(strZeroLengthParticipantName);
	} else if (firstName.indexOf('Firstname') != -1 || lastName.indexOf('Lastname') != -1) {
		alert(strDefaultParticipantName);
	} else {
		//note this orderId is never used.
		var dataUrl = 'act_addClass.cfm?q='+activityCode+'&o='+orderId+'&fn='+firstName+'&ln='+lastName+'&sp='+seasonPrefix;
		if (userId != null) {
			dataUrl = dataUrl + '&wl=' + userId;
		}
		ajaxCall(dataUrl,processAddToCart,1,0);
	}
	var timeoutError = document.getElementById('timeoutError');
	if (timeoutError) {timeoutError.parentNode.removeChild(timeoutError);}
	return false;
}


//function called once a result is returned from our lookup page
function processAddToCart(http) {
	//If remote page returns session timeout, get them to log in again
	if (http.responseText == "Session timed out") {
		alert(strSessionTimeout);
	} else if (http.responseText == "Bad request") {
		return false;
	} else {
		var inventory = http.responseText;
		if (inventory == '-1') {
			alert(strFailedToInsertNewOrder);
		} else if (inventory == '-2') {
			alert(strFailedToCheckInventory);
		} else if (inventory == '-3') {
			alert(strNoInventoryRemaining);
			checkInventory(lastActivityCode);
		} else if (inventory == '-4') {
			alert(strFailedToInsertClass);
		} else if (inventory == '-5') {
			alert(strRegistrationNotOpenUntil+stOpenDateTime);
		} else if (inventory == '-6') {
			alert(strRegistrationNowClosed);
		} else if (inventory == '-7') {
			alert(strPageRefreshed);
			window.location.href = "index.cfm?bounce&timeout=true&bb=amh";
		} else {
			var ct = document.getElementById('cart');
			setScroll(0,ct.offsetTop);
			var res = addListItem('newLIText'+lastActivityCode,inventory);
			//alternative is to just call getCart(); and then update the inventory of the current activity code if open
			//loses the fade though...
		}
	}
}
function eventTrigger (e) {
    if (! e) e = event;
    return e.target || e.srcElement;
}

function removeCartItem(e) {
	var evt = eventTrigger(e);
	listElementId = evt.parentNode.parentNode.id.replace('pv','');
	lastCartItemToDelete = listElementId;
	var dataUrl = 'act_removeFromCart.cfm?item='+listElementId;
	//perform ajax call
	ajaxCall(dataUrl,handleRemoveCartItem,1);
	return false;
}

function removePreExistingCartItem(item) {
	listElementId = item.parentNode.id.replace('pv','');
	lastCartItemToDelete = listElementId;
	var dataUrl = 'act_removeFromCart.cfm?item='+listElementId;
	//perform ajax call
	ajaxCall(dataUrl,handleRemoveCartItem,1,0);
	return false;
}

function removeCartItemAtCheckout(class_id) {
	var dataUrl = 'act_removeFromCart.cfm?item='+class_id;
	//perform ajax call
	ajaxCall(dataUrl,handleRemoveCartItemAtCheckout,1,0);
	return false;
}

function handleRemoveCartItemAtCheckout(http) {
	if (http.responseText.indexOf('OK') >= 0) {
		if (document.cookie == "") {
			//location.reload();
			window.location.href = 'cart.cfm?checkoutRemove=1&'+nocookies;
		} else {
			//location.reload();
			window.location.href = 'cart.cfm?checkoutRemove=1';
		}	
	} else if (http.responseText.indexOf('BAD - Refresh') >= 0) {
		alert(strPageRefreshed);
		location.reload();
	} else {
		alert(strTroubleRemovingFromCart);
	}
}


function handleRemoveCartItem(http) {
	if (http.responseText.indexOf('OK') >= 0) {
		removeListItem(lastCartItemToDelete);
	} else {
		alert(strTroubleRemovingFromCart);
	}
}

function removeListItem(listElementId) {
	var currentParticipant=document.getElementById('pv'+listElementId);
	var cartItem = currentParticipant.parentNode;
	var activityCode = cartItem.id.replace('cartItems','');
	//if the program item is still open, update the inventory number
	if (document.getElementById('p'+activityCode)) {
		checkInventory(activityCode);
	}
	var cartEntry = cartItem.parentNode;
	var cart = cartEntry.parentNode;
	cartItem.removeChild(currentParticipant);
	var theElements = cartItem.getElementsByTagName("li");
	if (theElements.length == 0) {
		cart.removeChild(cartEntry);
	}
	theElements = cart.getElementsByTagName("li");
	if (theElements.length == 0) {
		openIt('cart_empty');
		closeIt('btn_checkout');
		closeIt('timer');
	}
	setTimeoutTime();
}

function createProgramRegistrant(pId,regFNameField,regLNameField) {
	//create the list element
	var newListElement = document.createElement('li');
	newListElement.className = 'fade';
	//create the text to add
	var newFullLine = document.createTextNode(" "+regFNameField.value+' '+regLNameField.value);
	//add the image
	var newImage = document.createElement('img');
	newImage.src = 'images/btn_remove.gif';
	newImage.alt = 'Remove item from cart';
	//create the anchor
	var newListAnchor = document.createElement('a');
	//create the text for the anchor
	var newAnchorContent = document.createTextNode("remove");
	//set the href for the anchor and the onClick property
	//newListAnchor.onClick = '';
	newListAnchor.href = '';
	newListAnchor.onclick = removeCartItem;
	//add the image to the anchor
	newListAnchor.appendChild(newImage);
	//add the anchor to the list element
	newListElement.appendChild(newListAnchor);
	//add the text
	newListElement.appendChild(newFullLine);
	
	//blank out text box after use
	regFNameField.value = "Firstname";
	regLNameField.value = "Lastname";
	regFNameField.focus();
	newListElement.id = 'pv'+ pId;
	return newListElement;
}

function createProgram(progNameField,progId) {

	//create the registrant list
	var newRegistrantList = document.createElement('ul');
	newRegistrantList.id = 'cartItems' + progId;
	var newProgTitleText = document.createTextNode(progNameField);
	var newProgTitle = document.createElement('strong');
	newProgTitle.appendChild(newProgTitleText);
	var newCartProgram = document.createElement('li');
	newCartProgram.id = 'progItem'+progId;
	newCartProgram.appendChild(newProgTitle);
	newCartProgram.appendChild(newRegistrantList);
	return newCartProgram;
}

//DOM scripting code to add to the list
function addListItem(textId,participantId) {
	var baseId = textId.replace('newLIText','');
	var listId = document.getElementById('cartItems'+baseId);
	var numslots =	document.getElementById('slots'+baseId);
	var fn = document.getElementById(textId+'fn');
	var ln = document.getElementById(textId+'ln');
	if (ln.value.length > 0 && fn.value.length > 0) {
		checkInventory(baseId);
		//create list element
		var newListElement = createProgramRegistrant(participantId,fn,ln,numslots);
		if (listId == null) {
			var pTitle = document.getElementById('p'+baseId).innerHTML;
			var pLoc = document.getElementById('loc'+baseId).innerHTML;
			var newProg = createProgram(pTitle+ ' @ ' +pLoc,baseId);
			var cart = document.getElementById('prog1');
			cart.appendChild(newProg);
			var listId = document.getElementById('cartItems'+baseId);
		}
		listId.appendChild(newListElement);
		closeIt('cart_empty');
		openIt('prog1');
		openIt('btn_checkout');
		openIt('timer');
		setTimeoutTime();
		Fat.fade_element(newListElement.id);

	} else {
		return false;
	}
	return false;
}
function setTimeoutTime() {
	var dataUrl = 'act_getTimeout.cfm?c=1';
	//perform ajax call
	ajaxCall(dataUrl,setTimeoutDisplay,1);
	return false;
}

//display the page content
function setTimeoutDisplay(http) {
	//alert(http.responseText);
	var tmr = document.getElementById('orderExpires');
	tmr.innerHTML = http.responseText;
}