﻿<!--

// catalogue tab activation (by url anchor)

	var storeCatTabName = new Array();
	
	function storeTabAnchor(getTabName, getTabIndex) {
		storeCatTabName[getTabIndex] = getTabName;
	}
	
	function catTabs() {
		if(graphicVersion) {
			var getUrlAnchor = unescape(self.document.location.hash.substring(1)).toLowerCase();
			for(i=1;i<storeCatTabName.length;i++) {
				if(getUrlAnchor == storeCatTabName[i]) {
					doTab(i);
					window.scrollTo(0,0);
				}
			}
		}
	}
	
// Catalogue list Expander/Collapser code

	var listExpanderArrow1off = new Image();
	listExpanderArrow1off.src = "\/images\/catalogue\/listings\/expander\/list-expander-closed-off.gif";
	var listExpanderArrow1over = new Image();
	listExpanderArrow1over.src = "\/images\/catalogue\/listings\/expander\/list-expander-closed-over.gif";
	var listExpanderArrow2 = new Image();
	listExpanderArrow2.src = "\/images\/catalogue\/listings\/expander\/list-expander-stage1.gif";
	var listExpanderArrow3 = new Image();
	listExpanderArrow3.src = "\/images\/catalogue\/listings\/expander\/list-expander-stage2.gif";
	var listExpanderArrow4off = new Image();
	listExpanderArrow4off.src = "\/images\/catalogue\/listings\/expander\/list-expander-open-off.gif";
	var listExpanderArrow4over = new Image();
	listExpanderArrow4over.src = "\/images\/catalogue\/listings\/expander\/list-expander-open-over.gif";
	
	var activeSection = null;
	var sectionHeights = new Array();
	var sectionExpanderActive = false;
	var listExpanderIncrement = 0;
	var listExpanderInterval = null;
	var sectionTempHeight = 0;
	var listExpanderIcon;
	
	function hoverListExpanderIcon(getIndex,getMode) {
		if(!sectionExpanderActive) {
			if(getMode) {
				if(parseFloat(document.getElementById("s" + getIndex).offsetHeight) > 10) {
					document.getElementById("s" + getIndex + "_switch").getElementsByTagName("IMG")[0].src = listExpanderArrow4over.src;
				} else {
					document.getElementById("s" + getIndex + "_switch").getElementsByTagName("IMG")[0].src = listExpanderArrow1over.src;
				}
			} else {
				if(parseFloat(document.getElementById("s" + getIndex).offsetHeight) > 10) {
					document.getElementById("s" + getIndex + "_switch").getElementsByTagName("IMG")[0].src = listExpanderArrow4off.src;
				} else {
					document.getElementById("s" + getIndex + "_switch").getElementsByTagName("IMG")[0].src = listExpanderArrow1off.src;
				}
			}
		}
	}

	function toggleSection(sectionIndex) {
		if(sectionExpanderActive == false && document.getElementById("s" + sectionIndex)) {
			sectionExpanderActive = true;
			activeSection = sectionIndex;
			thisSection = document.getElementById("s" + sectionIndex);
			listExpanderIcon = document.getElementById("s" + sectionIndex + "_switch").getElementsByTagName("IMG")[0];
			if(parseFloat(thisSection.offsetHeight) > 10) {
				// close
				sectionHeights[activeSection] = parseFloat(thisSection.offsetHeight);
				sectionTempHeight = sectionHeights[activeSection];
				listExpanderIncrement = sectionHeights[activeSection] / 10;
				listExpanderInterval = setInterval("resizeListExpander(false);", 10);
				thisSection.style.overflowY = "hidden";
				animateListExpanderIcon(false);
			} else {
				// open
				sectionTempHeight = 0;
				listExpanderIncrement = sectionHeights[activeSection] / 10;
				listExpanderInterval = setInterval("resizeListExpander(true);", 10);
				animateListExpanderIcon(true);
			}
		}
	}
	
	function resizeListExpander(getMode) {
		if(!getMode) {
			// close
			sectionTempHeight -= listExpanderIncrement;
			if(sectionTempHeight <= 0) {
				document.getElementById("s" + activeSection).style.display = "none";
				clearInterval(listExpanderInterval);
				listExpanderInterval = null;
				sectionExpanderActive = false;
				listExpanderIcon.src = listExpanderArrow1off.src;
			} else {
				document.getElementById("s" + activeSection).style.height = sectionTempHeight + "px";
			}
		} else {
			// open
			sectionTempHeight += listExpanderIncrement;
			if(sectionTempHeight >= sectionHeights[activeSection]) {
				document.getElementById("s" + activeSection).style.height = sectionHeights[activeSection] + "px";
				clearInterval(listExpanderInterval);
				listExpanderInterval = null;
				sectionExpanderActive = false;
				thisSection.style.overflowY = "visible";
				listExpanderIcon.src = listExpanderArrow4off.src;
			} else {
				document.getElementById("s" + activeSection).style.height = sectionTempHeight + "px";
				document.getElementById("s" + activeSection).style.display = "block";
			}
		}
	}
	
	function animateListExpanderIcon(getMode) {
		if(getMode) {
			setTimeout("listExpanderIcon.src = listExpanderArrow2.src;", 50);
			setTimeout("listExpanderIcon.src = listExpanderArrow3.src;", 100);
			setTimeout("listExpanderIcon.src = listExpanderArrow4over.src;", 150);
		} else {
			setTimeout("listExpanderIcon.src = listExpanderArrow3.src;", 50);
			setTimeout("listExpanderIcon.src = listExpanderArrow2.src;", 100);
			setTimeout("listExpanderIcon.src = listExpanderArrow1over.src;", 150);
		}
	}
	
	
