
// BROWSER DETECTION
function lib_bwcheck(){ //Browsercheck (needed)
	this.ver=navigator.appVersion
	this.agent=navigator.userAgent
	this.dom=document.getElementById?1:0
	this.opera5=this.agent.indexOf("Opera 5")>-1
	this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
	this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
	this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
	this.ie7=(this.ver.indexOf("MSIE 7")>-1 && this.dom && !this.opera5)?1:0;
	this.ie=this.ie4||this.ie5||this.ie6||this.ie7
	this.mac=this.agent.indexOf("Mac")>-1
	this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; 
	this.ns4=(document.layers && !this.dom)?1:0;
	this.bw=(this.ie7 || this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
	return this
}
var bw=new lib_bwcheck()

// AJAX

function tunnel(initFunction, url, queryString, finishedFunction, objName) {
	if (initFunction)
		initFunction();
	
	path = 'http://www.vinebid.com/';
	if (url.substr(0, path.length) == path)
		path = '';
	
	xmlHttpArray[objName] = GetXmlHttpObject(finishedFunction);
	xmlHttpArray[objName].open("POST", path + url , true);
	xmlHttpArray[objName].setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlHttpArray[objName].send(queryString);
}

function getFormData(form) {
	str = '';
	if (form.elements) {
		for (i=0; i<form.elements.length; i++) {
			name = form.elements[i].name + '';
			
			switch(form.elements[i].type) {
				case "checkbox":
				case "radio":
					if (!form.elements[i].checked) {
						value	= '0';
						break;
					}
				default:
					value	= form.elements[i].value + '';
			}
			
			if (name.charAt(name.length - 1) == ']')
				name = name.substr(0, name.length - 2) + '%5B%5D';
			
			//if (value != '') {
				if (str != '')
					str += '&';
				
				str += name + '=' + value;
			//}
		}
	} else
		str	= 'There was an error validating your form. Please try again.';
		
	return str;
}

function nodeString(field) {
	var retval = '';
	if (field.length) {
		for (var i=0; i<field.length; i++) {
			if (field[i].checked) {
				if (retval != '')
					retval += ',';
				retval += field[i].value;
			}
		}
	} else {
		if (field.checked)
			retval += field.value
	}
	
	return retval;
}

function selectedValue(field) {
	return field.options[field.selectedIndex].value;
}

function selectedText(field) {
	return field.options[field.selectedIndex].text;
}

function strif(condition, true_val, false_val) {
	if (condition)
		return true_val;
	else
		return false_val;
}

function GetXmlHttpObject(handler) {
	var objXmlHttp = null;
	
	if (window.ActiveXObject) { // IE
		try {
			if (!objXmlHttp) {
				objXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			}
		} catch (e) {
			try {
				objXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				try {
					objXmlHttp = new XMLHttpRequest();
				} catch (e) {
					alert(e);
				}
			}
		}
		if (handler)
			objXmlHttp.onreadystatechange = handler;
		
	} else if (window.XMLHttpRequest) { // Mozilla, Safari,...
		objXmlHttp = new XMLHttpRequest();
		if (handler) {
			objXmlHttp.onload = handler;
			objXmlHttp.onerror = handler;
		}
	}
	
	return objXmlHttp;
}

// CLOCK

function addZero(number) {
	number = parseInt(number);
	if (number < 10)
		return '0' + new String(number);
	else
		return number;
}

function removeZero(str) {
	if (str.charAt(0) == '0')
		return parseInt(str.substr(1,1));
	else
		return parseInt(str);
}

function processDivs() {
	var divs	= document.getElementsByTagName('div');
	
	for (i=0; i<divs.length; i++) {
		switch(divs[i].getAttribute('type')) {
			case "countdown":
				var count = 0;
				
				var secondFactor	= 1000;
				var minuteFactor	= secondFactor * 60;
				var hourFactor		= minuteFactor * 60;
				var dayFactor		= hourFactor * 24;
				var weekFactor		= dayFactor * 7;
				
				local_time	= (new Date()).getTime();
				timezone	= (new Date()).getTimezoneOffset() * minuteFactor;
				now			= new Date(local_time + timezone + (systemTimezone * minuteFactor));
				zero		= new Date(divs[i].getAttribute('unixtime') * 1000).getTime();
				newTime		= zero - now;
				
				seconds		= (newTime % minuteFactor - newTime % secondFactor) / secondFactor;
				minutes		= (newTime % hourFactor - newTime % minuteFactor) / minuteFactor;
				hours		= (newTime % dayFactor - newTime % hourFactor) / hourFactor;
				days		= (newTime - newTime % dayFactor) / dayFactor;
				
				divs[i].innerHTML = '';
				
				if (zero > now) {
					divs[i].innerHTML += Math.max(0, days) + ' day(s) ';
					
					divs[i].innerHTML += addZero(Math.max(0, hours)) + ':';
					
					divs[i].innerHTML += addZero(Math.max(0, minutes)) + ':';
					
					divs[i].innerHTML += addZero(Math.max(0, seconds)) + '';
				} else {
					divs[i].innerHTML = 'closed';
				}
				
				if (newTime < 0) {
					document.getElementById(divs[i].getAttribute('icon')).src = divs[i].getAttribute('clear');
				} else if (newTime < dayFactor) {
					document.getElementById(divs[i].getAttribute('icon')).src = divs[i].getAttribute('red');
				} else if (newTime < weekFactor) {
					document.getElementById(divs[i].getAttribute('icon')).src = divs[i].getAttribute('yellow');
				} else {
					document.getElementById(divs[i].getAttribute('icon')).src = divs[i].getAttribute('green');
				}
				
				//divs[i].innerHTML += ' <br/>' + newTime + ' <br/>' + dayFactor + ' <br/>' + weekFactor;
				
				break;
		}
	}
}

function countDown(clockName, system_timezone) {
	var count = 0;
	
	var secondFactor	= 1000;
	var minuteFactor	= secondFactor * 60;
	var hourFactor		= minuteFactor * 60;
	var dayFactor		= hourFactor * 24;
	
	for (i=0; i<document.getElementsByTagName('div').length; i++) {
		if (document.getElementsByTagName('div')[i].id.substr(0, new String(clockName).length) == clockName) {
			local_time	= (new Date()).getTime();
			timezone	= (new Date()).getTimezoneOffset() * minuteFactor;
			now			= new Date(local_time + timezone + (system_timezone * minuteFactor));
			zero		= new Date(document.getElementsByTagName('div')[i].id.substr(new String(clockName).length + 1) * 1000).getTime();
			newTime		= zero - now;
			
			seconds		= (newTime % minuteFactor - newTime % secondFactor) / secondFactor;
			minutes		= (newTime % hourFactor - newTime % minuteFactor) / minuteFactor;
			hours		= (newTime % dayFactor - newTime % hourFactor) / hourFactor;
			days		= (newTime - newTime % dayFactor) / dayFactor;
			
			document.getElementsByTagName('div')[i].innerHTML = '';
			
			if (zero > now) {
				//if (days >= 0)
					document.getElementsByTagName('div')[i].innerHTML += Math.max(0, days) + ' days ';
				
				//if (hours >= 0)
					document.getElementsByTagName('div')[i].innerHTML += addZero(Math.max(0, hours)) + ':';
				
				//if (minutes >= 0)
					document.getElementsByTagName('div')[i].innerHTML += addZero(Math.max(0, minutes)) + ':';
				
				//if (seconds >= 0)
					document.getElementsByTagName('div')[i].innerHTML += addZero(Math.max(0, seconds)) + '';
			} else {
				//document.getElementsByTagName('div')[i].innerHTML = '--<sub>days</sub> --<sub>h</sub> --<sub>m</sub> --<sub>s</sub>';
				document.getElementsByTagName('div')[i].innerHTML = 'closed';
			}
			
			count++;
		}
	}
	
	if (count > 0)
		timers.push(window.setTimeout("countDown('" + clockName + "', " + system_timezone + ")", 250));
}

function clock(clockName, system_timezone) {
	var count = 0;
	
	var secondFactor	= 1000;
	var minuteFactor	= secondFactor * 60;
	var hourFactor		= minuteFactor * 60;
	
	for (i=0; i<document.getElementsByTagName('div').length; i++) {
		if (document.getElementsByTagName('div')[i].id.substr(0, new String(clockName).length) == clockName) {
			local_time	= (new Date()).getTime();
			timezone	= (new Date()).getTimezoneOffset() * minuteFactor;
			now			= new Date(local_time + timezone + (system_timezone * minuteFactor));
			
			hours		= addZero(now.getHours());
			
			if (hours> 12) {
				hours	-= 12;
				ampm	= 'pm';
			} else
				ampm	= 'am';
			
			minutes	= addZero(now.getMinutes());
			
			document.getElementsByTagName('div')[i].innerHTML = '<p>' + hours + ':' + minutes + ampm + ' <span>SAST</span></p>';
			
			//alert(document.getElementsByTagName('div')[i].innerHTML)
			
			count++;
		}
	}
	
	if (count > 0)
		window.setTimeout("clock('" + clockName + "', " + system_timezone + ")", (60 - (new Date()).getSeconds()) * 1000);
}

// POPUP

function createDiv(id) {
	if (id) {
		var newDiv = document.createElement('div');
		newDiv.setAttribute('id', id);
		newDiv.className = 'popupDiv';
		
		document.getElementById('popupDiv').appendChild(newDiv);
		
		newestDiv	= newDiv;
		
		return newDiv;
	} else
		return false;
}

function popupDiv(div, left, top, content) {
	currentDiv = divStack.pop();
	
	if (currentDiv) {
		hideDiv(currentDiv);
		divStack.push(currentDiv);
	}
	
	divStack.push(div);
	//alert(divStack.length + "\n" + div.id + " opened")
	
	div.innerHTML = content;
	
	showDiv(document.getElementById('bgDiv'));
	
	document.getElementById('bgDiv').style.zIndex			= topZ++;
	document.getElementById('popupDiv').style.zIndex		= topZ++;
	
	div.style.zIndex										= topZ++;

	if (window.innerHeight)
		var clientHeight = window.innerHeight;
	else if (document.documentElement && document.documentElement.clientHeight)
		clientHeight = document.documentElement.clientHeight;
	else if (document.body)
		var clientHeight = document.body.clientHeight;
	
	if (bw.ie6) {
		if (document.documentElement.scrollTop == 0)
			var scrollTop = document.documentElement.scrollTop + document.body.scrollTop;
		else
			var scrollTop = document.documentElement.scrollTop;
	} else
		var scrollTop = 0;
		
	if (left == -1)
		left	= (document.body.clientWidth - div.offsetWidth) / 2;

	if (top == -1)
		top	= ((scrollTop + (clientHeight / 2)) - (div.offsetHeight / 2));
	
	div.style.left = left + 'px';
	div.style.top = top + 'px';
	div.style.visibility = 'visible';
	
	if(document.getElementById(div.id + '_focus'))
		document.getElementById(div.id + '_focus').focus();
	
	hideCombos();
	showCombos(div)
	
	divResize('bgDiv', -1, 0);
}

function closeDiv() {
	div = divStack.pop();
	//alert(divStack.length + "\n" + div.id + " closed")
	
	if (divStack.length > 0) {
		showDiv(document.getElementById('bgDiv'));
		
		document.getElementById('bgDiv').style.zIndex			= topZ++;
		document.getElementById('popupDiv').style.zIndex		= topZ++;
		
		divStack[divStack.length - 1].style.zIndex				= topZ++;
	} else if (divStack.length == 0) {
		hideDiv(document.getElementById('bgDiv'));
	}
	
	if (div) {
		hideDiv(div);
		divResize('bgDiv', -1, 0);
	}
	
	currentDiv = divStack.pop();
	
	if (currentDiv) {
		showDiv(currentDiv);
		divStack.push(currentDiv);
		showCombos(currentDiv);
	} else {
		showCombos(0);
	}
	
	divResize('bgDiv', -1, 0);
}

function purgeDiv() {
	div = divStack.pop();
	//alert(divStack.length + "\n" + div.id + " closed")
	
	if (divStack.length > 0) {
		showDiv(document.getElementById('bgDiv'));
		
		document.getElementById('bgDiv').style.zIndex			= topZ++;
		document.getElementById('popupDiv').style.zIndex		= topZ++;
		
		divStack[divStack.length - 1].style.zIndex				= topZ++;
	} else if (divStack.length == 0) {
		hideDiv(document.getElementById('bgDiv'));
	}
	
	if (div) {
		hideDiv(div);
		fillDiv(div.id, '');
		divResize('bgDiv', -1, 0);
	}
	
	currentDiv = divStack.pop();
	
	if (currentDiv) {
		showDiv(currentDiv);
		divStack.push(currentDiv);
		showCombos(currentDiv);
	} else {
		showCombos(0);
	}
	
	divResize('bgDiv', -1, 0);
}

function closeBusyDiv() {
	div = divStack.pop();
	
	if (div) {
		if (div.id.indexOf('popupBusy') > -1) {
			//alert(divStack.length + "\n" + div.id + " closed")
			
			if (divStack.length > 0) {
				showDiv(document.getElementById('bgDiv'));
				
				document.getElementById('bgDiv').style.zIndex			= topZ++;
				document.getElementById('popupDiv').style.zIndex		= topZ++;
				
				divStack[divStack.length - 1].style.zIndex				= topZ++;
			} else if (divStack.length == 0) {
				hideDiv(document.getElementById('bgDiv'));
			}
			
			if (div) {
				hideDiv(div);
				divResize('bgDiv', -1, 0);
			}
			
			currentDiv = divStack.pop();
			
			if (currentDiv) {
				showDiv(currentDiv);
				divStack.push(currentDiv);
				showCombos(currentDiv);
			} else {
				showCombos(0);
			}
		} else {
			divStack.push(div);
		}
	}
}

function hideCombos() {
	if (bw.ie6) {
		var combos	= document.getElementsByTagName('select');
		for (i=0; i<combos.length; i++) {
			combos[i].style.visibility = 'hidden';
		}
	}
}

function showCombos(div) {
	if (bw.ie6) {
		var combos	= document.getElementsByTagName('select');
		for (i=0; i<combos.length; i++) {
			if (div) {
				if (inParentDiv(combos[i], div))
					combos[i].style.visibility = 'visible';
			} else
				combos[i].style.visibility = 'visible';
		}
	}
}

function inParentDiv(obj, div) {
	var obj	= obj;
	while (1) {
		obj = obj.parentNode;
		
		if (obj.nodeType == 1) {
			if (String(obj.id) == div.id)
				return true;
			
			if (String(obj.nodeName) == "BODY")
				return false;
		}
	}
}

function parentDiv(obj) {
	var obj	= obj;
	while (1) {
		obj = obj.parentNode;
		
		if (obj.nodeType == 1) {
			if (String(obj.nodeName) == "DIV")
				return obj;
			
			if (String(obj.nodeName) == "BODY")
				return 0;
		}
	}
}

function hideDiv(div) {
	div.style.visibility	= 'hidden';
	div.style.display		= 'none';
}

function showDiv(div) {
	div.style.visibility	= 'visible';
	div.style.display		= 'block';
}

function fillDiv(divID, content) {
	document.getElementById(divID).innerHTML = content;
}

function divResize(div, top, padding) {
	if (top > -1)
		parent.scrollTo(0, top);

	document.getElementById(div).style.height = 0 + 'px';

	if (document.documentElement && !document.documentElement.clientHeight == 0)
		scrollHeight = document.documentElement.scrollHeight;
	else if (document.body)
		scrollHeight = document.body.scrollHeight;

	parent.document.getElementById(div).style.height = padding + 'px';
	parent.document.getElementById(div).style.height = scrollHeight + padding + 'px';
	parent.document.getElementById(div).style.width = window.document.body.scrollWidth + 'px';
}

function positionDiv(div, left, top) {
	if (window.innerHeight)
        var clientHeight = window.innerHeight;
    else if (document.documentElement && document.documentElement.clientHeight)
        clientHeight = document.documentElement.clientHeight;
    else if (document.body)
        var clientHeight = document.body.clientHeight;

    if (document.documentElement.scrollTop == 0)
        var scrollTop = document.documentElement.scrollTop + document.body.scrollTop;
    else
        var scrollTop = document.documentElement.scrollTop;
		
	if (left == -1)
		left	= (document.body.clientWidth - div.offsetWidth) / 2;

	if (top == -1)
		top    = ((scrollTop + (clientHeight / 2)) - (div.offsetHeight / 2));
	
	div.style.left = left + 'px';
	div.style.top = top + 'px';
}

function checkPopupPosition() {
	if (bw.ie6) {
		div_array	= document.getElementsByTagName('div');
		for (var i=0; i<div_array.length; i++) {
			if ((div_array[i].id.indexOf('popupMessage_') > -1) && (div_array[i].style.visibility == 'visible'))
				positionDiv(div_array[i], -1, -1)
		}
		
		if (document.getElementById('bgDiv').style.visibility == 'visible')
			divResize('bgDiv', -1, 0);
		
		setTimeout('checkPopupPosition()', 100);
	}
}

// ELEMENTS
function hideElement(element) {
	element.style.visibility	= 'hidden';
}

function showElement(element) {
	element.style.visibility	= 'visible';
}

// TEXTBOX FOCUS HANDLERS
function clearText(object, val) {
	if (object.value == val)
		object.value = "";
}

function restoreText(object, val) {
	if (object.value == "")
		object.value = val;
}

function setText(object, val) {
	object.value = val;
}

// ROLLOVERS
function preloadPic(src) {
	var img = new Image();
	img.src = src;
}

function rollIcon(imageID, zebra) {
	if ((document.getElementById(imageID).src.indexOf("images/interface/icon-red-dark.jpg") > -1) || (document.getElementById(imageID).src.indexOf("images/interface/icon-red-light.jpg") > -1)) {
		document.getElementById(imageID).src = "images/interface/icon-red-roll.jpg"
		return true;
	}
		
	if (document.getElementById(imageID).src.indexOf("images/interface/icon-red-roll.jpg") > -1) {
		document.getElementById(imageID).src = "images/interface/icon-red-" + zebra + ".jpg"
		return true;
	}
	
	return false;
}

function rollOn(imageID, zebra) {
	if ((document.getElementById(imageID).src.indexOf("images/interface/icon-green-dark.jpg") > -1) || (document.getElementById(imageID).src.indexOf("images/interface/icon-green-light.jpg") > -1)) {
		document.getElementById(imageID).src = "images/interface/icon-green-roll.jpg"
		return true;
	}
		
	if ((document.getElementById(imageID).src.indexOf("images/interface/icon-yellow-dark.jpg") > -1) || (document.getElementById(imageID).src.indexOf("images/interface/icon-yellow-light.jpg") > -1)) {
		document.getElementById(imageID).src = "images/interface/icon-yellow-roll.jpg"
		return true;
	}
		
	if ((document.getElementById(imageID).src.indexOf("images/interface/icon-red-dark.jpg") > -1) || (document.getElementById(imageID).src.indexOf("images/interface/icon-red-light.jpg") > -1)) {
		document.getElementById(imageID).src = "images/interface/icon-red-roll.jpg"
		return true;
	}
		
	if ((document.getElementById(imageID).src.indexOf("images/interface/icon-clear-dark.jpg") > -1) || (document.getElementById(imageID).src.indexOf("images/interface/icon-clear-light.jpg") > -1)) {
		document.getElementById(imageID).src = "images/interface/icon-clear-roll.jpg"
		return true;
	}
		
	return false;
}

function rollOff(imageID, zebra) {
	if (document.getElementById(imageID).src.indexOf("images/interface/icon-green-roll.jpg") > -1) {
		document.getElementById(imageID).src = "images/interface/icon-green-" + zebra + ".jpg"
		return true;
	}
	
	if (document.getElementById(imageID).src.indexOf("images/interface/icon-yellow-roll.jpg") > -1) {
		document.getElementById(imageID).src = "images/interface/icon-yellow-" + zebra + ".jpg"
		return true;
	}
	
	if (document.getElementById(imageID).src.indexOf("images/interface/icon-red-roll.jpg") > -1) {
		document.getElementById(imageID).src = "images/interface/icon-red-" + zebra + ".jpg"
		return true;
	}
	
	if (document.getElementById(imageID).src.indexOf("images/interface/icon-clear-roll.jpg") > -1) {
		document.getElementById(imageID).src = "images/interface/icon-clear-" + zebra + ".jpg"
		return true;
	}
	
	return false;
}

// FORM VALIDATION

function validateForm(url, name, type, div, width, height, form, message, fields) {
	fieldArray	= new Array();
	var left = (screen.width / 2) - width / 2;
	var top = (screen.height / 2) - height / 2;
	if (arguments[8] != "")
		attributes = arguments[8];
	else
		attributes = "";
	
	if (type == "alert")
		breakTag = "\n";
	else
		breakTag = "";
		
	//var message;
	
	message += '<br/><br/>';
	
	doSubmit = true;
	for (i=0;i<fields.length;i+=4) {
		fieldArray[fields[i]] = fields[i + 1];
		switch (fields[i + 2])
		{ 
		   case "select" :
			 if (form.elements[fields[i]].selectedIndex == 0) {
				message += '' + fields[i + 1] + '<br />';
				doSubmit = false;
			 }
		     break; 
		   case "email" :
			 if (form.elements[fields[i]].value == "") {
				message += '' + fields[i + 1] + '<br />';
				doSubmit = false;
			 }
			 else {
				var emailCheck = validateEmailAddress(form.elements[fields[i]].value);
				if (emailCheck != "") {
					message += '' +  emailCheck + '<br />';
					doSubmit = false;
				}
			  }
			  break;
		   case "text" :
			 if (form.elements[fields[i]].value == fields[i + 3]) {
				message += '' + fields[i + 1] + '<br />';
				doSubmit = false;
			 }
			 break;
		   case "num" :
			 if (form.elements[fields[i]].value == "" || (isNumeric(form.elements[fields[i]].value) == false)) {
				message += '' + fields[i + 1] + " must be a number" + '<br />';
				doSubmit = false;
			 }
			 break;
		   case "set" :
			 if (form.elements[fields[i]].value == "" || !isInSet(form.elements[fields[i]].value, fields[i + 3])) {
				message += '' + fields[i + 1] + " can only contain the following: " + fields[i + 3] + '<br />';
				doSubmit = false;
			 }
			 break;
		   case "radio" :
			 if (form.elements[fields[i]].value == null) {
				message += '' + fields[i + 1] + '<br />';
				doSubmit = false;
			 }
			 break;
		   case "checkbox" :
			 if (!form.elements[fields[i]].checked) {
				message += '' + fields[i + 1] + '<br />';
				doSubmit = false;
			 }
			 break;			 
		   case "textarea" :
			 if (form.elements[fields[i]].value == "") {
				message += '' + fields[i + 1] + '<br />';
				doSubmit = false;
			 }
			 break;
		   case "password" :
			if ((form.elements[fields[i]].value != form.elements[fields[i + 3]].value) || (form.elements[fields[i]].value == '')) {
				message += '' + fields[i + 1] + '<br />';
				doSubmit = false;
			 }
			 break;
		  default :
		  	if (form.elements[fields[i]].value != form.elements[fields[i + 2]].value) {
				message += '' + fields[i + 1] + ' <i>does not match</i> ' + fieldArray[fields[i + 2]] + '<br />';
				doSubmit = false;
			}
		   	break;
		}
	}
	if (doSubmit) {
		return true;
	} else {
		switch (type) {
			case "div":
				parent.popupDiv(createDiv(div), width, height, html_alert(message, 'closeDiv()'));
				break;
			case "popup":
				url += '&message=' + message + '';
				var newPopup = window.open(url, name, "width=" + width + ", height=" + height + ", left=" + left + ", top=" + top + attributes);
				newPopup.focus();
				break;
			default:
				alert(message);
		}
		return false;
	}
}

function validateEmailAddress(field) {
	var emailMessage = "";
	var atPos = field.indexOf('@',0);
	if (atPos == -1) {
			emailMessage = "\nEmail address must contain an @";
	}
	if (atPos == 0) {
			emailMessage = "\nEmail address must not start with @";
	}
	if (field.indexOf('@', atPos + 1) > - 1) {
			emailMessage = "\nEmail address must contain only one @";
	}
	if (field.indexOf('.', atPos) == -1) {
			emailMessage = "\nEmail address is incomplete";
	}
	if (field.indexOf('@.',0) != -1) {
			emailMessage = "\nInvalid email address";
	}
	if (field.indexOf('.@',0) != -1){
			emailMessage = "\nInvalid email address";
	}
	if (field.indexOf('..',0) != -1) {
			emailMessage = "\nInvalid email address";
	}
	var suffix = field.substring(field.lastIndexOf('.')+1);
	if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
			emailMessage = "\nInvalid email address";
	}
	return(emailMessage);
}

