﻿/* Various functions for controls in the HuronOne.Web.UI.WebControls namespace. */

/* BreakoutSelector */
function breakoutSelector_hide(id)
{
	var container = document.getElementById(id + "_Container");
	if (container)
	{
		//set selected text
		breakoutSelector_setSelectedText(id);
		
		//hide options list
		container.style.visibility = "hidden";
	}	
}

function breakoutSelector_initiateHide(id)
{
	var container = document.getElementById(id + "_Container");
	if (container)
		container.hideTimer = window.setTimeout("breakoutSelector_hide('" + id + "');", 0);	
}

function breakoutSelector_toggleSelectAll(id,checked)
{
	var options = document.getElementById(id + "_Options");
	if (options)
	{
		//check all options
		var els = options.getElementsByTagName("input");
		for (var i=0; i<els.length; i++)
		{
			var el = els[i];
			if (el.type.toLowerCase() == "checkbox")
				el.checked = checked;
		}
	}
	breakoutSelector_setSelectedText(id);	
}

function breakoutSelector_setSelectedText(id)
{
	var selector = document.getElementById(id);
	var options = document.getElementById(id + "_Options");
	if (selector && options)
	{
		//gather names of options to show
		var els = options.getElementsByTagName("input");
		var names = new String();
		var uncheckedFound = false;
		
		for (var i=0; i<els.length; i++)
		{
			var el = els[i];
			if (el.type.toLowerCase() == "checkbox")
				if (el.checked)
					names = names + (names.length ? ", " : "") + el.getAttribute("textvalue");
				else
					uncheckedFound = true;
		}	
	
		//ensure at least one names is selected
		var namesAbbr;
		if (!names.length)
			namesAbbr = selector.getAttribute("nonetext");
		else if (!uncheckedFound)
			namesAbbr = selector.getAttribute("alltext");
		else
			namesAbbr = (names.length < 25) ? names : names.substring(0,22) + "...";
	
		//set names in title field
		var selectedText = document.getElementById(id + "_SelectedText");
		if (selectedText)
		{
			//set title and inner text
			selectedText.title = names;
			if (selectedText.firstChild)
				selectedText.firstChild.nodeValue = namesAbbr;
			else
				selectedText.appendChild(document.createTextNode(namesAbbr));
		}
	}
}

function breakoutSelector_show(id,element)
{	
	var container = document.getElementById(id + "_Container");
	if (container)
	{
		if (container.hideTimer)
			window.clearTimeout(container.hideTimer);
		if (element)
			item_reposition(element,container);	
		container.style.visibility = "visible";
	}
}

/* DisableOnClickButton */
function disableOnClickButton_onClick(id,validationGroup)
{
	//return false if validation exists and fails
	if (typeof(Page_ClientValidate) == "function")
		if (!Page_ClientValidate(validationGroup))
			return false;
	
	var button = document.getElementById(id);
	var msg = document.getElementById(id + "_Message"); 
	
	//hide button, show message
	button.style.display = "none";
	msg.style.display = "inline";
	
	//submit form
	__doPostBack(button.name,"");
}

/* FadeWrapper */
function fadeWrapper_fade(id,direction,duration,steps,delay)
{
	var element = document.getElementById(id)
	if (element)
	{
		var state = element.getAttribute("fadestate");
		var perform = false;
		var level;
		
		//correct state on first pass
		if (!state) {state = "2";}
		
		if (direction == "in" && state == "0") //fade in if object is transparent
		{
			level = 0;
			perform = true;
		}
		else if (direction == "out" && state == "2") //fade out if object is opaque
		{
			level = 1;
			perform = true;
		}
		
		if (perform)
			window.setTimeout("fadeWrapper_setOpacityRecursive('" + id + "'," + level + ",'" + direction + "'," + duration/steps + "," + 1/steps + ")",delay);
	}
}