// Advanced search form functions

	function validateAdvSearch() {
		criteriaFound = false;
		if(!isEmptyField(document.getElementById("advs_BookTitle"))) criteriaFound = true;
		if(!isEmptyField(document.getElementById("advs_Keyword"))) criteriaFound = true;
		if(!isEmptyField(document.getElementById("advs_Series"))) criteriaFound = true;
		if(!isEmptyField(document.getElementById("advs_Author"))) criteriaFound = true;
		if(!isEmptyField(document.getElementById("advs_Illustrator"))) criteriaFound = true;
		if(!isEmptyField(document.getElementById("advs_ISBN_code"))) criteriaFound = true;
		if(document.getElementById("advs_Keystage").selectedIndex > 0) criteriaFound = true;
		if(document.getElementById("advs_Age").selectedIndex > 0) criteriaFound = true;
		if(!isEmptyField(document.getElementById("advs_LexileMeasure"))) criteriaFound = true;
		
		// return
		if(criteriaFound) {
			return true;
		} else {
			alert("You have not entered any search criteria.\nPlease try again");
			return false;
		}
	}

	function advSearchSubmit() {
		if(validateAdvSearch()) document.getElementById("advSearchForm").submit();
	}

	
// Catalogue tabs

	function doTab(clickTab) {
		if(graphicVersion) {
			if(clickTab != activeTab) {
				// hide old tab content
				document.getElementById("topTabs").getElementsByTagName("DD")[activeTab-1].className = "tabOff";
				document.getElementById("tabContent" + activeTab).className = "tabContentOff";
				// show new tab content
				document.getElementById("topTabs").getElementsByTagName("DD")[clickTab-1].className = "tabOn";
				document.getElementById("tabContent" + clickTab).className = "tabContentOn";
				// store new tab
				activeTab = clickTab;
				// summary tab only content - hide/show
				if(activeTab == 1) {
					summaryDisplayMode = "block";
				} else {
					summaryDisplayMode = "none";
				}
				if(document.getElementsByClassName) {
					findSummaryTabOnly = document.getElementsByClassName("summaryTabOnly");
				} else {
					findSummaryTabOnly = getElementsByClass("summaryTabOnly",document,"div");
				}
				for(x=0; x<findSummaryTabOnly.length ;x++) {
					// set display mode for all found divs
					findSummaryTabOnly[x].style.display = summaryDisplayMode;
				}
			}
		}
	}
	
