// ************************************************************************************
// Competir.Web.UI
// ************************************************************************************
// namespace
Type.registerNamespace("Competir.Web.UI");

// static methods
Competir.Web.UI.toggleObjectsVisibility = function(tagName, status)
{
	var objs = document.body.getElementsByTagName(tagName);
	for (var i = 0; i < objs.length; i++)
	{
		if (status)
		{
			objs[i].style.visibility = "visible";
		}
		else
		{
			objs[i].style.visibility = "hidden";
		}
	}
}
Competir.Web.UI.toggleImage = function(obj)
{
	// obj
	if (String.isInstanceOfType(obj))
	{
		obj = $get(obj);
	}
	
	// value
	var objSrc = obj.getAttribute("src").toLowerCase();
	var altSrc = obj.getAttribute("altsrc").toLowerCase();
	
	// apply
	if (obj)
	{
		obj.setAttribute("altsrc", objSrc);
		obj.setAttribute("src", altSrc);
	}
};
Competir.Web.UI.toggleDisplay = function(obj, value)
{
	// obj
	if (String.isInstanceOfType(obj))
	{
		var objRef = $find(obj);
		if (!objRef)
		{
			obj = $get(obj);
		}
		else
		{
			obj = objRef;
		}
	}
	
	// value
	if (value == null | value == undefined)
	{
		if (Sys.UI.Control.isInstanceOfType(obj))
		{
			value = !obj.get_visible();
		}
		else
		{
			value = (obj.style.display == "none");
		}
	}
	
	// apply
	if (obj)
	{
		if (Sys.UI.Control.isInstanceOfType(obj))
		{
			obj.set_visibilityMode(Sys.UI.VisibilityMode.collapse);
			obj.set_visible(value);
			if (value)
			{
				obj.raiseEvent("onShow", Sys.EventArgs.Empty);
			}
			else
			{
				obj.raiseEvent("onHide", Sys.EventArgs.Empty);
			}
		}
		else
		{
			obj.style.display = (value) ? "block": "none";
		}
	}
	
	// fix
	if (obj)
	{
		Competir.Web.UI.fixMozillaDisplay(obj);
	}
};
Competir.Web.UI.show = function(obj)
{
	Competir.Web.UI.toggleDisplay(obj, true);
};
Competir.Web.UI.hide = function(obj)
{
	Competir.Web.UI.toggleDisplay(obj, false);
};
Competir.Web.UI.fixMozillaDisplay = function(obj)
{
	if (navigator.userAgent.indexOf("MSIE") == -1)
	{
		var refNode = obj.parentNode;
		while (refNode && refNode != document.body)
		{
			if (refNode.tagName.toLowerCase() == "table" && refNode.getAttribute("refresh") == "true")
			{
				var r = refNode.insertRow(-1);
				var t = r.insertCell(-1);
				refNode.deleteRow(refNode.rows.length - 1);
				break;
			}
			else
			{
				refNode = refNode.parentNode;
			}
		}
	}
};
Competir.Web.UI.setExplorerFilters = function(obj, state)
{
	if (navigator.userAgent.indexOf("MSIE") != -1)
	{
		for (var i = 0; i < obj.childNodes.length; i++)
		{
			for (var j = 0; j < obj.childNodes[i].filters.length; j++)
			{
				obj.childNodes[i].filters[j].enabled = state;
			}
		}
	}
};
Competir.Web.UI.validateFormElement = function(control, id, controlType, validationType, blink)
{
	var rv = false;
	switch (validationType)
	{
		case "hasValue":
			switch (controlType)
			{
				case "text":
				case "combo":
					var obj = control.getChild(id);
					if (obj)
					{
						if (obj.value && obj.value != "")
						{
							rv = true;
						}
						else if (blink)
						{
							control.callFromBehavior("blink", [obj]);
						}
					}
					break;
				case "radio":
					var group = document.getElementsByName(control.get_ClientID() + id);
					if (group.length)
					{
						for (var i = 0; i < group.length; i++)
						{
							if (group[i].checked)
							{
								rv = true;
								break;
							}
						}
					}
					if (!rv && blink)
					{
						for (var i = 0; i < group.length; i++)
						{
							control.callFromBehavior("blink", [group[i].parentNode]);
						}
					}
					break;
			}
			break;
		case "insensitiveEquality":
			switch (controlType)
			{
				case "text":
				case "combo":
					rv = true;
					var value = "";
					var arrObj = new Array();
					var arrId = id.split(",");
					for (var i = 0; i < arrId.length; i++)
					{
						var obj = control.getChild(arrId[i]);
						if (obj)
						{
							arrObj.push(obj);
						}
					}
					for (var i = 0; i < arrObj.length; i++)
					{
						if (value == "")
						{
							value = arrObj[i].value.toLowerCase();
						}
						else
						{
							if (arrObj[i].value.toLowerCase() != value)
							{
								rv = false;
								break;
							}
						}
					}
					if (!rv && blink)
					{
						for (var i = 0; i < arrObj.length; i++)
						{
							control.callFromBehavior("blink", [arrObj[i]]);
						}
					}
					break;
			}
			break;
		case "email":
			switch (controlType)
			{
				case "text":
				case "combo":
					var obj = control.getChild(id);
					if (obj)
					{
						if (obj.value && obj.value != "")
						{
							var re = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
							rv = re.test(obj.value);
						}
						if (!rv && blink)
						{
							control.callFromBehavior("blink", [obj]);
						}
					}
					break;
			}
			break;
		case "numeric":
			switch (controlType)
			{
				case "text":
				case "combo":
					var obj = control.getChild(id);
					if (obj)
					{
						if (obj.value && obj.value != "")
						{
							rv = !obj.value.match(/\D/);
						}
						if (!rv && blink)
						{
							control.callFromBehavior("blink", [obj]);
						}
					}
					break;
			}
			break;
		case "date":
			switch (controlType)
			{
				case "text":
				case "combo":
					var arrObj = new Array();
					var arrId = id.split(",");
					for (var i = 0; i < arrId.length; i++)
					{
						var obj = control.getChild(arrId[i]);
						if (obj)
						{
							arrObj.push(obj);
						}
					}
					if (arrId.length == 3)
					{
						var dd = parseInt(arrObj[0].value, 10);
						var MM = parseInt(arrObj[1].value, 10) - 1;
						var yyyy = parseInt(arrObj[2].value, 10);
						var date = new Date(yyyy, MM, dd);
						if (date.getFullYear() == yyyy)
						{
							if (date.getMonth() == MM)
							{
								if (date.getDate() == dd)
								{
									rv = true;
								}
							}
						}
					}
					if (!rv && blink)
					{
						for (var i = 0; i < arrObj.length; i++)
						{
							control.callFromBehavior("blink", [arrObj[i]]);
						}
					}
					break;
			}
			break;
	}
	return rv;
};
Competir.Web.UI.getFormElementValue = function(control, id, type)
{
	var rv = "";
	switch (type)
	{
		case "text":
		case "combo":
			var obj = control.getChild(id);
			if (obj)
			{
				rv = obj.value;
			}
			break;
		case "radio":
			var group = document.getElementsByName(control.get_ClientID() + id);
			if (group.length)
			{
				for (var i = 0; i < group.length; i++)
				{
					if (group[i].checked)
					{
						rv = group[i].value;
						break;
					}
				}
			}
			break;
	}
	return rv;
};



