var shc_RecursiveParent = null;

function ShowHideControl(controlToCheckID, controlToShowHideID, valueToVerify, evalLogicFunction)
{
	this.controlToCheckID = controlToCheckID;
	this.controlToShowHideID = controlToShowHideID;
	this.valueToVerify = valueToVerify;
	this.evalLogicFunction = evalLogicFunction;
}

function shc_EvalVisibility(shcTarget)
{				
	var isVisible = shcTarget.evalLogicFunction();
	var controlToShowHide = document.getElementById(shcTarget.controlToShowHideID);
	
	if(controlToShowHide.parentNode != null && controlToShowHide.parentNode.shc_enabled != null &&	controlToShowHide.parentNode.shc_enabled != true)
		isVisible = false;
			
	if(isVisible)
	{
		shc_ClearChildElementValues(controlToShowHide,true);
		controlToShowHide.style.display = "";			
	}
	else
	{
		shc_ClearChildElementValues(controlToShowHide,false);
		controlToShowHide.style.display = "none";			
	}
	
	if(shc_RecursiveParent == null)
		shc_RecursiveParent = shcTarget;
	
	shc_fireChildEvents(controlToShowHide);
	
	if(shc_RecursiveParent == shcTarget)
	{
		if( typeof(GeoValidatePage) == "function" )
		{
			for(var i = 0; i < GeoValidators.length; i++)
				GeoValidators[i].evaluationfunction();
		}
				
		shc_RecursiveParent = null;
	}
	
	return isVisible;
}

function shc_fireChildEvents(elmTarget)
{
	switch(elmTarget.type)
	{
		case "textarea":
		case "text":
		case "checkbox":
		case "radio":
		case "select-one":
		case "select-multiple":	
			// do nothing
			break;	
		
		default:
			for(var i = 0; i < elmTarget.childNodes.length; i++)
				if(elmTarget.childNodes[i].nodeType != 3)
					shc_fireChildEvents(elmTarget.childNodes[i]);
			break;
	}

	if( typeof(elmTarget.updateVis) == "object" )
	{
		for(var i = 0; i < elmTarget.updateVis.length; i++)
			elmTarget.updateVis[i]();
	}
}

function shc_IsEqual()
{
	return shc_calcEqual(this.controlToCheckID, this.valueToVerify);
}

function shc_IsNotEqual()
{
	return !shc_calcEqual(this.controlToCheckID, this.valueToVerify);
}

function shc_calcEqual(controlToCheckID,valueToVerify)
{
	
	var controlToCheck = document.getElementById(controlToCheckID);	
	var checkValue = shc_GetValueRecursive(controlToCheck);
		
	if(checkValue == null)
	{
		if(valueToVerify == "")
			return true;
		return false;
	}
	
	return checkValue == valueToVerify;
}

function shc_EvalVisible()
{
	var elmTarget = document.getElementById(this.controlToShowHideID);
	
	if(evalLogicFunction())
	{
		elmTarget.style.display = "";
		shc_ClearChildElementValues(elmTarget, true);			
	}
	else
	{
		elmTarget.style.display = "none";		
		shc_ClearChildElementValues(elmTarget, false);		
	}
		
}

function shc_ClearChildElementValues(elmTarget,enableStatus)
{
	if(!enableStatus)
	{
		switch(elmTarget.type)
		{
			case "textarea":
			case "text":
				elmTarget.value = "";
			break;

			case "checkbox":
			case "radio":
				elmTarget.checked = false;
			break;
/*
			case "select-one":
			case "select-multiple":
				for(var i = 0; i < elmTarget.options.length; i++)
					elmTarget.options[i].selected = false;
			break;
*/
		}
	}

	switch(elmTarget.type)
	{
		case "textarea":
		case "text":
		case "checkbox":
		case "radio":
		case "select-one":
		case "select-multiple":	
			// do nothing
			break;	
		
		default:
			for(var i = 0; i < elmTarget.childNodes.length; i++)
				if(elmTarget.childNodes[i].nodeType != 3)
					shc_ClearChildElementValues(elmTarget.childNodes[i],enableStatus);
			break;
	}
	
	if(elmTarget.tagName != null)
		elmTarget.shc_enabled = enableStatus;
}

function shc_GetValueRecursive(objSubject)
{	
	if(objSubject.shc_enabled == false)
		return null;
		
	switch(objSubject.type)
	{
		case "textarea":
		case "text":
			return objSubject.value;
		break;

		case "radio":
			if( objSubject.checked == true )
				return objSubject.value;
		break;

		case "checkbox":
			if( objSubject.checked == true )
				return "true";
		break;

		case "select-one":
		case "select-multiple":
			for(var i = 0; i < objSubject.options.length; i++)
				if(objSubject.options[i].selected)
					return objSubject.options[i].value;					
		break;
		
	}

	var returnValue = null;
	for(var i = 0; i < objSubject.childNodes.length; i++)
	{		
		returnValue = shc_GetValueRecursive(objSubject.childNodes[i]);
		if(returnValue != null)
			return returnValue;
	}	
	return null;
}

function shc_AddEvent(elmSubject, strEventName, objFunction, bUseCapture)
{
	var rblList = document.getElementsByName(elmSubject.id.replace("_", ":"));
	
	if(rblList.length == 0)
		rblList = document.getElementsByName(elmSubject.name);
	
	if(rblList.length > 0)
		for(var i = 0; i < rblList.length; i++)
		{
			if(rblList[i].type == null || (rblList[i].type != "radio" && rblList[i].type != "checkbox"))
				continue;
			
			shc_attachEvent(rblList[i], "onclick", objFunction, bUseCapture);
			shc_attachEvent(rblList[i], "click", objFunction, bUseCapture);
		}

	shc_attachEvent(elmSubject, strEventName, objFunction, bUseCapture);
}

function shc_attachEvent(elmSubject, strEventName, objFunction, bUseCapture)
{
	if (elmSubject.addEventListener)
		elmSubject.addEventListener(strEventName, objFunction, bUseCapture);
	else if (elmSubject.attachEvent)
		elmSubject.attachEvent(strEventName, objFunction);
}

function shc_Initialize(ignoreValidation)
{
	for(var i = 0; i < arySHC.length; i++)
	{
		var elmShowHide = document.getElementById(arySHC[i].controlToCheckID);
		shc_AddEvent(elmShowHide, "onchange", new Function("shc_EvalVisibility(arySHC[" + i + "]);"), false);
		shc_AddEvent(elmShowHide, "change",  new Function("shc_EvalVisibility(arySHC[" + i + "]);"), false);
		
		if( typeof(elmShowHide.updateVis) != "object" )
			elmShowHide.updateVis = new Array();
			
		elmShowHide.updateVis[elmShowHide.updateVis.length] = new Function("shc_EvalVisibility(arySHC[" + i + "]);");
		
		shc_EvalVisibility(arySHC[i]);
	}
}