
//----------------------------------------------------------------------
// Useful Page Functions
//----------------------------------------------------------------------

var arInputsToValidate = new Array ();
var arValidationErrors = new Array ();
var arCompareErrors = new Array ();

function JS_Form_Validate_Scoped (eCaller)
{	
	var eForm = JS_Utils_FindParentElement(eCaller, 'FORM');
	if(eForm != false)
	{
		var bIsValidated = false;
		var nItemsValidated = 0;
		var objCurrentElement = new Object ();
		
		JS_Form_FindValidationItems_Scoped (eForm); // get items to validate
		//alert("Inputs: "+arInputsToValidate);
		// loop through items to validate and check each one
		for ( var n=0; n<arInputsToValidate.length; n++ )
		{
			JS_SetValidateOnDefocus_Scoped(arInputsToValidate[n]); // tell object to trigger valiate funciton on exit focus
																	 
			arInputsToValidate[n].value = JS_Utils_Trim(arInputsToValidate[n].value); // trim string
			
			if  ( arInputsToValidate[n].value.length > 0 )
			{
				arDivsToValidate[n].style.display = "none";
				nItemsValidated ++;
			}
			else
			{
				arDivsToValidate[n].style.display = "";
			}
		}	

		if ( nItemsValidated == arInputsToValidate.length ) bIsValidated = true;
		else bIsValidated = false;
	
		return bIsValidated;
	}
	else
	{
		alert("No parent form found");
		return false;
	}
}


function JS_Form_FindValidationItems_Scoped (eForm)
{
	var arTempDivs = eForm.getElementsByTagName("div");
	var arTempInputs = new Array();
	var arTempSelects = new Array();
	var objTempElement = new Object();
	var arResults = new Array();
	
	arInputsToValidate = new Array();
	arDivsToValidate = new Array();

	// get validation spans
	for ( var n=0; n<arTempDivs.length; n++ )
	{
		if ( arTempDivs[n].className == "ValidationError" )
		{
			objCurrentElement = JS_Utils_GetParent (arTempDivs[n]);
			arTempInputs = objCurrentElement.getElementsByTagName("input");
			arTempSelects = objCurrentElement.getElementsByTagName("select");
			arTempTextareas = objCurrentElement.getElementsByTagName("textarea");

			if ( (arTempInputs.length > 0) && (arTempInputs.length < 2)  ) 
			{			
				//alert(arTempInputs[0]);
				arInputsToValidate.push(arTempInputs[0]);
				arDivsToValidate.push(arTempDivs[n]);
			}
			else if ( (arTempSelects.length > 0) && (arTempSelects.length < 2)  ) 
			{
				//alert(arTempSelects[0]);
				arInputsToValidate.push(arTempSelects[0]);
				arDivsToValidate.push(arTempDivs[n]);				
			}
			else if ( (arTempTextareas.length > 0) && (arTempTextareas.length < 2)  ) 
			{
				//alert(arTempTextareas[0]);
				arInputsToValidate.push(arTempTextareas[0]);
				arDivsToValidate.push(arTempDivs[n]);				
			}			
			else alert("Warning! Too many or too few items to validate for: " + arTempDivs[n].innerHTML );
		}
	}
}


function JS_SetValidateOnDefocus_Scoped ( objElement )
{
	objElement.onblur = function(){JS_Form_Validate_Scoped(objElement)};
}
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 == "ValidationError" )
		{
			//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";
			// Type Errors need an accompanying, preceding required validator apparently
			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" || arInputsToValidate[n].name == "ContactEmail" )
					{
						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("To val:"+arInputsToValidate.length +" val'd:"+nItemsValidated);
	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("ValidationError") > -1 ) ||
				( arValidationItems[n].className.indexOf("FieldTypeError") > -1 )
			)
		{
			//alert(arValidationItems[n].className+" added");
			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 );	
	objAppForm.submit();
}


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-z0-9-\'_+#%]+(\.[_a-z0-9-\'_+#%]+)*@[a-z0-9-\'_+#%]+(\.[a-z0-9-\'_+#%]{2,})+$/i
     return emailReg.test ( _email );
}

function JS_Form_IsPassword ( strPassword )
{
	return strPassword.length >= 6;
}

//----------------------------------------------------------------------
//----------------------------------------------------------------------


//----------------------------------------------------------------------
//----------------------------------------------------------------------


