// ShopElsevier.com
// © 2010 MBS Direct
// 06.10.2010 dh

/* ==================================================
                Extend Functions
================================================== */

jQuery.extend({
	isEmail: function(text) {
		var emailReg = /^[a-zA-Z_0-9\.\-]+\@([a-zA-Z_0-9\-]+\.)+[a-zA-Z_0-9\-]+$/;
		return emailReg.test($.trim(text));
	},

	isVBPassword: function(text) {
		var regex = /^[a-zA-Z0-9]{5,10}$/;
		return regex.test($.trim(text));
	}
});

/* ==================================================
                      C A R T
================================================== */

// CART - TOGGLE	
	var cartVisible = 0; // hidden by default

	function cartToggle(){
		if (cartVisible == 0) {
			$("#cart-flyout").slideDown();
			$("#cart-toggle a").addClass('hide-cart');
			$("#cart-stats").fadeOut();
			$("#search-by").fadeOut();
			cartVisible = 1;
		}
		else {
			$("#cart-flyout").slideUp();
			$("#cart-toggle a").removeClass('hide-cart');
			$("#cart-stats").fadeIn();
			$("#search-by").fadeIn();
			cartVisible = 0;
		}
	}

$(document).ready(function(){

// CART - CLOSE ON OUTSIDE CLICK
	$(document).click(function(e){
		if (cartVisible==1) {
			if (!$(e.target).is("#cart-flyout, #cart-toggle") && !$(e.target).parents().is("#cart-flyout, #cart-toggle"))
			 	cartToggle();
		}
	});

// CART - UPDATE DISPLAYS
	updateCartDisplays();

// CART - UPDATE ACTIONS
	updateCartActions();


/* ==================================================
                   G E N E R A L
================================================== */

// SMART INPUT	
	$("input.smart-input").focus(smartFocus);
	$("input.smart-input").blur(smartBlur);

/* ==================================================
             S U B J E C T   F I L T E R
================================================== */
	
// FILTER - TOGGLE
// For subject filters on search pages
	$("#search-subject-filter li").click(function(){
		// select the filter option
		if($(this).hasClass("selected"))
			$(this).removeClass("selected");
		else
			$(this).addClass("selected");

		var searchForm = $("#search-widget");
		var filterDiv = $("#search-subject-filter");


		// save array of filters
		var filter = [];
		filterDiv.find("li.selected a").each(function() {
			filter.push(getUrlVar($(this).attr("href"), "filter"));
		});

		// convert filter array into a string, pipe separated
		filter = filter.join("|");

		// get current link variables
		var url = $(this).find("a").attr("href");
		var urlVars = getUrlVars(url);
		var urlBase = (url.indexOf('?') != -1) ? url.split('?')[0] : url;

		// override filter
		urlVars['filter'] = filter;

		var urlVarString = '';
		var join = '?';
		for (var param in urlVars) {
			urlVarString += join + param + '=' + urlVars[param];
			join = '&';
		}

		var newUrl = urlBase + urlVarString;
		window.location = newUrl;

		return false;
	});

// FILTER - TOGGLE ALL
// For subject filters on search pages
	$("#show-all-subjects").click(function(){
		// select all of the filter options
		$("#search-subject-filter li").addClass("selected");

		// NOTE: allowing browser to follow show all link, no other work needed
	});


/* ==================================================
              C O U R S E   W I D G E T
================================================== */
	
// SMART DROP DOWN - STEP-BY-STEP
// Used on Course Search pages
	
	// Initalize drop down
	$("#search .course-widget-query").mouseup(function(){
		parentEl = $(this).parents(".course-widget");

		parentEl.find(".fader").animate({opacity: 1});
		parentEl.find(".course-widget-inputs").css({'background-position':'0 -51px'});
		parentEl.find("ul").slideDown();
		parentEl.find(".course-widget-query").css({'padding-right':'0', 'font-style':'normal', 'letter-spacing':'0'}); 
		// Active - Cycle
		parentEl.next(".course-widget").find(".fader").animate({opacity: 0.6});
		parentEl.next(".course-widget").find("ul").slideUp();
		parentEl.next(".course-widget").next(".course-widget").find(".fader").animate({opacity: 0.3});
		parentEl.next(".course-widget").next(".course-widget").find("ul").slideUp();
		parentEl.prev(".course-widget").find(".fader").animate({opacity: 0.6});
		parentEl.prev(".course-widget").find("ul").slideUp();
		parentEl.prev(".course-widget").prev(".course-widget").find(".fader").animate({opacity: 0.3});
		parentEl.prev(".course-widget").prev(".course-widget").find("ul").slideUp();
	});
	
	// Select match and copy to field and auto advance
	$("#search .course-widget li").click(function(){
		selectListItemBar($(this));
	});
	
// SMART DROP DOWN - CART ALL-IN-ONE (CAIN)
// Used on Home page
	
	// Initalize drop down
	$("#home-course .course-widget-query").mouseup(function(){
		parentEl = $(this).parents(".course-widget");

		parentEl.find(".fader").animate({opacity: 1});
		parentEl.find(".course-widget-inputs").css({'background-position':'0 -50px'});
		parentEl.find("ul").slideDown();
		return false;
	});

	$("#home-course .course-widget-action").click(function(){
		parentEl = $(this).parents(".course-widget");

		parentEl.find(".fader").animate({opacity: 1});
		parentEl.find(".course-widget-inputs").css({'background-position':'0 -50px'});
		parentEl.find("ul").slideDown();
		return false;
	});

	// Select match and copy to field
	$("#home-course .course-widget li").click(function(){
		selectListItemHome($(this));
	});


// CAIN NAVIGATION

	// Return to school search
	$("#cain-school-link").click(function(){
		$("#cain-term").hide();	
		$("#cain-course").hide();	
		$("#cain-school").fadeIn();
		$("#cain-school-link").removeClass("near");
		$("#cain-school-link").removeClass("far");
		$("#cain-school-link").addClass("current");
		$("#cain-term-link").removeClass("current");
		$("#cain-term-link").addClass("near");
		$("#cain-term-link").css("cursor", "default");
		$("#cain-course-link").removeClass("current");
		$("#cain-course-link").removeClass("near");
		$("#cain-course-link").addClass("far");
	});
	
	// Return to term selection
	$("#cain-term-link").click(function(){

		// do not go to term selection if we do not have a school
		if ($("#cain-school").find("input[name='schoolValue']").val() == '')
			return false;

		$("#cain-school").hide();	
		$("#cain-course").hide();	
		$("#cain-term").fadeIn();
		$("#cain-school-link").removeClass("current");
		$("#cain-school-link").removeClass("far");
		$("#cain-school-link").addClass("near");
		$("#cain-term-link").removeClass("near");
		$("#cain-term-link").addClass("current");
		$("#cain-course-link").removeClass("current");
		$("#cain-course-link").removeClass("far");
		$("#cain-course-link").addClass("near");
	});
	
// LIVE FILTERING (ALL)
// Filters and highlights possible matches in drop down as user types

	$(function() {
		var self = this;
		self.input = $(".course-widget-query");
		self.cache = '';
		self.search = null;

		//handles searching the document
		self.performSearch = function(thisEl) {

			//get the input
			var filter = $.trim(thisEl.val().toLowerCase());

			//make sure there are a couple letters
			if (filter.length == 0 && self.cache.length == 0)
				return;

			//search for any matches
			thisEl.parents(".course-widget").find("ul li").each(function(i, v) {
				// grab the block of text
				var block = $(v);

				// if no input, show everything with no highlighting
				if (filter.length == 0) {
					block.fadeIn();	// show()
					block.html(block.text());
					return;
				}

				// if cache is substring of input, we can skip the hidden items
				if (filter.indexOf(self.cache) != -1 && block.css('display') == 'none')
					return;

				// do search
				if (block.text().toLowerCase().indexOf(filter) == -1)
					block.fadeOut();	// hide()
				else {
					block.fadeIn();	// show()

					//replace any matches
					block.html(block.text().replace(new RegExp(filter, "gi"), function(match) {
						return ["<span class='highlight'>", match, "</span>"].join("");
					}));
				}
			});

			// cache the input
			self.cache = filter;

			//clear this search attempt
			//should be gone anyways...
			self.search = null;
		};

		self.input.live("keyup",function(){
			if (self.search) { clearTimeout(self.search); }
			//start a timer to perform the search. On browsers like
			//Chrome, Javascript works fine -- other less performant
			//browsers like IE6 have a hard time doing this
			var thisEl = $(this);
			self.search = setTimeout(function() { self.performSearch(thisEl); }, 300);
		});
	});

/* ==================================================
                    R E S U L T S
================================================== */

// SHOW MORE/LESS INFORMATION TOGGLE
	
	$('.toggle-summary').toggle(function() {

//		$(this).siblings(".title-summary").slideDown(500); // reveals full summary
		$(this).siblings(".title-summary").animate({height: '100%'}, 500 ); // reveals full summary
		$(this).siblings(".title-requirements").slideDown(500);
		$(this).css({'background-position':'100% -10px'}); // flips orientation of more/less arrow
		$(this).children("a").text("Show Less Information"); // changes "More" to "Less"
		$(this).parent().css('background-color', '#fffdf4'); // hilites background of toggled result-block
	}, function() {

//		$(this).siblings(".title-summary").slideUp(500);
		$(this).siblings(".title-summary").css('overflow', 'hidden').animate({height: '30px'}, 500 );
		$(this).siblings(".title-requirements").slideUp(500);
		$(this).css({'background-position':'100% 4px'}); // flips orientation of more/less arrow
		$(this).children("a").text("Show More Information"); // changes "Less" back to "More"
		$(this).parent().css('background-color', '#ffffff'); // Resets result-block background color
	});
	
	
// TITLE ADDED ALERT

// !!! Need ambient indicator/alert that a title has been added to the cart - without toggling cart !!!

// BUY WIDGET - IN CART
	$(".buy-widget li, .buy-package li").click(function(){

		var thisEl = $(this);
		var parentForm = thisEl.find("form");

		if (thisEl.hasClass('in-cart'))
			return false;

		// make ajax request
		$.ajax({
			type: 'POST',
			url: webservice,
			data: ({
				'ACTION':'buy',
				'from':parentForm.find("input[name='from']").val(),
				'coursekey_0':parentForm.find("input[name='coursekey_0']").val(),
				'bkn_0':parentForm.find("input[name='bkn_0']").val(),
				'buyitem_0':parentForm.find("input[name='buyitem_0']").val(),
				'title_0':parentForm.find("input[name='title_0']").val(),
				'CSID':getUrlVar(parentForm.attr("action"), "CSID")
			}),
			dataType: 'xml',
			success: function(data) {
				commonSuccessDisplay(thisEl, data);
				successBuyItem(thisEl, data);
			},
			error: commonErrorDisplay,
			loadingID: loadingID++,
			thisEl: thisEl
		});

		return false;
	});


/* ---------------------------------------------------------------------------------------------- */
/* -- AZ: new code below ------------------------------------------------------------------------ */
/* ---------------------------------------------------------------------------------------------- */

	// SEARCH INPUT VALIDATION
	$("form[name='titleSearch']").submit(function(){
		var qInput = $(this).find("input[name='q']");
		var qDefault = (qInput.attr("alt") != '') ? qInput.attr("alt") : qInput.attr("defaultValue");

		if ($.trim(qInput.attr("value")) == "" || qInput.attr("value") == qDefault) {
			alert(qDefault);
		 	return false;
		}
		return true;
	});

	// add loading image
	$('body').bind('ajaxSend', function(e, xhr, settings){
		ajaxShowLoading(settings.thisEl, settings.loadingID);
	}).bind('ajaxComplete', function(e, xhr, settings){
		ajaxHideLoading(settings.loadingID);
	});

	// ACCOUNT UPDATE VALIDATION
	$("#myaccount form[name='updatePrefs']").submit(function(){
		var fvCustType = $(this).find("select[name='fvCustType']").val();
		var fvCustSchool = $(this).find("select[name='fvCustSchool']").val();

		if (fvCustType == '') {
			alert('Please select what type of customer you are.');
			return false;
		}

		if (fvCustType != 'Healthcare Practitioner') {
			if (fvCustSchool == '') {
				alert('Please select your institution.');
				return false;
			}
		}

		return true;
	});

	$("#myaccount form[name='updatePrefs'] select[name='fvCustType']").change(function(){
		if ($(this).val() == 'Healthcare Practitioner')
			$("#EVPrefInstitution").fadeOut();
		else
			$("#EVPrefInstitution").fadeIn();
	});

});



