/* Javascript genral function library 
* Author: Barrie Barnes
* Creation date: 1 November 2004
* Version: 1
*/

// Global variables used in this module
var mbrowser = "Unknown";

function determineBrowser ()
{
	// Determine whether browser is IE or Netscape
	var userAgent = navigator.userAgent;
	var opera = (userAgent.indexOf('Opera') != -1);
	var ie = (userAgent.indexOf('MSIE') != -1);
	var gecko = (userAgent.indexOf('Gecko') != -1);
	var oldNetscape = (userAgent.indexOf('Mozilla') != -1);
	var firefox = (userAgent.indexOf('Firefox') != -1);

	if (opera)
		mbrowser = "Opera";
	else if (firefox) 
		mbrowser = "Firefox";
	else if (gecko)
		mbrowser = "Moz";
	else if (ie)
		mbrowser = "IE";
	else if (oldNetscape)
		mbrowser = "oldNetscape";
		
	if (parseInt (navigator.appVersion) < 4)
		alert ("Warning, this web-site may not function correctly \n under the current version of your browser.");
	
} // determineBrowser

function getBrowser ()
{
	return mbrowser;	
}

function getFieldValue (fieldName, fieldType)
{
	// Return the value of the given field of specified type
	switch (fieldType) {
		case "TextEntry" :
		case "TextArea" :
		return getValue (fieldName);
		
		case "Selector" :
		return getValue (fieldName);
		
		case "CheckBox" :
		var checked = getObject (fieldName).checked;
		return checked ? 'Y' : 'N';
		
		default:
		return "Error";
	}
}

function getValue (objName)
{
	// Return the value contained within the given object
	var requestedObj;
	if ((mbrowser == "IE") || (mbrowser == "Opera"))
		eval ("requestedObj = document.all." + objName);
	else
		requestedObj = document.getElementById(objName);
	return requestedObj.value;
}

function getObject (objName)
{
	// Return a variable containing a reference to the given object
	var requestedObj;
	if ((mbrowser == "IE") || (mbrowser == "Opera"))
		eval ("requestedObj = document.all." + objName);
	else
		requestedObj = document.getElementById(objName);
	return requestedObj;
}

function setFieldValue (fieldName, fieldType, value)
{
	// Set the value of the given field of specified type
	switch (fieldType) {
		case "TextEntry" :
		case "TextArea" :
		getObject(fieldName).value = value;
		
		case "Selector" :
		setSelection (fieldName, value);
		
		case "CheckBox" :
		getObject (fieldName).checked = (value == 'Y' ? true : false);
		
		default:
		return "Error";
	}
}

function setSelection (list, value)
{
	setSelectionObj (getObject(list), value);
}

function setSelectionObj (list, value)
{
	var i;
	var len = list.length;
	for (i = 0; i < len; i++)
	{
		if (list.options[i].value == value)
		{
			list.selectedIndex = i;
			return;
		}
	}
	list.selectIndex = 0;
}

function clearEntryInSelection (list, value)
{
	var listObj = getObject(list);
	var i;
	var len = listObj.length;
	for (i = 0; i < len; i++)
	{
		if (listObj.options[i].value == value)
		{
			listObj.options[i] = null;
			return;
		}
	}		
}

/**
 * Clears all options in the given HTML list
 */
function clearList (list)
{
	var len = list.length;
	var i;
	for (i = len - 1; i >= 0; i--)
		list.options[i] = null;
}

function inhibitBtn (btn)
// Disable a button. 
// N.B. Use 'disableAnchor' for anchors
{
	var btnObj = getObject (btn);
	btnObj.disabled = true;	
}

function allowBtn (btn)
{
	var btnObj = getObject (btn);
	btnObj.disabled = false;	
}

function noLink () 
// Dummy function to replace that of an anchor in order to disable it
{
  	return false;
}

function disableAnchor (anchor)
{
	var anchorObj = getObject (anchor);
	if (anchorObj.onclick)
    	anchorObj.oldOnClick = anchorObj.onclick;

	anchorObj.onclick = noLink;
  	if (anchorObj.style)
    	anchorObj.style.cursor = 'default';
}

function enableAnchor (anchor) 
{
	var anchorObj = getObject (anchor);
	if (anchorObj.oldOnClick)
  		anchorObj.onclick = anchorObj.oldOnClick;
	else
		anchorObj.onclick = null;

	if (anchorObj.style)
    	anchorObj.style.cursor = document.all ? 'hand' : 'pointer';
}

