
//----------------------------------------------------------------------
// Useful Page Functions
//----------------------------------------------------------------------

var arInputsToValidate = new Array ();
var arValidationErrors = new Array ();
var arCompareErrors = new Array ();

function JS_Form_Validate ()
{	
	var bIsValidated = false;
	var nItemsValidated = 0;
	var objCurrentElement = new Object ();
	
	JS_Form_FindValidationItems (); // get items to validate
	
	// loop through items to validate and check each one
	for ( var n=0; n<arInputsToValidate.length; n++ )
	{
		JS_SetValidateOnDefocus(arInputsToValidate[n]); // tell object to trigger valiate funciton on exit focus
																 
		arInputsToValidate[n].value = JS_Utils_Trim(arInputsToValidate[n].value); // trim string
		
		//alert ( arInputsToValidate[n].type );
		
		if ( arValidationErrors[n].className == "RequiredFieldError" )
		{
			//alert ( arInputsToValidate[n].nodeType);
			
			if ( arInputsToValidate[n].type == "checkbox" )
			{
				// checkbox item
				if  ( (arInputsToValidate[n].checked) && (Number(arInputsToValidate[n].value) != -1) )
				{
					//alert ( "RequiredFieldError" );
					arValidationErrors[n].style.display = "none";
					nItemsValidated ++;
				}
				else
				{
					arValidationErrors[n].style.display = "block";
				}				
			}
			else
			{
				// other
				if  ( (arInputsToValidate[n].value.length > 0) && (Number(arInputsToValidate[n].value) != -1) )
				{
					//alert ( "RequiredFieldError" );
					arValidationErrors[n].style.display = "none";
					nItemsValidated ++;
				}
				else
				{
					arValidationErrors[n].style.display = "block";
				}
			}
		}
		
		else if ( arValidationErrors[n].className == "FieldTypeError" )
		{
			arValidationErrors[n].style.display = "none";
			
			if ( JS_Utils_GetParent(arValidationErrors[n]) == JS_Utils_GetParent(arValidationErrors[n-1]) )
			{																						  
				if ( arValidationErrors[n-1].style.display == "none" )
				{
					// is a valid email
					if ( arInputsToValidate[n].name == "Email" )
					{
						if ( ! JS_Form_IsEmail ( arInputsToValidate[n].value ) ) arValidationErrors[n].style.display = "block";
						else nItemsValidated ++;
					}
					// is a valid password
					if ( arInputsToValidate[n].name == "Password" || arInputsToValidate[n].name == "PasswordConfirm" )
					{
						if ( ! JS_Form_IsPassword ( arInputsToValidate[n].value ) ) arValidationErrors[n].style.display = "block";
						else nItemsValidated ++;
					}					
				}
			}
		}
	}	
	//alert(arInputsToValidate.length);
	if ( nItemsValidated == arInputsToValidate.length ) bIsValidated = true;
	else bIsValidated = false;

	return bIsValidated;
}

function JS_Form_FindValidationItems ()
{
	var arValidationItems = document.getElementsByTagName("div");
	var arValidationInputs = new Array();
	var arValidationSelects = new Array();
	var arValidationTextareas = new Array();	
	var objTempElement = new Object();
	var arResults = new Array();
	
	arInputsToValidate = new Array();
	arValidationErrors = new Array();

	// get validation spans
	for ( var n=0; n<arValidationItems.length; n++ )
	{
		if ( arValidationItems[n].className.indexOf("Error") > -1 )
		{
			objCurrentElement = JS_Utils_GetParent (arValidationItems[n]);
			arValidationInputs = objCurrentElement.getElementsByTagName("input");
			arValidationSelects = objCurrentElement.getElementsByTagName("select");
			arValidationTextareas = objCurrentElement.getElementsByTagName("textarea");

			if ( (arValidationInputs.length > 0) && (arValidationInputs.length < 2)  ) 
			{			
				arInputsToValidate.push(arValidationInputs[0]);
				arValidationErrors.push(arValidationItems[n]);
			}
			else if ( (arValidationSelects.length > 0) && (arValidationSelects.length < 2)  ) 
			{
				arInputsToValidate.push(arValidationSelects[0]);
				arValidationErrors.push(arValidationItems[n]);				
			}
			else if ( (arValidationTextareas.length > 0) && (arValidationTextareas.length < 2)  ) 
			{
				arInputsToValidate.push(arValidationTextareas[0]);
				arValidationErrors.push(arValidationItems[n]);				
			}			
			//else alert("Warning! Too many or too few items to validate for: " + arValidationItems[n].innerHTML );
		}
	}
}

