// ... Lead Distribution System Class

	if (typeof(hexBackground) == 'undefined') hexBackground = '#DAE0DB';

	var App = {
		// ... Private Variables
		height: null,
		width: null,
		_pageXOffset: 0,
		_pageYOffset: 0,
		_intMsg: 0,
		_intMsgClosed: 0,

		// ... Public Variables
		libPath: "/_misc/js/",
		scriptPath: "/_scripts/default/",
		alertRounded: false,
		loadTemplate: null,

		// ... Boolen used to disable certain effects that IE6 is just too lame to handle.
		isIE6: (navigator.appVersion.match('MSIE 6')) ? true : false,
		isIE: (navigator.appName == 'Microsoft Internet Explorer') ? true : false,

		// ... Properties
		scrollTop: function() {
			if (self.pageYOffset) {
				return self.pageYOffset;
			} else if (document.documentElement && document.documentElement.scrollTop) {
				return document.documentElement.scrollTop;
			} else if (document.body) {
				return document.body.scrollTop;
			} else {
				return 0;
			}
		},

		scrollLeft: function() {
			if (self.pageXOffset) {
				return self.pageXOffset;
			} else if (document.documentElement && document.documentElement.scrollLeft) {
				return document.documentElement.scrollLeft;
			} else if (document.body) {
				return document.body.scrollLeft;
			} else {
				return 0;
			}
		},

		cancelEvent: function(e) 	{
			if (!e)
				e = window.event;
			if (e.stopPropagation)
				e.stopPropagation();
			if (e.preventDefault)
				e.preventDefault();
			e.cancelBubble = true;
			e.cancel = true;
			e.returnValue = false;
			return false;
		},

		GetScreenSize : function() {
			if (document.all) {
				this.width = document.body.clientWidth;
				this.height = document.body.clientHeight;
			} else {
				this.width = innerWidth;
				this.height = innerHeight;
			}
		},

		StripQueryString: function(url) {
			return url.replace(/\?.*$/, '');
		},

		DoneGoBack: function() {
			var previous = document.referrer;
			var current = window.location.href;

			if (App.StripQueryString(current) == App.StripQueryString(previous)) {
				window.location.replace(App.StripQueryString(previous));
			} else if (history.length > 1) {
				//window.location.replace(previous);
				history.back();
			} else {
				window.location.replace(App.StripQueryString(current));
			}
		},

		// ... Methods
		Alert: function(msg) {
			divAlert = 'Div_alert_messages';

			if ($(divAlert)) {
				$('LI_alert').innerHTML = msg;

				new Rico.Effect.FadeTo(divAlert, 1, 1, 1, {
					complete:function() {
						$(divAlert).style.display = 'block';
					}
				});

				if (this.alertRounded == false) {
					Rico.Corner.round($(divAlert), {bgColor:'#FFFFFF', color:"transparent"});
					this.alertRounded = true;
				}
			} else {
				alert (msg);
			}
		},

		CloseMessage: function(messageType) {
			divMessage = 'Div_'+ messageType +'_messages';
			App.Hide ($(divMessage));
		},

		Ready: function() {
			document.body.style.cursor = 'default';
			App.Hide('LOADING');
		},

		Block: function() {
			App.Show('LOADING');
			$('WAIT_BLOCK').style.display = 'block';
		},

		Unblock: function() {
			$('WAIT_BLOCK').style.display = 'none';
			App.Hide('LOADING');
		},

		Wait: function() {
			document.body.style.cursor = 'wait';
			$('LOADING').style.top = this.scrollTop() +'px';
			App.Show('LOADING');
		},

		Show: function(strEle) {
			new Rico.Effect.FadeTo($(strEle), 1, 1, 1, {
				complete:function() {
					$(strEle).style.display = 'block';
				}
			});
		},

		Hide: function(strEle) {
			if ($(strEle) && $(strEle).style.display != 'none') {
				new Rico.Effect.FadeTo($(strEle), .1, 1, 1, {
					complete:function() {
						$(strEle).style.display = 'none';
					}
				});
			}
		},

		FadeIn: function(strEle, fltAlpha, duration, steps) {
			if (fltAlpha == null) fltAlpha = 1;
			if (duration == null) duration = 200;
			if (steps == null)    steps    = 10;

			if ($(strEle)) {
				new Rico.Effect.FadeTo($(strEle), .2, 1, 1, {
					complete:function() {
						$(strEle).style.display = 'block';
						new Rico.Effect.FadeTo($(strEle), fltAlpha, duration, steps);
					}
				});
			}
		},

		FadeOut: function(strEle, duration, steps) {
			if (duration == null) duration = 200;
			if (steps == null)    steps    = 10;

			if ($(strEle) && $(strEle).style.display != 'none') {
				new Rico.Effect.FadeTo($(strEle), .2, duration, steps, {
					complete:function() {
						$(strEle).style.display = 'none';
					}
				});
			}
		},

		Message: function(strMessage) {
			App._intMsg++;
			App.FadeIn('pnlPageMessages');
			//dttNow = new Date();
			//strDate = '<div class="corner">'+ dttNow.toTimeString() + '</div>';
			strTag = '<p id="lblPageMessage'+ App._intMsg +'">'+  strMessage +'<br /><a href="javascript:App.HideMessage('+ App._intMsg +')">OK</a></p>';
			$('pnlPageMessages').innerHTML += strTag;
		},

		HideMessage: function(intMessage) {
			App._intMsgClosed++;
			App.FadeOut('lblPageMessage' + intMessage);
			if (App._intMsgClosed == App._intMsg) {
				App.FadeOut('pnlPageMessages');
			}
		},

		Require: function(includeName) {
			document.write ('<script type="text/javascript" language="JavaScript" src="'+ this.libPath + includeName +'.js"></script>');
		},

		Include: function(includeName) {
			document.write ('<script type="text/javascript" language="JavaScript" src="'+ this.scriptPath + includeName +'.js"></script>');
		},

		HidePopupNote: function() {
		  	$('PopupNote').style.display = 'none';
		  	$('PopupNoteIFrame').style.display = 'none';
		},

		TestScroll: function() {
			if ((window.pageXOffset != App._pageXOffset) || (window.pageXOffset != App._pageXOffset)) {
				App.OnScroll();
			}
		},

		OnScroll: function() {
			App._pageXOffset = App.scrollLeft();
			App._pageYOffset = App.scrollTop();

//			if ($('LOADING'))
//				$('LOADING').style.top = App._pageYOffset + 'px';
		},

		ShowDialog: function(strDialog, aDialogList) {
			aDialogList.each (
				function (dialog) {
					if (dialog == strDialog) {
						App.Show('Div_'+ dialog);
					} else {
						App.FadeOut('Div_'+ dialog);
					}
				}
			);
		},

		HideDialogs: function(aDialogList) {
			aDialogList.each (
				function (dialog) {
					App.FadeOut('Div_'+ dialog);
				}
			)
		},

		LoadTemplate: function(tplName) {
			App.Wait();

			App.loadTemplate = tplName;

			var objParams = {
				method: 'get',
				parameters: '',
				onSuccess: App.AfterLoadTemplate,
				onFailure: App.ThrowAjaxError,
				evalScripts: false,
				asynchronous: false
			};

			new Ajax.Request(App.scriptPath + 'templates/' + tplName + '.jst', objParams);
		},

			AfterLoadTemplate: function(ajaxResponse) {
				var objTemplate = TrimPath.parseTemplate (
					ajaxResponse.responseText,
					App.loadTemplate
				);

				eval('JST.'+ App.loadTemplate +' = objTemplate;');

				App.Ready();
			},

		ThrowAjaxError: function() {
			App.Alert('Problems were encountered making an AJAX Request, If your session has timed-out log in and try again.');
		},

		RoundBox: function(eleId, objStyle) {
			if ($(eleId)) {
				if (objStyle == undefined) {
					objStyle = {bgColor:'#FFFFFF', color:"transparent"}
				}

				Rico.Corner.round($(eleId), objStyle);
			} else {
				// ... Keeping around for debugging purposes.
				//alert (eleId +" not found!");
			}
		}
	}


