/*
 *	Filename	:	functions.js
 *	Author		:	Rajesh Wadhwani
 *	Created		:	September, 2008
 *	Modified	:	09-Oct-2008, 12-Aug-2009, 18-Aug-2009
 *
 *	Purpose		:	This is the javascript file for the cartridgesos website.
 *					All javascript functions on this website are stored in this file.
 *	Copyright	:	Room 101 Ltd (http://www.room101.co.uk)
 */

/* *********************** */
/* Postcode page functions */
/* *********************** */

var browserHeight = window.innerHeight;

function getBrowserHeight() {
	document.getElementById("postcodeTable").style.height = browserHeight + 'px';
	document.getElementById("postcodeTable").style.visibility = "visible";
}

function hidePostcodeText() {
	if (document.getElementById("postcode").value == "Postcode")
		document.getElementById("postcode").value = "";
}

function checkPostcode() {
	if (document.getElementById("postcode").value == "")
		document.getElementById("postcode").value = "Postcode";
}

function validatePostcode() {
	if ((document.getElementById("postcode").value == "Postcode") || (document.getElementById("postcode").value == "")) {
		alert("Please enter your postcode!");
		return false;
	}
	return validPostcode();
}

function validPostcode() {
	var postcode=document.postcode_frm.postcode;
	var pcodeFilter=/^[A-Za-z]{1,2}[0-9]{1,2}[A-Za-z]? [0-9]{1,2}[A-Za-z]{1,2}$/;
	if(pcodeFilter.test(postcode.value)==false) {
		alert('Please enter a valid post code! \(e.g. W1 2AB\)');
		document.postcode_frm.postcode.focus();
		return false;
	}
	else
		return true;
}
	
function resetPcode() {
	document.postcode_frm.postcode.value="";
}


/* ****************** */
/* Homepage functions */
/* ****************** */

function startUp() {
	//document.getElementById('selected-submenu').value;
}

/**
  * Function to display the greeting message, date of the week, date, month, year and 
  * time, and displays this on the element ID.
  * Then this function calls itself every minute.
  * Author:		Rajesh Wadhwani
  * Created: 	25-09-2008
  * Modified:	01-10-2008
  */
function timeGreeting() {
	//var myDate = new Date();
	//alert(myDate.format("M jS, Y")); // May 11th, 2006

	var time = new Date();
	var hours = time.getHours();
	var min = time.getMinutes();
	var sec = time.getSeconds();
	var todays_date = time.getDate();
	
	var date = getDay(time.getDay()) + ' ' + todays_date;
	
	var suffix = getSuffix(todays_date);	//Call function to get suffix for the date
	date = date + suffix + ' ' + getMonth(time.getMonth()) + ' ' + time.getFullYear();
	
	//dateFormat(time, "dddd, mmmm dS, yyyy, h:MM:ss TT");
	
	if (hours > 11){
		apm = "pm";
		//alert('Time check ' + hours);
	}else{
		apm = "am";
	}
	
	if (min <= 9){
		min = "0" + min;
	}
	
	if (apm == "pm"){
		if (hours > 16)
			var greeting = "Good evening";
		else
			var greeting = "Good afternoon";
	}
	else
		var greeting = "Good morning";
	
	if(hours > 12){
		hours = hours - 12;		//Round back to 12 hour clock
	}
	
	var msg = greeting + ", today is " + date + ', ' + hours + '.' + min + apm + '  ';
	document.getElementById('time-greeting').innerHTML = msg;		//Display the message on the browser
	
	setTimeout("timeGreeting()", 10000);		//Recursive function - calls itself after every 10 seconds (updates time every 10 seconds)
}

/*
 *	Function to get day of the week
 * @param - intDay: Contains the current day of the week in numbers (0-6)
 */
function getDay(intDay){
    var dayArray = new Array("Sunday", "Monday", "Tuesday", "Wednesday", 
                         "Thursday", "Friday", "Saturday");
   	return dayArray[intDay];
}

/*
 *	Function to get month of the year
 *	@param - intMonth: Contains the current month in numeric (0-11)
 */
function getMonth(intMonth){
    var monthArray = new Array("January", "February", "March", "April", "May", "June", "July",
    					"August", "September", "October", "November", "December");
   	return monthArray[intMonth];
}

/*
 *	Function to get suffix (st, nd, rd, th) for the date passed in the parameter
 * @param - todaysDate: Contains the current date in numeric (1-31)
 */
