﻿//-----------------------------------------------------------------------------
// Common.js
// Copyright: (C) 2009 CLTNet Pty Ltd (ACN: 132	335 427)
// Author: Contact Solutions Pty Ltd O.B.O. Incalis Pty Ltd - www.incalis.com
//-----------------------------------------------------------------------------

///////////////////////////////////////////////////////////////////////////////
// Globals

// Called by the framework
function Common_Startup() {
	if (Sys.WebForms != null)
		Sys.WebForms.PageRequestManager.getInstance().add_endRequest(Common_EndRequest);
	Sys.Application.add_unload(Common_OnUnload);
}

function Common_OnUnload() {
	if (Sys.WebForms != null)
		Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(Common_EndRequest);
	Sys.Application.remove_unload(Common_OnUnload);
}

// Called by the framework
function Common_EndRequest(sender, args) {
	var Error = args.get_error();
	if (Error !== null && Error.message != null && Error.message !== '')
	{
		var errorMessage = Error.message;
		if (Error.name !== null && Error.name !== '' && Error.name.length > 0 && errorMessage.substr(0, Error.name.length + 2) == (Error.name + ': '))
			errorMessage = errorMessage.substr(Error.name.length + 2, errorMessage.length - Error.name.length - 2);
		window.location = virtualPath + '/FatalErrorClient.aspx?error=' + errorMessage;
		//alert("Hello error: " + Error.message);
	}
	//document.getElementById("divError").innerHTML = Error.message;
	args.set_errorHandled(true);

}

function SubmitMenuItem(menu, item) {
	var paramMenuItem = $get('ctl00_paramMenuItem');
	paramMenuItem.value = menu + ':' + item;
	$get('ctl00_btnMenuSubmit').click();
}

function OnSubmit_FixAjax2() {
	if (typeof (Sys) !== "undefined") {
		// Not functional at present
		var element = $find('ctl00_upProgress');
		if (element)
			element._startRequest = _AjaxFix_UpdateProgress_startRequest;
	}
}

function _AjaxFix_UpdateProgress_startRequest() {
	if (this._pageRequestManager.get_isInAsyncPostBack()) {
		if (this._dynamicLayout) {
			var elem = this.get_element();
			if (elem)
				elem.style.display = 'block';
		}
		else
			this.get_element().style.visibility = 'visible';
	}
	this._timerCookie = null;
}

// Fixes Ajax 1.0 fault when interacting only with keyboard and submitting the form with Enter
function OnSubmit_FixAjax(defaultElementId) {
	var prm = Sys.WebForms.PageRequestManager.getInstance();
	if (prm._postBackSettings == null) {
		var element = $get(defaultElementId);
		prm._postBackSettings = prm._getPostBackSettings(element, element.name);
	}
}

function DoNothing() { }

function GetEventKeyCode(event) {
	event = event ? event : window.event;
	var result = 0;
	if (event.keyCode)
		result = event.keyCode;
	else if (event.which)
		result = event.which;
	return result;
}

function IsEnterKey() {
	var retVal = false;
	var keycode = 0;
	if ((typeof (window.event) != "undefined") && (window.event != null)) {
		keycode = window.event.keyCode;
	}
	else if ((typeof (e) != "undefined") && (e != null)) {
		keycode = e.which;
	}
	if (keycode == 13) {
		retVal = true;
	}
	return retVal;
}

function SetCaretToEnd(element) {
	if (element.createTextRange) {
		var value = element.value;
		var range = element.createTextRange();
		range.moveStart('character', value.length);
		range.select();
	}
}

function SelectContents(element) {
	if (element.createTextRange) {
		var range = element.createTextRange();
		range.select();
	}
}

// Modified version of AJAX $addHandler
function AttachWindowHandler(eventName, handler) {
	var e;

	if (!window._events)
		window._events = {};

	var eventCache = window._events[eventName];
	if (!eventCache)
		window._events[eventName] = eventCache = [];

	var browserHandler;
	if (window.addEventListener) {
		browserHandler = function(e) {
			return handler.call(window, new Sys.UI.DomEvent(e));
		}
		window.addEventListener(eventName, browserHandler, false);
	}
	else if (window.attachEvent) {
		browserHandler = function() {
			return handler.call(window, new Sys.UI.DomEvent(window.event));
		}
		window.attachEvent('on' + eventName, browserHandler);
	}
	eventCache[eventCache.length] = { handler: handler, browserHandler: browserHandler };
}