function getWindowObject (reqWindow, objName)
{
	// Return a variable containing a reference to the given object in the given window
	var requestedObj;
	if ((mbrowser == "IE") || (mbrowser == "Opera"))
		eval ("requestedObj = reqWindow.document.all." + objName);
	else
		requestedObj = reqWindow.document.getElementById(objName);
	return requestedObj;
}
	
function extractExtension (fileName)
// Extract the extension from the given filename
// NB if the extension doesn't exist, "" is returned
{
	var ext;
	var wordArray = new Array();
	wordArray = fileName.split(".");
	var arrayLen = wordArray.length;
	if (arrayLen == 1)
		ext = "";
	else
	{
		ext = wordArray [arrayLen - 1];
	   	ext = ext.toLowerCase();
	}
	return ext;
}

function extractFilename (fileAndPath)
// Extract the filename from the given file and path name
{
	var filename;
	var wordArray = new Array();
	wordArray = fileAndPath.split("/");
	alert (wordArray[0]);
	var arrayLen = wordArray.length;
	if (arrayLen == 1)
		filename = fileAndPath;
	else
	{
		filename = wordArray [arrayLen - 1];
		filename = filename.toLowerCase();
	}
	return filename;
}

function getBaseName (fullPath)
// Extract the file base name (no path, no ext) from the full path name
{
	var wordArray = new Array ();
	wordArray = fullPath.split("\\");
	var fileName = wordArray [wordArray.length - 1];
	wordArray = fileName.split(".");
	var ext = wordArray [wordArray.length - 1];
	if (fileName.length == ext.length)
		return (fileName);
	else
	{
		var baseName = fileName.substring (0, fileName.length - ext.length - 1);
		return baseName;
	}
}

function extensionOK(fileName, extArray) 
// Check if the extension of the given filename matches any of the extensions in the given array
{
	var i;
	var arrayLen;
	var ext;
	
	// Determine extension of given filename
	var wordArray = fileName.split(".");
	ext = wordArray [wordArray.length - 1];
   	ext = ext.toLowerCase();
 
	// Search given array for given extension
	arrayLen = extArray.length;
	for (i = 0; i < arrayLen; i++)
	{
 		if (ext == extArray[i])
    		return true; 
	}
	
	return false;		// As no matches found
}

function goBack()
{
	// Go back to previous URL in history
	window.history.back();
}

function insertUnderscores (name)
{
	name = name.replace (/ /g, "_");		// Replace spaces with underscores
	return name;
}

function isEmpty(inputStr)
// Returns true if the given string is null or contains only white space chars
{
	var whiteSpace = " \t\n\r";
	var i;
	var ch;
	if (inputStr == null)
		return true;
		
	var stringLen = inputStr.length;
	if (stringLen == 0)
		return true;
	
	for (i = 0; i < stringLen; i++)
	{
		ch = inputStr.charAt(i);
		if (whiteSpace.indexOf(ch) == -1)
			return false;
	}
	
	//At this point all characters are white space
	return true;
}

function isDate (inputDatStr, outputDatObj)
// Returns true if given string looks like a date
// Puts a string representation of the UTC equivalent of inputDatStr into the output date object
{
	// If DD/MM/YY or DD-MM-YY or DD.MM/YY or DD\MM\YY format used switch DD and MM
	var pattern = /(\d+)(\/|-|\\|\.)(\d+)(\/|-|\\|\.)(\d+)/;
	if (pattern.test (inputDatStr))
	{
		inputDatStr = RegExp.$3 + "/" + RegExp.$1 + "/" + RegExp.$5;
	}
	
	// If (say) "10 March 1999" kind of format used, swap day and month
	pattern = /(\d+|\d+\D+)( |-)(\D+)( |-)(\d+)/;
	if (pattern.test (inputDatStr))
	{
		inputDatStr = RegExp.$3 + " " + RegExp.$1 + " " + RegExp.$5;
	}

	var utcDat = Date.parse (inputDatStr);
	if (isNaN (utcDat))
		return false;
	
	outputDatObj.myString = utcDat;
	return true;
}

function checkSelect (objName, alertMsg)
// Produces alert with given msg and returns false if given Select is
// at first value (should be a blank)
{
	var queryField = getObject (objName);
	if (queryField.selectedIndex == 0)
	{
		alert (alertMsg);
		queryField.focus();
		return false;
	}
	return true;
}