// counter for loading image
var loadingID = 0;
// preload the loading image
var preloadImage = $('<img />').attr({'src':'images/ajax-loader.gif'});

/**
 * Show a loading image anytime an ajax call is fired
 */
function ajaxShowLoading(thisEl, thisID){
	var offset = thisEl.offset();
	var x = (offset.left + (thisEl.outerWidth()/2) - 15) + 'px';
	var y = (offset.top + (thisEl.outerHeight()/2) - 15) + 'px';
	preloadImage.clone().attr({'id':'ajaxLoading'+thisID}).css({'display':'none', 'position':'absolute', 'left':x, 'top':y, 'z-index':'9999'}).appendTo($('body'));
	$('#ajaxLoading'+thisID).fadeIn();
}

/**
 * Hide the loading image when the ajax call returns
 */
function ajaxHideLoading(thisID){
	$('#ajaxLoading'+thisID).fadeOut(400, function() {
		$(this).remove();
	});
}

/**
 * Common information to display when we have a failed response
 */
function commonErrorDisplay(XMLHttpRequest, textStatus, errorThrown) {
	if (textStatus == 'timeout')
		alert('Timeout');
	else if (textStatus == 'error') {
		if (XMLHttpRequest.status == 400)
			alert('400 Bad Request');
		else if (XMLHttpRequest.status == 404)
			alert('404 Not Found');
		else if (XMLHttpRequest.status == 500)
			alert('500 Internal Server Error');
	}
}