// Catalogue review form

	if(graphicVersion) {
		var reviewFormVisible = false;
	} else {
		var reviewFormVisible = true;
	}
	
	var reviewFormExpanderMax;
	var reviewFormExpanderHeight = 0;
	var reviewFormExpanderIncrement = 0;
	
	function showReviewForm() {
		if(!reviewFormVisible) {
			document.getElementById("reviewFormLink").style.display = 'none';
			reviewFormVisible = true;
			document.getElementById("reviewFormExpander").style.height = "0px";
			document.getElementById("reviewFormExpander").style.display = 'block';
			reviewFormExpanderMax = parseFloat(document.getElementById("reviewForm").offsetHeight);
			reviewFormExpanderIncrement = reviewFormExpanderMax/20;
			for(i=1;i<=20;i++) {
				setTimeout("document.getElementById('reviewFormExpander').style.height = '" + i*reviewFormExpanderIncrement + "px';", i*20);
			}
		}
	}
	
	var badChars = new Array("<",">","\/","=","%","@");
	
	function detectBadChars(srcText) {
		badFound = false;
		for(i=0;i<badChars.length;i++) {
			if(srcText.indexOf(badChars[i]) > -1) badFound = true;
		}
		return badFound;
	}
	
	function validateReviewForm(getForm) {
		if(ajaxFormActive) {
			return false;
		} else {
			alertMessage = "";
			if(isEmptyField(document.getElementById("reviewAuthor"))) {
				document.getElementById("tick1").className = "formAlert";
				alertMessage += "\nYou must enter YOUR NAME.";
			}
			if(isEmptyField(document.getElementById("reviewPassword"))) {
				alertMessage += "\nYou must enter a PASSWORD.";
				document.getElementById("tick2").className = "formAlert";
			}
			if(isEmptyField(document.getElementById("reviewTitle"))) {
				alertMessage += "\nYou must enter a REVIEW TITLE.";
				document.getElementById("tick3").className = "formAlert";
			}
			if(isEmptyField(document.getElementById("reviewContent"))) {
				alertMessage += "\nYou must enter some REVIEW CONTENT.";
				document.getElementById("tick4").className = "formAlert";
			}
			//invalid characters
			if(detectBadChars(document.getElementById("reviewAuthor").value)) {
				alertMessage += "\nThe YOUR NAME field must not contain the following characters: <, >, /, =, % or @.";
				document.getElementById("tick1").className = "formAlert";
			}
			if(detectBadChars(document.getElementById("reviewTitle").value)) {
				alertMessage += "\nThe REVIEW TITLE field must not contain the following characters: <, >, /, =, % or @.";
				document.getElementById("tick3").className = "formAlert";
			}
			if(detectBadChars(document.getElementById("reviewContent").value)) {
				alertMessage += "\nThe REVIEW CONTENT field must not contain the following characters: <, >, /, =, % or @.";
				document.getElementById("tick4").className = "formAlert";
			}
			if(alertMessage!="") {
				alert("There are problems with this form:" + alertMessage);
				return false;
			} else {
				if(ajaxReviewSubmit()) {
					return false;
				} else {
					return true;
				}
			}
		}
	}
	
	function submitReview() {
		if(ajaxFormActive) {
			return false;
		} else {
			if(validateReviewForm()) {
				if(ajaxReviewSubmit()) {
					return false;
				} else {
					document.getElementById("submitReviewForm").submit();
				}
			}
		}
	}
	
	var thisRequest;
	var thisRequestTimeout;
	
	function doRequestTimeout() {
		thisRequest.onreadystatechange = null;
		thisRequest = null;
		// report error
		ajaxReviewReportState(3);
	}
	
	function ajaxReviewSubmit() {
		getReviewForm = document.getElementById("submitReviewForm");
		// build ajax url
		ajaxURL = "/aspnet-code-library/usborne-catalogue-ajax-submit-review.aspx";
		// add all form values to query
		ajaxParameters = "mode=ajax";
		for(i=0;i<getReviewForm.elements.length;i++) {
			ajaxParameters += "&" + escape(getReviewForm.elements[i].name) + "=" + escape(getReviewForm.elements[i].value);
		}
		// branch for native XMLHttpRequest object
		if (window.XMLHttpRequest) {
			thisRequestTimeout = setTimeout("doRequestTimeout();",10000);  // 10 second timeout
			thisRequest = new XMLHttpRequest();
			thisRequest.onreadystatechange = ajaxReviewProcessResponse;
			thisRequest.open("POST", ajaxURL, true);
      		thisRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      		thisRequest.setRequestHeader("Content-length", ajaxParameters.length);
      		thisRequest.setRequestHeader("Connection", "close");
			thisRequest.send(ajaxParameters);
			ajaxFormActive = true;
			ajaxReviewReportState(1);
			return true
		// branch for IE/Windows ActiveX version
		} else if (window.ActiveXObject) {
			thisRequestTimeout = setTimeout("doRequestTimeout();",10000);  // 10 second timeout
			thisRequest = new ActiveXObject("Microsoft.XMLHTTP");
			if (thisRequest) {
				thisRequest.onreadystatechange = ajaxReviewProcessResponse;
				thisRequest.open("POST", ajaxURL, true);
      			thisRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      			thisRequest.setRequestHeader("Content-length", ajaxParameters.length);
      			thisRequest.setRequestHeader("Connection", "close");
				thisRequest.send(ajaxParameters);
				ajaxFormActive = true;
				ajaxReviewReportState(1);
				return true;
			} else return false;
		} else {
			return false;
		}
	}
	
	function ajaxReviewProcessResponse() {
		// only if thisRequest readyState shows "complete" [code 4]
		if (thisRequest.readyState == 4) {
			// clear timeout
			clearTimeout(thisRequestTimeout);
			thisRequestTimeout = null;
			// only if status "OK" [code 200]
			if (thisRequest.status == 200) {
				// OK
				// check xml result
				thisResult = parseInt(thisRequest.responseXML.getElementsByTagName("result")[0].firstChild.data);
				if(thisResult == 1) {
					// Success
					setTimeout("ajaxReviewReportState(2)",500);
				} else {
					// Error
					setTimeout("ajaxReviewReportState(3)",500);
				}
			} else {
				// Error
				setTimeout("ajaxReviewReportState(3)",500);
			}
		}
	}
	
	function ajaxReviewReportState(getMode) {
		resetButtonCode = "<p><a class='submitButton' href='javascript:submitReview();'><strong>Submit this review<\/strong><\/a><\/p>";
		switch(getMode) {
			case 1:
				document.getElementById("reviewSubmitArea").innerHTML = "<p><img src='\/images\/common\/forms\/submit-busy-indicator.gif' width='16' height='16' border='0' align='absmiddle' alt='processing indicator' /> Processing&hellip;<\/p>";
				break
			case 2:
				document.getElementById("reviewSubmitArea").innerHTML = "<p>Thank you. Your review has been submitted.<\/p>";
				setTimeout("document.getElementById('reviewSubmitArea').innerHTML = resetButtonCode;ajaxFormActive = false;", 4000);
				// clear form fields
				document.getElementById("reviewAuthor").value = "";
				document.getElementById("reviewPassword").value = "";
				document.getElementById("reviewTitle").value = "";
				document.getElementById("reviewContent").value = "";
				document.getElementById("tick1").className = "formTickEmpty";
				document.getElementById("tick2").className = "formTickEmpty";
				document.getElementById("tick3").className = "formTickEmpty";
				document.getElementById("tick4").className = "formTickEmpty";
				break
			case 3:
				document.getElementById("reviewSubmitArea").innerHTML = "<p>Error: Sorry, we couldn't submit your review at this time.<\/p>";
				setTimeout("document.getElementById('reviewSubmitArea').innerHTML = resetButtonCode;ajaxFormActive = false;", 4000);
				break
		}
	}
	
