/*******************************************************************************
	Form Validation Scripts
********************************************************************************/
cms.forms = {
	form : null,
	msgBox : null,
    validate :  function(form) {
    	this.form = form;
		for (i=0; i<form.elements.length; i++) {
			if (form[i].getAttribute('validate')) {
				if (!this.checkINPUT(form[i])) {
					this.msg('show',form[i]) 
					return false; 
				} 			
			} 
		}
		return true;
    },
  	// Check to see how to validate form element
  	checkINPUT : function(input) {
  		
		switch(input.getAttribute('validate')) {
			case "email": return this.validateEmail(input); break;
			case "empty": return this.validateNotEmpty(input); break;
			case "checked": return this.validateChecked(input); break;
			case "password": return this.validatePassword(input); break;
			case "creditcard": return this.validateCreditCard(input); break;
			default: return false;
		}
	},
	// Check if Email Address is in a Valid Format 
	validateEmail : function(input) {
		if (input.value != input.getAttribute('empty')) {
			var str = input.value;
			var at="@"
			var dot="."
			var lat=str.indexOf(at)
			var lstr=str.length
			var ldot=str.indexOf(dot)
			if (str.indexOf(at)==-1){return false}
			if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){return false}
			if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){return false}
			if (str.indexOf(at,(lat+1))!=-1){return false}
			if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){return false}
			if (str.indexOf(dot,(lat+2))==-1){ return false}
			if (str.indexOf(" ")!=-1){return false}
			return true					
		} else {
			return false;
		}
	},
	validateChecked : function(input) {
		if (input.checked) { return true; } else { return false;}
	},
	validateNotEmpty : function(input) {
		if (input.value != "") {
			if (input.value != null) {
				if (input.value != ' ') {
					if (input.value != input.getAttribute('empty')) { 
						return true;
					} else return false;
				} else return false;
			} else return false;
		} else return false;
	},
	validatePassword : function(input) {
		var confirmInput = this.form[input.getAttribute('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;
	},
	validateCreditCard : function(input) {
		if (input.value != input.getAttribute('empty')) {
			if (this.validateCreditCardNumber(input.value)) {
				if (
					this.validateCreditCardExpires(
						this.form[input.getAttribute('month')],
						this.form[input.getAttribute('year')]
					)
				) {
					return true
				} else return false;
			} else return false;
		}		
	},
	validateCreditCardNumber : function(s) {
		s = s.replace(/ /g,'');
		if (s == '4646464646464646' || s == '0000000000000000' || s == '4444333322221111') {
			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);
		}
	},
	validateCreditCardExpires : function(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;
		}
	},
	msg : function(action,input) {
		switch(action) {
			case 'show': 
				this.msgBox = document.createElement('DIV');
				this.msgBox.id = 'validateErrorMsg';
				this.msgBox.innerHTML = input.getAttribute('validateMsg');
				this.msgBox.style.top = this.findPosY(input) + input.offsetHeight+'px';
				this.msgBox.style.left = this.findPosX(input) + 'px';
				document.body.appendChild(this.msgBox);
				setTimeout('cms.forms.msg(\'destroy\');',3000);
				break;
			case 'destroy':
				document.body.removeChild(this.msgBox);
				this.msgBox = null;
				break;
		}
	},
	findPosX : function(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;
	},
	findPosY : function(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;
	},
	startEdit : function(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='';
		}
	},
	finishEdit : function(input) {
		if (input.value == input.getAttribute('empty') || input.value == '') {
			input.className += ' empty';
			input.value = input.getAttribute('empty');
		}
    }
} 