// Date stuff used in cached pages
var dayofweek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var dayofmonth = ["","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 = ["January","February","March","April","May","June","July","August","September","October","November","December"];

var fontControl = new FontSizer(50,10);

// 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) {
	var artID = sel.options[sel.selectedIndex].value;
	if (artID.length > 0) {
		var 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 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function checkday(aform) {
	if(aform.aday.options[aform.aday.selectedIndex].text === '') {
		aform.aday.options[Days_in_Month[aform.amonth.selectedIndex]-1].selected = true;
		aform.aday.focus();
	}
}

function changer(sel) {
	var aform = sel.form;
	var dy = (aform.aday.options && aform.aday !== null) ? aform.aday.options[aform.aday.selectedIndex].value : 1;
	var mnth = aform.amonth.options[aform.amonth.selectedIndex].value;
	var yer = aform.ayear.options[aform.ayear.selectedIndex].value;
	var cat = aform.acat.options[aform.acat.selectedIndex].value;
	var aid = aform.articleid.value;
	var aURL = "index.cfm?articleid=" + aid + "&ayear=" + yer + "&amonth=" + mnth + "&aday=" + dy + "&acat=" + cat;
	window.location.href = aURL;
}

function monthchange(sel) {
	var mnth = sel.options[sel.selectedIndex].value;
	var aform = sel.form;
	var i = 0;
	if(aform.aday.options && aform.aday !== null) {
		if (mnth == '2'){
			var 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);	
}

// Automatic Print function
// (C) 2000 www.CodeLifter.com
// http://www.codelifter.com
// Free for all users, but leave in this  header
function printWindow() {
	var bV = parseInt(navigator.appVersion, 10);
	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 formatNum(value) {
	value = "" + value; // convert value to string
	var result;
	var precision = 2; // Decimal places
	var width = 13;  // Formatted width in characters
	var padding = "";
	for(var 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;
}

function showProductStatus(f,itemAttribs,ProductStatus) { // Search the stock array for  an itemAttribs and get it's price/availability info to the form
	var i = 0;
	var e;
	var Avail;
	var qty = f.Quantity.value;
	if((qty === '') || (isNaN(parseInt(qty, 10)))) {
		qty = 0;
	} else {
		qty = parseInt(qty, 10);
		if(isNaN(qty)) {
			qty = 1;
		} else if (qty < 0) {
			qty = 0-qty;
		}
		f.Quantity.value = qty;
	}
	var 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;
	}
}
//Functions Used by the commerce templates end