/**
 * Common information to display when response has valid xml 
 */
function commonSuccessDisplay(el, data) {

	var noticeMsg = '';
	var errorMsg = '';
	var warningMsg = '';

	$(data).find('NOTICE').find('NOTICE_ROW').each(function() {
		noticeMsg += " - " + $(this).text() + "\n";
	});

	$(data).find('ERROR').find('ERROR_ROW').each(function() {
		errorMsg += " - " + $(this).text() + "\n";
	});

	$(data).find('WARNING').find('WARNING_ROW').each(function() {
		warningMsg += " - " + $(this).text() + "\n";
	});

	if (noticeMsg != '' || errorMsg != '' || warningMsg != '') {
		var msg = '';
		if (noticeMsg != '')
			msg += "Notices:\n" + noticeMsg + "\n";

		if (errorMsg != '')
			msg += "Errors:\n" + errorMsg + "\n";
	
		if (warningMsg != '')
			msg += "Warnings:\n" + warningMsg + "\n";

		alert(msg);
	}

//	showDebugOutput(el, $(data).find('SQLOUTPUT').text());
//
//	showDebugOutput(el, $(data).find('UNKNOWNOUTPUT').text());
}

/**
 * Helper to show debugging output
 */
function showDebugOutput(el, text) {
	if (text != '') {
		text = '<a href="#" onClick="this.parentNode.style.display=\'none\'; return false;">(Hide AJAX Results)</a>' + text;

		var offset = el.offset();
		var markup = {'border':'2px solid #000000', 'background-color':'#f8f8f8', 'padding':'10px',
			'position':'absolute', 'top':offset.top, 'left':offset.left, 'z-index':'9999'};
		$('<div></div>').html(text).css(markup).appendTo($('body'));
	}
}

