/*
// Form Tools
// r411
// Created By
// Alex Vaos
// avaos@auction123.com
// 1/6/2010
*/ 

var formTools = function(){

	var _form = "formTools";
	var _captchaImage = "formTools-captcha";
	var _captchaExists = false;
	var _requiredFields = new Array();
	
	var _debug = function(msg) {
		if (typeof(console) != "undefined" && console.log) console.log(msg);
	};
	
	var _addEvent = function(elem, type, eventHandle) {
		if (elem == null || elem == undefined) return;
		if ( elem.addEventListener ) {
			elem.addEventListener( type, eventHandle, false );
		} else if ( elem.attachEvent ) {
			elem.attachEvent( "on" + type, eventHandle );
		}
	};
	
	var _useForm = function(el) {
		_form = el;
		if (typeof(_form) == "string") {
			_form = document.getElementById(_form);
		}
		if (!_form || typeof(_form) == "undefined") _debug("CANNOT FIND FORM: \n" + el + "\n" + "PLEASE SEARCH JAVASCRIPT FOR:\n" + "formTools.useForm");
		return;
	};

	var _validate = function(val, type) {
		type = type.toLowerCase();
		//_debug("VALIDATING: " + val + " : " + type);
		// EMPTY
		if (type == "empty" || type == "") {
			return val.length > 0
		}
		// STRING LENGTH
		else if (parseInt(type) > 0) {
			//return new RegExp('^\w{0,' + type + '}$').test(val);
			return val.length <= type && val != "";
		}
		// EMAIL
		else if (type == "email") {
			if (window.RegExp)
				return new RegExp('^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$').test(val);
			else
				return ((val.indexOf('@') >= 0)&&(val.indexOf('.') >= 0));
		}
		// PHONE
		
		else if (type == "phone") {
			return val.length > 2;
			//return /^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/.test(val.replace("(", "").replace(")", ""));
			
			//if (window.RegExp) 
			//	return new RegExp('(\d|\-|\.)+', "gi").test(val.replace("(", "").replace(")", ""));
			//else
			//	var t = val.replace(/\s/g, "").replace(/./g, "").replace(/\+/g, "").replace(/\(/g, "").replace(/\)/g, "").replace(/\-/g, "").replace("ext", "").replace("x", "").replace(",", "");
			//	return parseInt(t) == t; // IS INT
		}
		_debug("FORMTOOLS: Unknown validation type: " + type);
	};
	
	var _addRequiredField = function(el, msg, vmethod) {
		//_requiredFields[el] = msg;
		if (!vmethod) vmethod = "empty";
		msg = msg.replace("&quot;", "'"); // ASP LIMITATION
		_requiredFields[el] = {
			"element": el,
			"error": msg,
			"validation": vmethod
		};
	};
	
	var _formSubmit = function() {
		
		var err = 0;
		var firsterror = false;
		if (_captchaExists && typeof(_requiredFields['formTools-captchaInput']) == "undefined") {
			alert("checking");
			_addRequiredField('formTools-captchaInput', "Please enter the CAPTCHA");
		}
		if (_requiredFields) {
			/* // FOR USE WITH FRAMEWORKS LIKE PROTOTYPE
			for (el in _requiredFields) {
				if (typeof(el) == "string") {
					var field = document.getElementsByName(el)[0];
					if (typeof(field) == "object" && field.name.length > 0) {
					
						if (typeof(_form.elements[el]) != "undefined" && typeof(_form.elements[el]) != "function" && el != "") {
					
							if (_form.elements[el].value == '') {
								err++;
								if (firsterror == "") firsterror = el;
							} else if (el == "email") {
								if (_validateEmail(_form.elements[el].value)) {
									err++;
									if (firsterror == "") firsterror = el;
								}
							}
							
						} else {
							_debug("ERROR UNDEFINED VARIABLE: " + el);
							err = -1000;
						}
					
					}
				}
			}
			*/
			
			for (el in _requiredFields) {
				
				var f = _requiredFields[el];
			
				if (typeof(f.element) != "undefined" && typeof(_form.elements[f.element]) != "undefined" && el.element != "" && typeof(_form.elements[el.element]) != "function") {
					var elm = document.getElementsByName(f.element);
					_debug("ELM: " + elm.length + "\nF.ELM: " + f.element);
					
					
					if (f.validation) {
						//_debug(elm);
						//alert(typeof(_elm));
						
						
						// CHECKBOX / RADIO
						if (elm.length > 1) {
						//if (elm.type == "checkbox" || elm.type == "radio") {
							//_debug("check or radio");
							//alert("check: " + elm + "\n" + elm[0].name);
							var chk = false;
							var l = elm.length;
							for (var i = 0; i < l; i++) {
								_debug(elm + "\n" + i + "\n" + elm[i] + "\n" + elm[i].checked);
								if (elm[i].checked)
									chk = true;
							}
							if (!chk) {
								err++;
								if (!firsterror) firsterror = f;
								break;
							}
						
						}
						// TEXT, SELECT VALIDATION
						else if (!_validate(elm[0].value, f.validation)) {
							err++;
							if (!firsterror) firsterror = f;
							break;
						}
					}

				} else {
					_debug("ERROR UNDEFINED VARIABLE:");
					_debug(f);
					err = -1000;
				}
				delete f;
			}
			//*/
		}
		if (err > 0) {
			//_debug(firsterror);
			alert(firsterror.error);
			try {
			_form.elements[firsterror.element].focus();
			} catch (err) {}
		} else if (err == 0) {
			_form.submit();
			//_debug(_requiredFields);
		}
	};
	
	var _tell = function() {
		return(_form);	
	}
	
	function setIfEmpty(elm, val) {
		var el = document.getElementById(elm);
		if (el.value == "" || !el.value)
			el.value = val;
		el.onclick = function () {
			if (el.value == val) el.value = "";
		};
	}
	
	var _captchaRefresh = function () {
		if (typeof(_captchaImage) == "string") // FIND ONCE
			_captchaImage = document.images[_captchaImage];
			
		if (_captchaImage == undefined || _captchaImage == null) {
			return;
		} else {
			_captchaExists = true;	
		}
		var now = new Date();
		_captchaImage.src = _captchaImage.src.split('?')[0] + '?x=' + now.toUTCString();
	}
	
	/*INIT*/
	
	var _init = function() {
		
		_addEvent(window, "load", function() {
			//alert("FORMTOOLS LOADED");
			// REFRESH BUTTON
			_addEvent(document.getElementById("formTools-refresh"), "click", function() {
				_captchaRefresh();
			});
			
			//SUBMIT BTN
			_addEvent(document.getElementById("formTools-submit"), "click", function() {
				_formSubmit();
			});
			
		});
		
	};
	_init();	
	
	return {
		submit: _formSubmit,
		formSubmit: _formSubmit,
		requiredFields: _requiredFields,
		addRequiredField: _addRequiredField,
		useForm: _useForm,
		tell: _tell,
		captchaRefresh: _captchaRefresh
		
	}
}();