function fieldOK (fieldName, fieldType, fieldPrompt, extraMsg)
// Check the given field, if wrong put error message in an alert and return false
// The message will be "Please enter the 'fieldPrompt'. 'extraMsg'.
{
	var queryField = getObject (fieldName);
	
	if (isEmpty (queryField.value))
	{
		alert ("Please enter the " + fieldPrompt + ". " + extraMsg);
		queryField.focus();
		return false;
	}

	switch (fieldType)
	{
		case "Integer" :
		var number = queryField.value;
		if (number != parseInt(number))
		{
			alert ("Please enter a whole number for the " + fieldPrompt + ". " + extraMsg);
			queryField.focus();
			return false;
		}
		break;
		
		case "Email" :
		var emailAddr = queryField.value;
		if (!isEmailAddr(emailAddr))
		{
			alert ("Please enter a valid address for the " + fieldPrompt + ". " + extraMsg);
			queryField.focus();
			return false;
		}
		break;
		
		case "TextFile" :
		var extArray = new Array ("txt");
		if (!extensionOK(queryField.value, extArray))
		{
			alert ("Please enter a valid " + fieldPrompt + ". " + extraMsg);
			queryField.focus();
			return false;
		}
		break;
		
		case "ImgFile" :
		var extArray = new Array ("gif", "jpg", "jpe", "jpeg", "swf");
		if (!extensionOK(queryField.value, extArray))
		{
			alert ("Please enter a valid " + fieldPrompt + ". " + extraMsg);
			queryField.focus();
			return false;
		}
		break;
		
		case "Download" :
		var extArray = new Array ("doc", "ppt", "pps", "xls", "pdf", "vcf");
		if (!extensionOK(queryField.value, extArray))
		{
			alert ("Please enter a valid " + fieldPrompt + ". " + extraMsg);
			queryField.focus();
			return false;
		}
		break;
		
		case "Attachment" :
		var extArray = new Array ("doc", "pdf", "ppt", "xls", "txt", "rtf", "zip", "jpg", "jpeg", "jpe", "gif", "png", "bmp");
		if (!extensionOK(queryField.value, extArray))
		{
			var msg = "Please enter an allowed file type: \n\n";
			for (var n = 0; n < extArray.length; n++)
			{
				msg = msg + "." + extArray[n];
				if (n < (extArray.length - 2))
					msg = msg + ", ";
				else if (n == (extArray.length - 2))
					msg = msg + " or ";
			}
			alert (msg);
			queryField.focus();
			return false;
		}
		break;
		
		default :
		break;
	}
	return true;
}

function installCounter (type)
{
	switch (type)
	{
		case "Full" :
		var q = '656475756C6865643D34';
		document.write("<div align='center'><a style='cursor: pointer;' href='http://web.cinerhost.com/webshell4/acv.php?"+ q + "' target='_blank'><img src='http://web.cinerhost.com/webshell4/ac.php?q="+ q +"&ref=" + top.document.referrer +"' border=0></a></div>");
		break;
		
		case "JustCounter" :
		document.write("<div align='center'><img src='http://web.cinerhost.com/webshell4/ac.php?q=656475756C6865643D34&ref=" + top.document.referrer +"' border=0></div>");
		break;
		
		case "StatsPageLink" :
		// Can't seem to read stats page?
		document.write("<a href='http://web.cinerhost.com/webshell4/acv.php?q=656475756C6865643D34'>a.counter statistic</a>");
		break;
	}
}

function showHelp (helpPage)
// Show help with the chosen page selected. If no helpPage given then show the Help contents
{
	if (helpPage == "")
		helpPage = '../help/Help Contents.php';
	else
		helpPage = '../help/' + helpPage + '.php';
		
	open (helpPage, 'SymtaxHelp', 'height=500,width=620,scrollbars=yes,titlebar=yes,status=yes,toolbar=no,menubar=no,resizable=yes');	
}

function zoomPic (pic, w, h)
{
	var prefs = 'toolbar=no,scrollbars=yes,location=no,statusbar=no,menubar=no,resizable=yes,top=150,';
	winW = w + 40;
	winH = h + 50;	
  	prefs = prefs + 'width=' + winW + ',height=' + winH; 
	var url = '../zoom/picframe.php?pic=' + pic;
	var win = open (url, 'ZoomPic', prefs);
}

function isEmailAddr(emailAddress) 
{
  var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return re.test(emailAddress);
}