/**
 * On selection of a list item, make a cooresponding ajax request and update the displays
 */
function selectListItemHome(thisEl) {
	var parentEl = thisEl.parents(".course-widget");
	var parentID = parentEl.attr("id");

	// update the inputs and hide the list
	parentEl.find(".course-widget-query").css({'color':'#302e2c', 'font-style':'normal', 'letter-spacing':'0'});
	parentEl.find(".course-widget-query").attr("value", thisEl.text());
	parentEl.find(".course-widget-value").attr("value", thisEl.attr("value"));
	parentEl.find(".course-widget-inputs").css({'background-position':'0 0'});

	// get the section and form
	var thisEl = parentEl.find(".course-widget-inputs");
	var thisForm = parentEl.parents("form");

	// hide the selection list, then handle the actions
	parentEl.find("ul").slideUp('fast', function() {

		if (parentID == 'cain-school') {
			// a school was selected

			// make sure a school has been selected
			if (thisForm.find("input[name='schoolValue']").val() == '') {
				alert('Please find your school.');
				return false;
			}

			// make ajax request
			$.ajax({
				type: 'GET',
				url: webservice,
				data: ({
					'ACTION':'terms',
					'provider':provider,
					'site':thisForm.find("input[name='schoolValue']").val()
				}),
				dataType: 'xml',
				success: function(data) {
					commonSuccessDisplay(thisEl, data);
					successSelectSchoolHome(data);
				},
				error: commonErrorDisplay,
				loadingID: loadingID++,
				thisEl: thisEl
			});
		}
		else if (parentID == 'cain-term') {
			// a term was selected

			// make sure a term has been selected
			if (thisForm.find("input[name='termValue']").val() == '') {
				alert('Please choose your term.');
				return false;
			}

			// make ajax request
			$.ajax({
				type: 'GET',
				url: webservice,
				data: ({
					'ACTION':'courses',
					'provider':provider,
					'site':thisForm.find("input[name='schoolValue']").val(),
					'term':thisForm.find("input[name='termValue']").val()
				}),
				dataType: 'xml',
				success: function(data) {
					commonSuccessDisplay(thisEl, data);
					successSelectTermHome(data);
				},
				error: commonErrorDisplay,
				loadingID: loadingID++,
				thisEl: thisEl
			});
		}
		else if (parentID == 'cain-course') {
			// a course was selected

			// make sure a course has been selected
			if (thisForm.find("input[name='courseValue']").val() == '') {
				alert('Please choose your course.');
				return false;
			}

			loadingID++;
			ajaxShowLoading(thisEl, loadingID);

			thisForm.submit();

			$(window).unload(function() {
				ajaxHideLoading(loadingID);
			});
		}

	});

	return false;
}

