function XmlDom(sXml)
{
	var oXml = new ActiveXObject("Microsoft.XMLDOM");
	oXml.resolveExternals = false;
	oXml.async = false;
	oXml.loadXML(sXml);
	return oXml
}

function XHConn()
{
  var xmlhttp;
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}
  if (!xmlhttp) return null;
  return xmlhttp;
}

function IsNull(oItem)
{
	return (typeof(oItem) == "undefined" || typeof(oItem) == "unknown" || oItem == null)
}

function IsArray(oItem)
{
	return oItem != null && ((oItem instanceof Array) || (typeof oItem.splice) == "function");
}

function TrimFillers(s)
{
	if (s != null)
	{
		s = Trim(s);
		s = s.replace(/\s*\-\s*/g, "");
		s = s.replace(/\s*\(\s*/g, "");
		s = s.replace(/\s*\)\s*/g, "");
	    return s.replace(/\s+/g,"");
	}
	return null;
}

function TrimSpaces(s)
{
	if (s != null)
	{
		s = Trim(s);
	    return s.replace(/\s+/g,' ');
	}
	return null;
}

function Trim(s)
{
	s = s.replace(/^\s+|\s+$/g, '');
	var chars = String.fromCharCode(0x0085, 0x00A0, 0x2028, 0x2029, 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000);
	for (var i = 0; i < chars.length; i++)
	{
		var iChar = chars.charCodeAt(i);
		var sChar = "";
		if (iChar < 0x100)
		{
			sChar += "00";
		}
		else if (iChar < 0x1000)
		{
			sChar += "0";
		}
		
		sChar += iChar.toString(16);

		s = s.replace(new RegExp("^\\u" + sChar + "+|\\u" + sChar + "+$", "g"), '');
	}
	
	return s;
}

function GetNodeValue(input, searchName, bNoDecode)
{
	if (!input || !searchName)
	{
		return "";
	}

	var rootStart = input.indexOf('<' + searchName + '>');
	
	if (rootStart == -1)
	{
		rootStart = input.indexOf('<' + searchName + ' ');
		if (rootStart == -1)
		{
			return "";
		}
	}
	var startIndex	= input.indexOf(">", rootStart) + 1;
	var endIndex = input.indexOf("</" + searchName + '>', startIndex);
	if (endIndex == -1)
	{
		return "";		
	}
	else
	{
		return bNoDecode ? input.substring(startIndex, endIndex) :
							XmlDecode(input.substring(startIndex, endIndex));
	}
}

function AddParamToQueryString(url, name, val)
{
	var newString = (IsNull(val) || val=="") ? "" : (name + "=" + encodeURIComponent(val));
	var hasNewString = (newString!="");
	var hashMarkExpression = /\#/;
	var hashMarkIndex = url.search(hashMarkExpression);
	if(hashMarkIndex != -1)
	{
		url = url.substring(0, hashMarkIndex);
	}
	var questionMarkExpression = /\?/;
	var questionMarkIndex = url.search(questionMarkExpression);
	if (questionMarkIndex == -1 && hasNewString)
	{
		return url + "?" + newString; 
	}
	else if (questionMarkIndex == -1 && !hasNewString)
	{
		return url;
	}
	var qs = url.substring(questionMarkIndex+1, url.length);
	var regEx = new RegExp("(^|&)" + name +"=[^&]*", "ig");

	var isExistingName = (qs.search(regEx) != -1);

	if(!isExistingName && hasNewString)
	{
		return url + "&" + newString;
	}
	var path = url.substring(0, questionMarkIndex);
	qs = qs.replace(regEx, "");

	if (qs.length > 0 && hasNewString)
	{
		qs += "&";
	}
	qs += newString;

	if (qs.length > 0)
	{
		if (qs.charAt(0) == '&')
		{
			qs = qs.substring(1, qs.length);
		}
		qs = "?" + qs;
	}

	return path + qs;
}

function GetParamFromQueryString(url, sKey, sDefault)
{
	var questionMarkExpression = /\?/;
	var questionMarkIndex = url.search(questionMarkExpression);
	if (questionMarkIndex == -1)
	{
		return ""; 
	}
	var qs = url.substring(questionMarkIndex+1, url.length);
	var regEx = new RegExp("(^|&)" + sKey +"=[^&]*", "ig");
	var existingNameIndex = qs.search(regEx);
	var isExistingName = (existingNameIndex != -1);

	if(!isExistingName)
	{
		return "";
	}
	var args = qs.split('&');
	var values = new Array();
	for(var i=0; i<args.length; i++)
	{
		var pair = args[i].split('=');
		temp = decodeURIComponent(pair[0]).split('+');
		temp0 = temp.join(' ');
		temp = decodeURIComponent(pair[1]).split('+');
		temp1 = temp.join(' ');
		values[temp0] = temp1;
	}
	var value = values[sKey];
	if(value == null)
	{
	    value = sDefault;
	}
	return value;
}

function GetPathFromUrl(url)
{
	var questionMarkExpression = /\?/;
	var questionMarkIndex = url.search(questionMarkExpression);
	if (questionMarkIndex == -1)
	{
		return url; 
	}
	return url.substring(0, questionMarkIndex);
}