function isNumeric(val) {
	var validChars = "+0123456789. ";
	var isNumber = true;
	var Char;
	for (j = 0; j < val.length && isNumber == true; j++){ 
		Char = val.charAt(j); 
		if (validChars.indexOf(Char) == -1) {
         isNumber = false;
        }
    }
    return isNumber;
}

function isInSet(val, set) {
	var isValid = true;
	var Char;
	for (j = 0; j < val.length && isValid == true; j++){ 
		Char = val.charAt(j); 
		if (set.indexOf(Char) == -1) {
         isValid = false;
        }
    }
    return isValid;
}

function isNumType(val, type) {
	var retval = '';
	
	switch(type) {
		case "float":
			if (isNaN(parseFloat(Number(val))) && (parseFloat(val) != Number(val)))
				retval	= ' is not a valid real number.';
			break;
		
		case "integer":
			var minval	= 0;
			var maxval	= 0;
			
			if ((val <= minval) || (val >= maxval))
				retval	= '';
			break;
		
		case "num":
			var validChars = "+0123456789. ";
			var Char;
			for (j = 0; j < val.length && retval == ''; j++){ 
				Char = val.charAt(j); 
				if (validChars.indexOf(Char) == -1)
					retval	= ' can only contain the following: ' + validChars;
		    }
			break;
		
		default:
			var Char;
			for (j = 0; j < val.length && retval == ''; j++){ 
				Char = val.charAt(j); 
				if (set.indexOf(Char) == -1)
					retval	= ' can only contain the following: ' + type;
		    }
			break;
	}
    return retval;
}