/**
 * Update displays upon successful return of school selection
 */
function successSelectSchoolHome(data){

	thisList = $("#cain-term ul");
	thisList.html("");

	$(data).find('D').find('D_R').each(function() {
		$("<li>").appendTo(thisList).html($(this).find("TERMSNAME").text()).attr("value",$(this).find("TERMSID").text()).click(function(){
			selectListItemHome($(this));
		});
	});

	$("#cain-school").hide();	
	$("#cain-term").fadeIn();
	$("#cain-school-link").removeClass("current");
	$("#cain-school-link").addClass("near");
	$("#cain-school-link").css("cursor", "pointer");
	$("#cain-term-link").removeClass("near");
	$("#cain-term-link").addClass("current");
	$("#cain-course-link").removeClass("far");
	$("#cain-course-link").addClass("near");
}

/**
 * Update displays upon successful return of term selection
 */
function successSelectTermHome(data){

	thisList = $("#cain-course ul");
	thisList.html("");

	$(data).find('D').find('D_R').each(function() {
		$("<li>").appendTo(thisList).html($(this).find("COURSEDESC").text()).attr("value",$(this).find("COURSEKEY").text()).click(function(){
			selectListItemHome($(this));
		});
	});

	$("#cain-term").hide();	
	$("#cain-course").fadeIn();
	$("#cain-school-link").removeClass("near");
	$("#cain-school-link").addClass("far");
	$("#cain-term-link").removeClass("current");
	$("#cain-term-link").addClass("near");
	$("#cain-term-link").css("cursor", "pointer");
	$("#cain-course-link").removeClass("near");
	$("#cain-course-link").addClass("current");
}

/**
 * On selection of a list item, make a cooresponding ajax request and update the displays
 */