// Modified version of AJAX $removeHandler
function RemoveWindowHandler(eventName, handler) {
	var e;

	var browserHandler = null;
	if ((typeof (window._events) !== 'object') || (window._events == null))
		throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);

	var cache = window._events[eventName];
	if (!(cache instanceof Array))
		throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);

	for (var i = 0, l = cache.length; i < l; i++) {
		if (cache[i].handler === handler) {
			browserHandler = cache[i].browserHandler;
			break;
		}
	}

	if (typeof (browserHandler) !== 'function')
		throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);

	if (window.removeEventListener)
		window.removeEventListener(eventName, browserHandler, false);

	else if (window.detachEvent)
		window.detachEvent('on' + eventName, browserHandler);

	cache.splice(i, 1);
}

function ScrollToBottom() {
	var docHeight = document.documentElement.scrollHeight;
	window.scrollTo(0, docHeight);
}

function ScrollToTop() {
	window.scrollTo(0, 0);
}

var controlToFocusAfterDelay = null;

function _SetFocusToControlWithDelay() {
	var element = controlToFocusAfterDelay;
	controlToFocusAfterDelay = null;
	if (element)
		element.focus();
}

function SetFocusToControlWithDelay(element, delay) {
	controlToFocusAfterDelay = element;
	window.setTimeout('_SetFocusToControlWithDelay();', delay);
}

function MaxedTextBox_Keypress(control) {
	maxLength = control.attributes["maxLength"].value;
	value = control.value;
	if (maxLength && value.length > maxLength - 1) {
		event.returnValue = false;
		maxLength = parseInt(maxLength);
	}
}

function MaxedTextBox_BeforePaste(control) {
	maxLength = control.attributes["maxLength"].value;
	if (maxLength)
		event.returnValue = false;
}

// Cancel default behavior and create a new paste routine
function MaxedTextBox_Paste(control) {
	maxLength = control.attributes["maxLength"].value;
	value = control.value;
	if (maxLength) {
		event.returnValue = false;
		maxLength = parseInt(maxLength);
		var oTR = control.document.selection.createRange();
		var iInsertLength = maxLength - value.length + oTR.text.length;
		var sData = window.clipboardData.getData("Text").substr(0, iInsertLength);
		oTR.text = sData;
	}
}

// CSSFriendly: AdapterUtils.js
function CanHaveClass__CssFriendlyAdapters(element) {
	return ((element != null) && (element.className != null));
}

function HasAnyClass__CssFriendlyAdapters(element) {
	return (CanHaveClass__CssFriendlyAdapters(element) && (element.className.length > 0));
}

function HasClass__CssFriendlyAdapters(element, specificClass) {
	return (HasAnyClass__CssFriendlyAdapters(element) && (element.className.indexOf(specificClass) > -1));
}

function AddClass__CssFriendlyAdapters(element, classToAdd) {
	if (HasAnyClass__CssFriendlyAdapters(element)) {
		if (!HasClass__CssFriendlyAdapters(element, classToAdd))
			element.className = element.className + " " + classToAdd;
	}
	else if (CanHaveClass__CssFriendlyAdapters(element))
		element.className = classToAdd;
}

function AddClassUpward__CssFriendlyAdapters(startElement, stopParentClass, classToAdd) {
	var elementOrParent = startElement;
	while ((elementOrParent != null) && (!HasClass__CssFriendlyAdapters(elementOrParent, topmostClass))) {
		AddClass__CssFriendlyAdapters(elementOrParent, classToAdd);
		elementOrParent = elementOrParent.parentNode;
	}
}

function SwapClass__CssFriendlyAdapters(element, oldClass, newClass) {
	if (HasAnyClass__CssFriendlyAdapters(element))
		element.className = element.className.replace(new RegExp(oldClass, "gi"), newClass);
}

function SwapOrAddClass__CssFriendlyAdapters(element, oldClass, newClass) {
	if (HasClass__CssFriendlyAdapters(element, oldClass))
		SwapClass__CssFriendlyAdapters(element, oldClass, newClass);
	else
		AddClass__CssFriendlyAdapters(element, newClass);
}

function RemoveClass__CssFriendlyAdapters(element, classToRemove) {
	SwapClass__CssFriendlyAdapters(element, classToRemove, "");
}

