// date stuff used in cached pages
var dayofweek= new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var dayofmonth= new Array("","1st","2nd","3rd","4th","5th","6th","7th","8th","9th","10th","11th","12th","13th","14th","15th","16th","17th","18th","19th","20th","21st","22nd","23rd","24th","25th","26th","27th","28th","29th","30th","31st");
var months= new Array("January","February","March","April","May","June","July","August","September","October","November","December");

// returns todays date as a formated string
function theDate(){
	var mydate=new Date();
	var year=mydate.getYear();
	if (year < 1000) year+=1900;
	var day=mydate.getDay();
	var month=mydate.getMonth();
	var daym=mydate.getDate();
	var todaysDate="  "+dayofweek[day]+" "+dayofmonth[daym]+" "+months[month]+" "+year;
	return todaysDate;
}

// Search box validation used for both the search box and the main search page
function searchpagevalidate(ref) {
	if (ref.keyword.value != '')
		{
		return true;
		}
	else
		{
		alert('Need a keyword to \nsearch on!');
		return false;
		}		
}
function gotoarticle(sel)
	{
		artID=sel.options[sel.selectedIndex].value;
		if (artID.length > 0){
			aURL="./index.cfm?articleid="+artID;
			window.location.href = aURL;
		}
	}
	
//scripts used in the forum template
// check all fields have been entered.
function  _forum_checkThreadForm(_forum_this){
    if  (_forum_this.forum_topic.value.length ==0){
		alert("You must enter a Title.");
		return false;
	}
    if  (_forum_this.forum_username.value.length ==0){
		alert("You must enter your name to post to the forum.");
		return false;
	}
    if  (_forum_this.forum_body.value.length ==0){
		alert("In order to post you need to enter text into the message.");
		return false;
	}
	return true;
} 
//variables and functions used in the calendar template
var Days_in_Month = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
function monthchange(sel){
	mnth=sel.options[sel.selectedIndex].value;
	aform=sel.form;
	if(aform.aday != null){
		if (mnth =='2'){
			theYear=aform.ayear.options[aform.ayear.selectedIndex].value;
			Days_in_Month[1] = ((theYear % 400 == 0) || ((theYear % 4 == 0) && (theYear % 100 !=0))) ? 29 : 28;
		}
		for(i=27; i < Days_in_Month[mnth-1]; i++){
			aform.aday.options[i].text=i+1;
		}
		for(i=Days_in_Month[mnth-1]; i < 31; i++){
			aform.aday.options[i].text='';
		}
		checkday(aform);
	}
	changer(sel);	
}

function checkday(aform){
	if (aform.aday.options[aform.aday.selectedIndex].text==''){
		aform.aday.options[eval(Days_in_Month[aform.amonth.selectedIndex]-1)].selected=true;
		aform.aday.focus();
	}
}

function changer(sel)
{
	aform=sel.form;
	dy=(aform.aday != null)?aform.aday.options[aform.aday.selectedIndex].value:1;
	mnth=aform.amonth.options[aform.amonth.selectedIndex].value;
	yer=aform.ayear.options[aform.ayear.selectedIndex].value;
	aid=aform.articleid.value;
	aURL="./index.cfm?articleid="+aid+"&ayear="+yer+"&amonth="+mnth+"&aday="+dy;
	window.location.href = aURL;
}

// automatic print function
// (C) 2000 www.CodeLifter.com
// http://www.codelifter.com
// Free for all users, but leave in this  header

function printWindow(){
   bV = parseInt(navigator.appVersion);
   if (bV >= 4) window.print();
}

//Functions Used by the commerce templates
function checkNum(id){	// Check that the quantity is a positive integer
	var checkstr = /^[1-9][0-9]*$/;
	if  ( checkstr.test(id.value) ){ 
		id.value = id.value;	
	}else{
		alert ('You must specify a valid quantity');	
		id.value = 1;
	}
}

function showProductStatus(f,itemAttribs,ProductStatus){ // Search the stock array for  an itemAttribs and get it's price/availability info to the form
	qty = f.Quantity.value;
	if( (qty == '') || (isNaN(parseInt(qty))) ){
		qty = 0;  
	}else{
		qty = parseInt(qty);
		if (isNaN(qty)){
			qty = 1;
		}else if (qty < 0){
			qty = 0-qty;
		}
		f.Quantity.value = qty;
	}
	selectAttribs=""; // Variable to hold Attributes selected by the user in a CSV string
	for(i = 0; i < f.length; i++) // Scan the form and get product ProductStatus into PID
	{
		e = f.elements[i];
		if(e.name !=null && e.name.substr(0,7) == "Attrib_"){ // Get the selection from the form's DROP DOWN lists
			if(e.type == "select-one") selectAttribs=selectAttribs+e.options[e.selectedIndex].value+",";
			if(e.type == "hidden") selectAttribs=selectAttribs+e.value+",";
		}
	}
	selectAttribs = selectAttribs.substr(0,selectAttribs.length-1); // Loose that final comma!
	for(i = 1; i < itemAttribs.length-1; i++){ 	// Search the itemAttribs array for the Selected Attributes
		if(itemAttribs[i] == selectAttribs){break;}
	} // If we get to here without a 'break' it's Out of Stock in that config.
	// Put the details on to the form display
	if(ProductStatus[i].STK == 0 || ProductStatus[i].STK == -1){
		Avail = 'Unavailable';
	}else{
		Avail = ProductStatus[i].STK ;
	}
	f.Availability.value = Avail;
	if (Avail != 'Unavailable'){
		// the following may or may not exist
		if (f.PriceIncVAT != null)f.PriceIncVAT.value = formatNum(ProductStatus[i].PRCinc);
		if (f.PriceExVAT != null)f.PriceExVAT.value = formatNum(ProductStatus[i].PRCex);
		if (f.VAT != null)f.VAT.value = formatNum(ProductStatus[i].VAT);
		if (f.TotalIncVAT != null)f.TotalIncVAT.value = formatNum(f.PriceIncVAT.value * qty);
		//these always exist
		f.Code.value = ProductStatus[i].CID;
		f.ProductOptionID.value = ProductStatus[i].PID;
		f.basketaction.style.display='block'
	}else{
		// the following may or may not exist
		if (f.PriceIncVAT != null)f.PriceIncVAT.value = "N/A";
		if (f.PriceExVAT != null)f.PriceExVAT.value = "N/A";
		if (f.VAT != null)f.VAT.value = "N/A";
		if (f.TotalIncVAT != null)f.TotalIncVAT.value = "N/A";
		//these always exist
		f.Code.value = "N/A"; 
		f.ProductOptionID.value = "N/A";
		f.basketaction.style.display='none';
	}
} 	