function selectListItemBar(thisEl) {

	var parentEl = thisEl.parents(".course-widget");
	var parentID = parentEl.attr("id");
	var thisForm = thisEl.parents("form");
	var inputEl = parentEl.find(".course-widget-inputs");

	parentEl.find("ul").slideUp();

	if (parentID == 'find-school') {
		// a school was selected

		// save inputs
		thisForm.find("input[name='schoolName']").attr("value", thisEl.text());
		thisForm.find("input[name='schoolValue']").attr("value", thisEl.attr("value"));

		// make sure a school has been selected
		if (thisForm.find("input[name='schoolValue']").val() == '') {
			alert('Please find your school.');
			return false;
		}

		// make ajax request
		$.ajax({
			type: 'GET',
			url: webservice,
			data: ({
				'ACTION':'terms',
				'provider':provider,
				'site':thisForm.find("input[name='schoolValue']").val()
			}),
			dataType: 'xml',
			success: function(data) {
				commonSuccessDisplay(inputEl, data);
				successSelectSchoolBar(data);
			},
			error: commonErrorDisplay,
			loadingID: loadingID++,
			thisEl: inputEl
		});
	}
	else if (parentID == 'choose-term') {
		// a term was selected

		// save inputs
		thisForm.find("input[name='termName']").attr("value", thisEl.text());
		thisForm.find("input[name='termValue']").attr("value", thisEl.attr("value"));

		// make sure a term has been selected
		if (thisForm.find("input[name='termValue']").val() == '') {
			alert('Please choose your term.');
			return false;
		}

		// make ajax request
		$.ajax({
			type: 'GET',
			url: webservice,
			data: ({
				'ACTION':'courses',
				'provider':provider,
				'site':thisForm.find("input[name='schoolValue']").val(),
				'term':thisForm.find("input[name='termValue']").val()
			}),
			dataType: 'xml',
			success: function(data) {
				commonSuccessDisplay(inputEl, data);
				successSelectTermBar(data);
			},
			error: commonErrorDisplay,
			loadingID: loadingID++,
			thisEl: inputEl
		});
	}
	else if (parentID == 'choose-course') {
		// a course was selected

		// save inputs
		thisForm.find("input[name='courseName']").attr("value", thisEl.text());
		thisForm.find("input[name='courseValue']").attr("value", thisEl.attr("value"));

		// make sure a course has been selected
		if (thisForm.find("input[name='courseValue']").val() == '') {
			alert('Please choose your course.');
			return false;
		}

		loadingID++;
		ajaxShowLoading(inputEl, loadingID);

		thisForm.submit();

		$(window).unload(function() {
			ajaxHideLoading(loadingID);
		});
	}
}

/**
 * Update displays upon successful return of school selection
 */
function successSelectSchoolBar(data){

	var parentEl = $("#find-school");
	var thisList = $("#choose-term ul");
	thisList.html("");

	$(data).find('D').find('D_R').each(function() {
		$("<li>").appendTo(thisList).html($(this).find("TERMSNAME").text()).attr("value",$(this).find("TERMSID").text()).click(function(){
			selectListItemBar($(this));
		});
	});

	parentEl.find(".course-widget-inputs").css({'background-position':'0 0'});
	parentEl.find(".fader").animate({opacity: 0.60});
	parentEl.find(".course-widget-query").css({'padding-right':'50px'});
	// Active - Cycle
	parentEl.next(".course-widget").find(".fader").animate({opacity: 1});
	parentEl.next(".course-widget").next(".course-widget").find(".fader").animate({opacity: 0.6});
	parentEl.prev(".course-widget").find(".fader").animate({opacity: 0.3});
}

/**
 * Update displays upon successful return of term selection
 */
function successSelectTermBar(data){

	var parentEl = $("#choose-term");
	var thisList = $("#choose-course ul");
	thisList.html("");

	$(data).find('D').find('D_R').each(function() {
		$("<li>").appendTo(thisList).html($(this).find("COURSEDESC").text()).attr("value",$(this).find("COURSEKEY").text()).click(function(){
			selectListItemBar($(this));
		});
	});

	parentEl.find(".course-widget-inputs").css({'background-position':'0 0'});
	parentEl.find(".fader").animate({opacity: 0.60});
	parentEl.find(".course-widget-query").css({'padding-right':'50px'});
	// Active - Cycle
	parentEl.next(".course-widget").find(".fader").animate({opacity: 1});
	parentEl.next(".course-widget").next(".course-widget").find(".fader").animate({opacity: 0.6});
	parentEl.prev(".course-widget").find(".fader").animate({opacity: 0.3});
}