function Delete(oGrid)
{
	var url;
	var aoEntityItems = oGrid.SelectedRecords;
	var entityTypes = "";
	var entityIds = "";
	if ((aoEntityItems) && (aoEntityItems.length > 0))
	{
		if (confirm(formatString(LocText_DELETE_ENTITY_MASK,aoEntityItems.length)))
		{
			url = "/dialogs/deleteDialog";
			url += ".aspx";
			for (var i = 0; i < aoEntityItems.length; i++)
			{
				entityTypes += aoEntityItems[i][1]+"|";
				entityIds += aoEntityItems[i][0]+"|";
			}
			url += "?entitytypes=" + entityTypes;
			url += "&entityids=" + entityIds;
			if (openDialog(url, null, 300, 200, false))
			{
				oGrid.ParentGridControl.Refresh();
			}
		}
	}
	else
	{
		alert(LocText_SELECT_ITEMS_TO_DELETE);
	}
}

function DeleteCalendarItem(oCalendar)
{
	var selectedItems = new Array();
	var itemTypes = new Array();
	var itemIds = new Array();
	var entityTypes = "";
	var entityIds = "";

	if (oCalendar.selectedItemType.value != "" && oCalendar.selectedItem.value != "")
	{
		itemTypes = oCalendar.selectedItemType.value.split(",");
		itemIds = oCalendar.selectedItem.value.split(",");
	}
	if ((itemTypes) && (itemTypes.length > 0))
	{
		if (confirm(formatString(LocText_DELETE_ENTITY_MASK, itemTypes.length)))
		{
			url = "/dialogs/deleteDialog";
			url += ".aspx";
			
			for (var i = 0; i < itemTypes.length; i++)
			{
				entityTypes += itemTypes[i]+"|";
				entityIds += itemIds[i]+"|";
			}
			url += "?entitytypes=" + entityTypes;
			url += "&entityids=" + entityIds;
			if (openDialog(url, null, 300, 200, false))
			{
				CalendarRefresh(oCalendar);
			}
		}
	}
	else
	{
		alert(LocText_SELECT_ITEMS_TO_DELETE);
	}
}

function CalendarRefresh(oCalendar)
{
	oCalendar.submit();
}

function HandleViewSelectionChange(object, oPage)
{
	if (!IsNull(object))
	{
		var viewId = object.Content;
		if (!IsNull(top.mainFrame))
		{
			top.mainFrame.location.href = AddParamToQueryString(
				top.mainFrame.location.href, 
				"viewid", 
				viewId);
		}
		else
		{
			oPage.location.href = AddParamToQueryString(
				oPage.location.href, 
				"viewid", 
				viewId);
		}
	}
}

function HandleFilterChange(object, oPage)
{
	if (!IsNull(object))
	{
		var filter = object.value;
		if (!IsNull(top.mainFrame))
		{
			top.mainFrame.location.href = AddParamToQueryString(
				top.mainFrame.location.href, 
				"filter", 
				filter);
		}
		else
		{
			oPage.location.href = AddParamToQueryString(
				oPage.location.href, 
				"filter", 
				filter);
		}
	}
}

function openEntityForm( oSpan, sParams )
{
	openForm(oSpan.itemType, oSpan.itemId, "_blank", sParams)
}

function XmlEncode(s)
{
	if (IsNull(s))
	{
		return "";
	}
	if (typeof(s) != "string")
	{
		s = s.toString();
	}
	s = escape(s);
	s = s.replace(/%20/g, " ");
	s = s.replace(/%u(\w{4})/g,	"&#x$1;");
	s = s.replace(/%(\w{2})/g,	"&#x$1;");
	return s;
}

function XmlDecode(s)
{
	s = s.replace(/&lt;/g, "<");
	s = s.replace(/&gt;/g, ">");
	s = s.replace(/&apos;/g, "'");
	s = s.replace(/&quot;/g, "\"");
	s = s.replace(/&amp;/g, "&");
	return s;
}

function HtmlAttributeEncode(s)
{
	if (typeof(s) != "string")
	{
		return s;
	}
	s = s.replace(/&/g, "&amp;");
	return s.replace(/\"/g, "&quot;");
}

function HtmlEncode(s)
{
	if (typeof(s) != "string")
	{
		return s;
	}
	s = s.replace(/&/g, "&amp;");
	s = s.replace(/</g, "&lt;");
	s = s.replace(/>/g, "&gt;");
	return s.replace(/\"/g, "&quot;");
}

function formatString()
{
	if (arguments.length == 0)
	{
		return "";
	}
	var s = arguments[0];
	var aArguments = arguments;
	if (arguments.length > 1 && IsArray(arguments[1]))
	{
		aArguments = arguments[1];
		aArguments.unshift(s);
	}
	for (var i = 1; i < aArguments.length; i++)
	{
		var argIndex = i - 1;
		s = s.replace(new RegExp("\\{" + argIndex + "\\}", "g"), aArguments[i].toString());
	}
	return s;
}

function replaceString(oldS, newS, fullS)
{
	for (var i = 0; i < fullS.length; i++) 
	{
		if (fullS.substring(i, i + oldS.length) == oldS) 
		{
			fullS = fullS.substring(0, i)+ newS + fullS.substring(i + oldS.length, fullS.length)
		}
	}
	return fullS
}

function validateEmail(sValue)
{
	var _validEmailRegexp = /^\w([-._'\w]*\w+)*@\w([-._\w]*\w+)*\.\w+$/;
	
	value = Trim(sValue);
	if (sValue != "" && IsNull(sValue.match(_validEmailRegexp)))
	{
		return false;
	}
	return true;
}

function randInt(min,max)
{
	var div = (max - min) + 1
	var randNum = Math.random()
	for (var i = 0; i <= div - 1; i++)
	{
		if ((randNum >= i / div) && (randNum < (i+1) / div))
		{
			return i + min
		}
	}
}