// CONVERT FIELD VALUES

function divideFields(dividend, divisor) {
	if ((dividend != '') && (divisor != ''))
		return parseFloat(dividend) / parseFloat(divisor);
	else
		return 0;
}

function multiplyFields(multiplicand, multiplier) {
	return multiplicand * multiplier;
}

function rPad(str, limit, chr) {
	str = str + '';
	while (str.length < limit)
		str += chr;
	return str;
}

function makeFloat(value) {
	var regex = /[0-9]*\.{0,1}[0-9]*/;
	return regex.exec(value);
}

function makeMoney(value) {
	cents = value - Math.floor(value)
	return Math.floor(value) + '.' + rPad(Math.round(cents * 100), 2, '0');
}

// EVENTS

function checkKey(e, key) {
	if (e.keyCode == key)
		return true;
	else
		return false;
}

// findPosX
// Credit: by Peter-Paul Koch & Alex Tingle
function findPosX(obj) {
	var curleft = 0;
	if(obj.offsetParent)
		while(1) {
			curleft += obj.offsetLeft;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
	else if(obj.x)
		curleft += obj.x;
	return curleft;
}

// findPosY
// Credit: by Peter-Paul Koch & Alex Tingle
function findPosY(obj) {
	var curtop = 0;
	if(obj.offsetParent)
		while(1) {
			curtop += obj.offsetTop;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
	else if(obj.y)
		curtop += obj.y;
	return curtop;
}

// getScrollPos
// Credit: Rick Strahl
function getScrollPos() {
	var ScrollTop = document.body.scrollTop;
	
	if (ScrollTop == 0) {
	    if (window.pageYOffset)
	        ScrollTop = window.pageYOffset;
	    else
	        ScrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
	}
	
	return ScrollTop;
}