function RemoveClassUpward__CssFriendlyAdapters(startElement, stopParentClass, classToRemove) {
	var elementOrParent = startElement;
	while ((elementOrParent != null) && (!HasClass__CssFriendlyAdapters(elementOrParent, topmostClass))) {
		RemoveClass__CssFriendlyAdapters(elementOrParent, classToRemove);
		elementOrParent = elementOrParent.parentNode;
	}
}

// CSSFriendly: MenuAdapter.js
var hoverClass = "AspNet-Menu-Hover";
var topmostClass = "AspNet-Menu";
var userAgent = navigator.userAgent;
var versionOffset = userAgent.indexOf("MSIE");
var isIE = (versionOffset >= 0);
var isPreIE7 = false;
var fullVersionIE = "";
var majorVersionIE = "";
if (isIE) {
	fullVersionIE = parseFloat(userAgent.substring(versionOffset + 5, userAgent.length));
	majorVersionIE = parseInt('' + fullVersionIE);
	isPreIE7 = majorVersionIE < 7;
}

function Hover__AspNetMenu(element) {
	AddClass__CssFriendlyAdapters(element, hoverClass);

	if (isPreIE7) {
		var child = element.firstChild;
		while (child) {
			if (child.tagName == "UL") {
				var grandchild = child.firstChild;
				while (grandchild) {
					if (grandchild.tagName == "LI") {
						if ((typeof (grandchild.iFrameFormElementMask) != "undefined") && (grandchild.iFrameFormElementMask != null)) {
							grandchild.iFrameFormElementMask.style.display = "block";

							var w = grandchild.offsetWidth;
							if ((grandchild.offsetWidth == 0) && (typeof (element.iFrameFormElementMask) != "undefined") && (element.iFrameFormElementMask != null) && (element.iFrameFormElementMask.style.width.length > 0))
								w = element.iFrameFormElementMask.style.width;
							grandchild.iFrameFormElementMask.style.width = w;

							var h = grandchild.offsetHeight + 5 /* fudge to cover margins between menu items */;
							if ((grandchild.offsetHeight == 0) && (typeof (element.iFrameFormElementMask) != "undefined") && (element.iFrameFormElementMask != null) && (element.iFrameFormElementMask.style.height.length > 0))
								h = element.iFrameFormElementMask.style.height;
							grandchild.iFrameFormElementMask.style.height = h;
						}
					}

					grandchild = grandchild.nextSibling;
				}
			}

			child = child.nextSibling;
		}
	}
}

function Unhover__AspNetMenu(element) {
	RemoveClass__CssFriendlyAdapters(element, hoverClass);

	if (isPreIE7) {
		var child = element.firstChild;
		while (child) {
			if (child.tagName == "UL") {
				var grandchild = child.firstChild;
				while (grandchild) {
					if (grandchild.tagName == "LI") {
						if ((typeof (grandchild.iFrameFormElementMask) != "undefined") && (grandchild.iFrameFormElementMask != null))
							grandchild.iFrameFormElementMask.style.display = "none";
					}

					grandchild = grandchild.nextSibling;
				}
			}

			child = child.nextSibling;
		}
	}
}

function SetHover__AspNetMenu() {
	var menus = document.getElementsByTagName("ul");
	for (var i = 0; i < menus.length; i++) {
		if (menus[i].className == topmostClass && menus[i].parent != null && menus[i].parent.parent != null && menus[i].parent.parent.className != 'mnuMain') {
			var items = menus[i].getElementsByTagName("li");
			for (var k = 0; k < items.length; k++) {
				items[k].onmouseover = function() { Hover__AspNetMenu(this); }
				items[k].onmouseout = function() { Unhover__AspNetMenu(this); }

				if (isPreIE7 && ((typeof (items[k].iFrameFormElementMask) == "undefined") || (items[k].iFrameFormElementMask == null))) {
					var iFrameFormElementMask = document.createElement("IFRAME");
					iFrameFormElementMask.scrolling = "no";
					iFrameFormElementMask.src = "javascript:false;";
					iFrameFormElementMask.frameBorder = 0;
					iFrameFormElementMask.style.display = "none";
					iFrameFormElementMask.style.position = "absolute";
					iFrameFormElementMask.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";

					iFrameFormElementMask.style.zIndex = -1;
					items[k].insertBefore(iFrameFormElementMask, items[k].firstChild);
					items[k].iFrameFormElementMask = iFrameFormElementMask;
				}
			}
		}
	}
}

if (isPreIE7) {
	window.onload = SetHover__AspNetMenu;
}

///////////////////////////////////////////////////////////////////////////////
if (typeof (Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