function reset_password() {
	var login_form = $('Form_login');
	var action = $('Input_action');
	var username = $('Input_username');

	username.value = prompt('Please enter your Member ID / Username: ', username.value);

	if (!username.value)
	{
		alert('You must provide your Member ID / Password.');
		return false;
	}

	action.value = 'reset_password';
	login_form.submit();
}


	// ... Placeholder for JavaScriptTemplates (trimpath.com)
	var JST = {}

	// ... Inclusions
	App.Require ('rico/Common');
	App.Require ('rico/Effects');
	App.Require ('trimpath/template');
	App.Require ('progrexion/commonFunctions');
	App.Require ('progrexion/commonBehaviours');

	App.Include ('functions');

	// ... Everything Ready, initialize!
	window.onload = function () {
		if (document.layers) {
			setInterval("App.TestScroll()", 500);
		}

		if ($('Div_page')) Rico.Corner.round($('Div_page'));

		App.RoundBox('Div_success_messages');
		App.RoundBox('Div_error_messages');
		App.RoundBox('Div_notice_messages');
		App.RoundBox('Div_page_summary');
		App.RoundBox('Div_sideBox');
		App.RoundBox('Div_section_links', {bgColor:'#FFFFFF', color:hexBackground});
		App.RoundBox('Div_search');

		if ($('Accordion_tasks')) {
			new Rico.Accordion( 'Accordion_tasks', {
		        expandedBg          : '#DAE0DB',
		        hoverBg             : '#CED9D1',
		        collapsedBg         : '#DAE0DB',
		        expandedTextColor   : '#808A83',
		        expandedFontWeight  : 'bold',
		        hoverTextColor      : '#000000',
		        collapsedTextColor  : '#999999',
		        collapsedFontWeight : 'normal',
		        hoverTextColor      : '#808A83',
		        borderColor         : '#C3CEC6',
		        panelHeight         : 150,
		        onHideTab           : null,
		        onShowTab           : null,
		        onLoadShowTab       : 0,
		        tabLocation         : 'inline',
		        tabSpacing          : '1'}
			);
		}

		$$('FORM').each(function(ele) { ele.onsubmit = function() { App.Wait(); }});

		App.GetScreenSize();

		if ($('pnlPage')) {
			new Insertion.After('PopupNote', '<div id="WAIT_BLOCK"></div>');
		}

		Behaviour.apply();
		App.Ready();
	}

	window.onscroll = App.OnScroll;
	window.onresize = App.GetScreenSize;

// ... For lack of a better place (for now)
Array.prototype.has = function(needle) {
	for (var i=0;i<this.length;i++) {
		if(this[i] == needle){ return true; }
	}
	return false;
}