// ************************************************************************************
// Misc
// ************************************************************************************
// exceptions
function ShowHideExceptionInfo(id)
{
	var objLink = document.getElementById("div_ex_link_" + id);
	var objDiv = document.getElementById("div_ex_info_" + id);
	if (objDiv)
	{
		if (objDiv.style.display == "none")
		{
			objDiv.style.display = "block";
			objLink.innerHTML = "Ocultar detalles";
		}
		else
		{
			objDiv.style.display = "none";
			objLink.innerHTML = "Mostrar detalles";
		}
	}
}

// events
function CancelEvent(e)
{
	if (!e)
	{
		if (window.event)
		{
			e = window.event;
		}
	}
	if (e.preventDefault && e.stopPropagation)
	{
		e.preventDefault();
		e.stopPropagation();
	}
	else
	{
		e.returnValue = false;
		e.cancelBubble = true;
	}
	return false;
}

// overrides
/*
Sys.Net.WebServiceProxy.original_invoke = Sys.Net.WebServiceProxy.invoke;
Sys.Net.WebServiceProxy.retryOnFailure = function(result, userContext, methodName, retryParams, onFailure)
{
	if (result.get_timedOut())
	{
		if (typeof retryParams != "undefined")
		{
			Sys.Net.WebServiceProxy.original_invoke.apply(this, retryParams);
		}
		else if (onFailure)
		{
			onFailure(result, userContext, methodName);
		}
	}
	else if (onFailure)
	{
		onFailure(result, userContext, methodName);
	}
}
Sys.Net.WebServiceProxy.invoke = function Sys$Net$WebServiceProxy$invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, timeout)
{
	var retryParams = [servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, timeout];
	var newOnFailure = Function.createDelegate
	(
		this,
		function (result, userContext, methodName)
		{
			Sys.Net.WebServiceProxy.retryOnFailure(result, userContext, methodName, retryParams, onFailure);
		}
	);
	Sys.Net.WebServiceProxy.original_invoke(servicePath, methodName, useGet, params, onSuccess, newOnFailure, userContext, timeout);
}
*/