function JS_SetValidateOnDefocus ( objElement )
{
	objElement.onblur = JS_Form_Validate;
}

function JS_Form_ValidateItem ( objItem, strValidationType )
{
	var bIsValidated = false;	
	return bIsValidated;
}

//----------------------------------------------------------------------
//----------------------------------------------------------------------

function JS_Form_ConfirmDelete ()
{
	return confirm("Are you sure you want to delete this item? \nThere is no undo!");
}

function JS_Form_Confirm ( strMessage )
{
	return confirm(strMessage);
}

//----------------------------------------------------------------------
//----------------------------------------------------------------------

// Sets the focus if the element is found
function JS_Form_SetFocus ( strElement )
{
	var txtElement = document.getElementById ( strElement );
	if ( txtElement ) txtElement.focus();
}

// make any disabled items enabled
function JS_Form_EnableInputs ( strFormID )
{
	var objAppForm = document.getElementById ( strFormID );
	if ( objAppForm )
	{
		var nElementsCount = objAppForm.elements.length;
		
		for ( var x=0; x<nElementsCount; x++ )
		{
			objAppForm.elements[x].disabled = false;
		}
	}
}

//----------------------------------------------------------------------
//----------------------------------------------------------------------

function JS_Form_AutoPostback ( strFormID )
{	
	if ( strFormID == "" ) strFormID = document.forms[0].id;
	
	var objAppForm = document.getElementById ( strFormID );	
	
	if ( objAppForm ) objAppForm.submit();
	else alert ( "Form not valid: " + strFormID );
}


function JS_Form_ChangeOrdinal ( nRecordID, strDirection )
{
	var objOrdinalHolder = document.getElementById ( "hidChangeOrdinal" );
	var objDirectionHolder = document.getElementById ( "hidChangeOrdinalDirection" );
	
	if (objOrdinalHolder) objOrdinalHolder.value = nRecordID;
	if (objDirectionHolder) objDirectionHolder.value = strDirection;
	
	//JS_Form_AutoPostback("Form1");
	
	return false;
}


//----------------------------------------------------------------------
//----------------------------------------------------------------------

function JS_Form_SelectAll ( strElement )
{
	var objElement = document.getElementById ( strElement );
	var arInputs = objElement.getElementsByTagName ( "input" );
	
	for ( var i=0; i<arInputs.length; i++ )
	{
		arInputs[i].checked = true;
	}	
}

function JS_Form_DeselectAll ( strElement )
{
	var objElement = document.getElementById ( strElement );
	var arInputs = objElement.getElementsByTagName ( "input" );
	
	for ( var i=0; i<arInputs.length; i++ )
	{
		arInputs[i].checked = false;
	}	
}

//----------------------------------------------------------------------
//----------------------------------------------------------------------

function JS_Form_CheckLimit ( objElement, nRecordLimit, bShowSpan )
{	
	// perform limit
	if ( objElement.value.length > nRecordLimit ) objElement.value = objElement.value.substring(0, nRecordLimit);
	
	// create message
	var nRemaining = nRecordLimit-objElement.value.length;
	strText  = "Remaining<br/>" + nRemaining + "/" + nRecordLimit;		
	
	// update limiter text
	var arSpans = JS_Utils_GetParent(objElement).getElementsByTagName("span");
	var objSpan;
	
	for ( var i=0; i<arSpans.length; i++ )
	{
		if ( arSpans[i].className == "Limiter" ) objSpan = arSpans[i];
	}
	
	// write message 
	objSpan.innerHTML = strText;
	
	// show / hide span
	if ( bShowSpan ) objSpan.style.display = "block";
	else objSpan.style.display = "none";
}

//----------------------------------------------------------------------
//----------------------------------------------------------------------

function JS_Form_IsEmail ( _email )
{
     var emailReg = /^[a-z][a-z-_0-9\.]+@[a-z-_=>0-9\.]+\.[a-z]{2,3}$/i
     return emailReg.test ( _email );
}

function JS_Form_IsPassword ( strPassword )
{
	return strPassword.length >= 6;
}

//----------------------------------------------------------------------
//----------------------------------------------------------------------


//----------------------------------------------------------------------
//----------------------------------------------------------------------