/* set the opacity of the element (between 0.0 and 1.0) */
function fadeWrapper_setOpacityRecursive(id,level,direction,interval,increment)
{
	var element = document.getElementById(id);
	element.style.opacity = level;
	element.style.MozOpacity = level;
	element.style.KhtmlOpacity = level;
	element.style.filter = "alpha(opacity=" + (level * 100) + ");";
	
	var newLevel, proceed;
	if (direction == "in")
	{
		newLevel = level + increment;
		if (newLevel > 1) {newLevel = 1;}
		proceed = (level < 1 && newLevel <= 1);
		if (!proceed) {element.setAttribute("fadestate","2");}
	}
	else if (direction == "out")
	{
		newLevel = level - increment;
		if (newLevel < 0) {newLevel = 0;}
		proceed = (level > 0 && newLevel >= 0);
		if (!proceed) {element.setAttribute("fadestate","0");}
	}
	
	if (proceed)
		window.setTimeout("fadeWrapper_setOpacityRecursive('" + id + "'," + newLevel + ",'" + direction + "'," + interval + "," + increment + ")", interval);
}

/* InfoTip */
function infoTip_toggle(field,id,xOffset)
{
	var el = document.getElementById(id);
	if (el)
	{
		if (el.style.display != "block")
		{
			item_reposition(field,el);
			if (xOffset != 0) //offset allows us to keep info tip from going off right edge of screen
				el.style.left = (parseInt(el.style.left) + xOffset) + "px"
			el.style.display = "block";
		}
		else
			el.style.display = "";
	}
}

/* ModalDialog */
var modalDialog_backgrounds = "";

function modalDialog_inModalDialog(el)
{
	var parent = el.parentNode;
	while (parent)
	{
		if (parent.className && parent.className.indexOf("ModalDialog2") >= 0)
			return true;
		parent = parent.parentNode;
	}
	return false;
}

function modalDialog_toggle(prefix,show,idToFocus)
{
	var backgroundID = prefix + "_Background";
	var background = document.getElementById(backgroundID);
	var container = document.getElementById(prefix);
	if (background && container)
	{
		background.style.display = show ? "block" : "none";
		if (show)
		{
			if (!modalDialog_inModalDialog(container))
			{
				container.style.top = getScrollTop() + 10 + "px";
				container.style.left = parseInt((document.body.clientWidth / 2) - 400) + "px";
			}
			else
			{
				container.style.top = "0px";
				container.style.left = "0px";
			}
			
			//add background ID to list
			if (modalDialog_backgrounds.indexOf(backgroundID) < 0)
				modalDialog_backgrounds = backgroundID + ";" + modalDialog_backgrounds;
		}
		else
		{
			//remove background from list
			modalDialog_backgrounds = modalDialog_backgrounds.replace(backgroundID + ";","");
		}
		
		//show container
		container.style.display = show ? "block" : "none";
		container.style.position = "absolute"; //hack: forced to set this because browser doesn't read it from CSS
		document.getElementById(prefix + "_OpenState").value = (show ? "True" : "False");
		
		//HACK for disappearing Firefox Caret
		//HOW RIDICULOUS: set zIndex of each ModalDialogBackground to -1, then reset it to 100
		var bgs = modalDialog_backgrounds.split(";");
		for (var i = 0; i < bgs.length; i++)
		{
			var id = bgs[i];
			if (id.length)
			{
				var bg = document.getElementById(id);
				if (bg)
				{
					//set background to -1 zIndex, then setTimeout for function to return zIndex
					bg.style.zIndex = -1;
					setTimeout("modalDialog_zIndexBack('" + id + "');",0);
				}
			}
		}
		
		//if provided, focus on given field
		if (idToFocus)
		{
			var field = document.getElementById(idToFocus);
			if (field) {field.focus();}
		}
	}
}

//HACK for disappearing Firefox Caret
function modalDialog_zIndexBack(id)
{
	var background = document.getElementById(id);
	background.style.zIndex = 100;
}