if( typeof nameSpace == 'undefined' ){
	var nameSpace = {};
}

if( typeof nameSpace.modules == 'undefined' ){
	nameSpace.modules = {};
}

if( typeof $ == 'function' && typeof $$ == 'undefined' ){
	$(document).ready(function(){
		if( nameSpace.modules.validate.autoInit ){
			nameSpace.modules.validate.init();
		}
	});
}

/////////////////////////////////////////////
// Class - nameSpace.modules.validate
// Description - 
/////////////////////////////////////////////
nameSpace.modules.validate = 
{
	_VALIDATE_FNAME				: 'firstname',
	_VALIDATE_LNAME             : 'lastname',
	_VALIDATE_EMAIL				: 'email',
	_VALIDATE_PHONE				: 'phone',
	_VALIDATE_NOSPECIALCHARS	: 'noSpecialChars',
	
	
	/////////////////////////////////////////////
	// Define the properties of the class
	/////////////////////////////////////////////
	autoInit				: false,
	_eContainer				: '',
	
	/////////////////////////////////////////////
	// Function - nameSpace.modules.validate.init
	/////////////////////////////////////////////
	//init : function( elementId, options )
	init : function( objOverride )
	{
		if(nameSpace.modules.validate.checkRequirements()){
			if( typeof objOverride == 'object' ){
				nameSpace.modules.validate.overrideParams( objOverride );
			}
			nameSpace.modules.validate.setActions();
		}
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.modules.validate.checkRequirements
	/////////////////////////////////////////////
	checkRequirements : function() 
	{
		var message = '';
		
		if( $(nameSpace.modules.validate.selectorContainer).size() == 0 ){
			return false;
		}
		
		if( typeof $ != 'function' || typeof $$ != 'undefined' ){
			message += '* File is missing: jquery\n';
		}
		
		if( message != '' ){
			alert(message);
			return false;
		}
		
		return true;
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.modules.validate.overrideParams
	/////////////////////////////////////////////
	overrideParams : function( e ) 
	{
		for( var i in e ){
			if( typeof e[i] == typeof nameSpace.modules.validate[i] ){
				nameSpace.modules.validate[i] = e[i];
			}
		}
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.modules.validate.setActions
	/////////////////////////////////////////////
	setActions : function() 
	{
		
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.modules.validate.onSubmitClick
	/////////////////////////////////////////////
	onSubmitClick : function(e) 
	{
	
		e = $(e);
		var f = $("form:has('#" + e.attr('id') + "')"), o, m = '';
		f.find('.required input').each( function(){		
			$(this).attr('required', 1);
			o = nameSpace.modules.validate.doValidateField($(this));			
			if( !o.isValid ){
				m += o.message;
			}			
		});		
		if( m != '' ){
			alert(m);
			return false;
		}
		
		return true;
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.modules.validate.submitClick
	/////////////////////////////////////////////
	submitClick : function(e) 
	{
	
		e = $(e);
		var f = $("form:has('#" + e.attr('id') + "')"), o, m = '';
		f.find('.required input').each( function(){		
			$(this).attr('required', 1);
			o = nameSpace.modules.validate.validateField($(this));			
			if( !o.isValid ){
				m += o.message;
			}			
		});		
		if( m != '' ){
			alert(m);
			return false;
		}
		
		return true;
	},
	/////////////////////////////////////////////
	// Function - nameSpace.modules.validate.validateField
	/////////////////////////////////////////////
	validateField : function(e) 
	{
		var objReturn = {};
		var v = nameSpace.string.trim(e.val());
		var n = e.attr('title').split('$')[nameSpace.modules.validationMessage._VALIDATE_ATTRIBUTE];
		//n = n[n.length-1];
		objReturn.isValid = true;
		objReturn.message = '';
		
		if( v == '' ){
			objReturn.isValid = false;
			objReturn.message = n + nameSpace.modules.validationMessage._VALIDATE_REQUIRED + '\n';
		}
		if(e.attr('type') == 'checkbox' && e.attr('checked') == false){		
			objReturn.isValid = false;
			objReturn.message = n + nameSpace.modules.validationMessage._VALIDATE_REQUIRED + '\n';			
			}
		if( objReturn.isValid && v != '' && typeof e.attr('validate') != 'undefined' ){
			switch( e.attr('validate') ){
				case nameSpace.modules.validate._VALIDATE_FNAME:
					if( !nameSpace.string.isFirstName(v) ){
						objReturn.isValid = false;
						objReturn.message = n + nameSpace.modules.validationMessage._VALIDATE_INVALID + 'First Name\n';
					}
					break;
				case nameSpace.modules.validate._VALIDATE_LNAME:  
				   
					if( !nameSpace.string.validate(v) ){
						objReturn.isValid = false;
						objReturn.message = n +  nameSpace.modules.validationMessage._VALIDATE_INVALID + 'Last Name\n';
					}
					break;
				case nameSpace.modules.validate._VALIDATE_EMAIL:
					if( !nameSpace.string.isEmail(v) ){
						objReturn.isValid = false;
						objReturn.message = n + nameSpace.modules.validationMessage._VALIDATE_INVALID + 'Email\n';
					}
					break;
				case nameSpace.modules.validate._VALIDATE_PHONE:
					if( !nameSpace.string.isPhone(v) ){
						objReturn.isValid = false;
						objReturn.message = n + nameSpace.modules.validationMessage._VALIDATE_INVALID + 'Phone\n';
					}
					break;
			}
		}
		
		return objReturn;
	},
	/////////////////////////////////////////////
	// Function - nameSpace.modules.validate.doValidateField
	/////////////////////////////////////////////
	doValidateField : function(e) 
	{
		var objReturn = {};
		var v = nameSpace.string.trim(e.val());
		var n = e.attr('name').split('$');
		n = n[n.length-1];
		objReturn.isValid = true;
		objReturn.message = '';
		
		if( v == '' ){
			objReturn.isValid = false;
			objReturn.message = n + nameSpace.modules.validationMessage._VALIDATE_REQUIRED + '\n';
		}
		if(e.attr('type') == 'checkbox' && e.attr('checked') == false){		
			objReturn.isValid = false;
			objReturn.message = n + nameSpace.modules.validationMessage._VALIDATE_REQUIRED + '\n';			
			}
		if( objReturn.isValid && v != '' && typeof e.attr('validate') != 'undefined' ){
			switch( e.attr('validate') ){
				case nameSpace.modules.validate._VALIDATE_FNAME:
					if( !nameSpace.string.isFirstName(v) ){
						objReturn.isValid = false;
						objReturn.message = n + nameSpace.modules.validationMessage._VALIDATE_INVALID + 'First Name\n';
					}
					break;
				case nameSpace.modules.validate._VALIDATE_LNAME:  
				   
					if( !nameSpace.string.validate(v) ){
						objReturn.isValid = false;
						objReturn.message = n +  nameSpace.modules.validationMessage._VALIDATE_INVALID + 'Last Name\n';
					}
					break;
				case nameSpace.modules.validate._VALIDATE_EMAIL:
					if( !nameSpace.string.isEmail(v) ){
						objReturn.isValid = false;
						objReturn.message = n + nameSpace.modules.validationMessage._VALIDATE_INVALID + 'Email\n';
					}
					break;
				case nameSpace.modules.validate._VALIDATE_PHONE:
					if( !nameSpace.string.isPhone(v) ){
						objReturn.isValid = false;
						objReturn.message = n + nameSpace.modules.validationMessage._VALIDATE_INVALID + 'Phone\n';
					}
					break;
			}
		}
		
		return objReturn;
	}
};