function getSuffix(todaysDate){
	var suffix = "";
	var suffix_st = new Array(1, 21, 31);
	var suffix_nd = new Array(2, 22);
	var suffix_rd = new Array(3, 23);
		
	for (i=0 ; i<suffix_st.length ; i++){
		if (suffix_st[i] == todaysDate)
			suffix = "st";
	}
	if (suffix == ""){
		for (i=0 ; i<suffix_nd.length ; i++){
			if (suffix_nd[i] == todaysDate)
				suffix = "nd";
		}
	}
	if (suffix == ""){
		for (i=0 ; i<suffix_rd.length ; i++){
			if (suffix_rd[i] == todaysDate)
				suffix = "rd";
		}
	}
	if (suffix == "")
		suffix = "th";
	
	return suffix;
}


/* Function will be called onfocus of inputbox field */
function hideText(eleID, defaultText) {
	if (document.getElementById(eleID).value == defaultText)
		document.getElementById(eleID).value = "";
}

/* Function will be called onblue of inputbox field */
function checkText(eleID, defaultText) {
	if (document.getElementById(eleID).value == "")
		document.getElementById(eleID).value = defaultText;
}

/* Function called on click of topmenu to show its submenu and hide all other submenu's */
function showSubmenu(eleID) {
	// Get all the submenu ul id to show/hide them using a loop
	var submenu = new Array ("submenu-1", "submenu-2", "submenu-3", "submenu-4", "submenu-5", "submenu-6", "submenu-7");
	
	for (i=0 ; i<submenu.length ; i++) {
		/* Condition : just to make sure it doesn't hide the current div if 
		   same submenu is to be shown or it will be seen as a blink in user's 
		   eyes :: Hiding and then display the same submenu again - not efficient
		*/
		if (submenu[i] != eleID)
			document.getElementById(submenu[i]).style.display = "none";
	}
	document.getElementById(eleID).style.display = "inline";
}

/* Function called onmouseout of submenu to display the default selected page's (topmenu) submenu */
function showSelectedSubmenu() {
	// Get all the submenu ul id to show/hide them using a loop
	var submenu = new Array ("submenu-1", "submenu-2", "submenu-3", "submenu-4", "submenu-5", "submenu-6", "submenu-7");
	var defaultSubmenu = document.getElementById("selected-submenu").value;
	
	for (i=0 ; i<submenu.length ; i++) {
		document.getElementById(submenu[i]).style.display = "none";
	}
	document.getElementById(defaultSubmenu).style.display = "inline";
}

function validatePrinter()
{
	if(document.frm1.subcatid.value=="0")
	{
		alert('Please select a printer manufacturer!');
		document.frm1.subcatid.focus();
		return false;
	}
	else if(document.frm1.mtype_id.value=="0")
	{
		alert('Please select a printer type!');
		document.frm1.mtype_id.focus();
		return false;
	}
	else if(document.frm1.model_id.value=="0")
	{
		alert('Please select a printer model!');
		document.frm1.model_id.focus();
		return false;
	}		
	else
		return true;
}

function validateStockQty(qty)
{
	var valueFilter=/^[0-9]{1,2}$/;
	
	if(valueFilter.test(qty.value)==false)
	{
		alert('Please enter a valid quantity!');
		qty.value=1;
		qty.focus();
	}

}

function IsNumeric(val)
{
	var ValidChars = "0123456789";
	var IsNumber=true;
	var Char;
	
	for (i = 0; i < val.length && IsNumber == true; i++) 
	{ 
		Char = val.charAt(i); 
		if (ValidChars.indexOf(Char) == -1)
			IsNumber = false;
	}
	
	return IsNumber;
}

function validateLogin(form)
{
	if (form.username.value == "" || form.password.value == ""){
		alert ("Please enter your login details!");
		if (form.username.value == "")
			form.username.focus();
		else if (form.password.value == "")
			form.password.focus();
		return false;
	} else {
		form.submit();
	}
}

function validateReminder(form)
{
	if (form.username.value == ""){
		alert ("Please enter your username/ Email address.");		
		form.username.focus();
		return false;
	} else {
		form.submit();
	}
}

function validate_keyword()
{
	var keyword = document.frm_keyword.search.value;
	var trimmed = keyword.replace(/^\s+|\s+$/g, '') ;
	
	if (trimmed == "" || trimmed == "Keywords or Product Code"){
		alert ("Please enter Keywords.");
		document.frm_keyword.search.focus();
		return false;
	} else {
		return true;
	}
}

function addToBasket(p_code,qty)
{
	
	var q = document.getElementById(qty).value;	
	window.location.href = 'shopping_basket.pl?prod_code='+p_code+'&qty='+q;
	
}

