function log(m) {
	try {
		console.log(m);
	} catch (e) {}
}

function info(m) {
	try {
		console.info(m);
	} catch (e) {}
}

function partial (fn, scope) {
    var scope = scope || window;
    var args = [];
    for (var i=2, len = arguments.length; i < len; ++i) {
        args.push(arguments[i]);
    };
    return function() {
        fn.apply(scope, args);
    };
}

// Auto Clear Function
var autoClear = function() {
	return {
		init : function() {
			autoClear.render();
		},
		render : function() {			
			var inputs = $$('.autoClear');
			inputs.each(function(input){
				input.addEvent('focus', autoClear.clearDefault);
				input.addEvent('blur', autoClear.showDefault);
				input.setProperty('default', input.value);
			});
		},
		clearDefault : function() {
			var defaultValue = this.getProperty('default');
			var value = this.value;
			if(value == defaultValue) {
				this.value = '';
			}
		},
		showDefault : function() {
			if(this.hasClass('validate')) {
				var defaultValue = this.getProperty('default');
				var value = this.value;
				if(value == "") {
					this.value = defaultValue;
				}
				if(validate.checkField(this) != true) {
					
				}
			}
			else {
				var defaultValue = this.getProperty('default');
				var value = this.value;
				if(value == "") {
					this.value = defaultValue;
				}
			}
		}
	}
}();

// Required Field Function
var validate = function() {
	return {
		init : function() {
			requiredField.render();
		},
		render : function() {			
			// var inputs = $$('.validate');
			// inputs.each(function(input){
			// 	input.addEvent('blur', requiredField.checkField);
			// });
		},
		checkField : function(input) {
			
			var validateorType = input.getProperty('rel');
			
			switch(validateorType) {
				case "string":
					return validate.validateString(input);
					break;
				case "number":
					return validate.validateNumber(input);
					break;
				case "email":
					return validate.validateEmail(input);
					break;
				case "phone":
					// log("REQUIRED: " + input.id);
					return validate.validatePhone(input);
					break
				default:
					break;
			}
		},
		checkRequired : function(input) {
			var defaultValue = input.getProperty('default');
			var value = input.getProperty('value');
			var required = input.hasClass('required');
			
			if(required) {
				// log("REQUIRED: " + input.id);
				if(value == defaultValue) {
					input.addClass('invalid');
					input.removeClass('valid');
					return false;
				}
				else {
					input.removeClass('invalid');
					input.addClass('valid');
					return true;
				}
			}
		},
		validateString : function(input) {
			return validate.checkRequired(input);
		},
		validateNumber : function(input) {
			
			if(isNaN(input.value) != true) {
				input.removeClass('invalid');
				input.addClass('valid');
				return true;
			}
			else {
				input.addClass('invalid');
				input.removeClass('valid');
				return false;
				// return validate.checkRequired(input);
			}
		},
		validatePhone : function(input) {
			
			// log("REQUIRED: " + input.id);
			return validate.checkRequired(input);
		},
		validateEmail : function(input) {
			
			if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(input.value)) {
				info(input);
				input.removeClass('invalid');
				input.addClass('valid');
				return (true);
			}
			else {
				return validate.checkRequired(input);
			}
			
		}
	}
}();

// Submit Button Handler
var applyNowSubmit = function() {
	return {
		init : function() {
			applyNowSubmit.render();
		},
		render : function() {
			
			submit 				= $('apply_submit');
			
			submit.addEvent('click', applyNowSubmit.checkValid);
			
		},
		checkValid : function() {
			
			if(validate.checkField($('firstName')) == true && validate.checkField($('lastName')) == true && validate.checkField($('apply_phone')) == true) {
				
				$('apply_form').submit();
				return true;
				
			}
			else {
				
				return false;
				
			}
			
		}
	}
}();

// Submit Button Handler
var calcSubmit = function() {
	return {
		init : function() {
			calcSubmit.render();
		},
		render : function() {
			
			submit 				= $('calculator_submit');
			
			submit.addEvent('click', calcSubmit.checkValid);
			
		},
		checkValid : function() {
			
			
			if(validate.checkField($('Settlement')) == true && validate.checkField($('Name')) == true && validate.checkField($('calc_phone')) == true) {
				
				$('calc_form').submit();
				return true;
				
			}
			else {
				
				return false;
				
			}
			
		}
	}
}();