/* checkform - written by Matt Varone (http://www.mattvarone.com) */

function checkform( thisForm, alertText )
{
 	var passed = true;
	var selected = false;
	var checked = false;
	var next, eLabel, type, responce, checked;
	var errorClass = "error";
	if  ( alertText === undefined ) alertText = '#name is a required field.';
	var requireds = thisForm.elements["validate"].value;
	var required  = requireds.split("|");

	for ( var i in required )
	{
		var req = required[i].split("::");
		var field = thisForm.elements[req[0]];
		var fType = thisForm.elements[req[0]].type;
		if ( fType === undefined ) { fType = thisForm.elements[req[0]][0].type; };
		if ( fType !== undefined )
		{
			if ( fType == "text" || fType == "select-one" || fType == "textarea" ) 
			{	
				if ( fType == "text" && req[0].indexOf("email") != -1 )
				{
					var at = field.value.indexOf("@");
					if ( at == -1 ) 
					{
					 	dataFailed( field, req[1] );
						type = 'email';
					} else { dataPassed( field ); }
				} else {
					checkInput( field, req[1]  );
				}
			} else  if ( fType == "radio" || fType == "checkbox"  ){
				var eLength = thisForm.elements[req[0]].length;
				for ( i=0; i<eLength; i++ )
				{
					if  (fType =="radio" && thisForm.elements[req[0]][i].checked )
					{
						selected = true;
					}
					
					if  (fType =="checkbox" && thisForm.elements[req[0]][i].checked )
					{
						checked = true;
					}
				        
				}
				
				if (fType =="radio") { if ( selected == false) { dataFailed( field[0], req[1] );  }; };
				if (fType =="checkbox") { if ( checked == false ) { dataFailed( field[0], req[1] ); }; };

			} 
		
		}
		
	}
		
	if ( passed == false ) 
	{
		responce = alertText.replace('#name', eLabel);
		alert( responce );
		next.focus();
		return false;
	} else {
		return true;	
	}
	
	function checkInput( field, title )
	{
		var input = field.value.replace(/^\s+|-|\s+$/g, '');
		if ( input == "" )
		{		
			dataFailed( field, title );
		} else {
			dataPassed( field );
		}

	}
	
	function dataFailed( field, title )
	{
		passed = false;
		cssjs('add',field,errorClass);
		if ( next == null) 
		{ 
			next  = field;
			eLabel = title;
		};
	}
	
	function dataPassed( field )
	{
		cssjs('remove',field,errorClass);
	}
	
	/* cssjs - written by Christian Heilmann (http://icant.co.uk) */

	function cssjs(a,o,c1,c2)
	{
		switch (a){
			case 'swap':
				o.className=!cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
			break;
			case 'add':
				if(!cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
			break;
			case 'remove':
				var rep=o.className.match(' '+c1)?' '+c1:c1;
				o.className=o.className.replace(rep,'');
			break;
			case 'check':
				return new RegExp('\\b'+c1+'\\b').test(o.className)
			break;
		}
	}	
}

