
function disableForm (formName, bool) {
	if( bool==null ) bool = true;
	$jq("form[name='"+formName+"'] *").attr('disabled',bool);
}

var ajaxErrorString = "There was an error sending your data.  Please try again.";

function ajaxObj (formName, vars)
{
	var url = $jq("form[name='"+formName+"']").attr('action');
	var method = $jq("form[name='"+formName+"']").attr('method');
	if( !method ) { method = 'get'; }
	//alert('send to '+url+' via '+method+':\n\n'+vars); return false;
	//showMsg('formResult', 'send to '+url+' via '+method+':<br/><br/>'+vars );

	this.request = function() {
		$jq.ajax({
			url:		url,
			type:		method,
			dataType:	'html',
			timeout:	60*1000,
			global:		false,
			data:		vars,
			error: function(){
				alert( ajaxErrorString );
			},
			success: function( html ) {
				//alert( html );
				handleResponse( html );
			}
		});
	}
	return this;
}

/*	------------------------------------------------------
	Get form data bits
*/
var theForm = '';

function getFormData( formName ) {
	//alert('get form data');
	hideMsgs();
	var vars = new Array();

	theForm = document.forms[formName];
	for( i=0; i<theForm.length; i++ ) {
	
		field = theForm[i];
		field.disabled = true;
		fieldVal = getFieldVal( field, formName );
		//alert('value: '+fieldVal);

		if(	!reqOK(field, fieldVal) ) {
			disableForm( formName, false );
			showMsg( field.name+'Error', field.title );
			field.focus();
			return false;

		} else if( $jq(field).hasClass('email') && !emailFormatOk(fieldVal) ) {
			disableForm( formName, false );
			showMsg( field.name+'Error', "Please enter a valid email address" );
			field.focus();
			return false;

		} else if( $jq(field).hasClass('send') ) {
			vars[vars.length] = field.name+'='+escape(fieldVal);
		}
	}
	varString = getVarString( vars );
	//alert( varString ); return false;

	return varString;
}

/*	------------------------------------------------------
	Check user-entered values
*/

/*function checkUsername( fieldName ) {
	//alert('checking uname');
	field = $jq("input[name='"+fieldName+"']");

	$jq.get("check_username.php",
		{ fUsername: field.val() },
		function(data) {
			parseResults( data, fieldName );
		}
	); return false;
}*/

function checkEmail( fieldName ) {
	field = $jq("input[name='"+fieldName+"']");
	$jq.get("/check_email.php",
		{ fEmail: field.val() },
		function(data) {
			parseResults( data, fieldName );
		}
	); return false;
}

function checkUrl( fieldName ) {
	field = $jq("input[name='"+fieldName+"']");
	$jq.get("/check_url.php",
		{ fUrl: field.val() },
		function(data) {
			parseResults( data, fieldName );
		}
	); return false;
}

function checkCardNumber( fieldName ) {
	field = $jq("input[name='"+fieldName+"']");
	$jq.get("/check_cardNumber.php",
		{ fCardNumber: field.val() },
		function(data) {
			//alert(data);
			return parseResults( data, fieldName );
		}
	);
}

var re_digitsOnly = /[0-9]+/;

function checkDigitsOnly( fieldName, item, count ) {
	field = $jq("input[name='"+fieldName+"']");
	var re = new RegExp( re_digitsOnly );
	if( field.val().match(re) ) { return true; }
	else { return false; }
}

/*	------------------------------------------------------
	Show feedback to user
*/
function parseResults( data, id ) {
	//alert('data: '+data+'\n'+'id: '+id);

	results = data.split("|");
	var outcome = results[1];
	var msg = results[2];

	if( outcome == "success" ) {
		if( msg ) {
			$jq('#'+id+'Error').html( msg );
		} else {
			hideMsg( id+'Error' );
		}
		return true;

	} else if( results[1]=="error" ) {
		$jq('#'+id).focus();
		showMsg( id+'Error', results[2] );
		return false;

	} else {
		hideMsgs();
		return false;
	}
}

function checkPasswords( name1, name2 ) {
	f1 = $jq("input[name='"+name1+"']");
	f2 = $jq("input[name='"+name2+"']");

	if( f1.val() != f2.val() ) {
		showMsg('fPassword1Error','Please enter the same password in both fields.');
		return false;
	} else {
		return true;
	}
}

//	------------------------------------------------------

function reqOK( f, fVal, formName ) {
	if( $jq(f).hasClass('req')==1 &&
		( fVal=='' || fVal==false || ( (f.type=='checkbox'||f.type=='radio') && !$jq(f).attr('checked') ) ) )
	{
		return false;
	} else {
		return true;
	}
}

//var emailFormat = /\w+[@]\w+[-.]?\w+[-.]\w+/;
var emailFormat = /^.+@.+\..{2,3,4,6}$/;

function emailFormatOk( address ) {
	formatOk = address.match(emailFormat);

	if( formatOk ) {
		return true;
	} else {
		return false;
	}
}

function hideMsgs( fieldId, msg ) {
	$jq('.formError').css('display','none');
	$jq('.formError').css('opacity',0);
}

function hideMsg( fieldId ) {
	$jq('#'+fieldId).html(null);
	$jq('#'+fieldId).css('display','none');
	$jq('#'+fieldId).css('opacity',0);
}

function showMsg( fieldId, msg ) {
	$jq('#'+fieldId).html( msg );
	$jq('#'+fieldId).css('display','block');
	$jq('#'+fieldId).animate( { opacity:1 }, 550 );
}

function getFieldVal (field, formName) {
	//alert('getting the value of '+field+' in '+formName+'...');

	var f = $jq( field );

	if( f.is('input') ) {

		switch( f.attr( 'type' ) ) {
			default:
			case 'text':
			case 'hidden':
			case 'password':
				return f.val();
			break;

			case 'radio':
				return $jq( '#'+formName+' [name="'+f.attr('name')+'"]:checked' ).val()
			break;

			case 'checkbox':
				if( f.attr('checked') != true ) {
					return 0;
				} else {
					return true;
				}
			break;
		}
	} else if ( f.is('select') || f.is('textarea') ) {
		return f.val();
	}
}

function getVarString( vars ) {
	vars = unique(vars);
	str = "";
	for( i=0; i<vars.length; i++ ) {
		str+= vars[i]+'&';
		//str+= '\n';
	}
	return str;
}

//============================================================================================

function clearDefault (field, val) {
	if( field.value==val ) field.value = "";
}

function setDefault (field, val) {
	if( field.value=="" ) field.value = val;
}

// ----------------------------------------------------------------------
/*
	Removes duplicates in the array 'a'
	@author Johan KŠnngŒrd, http://dev.kanngard.net
*/
function unique(a) {
	tmp = new Array(0);
	for(i=0;i<a.length;i++){
		if(!contains(tmp, a[i])){
			tmp.length+=1;
			tmp[tmp.length-1]=a[i];
		}
	}
	return tmp;
}

/*
	Returns true if 's' is contained in the array 'a'
	@author Johan KŠnngŒrd, http://dev.kanngard.net
*/
function contains(a, e) {
	for(j=0;j<a.length;j++)if(a[j]==e)return true;
	return false;
}


// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