function validateShipping(form)
{
	var fieldFilter=/^ *$/;
	var postcodeFilter=/^[A-Za-z]{1,2}[0-9]{1,2}[a-zA-Z]? [0-9]{1,2}[a-zA-Z]{1,2}$/;
	
	if(fieldFilter.test(form.shipping_line1.value)==true)
	{
		alert('Please enter the Shipping address - Address Line1!');
		form.shipping_line1.focus();
		return false;
	}
	else if(fieldFilter.test(form.shipping_city.value)==true)
	{
		alert('Please enter the Shipping address - City!');
		form.shipping_city.focus();
		return false;
	}
	else if(postcodeFilter.test(form.shipping_postcode.value)==false)
	{
		alert('Please enter the shipping address - Post Code!');
		form.shipping_postcode.focus();
		return false;
	}
	form.submit();
		
}

function HighlightMenu(c_id)
{	
	var class_name = "center-"+c_id;
	
	document.getElementById("center-"+c_id).className = "round-black-center";
	document.getElementById("left-"+c_id).className = "round-black-left";
	document.getElementById("right-"+c_id).className = "round-black-right";
	

}

function validateEmail(email) {
	var emailFilter=/^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i;
	if (emailFilter.test(email.value) == false) {
		alert("Please enter a valid email address!");
		email.select();
		return false;
	}
	return true;
}

function validateBusiness(form)
{
	var fieldFilter=/^ *$/;
	var emailFilter=/^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i;
	if (fieldFilter.test(form.contact_name.value) == true){
		alert("Please fill in Contact or Buyer's name!");
		form.contact_name.focus();
		return false;
	}
	else if (fieldFilter.test(form.org_name.value) == true){
		alert("Please fill in the company or organisation name!");
		form.org_name.focus();
		return false;
	}
	else if (form.years_traded[0].checked==false && form.years_traded[1].checked==false && form.years_traded[2].checked==false){
		alert("Please select a duration for which the company has been trading!");
		return false;
	}
	else if (fieldFilter.test(form.businessaddress.value) == true){
		alert("Please fill in your registered business address!");
		form.businessaddress.focus();
		return false;
	}
	else if (fieldFilter.test(form.telephone.value) == true){
		alert("Please fill in your contact telephone number!");
		form.telephone.focus();
		return false;
	}
	else if (fieldFilter.test(form.email.value) == true){
		alert("Please fill in a valid email address!");
		form.email.focus();
		return false;
	}
	else if (fieldFilter.test(form.monthly_spend.value) == true){
		alert("Please fill in your approximate monthly spend on printer consumables!");
		form.monthly_spend.focus();
		return false;
	}
	else if (fieldFilter.test(form.printer.value) == true){
		alert("Please fill in the printer model numbers that you use!");
		form.printer.focus();
		return false;
	}
	else if(form.tandc.checked==false)
	{
		alert("Please accept the terms and conditions before you can submit this form!");
		form.tandc.focus();
		return false;
	}
	else
		form.submit();
}

/* AJAX FUNCTIONS */
function getHttpRequest() {
	var http_request = false;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	
	if (!http_request) {
		alert('Cannot create XMLHTTP instance');
		return false;
	}
	
	return http_request;
}
  	
/*
 * Ajax function to call Perl file which populates the quick search drop-down box based on 
 * parent drop-down box selection
 */
function getMtypes_AV(frmObj) {
	var request = getHttpRequest();
	request.open('GET',"csdmtdaj.pl?subcat_id="+frmObj.subcatid[frmObj.subcatid.selectedIndex].value);
	request.onreadystatechange = function(){
		if (request.readyState == 4 && request.status == 200){
			document.getElementById('ajax_printer_type').innerHTML = request.responseText;
		}
	}
	request.send(null);
	
	if(frmObj.subcatid[frmObj.subcatid.selectedIndex].value==0)
	{
		getModels_AV(frmObj);
	}
	
	return false;
}

function getModels_AV(frmObj, flag) {
	var request = getHttpRequest();
	request.open('GET',"csdpmdaj.pl?mtype_id="+frmObj.mtype_id[frmObj.mtype_id.selectedIndex].value);
	request.onreadystatechange = function(){
		if (request.readyState == 4 && request.status == 200){
			document.getElementById('ajax_printer_model').innerHTML = request.responseText;
		}
	}
	request.send(null);
	
	if (flag != 2)
		window.setTimeout("getRidOfModels();", 1000);
	
	return false;
}

function getRidOfModels() {
	var frmObj = document.frm1;
	if(frmObj.mtype_id[frmObj.mtype_id.selectedIndex].value==0)
	{
		getModels_AV(frmObj, 2);	// To get rid of the Printer Model list on subcatid drop-down's selectedIndex value 0 (--select--)
	}
}