// Catalogue notify form
	
	function validateNotifyForm(getForm) {
		if(ajaxFormActive) {
			return false;
		} else {
			alertMessage = "";
			if(isEmptyField(document.getElementById("notifyEmail"))) {
				alertMessage += "\nYou must enter YOUR EMAIL ADDRESS.";
			}
			if(alertMessage!="") {
				alert("There are problems with this form:" + alertMessage);
				return false;
			} else {
				if(ajaxNotificationSubmit()) {
					return false;
				} else {
					return true;
				}
			}
		}
	}
	
	function submitNotification() {
		if(ajaxFormActive) {
			return false;
		} else {
			if(validateNotifyForm()) {
				if(ajaxNotificationSubmit()) {
					return false;
				} else {
					document.getElementById("notifyForm").submit();
				}
			}
		}
	}
	
	function ajaxNotificationSubmit() {
		getNotifyForm = document.getElementById("notifyForm");
		// build ajax url
		ajaxURL = "/aspnet-code-library/usborne-catalogue-ajax-submit-notification.aspx?mode=ajax";
		// add all form values to query
		for(i=0;i<getNotifyForm.elements.length;i++) {
			ajaxURL += "&" + escape(getNotifyForm.elements[i].name) + "=" + escape(getNotifyForm.elements[i].value);
		}
		// branch for native XMLHttpRequest object
		if (window.XMLHttpRequest) {
			thisRequest = new XMLHttpRequest();
			thisRequest.onreadystatechange = ajaxNotifyProcessResponse;
			thisRequest.open("GET", ajaxURL, true);
			thisRequest.send(null);
			ajaxFormActive = true;
			ajaxNotifyReportState(1);
			return true
		// branch for IE/Windows ActiveX version
		} else if (window.ActiveXObject) {
			thisRequest = new ActiveXObject("Microsoft.XMLHTTP");
			if (thisRequest) {
				thisRequest.onreadystatechange = ajaxNotifyProcessResponse;
				thisRequest.open("GET", ajaxURL, true);
				thisRequest.send();
				ajaxFormActive = true;
				ajaxNotifyReportState(1);
				return true;
			} else return false;
		} else {
			return false;
		}
	}
	
	function ajaxNotifyProcessResponse() {
		// only if thisRequest readyState shows "complete" [code 4]
		if (thisRequest.readyState == 4) {
			// only if status "OK" [code 200]
			if (thisRequest.status == 200) {
				// OK
				// check xml result
				thisResult = parseInt(thisRequest.responseXML.getElementsByTagName("result")[0].firstChild.data);
				if(thisResult == 1) {
					// Success
					setTimeout("ajaxNotifyReportState(2)",500);
				} else {
					// Error
					setTimeout("ajaxNotifyReportState(3)",500);
				}
			} else {
				// Error
				setTimeout("ajaxNotifyReportState(3)",500);
			}
		}
	}
	
	function ajaxNotifyReportState(getMode) {
		resetButtonCode = "<p class='notifySubmitButton'><a href='javascript:submitNotification();'><strong>Send<\/strong><\/a><\/p>";
		switch(getMode) {
			case 1:
				document.getElementById("notifySubmitArea").innerHTML = "<p><img src='\/images\/common\/forms\/submit-busy-blue-indicator.gif' width='16' height='16' border='0' align='absmiddle' alt='processing indicator' /><\/p>";
				break
			case 2:
				document.getElementById("notifySubmitArea").innerHTML = "<p><strong>Thank you.</strong><\/p>";
				setTimeout("document.getElementById('notifySubmitArea').innerHTML = resetButtonCode;ajaxFormActive = false;", 4000);
				// clear form fields
				document.getElementById("notifyEmail").value = "";
				break
			case 3:
				document.getElementById("notifySubmitArea").innerHTML = "<p><strong>Error.</strong><\/p>";
				setTimeout("document.getElementById('notifySubmitArea').innerHTML = resetButtonCode;ajaxFormActive = false;", 4000);
				break
		}
	}

// -->