/**
 *
 */
function successRemoveItem(thisEl, data){

	// return if we do NOT have a success flag
	if ($(data).find('FAILURE').text() == 'true')
		return false;

	thisEl.parents("tr").fadeOut(300, function(){ 

		var buy_value = getUrlVar(thisEl.attr("href"), "FVCOND_1") + "_" + getUrlVar(thisEl.attr("href"), "FVNUM_1");

		$(".buy-widget form, .buy-package form").each(function() {
			if ($(this).find("input[name='buyitem_0']").val() == buy_value) {
				$(this).parents("li").removeClass('in-cart');
				$(this).find("a").attr('title', 'Add to Cart');
			}
		});

		// remove the parent row from the DOM
		$(this).remove();

		// update the cart displays
		updateCartDisplays();
	});
}

/**
 *
 */
function successUpdateItem(thisEl, data){

	// return if we do NOT have a success flag
	if ($(data).find('FAILURE').text() == 'true') {
		// reset the select box
		thisEl.val(thisEl.parents("form").find("input[name='FVQTYCHK_1']").val());
		return false;
	}

	// update the current value to check against
	thisEl.parents("form").find("input[name='FVQTYCHK_1']").val(thisEl.val());

	// update the cart displays
	updateCartDisplays();
}

/**
 *
 */
function successBuyItem(thisEl, data){

	// return if we do NOT have a success flag
	if ($(data).find('FAILURE').text() == 'true')
		return false;

	thisEl.addClass('in-cart');
	thisEl.find("a").attr('title', 'Item in Cart');

	var newRow = $('<div></div>').html($(data).find('R_CARTROW').text());
	newRow.find("tr").appendTo($("#cart-items"));

	// update the cart displays
	updateCartDisplays();
}

/**
 *
 */
function updateCartDisplays(){

	// get the cart element
	var thisCart = $("#cart");

	// ReZebra the cart rows
	thisCart.find('#cart-flyout table tr').removeClass('alt');
	thisCart.find('#cart-flyout table tr:odd').addClass('alt');

	// gether the cart stats
	var cartCount = 0;
	var cartSubtotal = 0.0;

	thisCart.find(".cart-row").each(function() {
		count = parseInt($(this).find(".item-quantity select").val(), 10);
		cartCount += count;
		cartSubtotal += (parseFloat($(this).find(".item-price").text().substring(1)) * count);
	});

	// update the displays	
	if (cartCount > 0) {
		if (cartCount == 1)
			thisCart.find("#cart-stats").html("There is <em>1 item</em> in your shopping cart.");
		else
			thisCart.find("#cart-stats").html("There are <em>" + cartCount + " items</em> in your shopping cart.");
		thisCart.find("#cart-empty").css({'display':'none'});
		thisCart.find("#cart-items").css({'display':''});
		thisCart.find("#cart-header .item-title").html("Items <em>" + cartCount + "</em>");
		thisCart.find("#cart-block").css({'display':''});
		thisCart.find("#cart-subtotal").html("Order Subtotal <strong><sup>$</sup>" + cartSubtotal.toFixed(2) + "</strong>");
	}
	else {
		thisCart.find("#cart-stats").html("Your shopping cart is empty.");
		thisCart.find("#cart-empty").css({'display':''});
		thisCart.find("#cart-items").css({'display':'none'});
		thisCart.find("#cart-header .item-title").html("Items <em>0</em>");
		thisCart.find("#cart-block").css({'display':'none'});
		thisCart.find("#cart-subtotal").html("Order Subtotal <strong><sup>$</sup>0.00</strong>");
	}
}

/**
 *
 */
