   	
//** FUNCTION: Check INPUT value on Focus   	
   	function startEditInput(input) {
		var classes = input.className.split(' ');
		input.className = '';
		input.onselectstart = null;
		for (i=0;i< classes.length; i++) {
			if (classes[i] != 'empty') { input.className += classes[i]; }
		}
		if (input.value == input.getAttribute('empty')) {
			input.value='';
		}
	}

//** FUNCTION: Check INPUT value on Blur
	function finishEditInput(input) {
		if (input.value == input.getAttribute('empty') || input.value == '') {
			input.className += ' empty';
			input.value = input.getAttribute('empty');
		}
    }

    
    
//** FUNCTION: Validate Standard Form;
    function ValidateForm(form) {
		for (i=0; i<form.elements.length; i++) {
			if (form[i].validate) {
				if (!validateINPUT(form[i])) {
					validateMsg('show',form[i]) 
					return false; 
				} 			
			} 
		}
		return true;
    }
    
//** FUNCTION: Validate INPUT Element
	function validateINPUT(input) {
		switch(input.validate) {
			case "email": return validateEmail(input); break;
			case "empty": return validateNotEmpty(input); break;
			case "checked": return validateChecked(input); break;
			case "password": return validatePassword(input); break;
			case "creditcard": return validateCreditCard(input); break;
			default: return false;
		}
	}

//** FUNCTION: Validate Email Address	
	function validateEmail(input) {
		if (input.value != input.empty) {
			return (input.value.indexOf(".") > 2) && (input.value.indexOf("@") > 0);
		} else {
			return false;
		}
	}
//** FUNCTION: Validate Check Box
	function validateChecked(input) {
		if (input.checked) {
			return true;
		} else {
			return false;
		}
	}
//** FUNCTION: Validate Empty INPUT	
	function validateNotEmpty(input) {
		if (input.value != "") {
			if (input.value != null) {
				if (input.value != ' ') {
					if (input.value != input.empty) { 
						return true;
					} else return false;
				} else return false;
			} else return false;
		} else return false;
	}


//** FUNCTION: Validate Password Field	
	function validatePassword(input) {
		var confirmInput = eval(input.confirm);
		if (input.value != "") {
			if (input.value != null) {
				if (input.value != ' ') {
					if (input.value == confirmInput.value) {
						return true;
					} else {
						return false;
					}
				} else return false;
			} else return false;
		} else return false;
	}
	
//** FUNCTION: Validate Password Field	
	function validateCreditCard(input) {
		if (input.value != input.empty) {
			if (validateCreditCardNumber(input.value)) {
				var month = eval(input.month);
				if (validateCreditCardExpires(eval(input.month),eval(input.year))) {
					return true
				} else return false;
			} else return false;
		}		
	}

	function validateCreditCardNumber(s) {
		s = s.replace(/ /g,'');
		if (s == '4646464646464646' || s == '0000000000000000') {
			alert('Dummy Credit Card Number');
			return true;
		} else {
			// remove non-numerics
			var v = "0123456789";
			var w = "";
			for (j=0; j < s.length; j++) {
				x = s.charAt(j);
				if (v.indexOf(x,0) != -1) w += x;
			}
			// validate number
			j = w.length / 2;
			if (j < 6.5 || j > 8 || j == 7) return false;
			k = Math.floor(j);
			m = Math.ceil(j) - k;
			c = 0;
			for (l=0; l<k; l++) {
				a = w.charAt(l*2+m) * 2;
				c += a > 9 ? Math.floor(a/10 + a%10) : a;
			}
			for (a=0; a<k+m; a++) c += w.charAt(a*2+1-m) * 1;
			return (c%10 == 0);
		}

	}
	function validateCreditCardExpires(month,year) {
		var today = new Date();
		var expiry = new Date('20'+year.value, (month.value-1), 30,0 , 0, 0);
		if (today.getTime() > expiry.getTime()) return false; else return true;
	
	}
	