function checkAvail(f){
	if(f.Availability.value == "" || f.Availability.value == "Unavailable"){
		alert("   Sorry, this item is not\navailable with the options\n    you have selected.");
		return false;
	}else{
		return true;
	}
}

// Set-up external links for XHTML where the target attribute has been deprecated
function externalLinks() { 
	 if (!document.getElementsByTagName) return; 
	 var anchors = document.getElementsByTagName("a"); 
	 for (var i=0; i < anchors.length; i++) { 
		  var anchor = anchors[i]; 
		  if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") {
				anchor.target = "_blank"; 
		  }
	 }
	 var forms = document.getElementsByTagName("form");
	 for (var j=0; j <forms.length; j++)
	 {
		  var form = forms[j];
		  if (form.getAttribute("id") != null && form.getAttribute("id").indexOf("pollform") == 0)
		  {
				form.target = "_blank";
		  }
	 }
}

function formatNum(value){
	value = "" + value // convert value to string
	precision = 2; // Decimal places
	width = 13;  // Formatted width in characters
	padding = "";
	for(p=0;p<width;p++) padding+=" "; // Make a padding string
	var whole = "" + Math.round(value * Math.pow(10, precision));
	var decPoint = whole.length - precision;
	if(decPoint != 0){
		result = whole.substring(0, decPoint);
		result += ".";
		result += whole.substring(decPoint, whole.length);
	}else{
		result = whole;
	}
	result = padding+result; // Left pad numbers so they line up
	result = result.substring(result.length-width, result.length);		   
	return result;
}
//Functions Used by the commerce templates end

//Functions used by captchas
function EvalSound(soundUrl) {
  	var thissound=document.getElementById("audiocaptcha");
  	thissound.innerHTML = "<embed src='" + soundUrl + "' hidden=true autostart=true loop=false' />";
}
//Functions used by captchas end


// Rotate home page carousel images
function homeCarousel(el, ct) {
	var currImg = 0;
	// Loop through all images to find the current one
	for(var i = 1; i <= ct; i++) {
		var img = document.getElementById(el + i);
		if(img) {
			if(img.style.display == 'block' && currImg == 0) {
				// Got it, remember it
				currImg = i;
			}
			// Hide the image
			img.style.display = 'none';
		}
	}
	// Now switch on the next image
	img = document.getElementById(el + ((currImg == ct) ? 1 : (currImg + 1)));
	img.style.display = 'block';
}

// FORM HANDLER FUNCTIONS
// Array for form default values to go in
var formFocusArr = new Array();

// Store default values and apply event handlers to form elements
function formInitialiseFocus(f) {
	var fArr = f.split(',');
	// Loop through all forms in the document
	for(var i = 0; i < document.forms.length; i++) {
		for(var j = 0; j < fArr.length; j++) {
			// Is this in the list of ones we want?
			if(document.forms[i].id == fArr[j]) {
				var tFrm = document.forms[i];
				// Loop through all elements to find text fields
				for(var k = 0; k < tFrm.elements.length; k++) {
					if(tFrm.elements[k].type == 'text' && (typeof tFrm.elements[k].onfocus == 'undefined' || !tFrm.elements[k].onfocus) && (typeof tFrm.elements[k].onblur == 'undefined' || !tFrm.elements[k].onblur)) {
						// Store default value in array
						var tEl = tFrm.elements[k];
						var tRef = (tFrm.id + '_' + tEl.id);
						formFocusArr[tRef] = tEl.value; 
						// Assign onfocus and onblur handlers
						tEl.onfocus = function() { formOnFocus(this); };
						tEl.onblur = function() { formOnBlur(this); };
					}
				}
			}
		}
	}
}
// Form onfocus event handler 
function formOnFocus(e) {
	var n = formGetForm(e);
	if(n.nodeName == 'FORM') {
		// Clear the field if it matches the default value
		if(e.value == formFocusArr[n.id + '_' + e.id])
			e.value = '';
	}
}
// Form onblur event handler
function formOnBlur(e) {
	var n = formGetForm(e);
	if(n.nodeName == 'FORM') {
		// Restore the field to default if it is blank
		if(e.value == '')
			e.value = formFocusArr[n.id + '_' + e.id];
	}
}
// Find the form an element belongs to
function formGetForm(e) {
	var n = document.getElementById(e.id);
	while(n.nodeName != 'FORM' && n.parentNode) {
	    n = n.parentNode;
	}
	return n;
}