function updateCartActions(){

	// CART - UPDATE ITEM 
//	$("#cart-flyout form select[name='FVQTY_1']").change(function(){
	$("#cart-flyout form select[name='FVQTY_1']").live("change",function(event){
		var thisEl = $(this);
		var parentForm = thisEl.parents("form");
		var curVal = parentForm.find("input[name='FVQTYCHK_1']").val();
		var newVal = thisEl.val();

		if (newVal != curVal) {

			// make ajax request
			$.ajax({
				type: 'GET',
				url: webservice,
				data: ({
					'ACTION':'update',
					'FVNUM_1':getUrlVar(parentForm.attr("action"), "FVNUM_1"),
					'FVCOND_1':getUrlVar(parentForm.attr("action"), "FVCOND_1"),
					'FVQTY_1':newVal,
					'FVQTYCHK_1':curVal,
					'CSID':getUrlVar(parentForm.attr("action"), "CSID")
				}),
				dataType: 'xml',
				success: function(data) {
					commonSuccessDisplay(thisEl, data);
					successUpdateItem(thisEl, data);
				},
				error: commonErrorDisplay,
				loadingID: loadingID++,
				thisEl: thisEl
			});
		}
	});

	// CART - REMOVE ITEM 
//	$(".item-remove a").click(function(){
	$(".item-remove a").live("click",function(event){

		var thisEl = $(this);

		// make ajax request
		$.ajax({
			type: 'GET',
			url: webservice,
			data: ({
				'ACTION':'remove',
				'FVNUM_1':getUrlVar(thisEl.attr("href"), "FVNUM_1"),
				'FVCOND_1':getUrlVar(thisEl.attr("href"), "FVCOND_1"),
				'CSID':getUrlVar(thisEl.attr("href"), "CSID")
			}),
			dataType: 'xml',
			success: function(data) {
				commonSuccessDisplay(thisEl, data);
				successRemoveItem(thisEl, data);
			},
			error: commonErrorDisplay,
			loadingID: loadingID++,
			thisEl: thisEl
		});

		return false;
	});
}

/**
 * Helper to get a url's vars
 */
function getUrlVars(url){
	// drop everything after and including #
	url = url.split('#')[0];

	// drop everything before and including ?
	if (url.indexOf('?') != -1)
		url = url.split('?')[1];

	// save all key/value pairs into an object
	var vars = {};
	url.replace(/([^=&]+)=([^&]*)/gi, function(m, key, value) {
		vars[key] = value;
	});

	return vars;
}

/**
 * Get value of a given url var
 */
function getUrlVar(url, name){
	var r = getUrlVars(url)[name];
	if (r == undefined)
		return '';
	return r;
}

/**
 * helper for detail page
 */
var currTab = new Array();
function setCntTab(tabId, sectId) {
	document.getElementById('cntTb' + sectId + '_' + currTab[sectId]).className	= 'contentTabOff';
	document.getElementById('cntStr' + sectId + '_' + currTab[sectId]).className	= 'hid';
	document.getElementById('cntTb' + sectId + '_' + tabId).className		= 'contentTabOn';
	document.getElementById('cntStr' + sectId + '_' + tabId).className		= 'vis2';
	currTab[sectId]	= tabId;
}

/**
 * Confirm user logout
 */
function packageConfirmLogout(){

	// see if the cart has any items in it
	var thisCart = $("#cart");
	var cartCount = 0;
	thisCart.find(".cart-row").each(function() {
		cartCount += parseInt($(this).find(".item-quantity select").val(), 10);
	});

	// setup logout message
	var str = 'You have selected to log off of the Online Bookstore.\n';
	if (cartCount > 0)
		str += 'All inventory you have reserved in your cart will be released.\n';
	str += '\nContinue?'; 

	// confirm that they want to log out
	if (confirm(str))
		return true;
	else
		return false;
}

/**
 *
 */
function smartFocus(){
	var defaultValue = (this.alt != '') ? this.alt : this.defaultValue;
	if (this.value == defaultValue) {
		this.value = '';
	}
	$(this).css({'color':'#302e2c', 'font-style':'normal', 'letter-spacing':'0'});
}

/**
 *
 */
function smartBlur(){
	var defaultValue = (this.alt != '') ? this.alt : this.defaultValue;
	if ($.trim(this.value) == '') {
		$(this).css({'color':'', 'font-style':'', 'letter-spacing':''});
		this.value = defaultValue;
	}
}