/*******************************************************************************
	Form Validation Error Message
********************************************************************************/
	var validateMsgBox;
	function validateMsg(action,input) {
		switch(action) {
			case 'show': 
				validateMsgBox = document.createElement('DIV');
				validateMsgBox.id = 'validateErrorMsg';
				validateMsgBox.innerHTML = input.validateMsg;
				validateMsgBox.style.top = findPosY(input) + input.offsetHeight+'px';
				validateMsgBox.style.left = findPosX(input) + 'px';
				document.body.appendChild(validateMsgBox);
				setTimeout('validateMsg(\'destroy\');',3000);
				break;
			case 'destroy':
				document.body.removeChild(validateMsgBox);
				validateMsgBox = null;
				break;
		}
	}	
	
/*******************************************************************************
	Find Elements Postion in Page Scripts
********************************************************************************/				
//** FUNCTION: Find Left Postion of Element -- From QuirksMode
	function findPosX(obj) {
		var curleft = 0;
		if (obj.offsetParent) {
			while (obj.offsetParent) { curleft += obj.offsetLeft; obj = obj.offsetParent;}
		} else if (obj.x) curleft += obj.x;
		return curleft;
	}
//** FUNCTION: Find Top Postion of Element -- From QuirksMode
	function findPosY(obj) {
		var curtop = 0;
		if (obj.offsetParent) {
			while (obj.offsetParent) { curtop += obj.offsetTop; obj = obj.offsetParent;}
		} else if (obj.y) curtop += obj.y;
		return curtop;
	}
/**************************************************************************************************
	Change Class Functions
***************************************************************************************************/
	function addClass(obj,className) {
		// Check is Class is already Assigned
		var classes = obj.className.split(' ');
		var found = false;
		for (i=0;i< classes.length; i++) {
			if (classes[i] == className) { found = true; }
		}
		if (!found) { obj.className += ' '+className; }
	}


	function removeClass(obj, className) {
		var classes = obj.className.split(' ');
		obj.className = '';
		for (j=0;j< classes.length; j++) {
			if (classes[j] != className) { obj.className += ' '+classes[j]; }
		}
	}
	
/*
###############################################################################
##
##	Type		:	Class
##	Description	:	Browser Detection
##	Author		:	www.quirksmode.org
##
###############################################################################
*/
	var BrowserDetect = {
		init: function () {
			this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
			this.version = this.searchVersion(navigator.userAgent)
				|| this.searchVersion(navigator.appVersion)
				|| "an unknown version";
			this.OS = this.searchString(this.dataOS) || "an unknown OS";
		},
		searchString: function (data) {
			for (var i=0;i<data.length;i++)	{
				var dataString = data[i].string;
				var dataProp = data[i].prop;
				this.versionSearchString = data[i].versionSearch || data[i].identity;
				if (dataString) {
					if (dataString.indexOf(data[i].subString) != -1)
						return data[i].identity;
				}
				else if (dataProp)
					return data[i].identity;
			}
		},
		searchVersion: function (dataString) {
			var index = dataString.indexOf(this.versionSearchString);
			if (index == -1) return;
			return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
		},
		dataBrowser: [
			{
				string: navigator.vendor,
				subString: "Apple",
				identity: "Safari"
			},
			{
				prop: window.opera,
				identity: "Opera"
			},
			{
				string: navigator.vendor,
				subString: "iCab",
				identity: "iCab"
			},
			{
				string: navigator.vendor,
				subString: "KDE",
				identity: "Konqueror"
			},
			{
				string: navigator.userAgent,
				subString: "Firefox",
				identity: "Firefox"
			},
			{	// for newer Netscapes (6+)
				string: navigator.userAgent,
				subString: "Netscape",
				identity: "Netscape"
			},
			{
				string: navigator.userAgent,
				subString: "MSIE",
				identity: "Explorer",
				versionSearch: "MSIE"
			},
			{
				string: navigator.userAgent,
				subString: "Gecko",
				identity: "Mozilla",
				versionSearch: "rv"
			},
			{ 	// for older Netscapes (4-)
				string: navigator.userAgent,
				subString: "Mozilla",
				identity: "Netscape",
				versionSearch: "Mozilla"
			}
		],
		dataOS : [
			{
				string: navigator.platform,
				subString: "Win",
				identity: "Windows"
			},
			{
				string: navigator.platform,
				subString: "Mac",
				identity: "Mac"
			},
			{
				string: navigator.platform,
				subString: "Linux",
				identity: "Linux"
			}
		]
	
	};		
