/************************************************************************************************************
	GLOBAL FUNCTIONS AND VARS
************************************************************************************************************/

var fadeEffects = false;
var useBackdrop = true;
var ajaxLocked = false;
var _backdropOpacity = 75;
var _dialogBoxOpacity = 97;

String.prototype.replaceAll = function(toRemove, replaceWith) {
	try {
		var curString = this.toString();
		var stringSplit = curString.split(toRemove);
		return stringSplit.join(replaceWith);
	}
	catch(e) {
		return '';
	}
}

document.onlogin = function() {};
document.onlogout = function() {};

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function setCookie(name,value,days)
{
	if(days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = '; expires='+date.toGMTString();
	}
	else var expires = '';
	document.cookie = name+'='+value+expires+'; path=/; domain=.andydvorak.net';
}

function getCookie(name)
{
	var nameEQ = name + '=';
	var ca = document.cookie.split(';');
	for(var i=0;i<ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function deleteCookie(name)
{
	setCookie(name,"",-1);
}

function QueryString(string, key)
{
	var retValue = null;
	if(typeof string == 'string')
	{
		var stringSplit = string.split('&');
		for(i=0;i<stringSplit.length;i++)
		{
			var curQS = stringSplit[i].split('=');
			if(curQS[0].toLowerCase() == key.toLowerCase())
			{
				retValue = curQS[1];
				break;
			}
		}
	}
	return retValue;
}

function fadeOpacity(id, opacityStart, opacityEnd, millisec) {
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;

	//determine the direction for the blending, if start and end are the same nothing happens
	if(opacityStart > opacityEnd) {
		for(k = opacityStart; k >= opacityEnd; k--) {
			setTimeout("SetOpacity('" + id + "', " + k + ")", (timer * speed));
			timer++;
		}
	} else if(opacityStart < opacityEnd) {
		for(k = opacityStart; k <= opacityEnd; k++)
			{
			setTimeout("SetOpacity('" + id + "', " + k + ")", (timer * speed));
			timer++;
		}
	}
}

//change the opacity for different browsers
function SetOpacity(obj, opacity) {
    try
    {
        obj = $(obj);
    }
    catch(e)
    {
        return;
    }
	obj.style.opacity = (opacity / 100);
	obj.style.MozOpacity = (opacity / 100);
	obj.style.KhtmlOpacity = (opacity / 100);
	obj.style.filter = "alpha(opacity=" + opacity + ")";
}

Effect.Center = function(element)
{
    try
    {
        element = $(element);
    }
    catch(e)
    {
        return;
    }

    var my_width  = 0;
    var my_height = 0;

    if ( typeof( window.innerWidth ) == 'number' )
    {
        my_width  = window.innerWidth;
        my_height = window.innerHeight;
    }
    else if ( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
    {
        my_width  = document.documentElement.clientWidth;
        my_height = document.documentElement.clientHeight;
    }
    else if ( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
    {
        my_width  = document.body.clientWidth;
        my_height = document.body.clientHeight;
    }

    element.style.position = 'absolute';
    //element.style.display  = 'block';
    element.style.zIndex   = 99;

    var scrollY = 0;

    if ( document.documentElement && document.documentElement.scrollTop )
    {
        scrollY = document.documentElement.scrollTop;
    }
    else if ( document.body && document.body.scrollTop )
    {
        scrollY = document.body.scrollTop;
    }
    else if ( window.pageYOffset )
    {
        scrollY = window.pageYOffset;
    }
    else if ( window.scrollY )
    {
        scrollY = window.scrollY;
    }

    var elementDimensions = Element.getDimensions(element);

    var setX = ( my_width  - elementDimensions.width  ) / 2;
    var setY = ( my_height - elementDimensions.height ) / 2 + scrollY;

    setX = ( setX < 0 ) ? 0 : setX;
    setY = ( setY < 0 ) ? 0 : setY;

    element.style.left = setX + "px";
    element.style.top  = setY + "px";
}

function getWindowDimensions()
{
	alert(
		  'self.screen.height:\t\t\t\t' + self.screen.height + '\t\t\n'
		+ 'self.screen.width:\t\t\t\t' + self.screen.width + '\n'
		+ 'self.screen.availHeight:\t\t\t' + self.screen.availHeight + '\n'
		+ 'self.screen.availWidth:\t\t\t' + self.screen.availWidth + '\n'
		+ 'self.screenTop:\t\t\t\t' + self.screenTop + '\n'
		+ 'self.screenLeft:\t\t\t\t' + self.screenLeft + '\n'
		+ 'self.screen.colorDepth:\t\t\t' + self.screen.colorDepth + '\n'
		+ 'document.body.clientHeight:\t\t\t' + document.body.clientHeight + '\n'
		+ 'document.body.clientWidth:\t\t\t' + document.body.clientWidth + '\n'
		+ 'document.body.scrollHeight:\t\t\t' + document.body.scrollHeight + '\n'
		+ 'document.body.scrollWidth:\t\t\t' + document.body.scrollWidth + '\n'
		+ 'document.documentElement.scrollHeight:\t' + document.documentElement.scrollHeight + '\n'
		+ 'document.documentElement.scrollWidth:\t' + document.documentElement.scrollWidth + '\n'
		+ 'document.body.scrollTop:\t\t\t' + document.body.scrollTop + '\n'
		+ 'document.body.offsetHeight:\t\t\t' + document.body.offsetHeight + '\n'
		+ 'document.body.offsetWidth:\t\t\t' + document.body.offsetWidth + '\n'
		+ 'document.documentElement.offsetHeight:\t' + document.documentElement.offsetHeight + '\n'
		+ 'document.documentElement.offsetWidth:\t' + document.documentElement.offsetWidth )
}

function Browser()
{
	this.isIE = false;
	this.isMozilla = false;
	this.isNetscape = true;
	this.isSafari = false;
	this.isOther = false;

	if(navigator.userAgent.indexOf('MSIE') != -1)
		this.isIE = true;
	else if(navigator.userAgent.indexOf('Mozilla') != -1)
		this.isMozilla = true;
	else if(navigator.userAgent.indexOf('Netscape') != -1)
		this.isNetscape = true;
	else if(navigator.userAgent.indexOf('Safari') != -1)
		this.isSafari = true;
	else
		this.isOther = true;
}

var browser = new Browser();

function getStyle(el, styleProp)
{
	var style = '[empty]';
	el = $(el);
	if(el.currentStyle)
		style = el.currentStyle[styleProp];
	else if(window.getComputedStyle)
		style = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
	return style;
}

var property, styleProp;
function DebugMode(bool)
{
	if(bool)
	{
		property = prompt('What property are you looking for?', 'style');
		if(typeof property == 'string' && property.length > 0)
		{
			if(property == 'style')
			{
				styleProp = prompt('What style property are you looking for?', 'border');
				if(!(typeof styleProp == 'string' && styleProp.length > 0))
				{
					property = '';
				}
			}
			if(property.length > 0)
			{
				document.onmousedown = function(evt) {
					if(!evt)
						evt = window.event;
					var srcElement = evt.target;
					if(property == 'style')
						var curStyle = getStyle(srcElement, styleProp);
					var oldBgColor = getStyle(srcElement, 'background-color');
					var oldBgImage = getStyle(srcElement, 'background-image');
					srcElement.style.backgroundColor = 'red';
					srcElement.style.backgroundImage = 'none';
					if(property == 'style')
						alert(curStyle);
					else
					{
						if(property == 'offsetHeight')
							alert(srcElement.offsetHeight);
						else if(property == 'offsetWidth')
							alert(srcElement.offsetWidth);
						else
							alert(srcElement.getAttribute(property));
					}
					setTimeout(function(){
						srcElement.style.backgroundColor = oldBgColor;
						srcElement.style.backgroundImage = oldBgImage;
					}, 2000);
				}
			}
		}
	}
	else
		document.onmousedown = function(evt) { };
}

/************************************************************************************************************
	FORM VALIDATION
************************************************************************************************************/

function ValidateForm(form)
{
	var retValue = true;

	for(i=0;i<form.elements.length;i++) {
		retValue = true;
		var curEl = form.elements[i];
		if(curEl.name.indexOf('email') != -1) {
			retValue = false;
			if(curEl.value.length > 5) {
				if(curEl.value.indexOf('@') != -1 && curEl.value.lastIndexOf('.') > curEl.value.indexOf('@')) {
					var emailSplit = curEl.value.split('@');
					var user = emailSplit[0];
					var domainSplit = emailSplit[1].split('.');
					var domain = domainSplit[0];
					var extension = domainSplit[1];

					if(user.length > 1 && domain.length > 1 && extension.length > 1) {
						retValue = true;
					}
				}
			}
			if(!retValue) {
				FormError(form, curEl.name, 'Please enter a valid email');
			}
			else {
				FormError(form, curEl.name, '');
			}
		}
		else if(curEl.name == 'subject-specific') {
			if(form['subject-general'].value == 'Other') {
				if(curEl.value.length == 0) {
					retValue = false;
				}
			}
			if(!retValue) {
				FormError(form, curEl.name, 'Please enter a subject');
			}
			else {
				FormError(form, curEl.name, '');
			}
		}
		else {
			var elTag = curEl.tagName.toLowerCase();
			if(elTag == 'input' || elTag == 'textarea') {
				if(curEl.value.length == 0) {
					retValue = false;
				}
			}
			if(!retValue) {
				var m, r = Math.round(Math.random()*10);
				if(r <= 3.3)
					m = 'Fill in this field, you goober';
				else if(r <= 6.6)
					m = 'Infidel!! &nbsp;Fill in this field or be damned';
				else
					m = 'Please fill in this field';
				FormError(form, curEl.name, m);
			}
			else {
				FormError(form, curEl.name, '');
			}
		}
		if(!retValue) {
			break;
		}
	}
	if(retValue) {
		form['submitBtn'].disabled = 'disabled';
		form['cancelBtn'].disabled = 'disabled';
	}
	return retValue;
}

function FormError(form, field, message)
{
	var errorFieldObj = form[field];
	var errorMessageObj = document.getElementById(field + '_error');
	if(errorMessageObj) {
		if(message.length > 0) {
			errorMessageObj.innerHTML = message;
			errorMessageObj.style.display = 'block';
			errorFieldObj.select();
		}
		else {
			errorMessageObj.innerHTML = '';
			errorMessageObj.style.display = 'none';
		}
	}
}

/************************************************************************************************************
	DROPDOWN MENUS
************************************************************************************************************/

var cur_dd = '', old_dd = '', tmp_dd;
var dd_useClick = true;
var clearBackdrop = null;

function show_dd(dd_icon) {
	old_dd = cur_dd;
	cur_dd = get_dd_id(dd_icon);
	
	if(cur_dd.length > 0) {
		var dd_menu = document.getElementById('dd-menu_' + cur_dd);
		var dd_menuTop = document.getElementById('dd-menuTop_' + cur_dd);

		dd_icon.className = 'dd-iconO';
		dd_menu.style.display = 'block';
		dd_menuTop.style.display = 'block';

		if(dd_useClick) {
			setTimeout(function() {
				document.body.onclick = function(evt) {
					if(!evt)
						var srcElement = window.event.srcElement;
					else
						var srcElement = evt.target;
	
					var doHide = true;
	
					var curEl = srcElement;
					if(typeof curEl.parentNode == 'object') {
						while(curEl.parentNode.nodeType == Node.ELEMENT_NODE) {
							if(typeof curEl.id == 'string' && curEl.id.length > 0) {
								// If the current element (or element's parent/grandparent)
								// is part of the dropdown ('dd') class, don't hide the menu
								if(curEl.id.indexOf('dd-') != -1 && srcElement.tagName.toLowerCase() != 'a') {
									doHide = false;
									break;
								}
							}
							curEl = curEl.parentNode;
						}
					}

					if(doHide) {
						hide_dd(cur_dd);
					}
					if(cur_dd != old_dd) {
						hide_dd(old_dd);
					}
				}
			}, 500);
		}
		else {
			var dd_container = document.getElementById('dd-icon_' + cur_dd).parentNode;
			dd_container.style.zIndex = '5';
			clearBackdrop.style.display = 'block';
			clearBackdrop.onmouseover = function() {
				hide_dd(cur_dd);
			}
			document.body.onclick = function(evt) {
				if(!evt)
					var srcElement = window.event.srcElement;
				else
					var srcElement = evt.target;
				if(srcElement.tagName.toLowerCase() == 'a')
					hide_dd(cur_dd);
			};
		}
		// IE6 HACK
		// To get IE6 to obey block level formatting on hyperlinks,
		// an arbitrary link in the list must be focused.
		for(i=0;i<dd_menu.childNodes.length;i++) {
			if(dd_menu.childNodes[i].nodeType == Node.ELEMENT_NODE && dd_menu.childNodes[i].tagName.toLowerCase() == 'a') {
				dd_menu.childNodes[i].focus();
				dd_menu.childNodes[i].blur();
			}
		}
	}
}

function hide_dd(dd_obj) {	
	var dd_icon = document.getElementById('dd-icon_' + dd_obj);
	var dd_menu = document.getElementById('dd-menu_' + dd_obj);
	var dd_menuTop = document.getElementById('dd-menuTop_' + dd_obj);

	if(dd_icon && dd_menu && dd_menuTop) {
		var dd_container = dd_icon.parentNode;
		dd_container.style.zIndex = '3';
		dd_icon.className = 'dd-icon';
		dd_menu.style.display = 'none';
		dd_menuTop.style.display = 'none';
	}

	clearBackdrop.style.display = 'none';
}

function get_dd_id(obj) {
	try {
		return obj.id.split('_')[1];
	}
	catch(e) {
		return '';
	}
}

addLoadFunction(function() {
	clearBackdrop = document.getElementById('backdrop-clear');
});

/************************************************************************************************************
	AJAX
************************************************************************************************************/

function AJAX(url, qsData, loadingFunction, callback, errorFunction)
{
	var bError = false;
	if(url.length == 0)
	{
		bError = true;
		alert('A URL is required to use the AJAX function');
	}

	if(typeof loadingFunction != 'function')
		loadingFunction = ajaxLoading;
	//	loadingFunction = function(response) {  };
	if(typeof callback != 'function')
		callback = ajaxLoaded;
	//	callback = function(response) { alert(response); };
	if(typeof errorFunction != 'function')
	{
		errorFunction = function(status, response) {
			alert('The server returned a status ' + status + ':\n\n' + response);
		};
	}

	if(!ajaxLocked && !bError)
	{
		ajaxLocked = true;
		var xmlhttp =  new XMLHttpRequest();
		if(xmlhttp)
		{
			xmlhttp.open('GET', url + '?' + qsData, true);
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4) {
					if(xmlhttp.status == 200) {
						var response = xmlhttp.responseText;
						callback(response);
					}
					else {
						var response = xmlhttp.responseText;
						errorFunction(xmlhttp.status, response);
					}
					ajaxLocked = false;
				}
			}
			loadingFunction();
			xmlhttp.send(null);
		}
	}
	return bError;
}

function ajaxLoading()
{
	if(fadeEffects)
	{
		CenterLoading();
		var loadingObj = document.getElementById('ajaxLoading');
		loadingObj.style.visibility = 'hidden';
		loadingObj.style.display = 'block';
		setTimeout("document.getElementById('ajaxLoading').style.visibility = 'visible'", 100);
		new Effect.Opacity(loadingObj,
			{ duration: 0.5, 
			transition: Effect.Transitions.sinoidal, 
			from: 0, to: .8 });
	}

}

function ajaxLoaded(result)
{
	if(fadeEffects)
	{
		var loadingObj = document.getElementById('ajaxLoading');
		new Effect.Opacity(loadingObj,
			{ duration: 0.5, 
			transition: Effect.Transitions.sinoidal, 
			from: .8, to: 0 });
		setTimeout("document.getElementById('ajaxLoading').style.display = 'none'", 505)
	}
}

function CenterLoading()
{
	// IE < 7
	if(browser.isIE && false)
	{
		var ajaxLoading = document.getElementById('ajaxLoading');
		if(ajaxLoading.style.display != 'none')
		{
			ajaxLoading.style.position = 'absolute';
			ajaxLoading.style.padding = '50px';
			ajaxLoading.style.height = document.documentElement.offsetHeight - 104 + 'px';
			Effect.Center('ajaxLoading');
		}

		window.onresize = CenterLoading;
		window.onscroll = CenterLoading;
	}	
}

/************************************************************************************************************
	LOGIN
************************************************************************************************************/

function showBackdrop(color)
{
	if(useBackdrop)
	{
		var backdrop = document.getElementById('backdrop-' + color);
		if(fadeEffects)
		{
			backdrop.style.visibility = 'hidden';
			backdrop.style.display = 'block';
			setTimeout("document.getElementById('backdrop-" + color + "').style.visibility = 'visible'", 100);
			new Effect.Opacity(backdrop,
				{ duration: 0.5, 
				transition: Effect.Transitions.sinoidal, 
				from: 0, to: _backdropOpacity / 100 });
		}
		else
		{
			SetOpacity(backdrop, _backdropOpacity);
			backdrop.style.display = 'block';
		}
	}
}

function hideBackdrop(color)
{
	var backdrop = document.getElementById('backdrop-' + color);
	if(fadeEffects)
	{
		new Effect.Opacity(backdrop,
			{ duration: 0.5, 
			transition: Effect.Transitions.sinoidal, 
			from: _backdropOpacity / 100, to: 0 });
		setTimeout("document.getElementById('backdrop-" + color + "').style.display = 'none'", 505)
	}
	else
		backdrop.style.display = 'none';
}

function CenterLogin()
{
	// IE < 7
	if(browser.isIE && false)
	{
		var login = document.getElementById('login');
		var loginBox = document.getElementById('login-box');
		var backdrop = document.getElementById('backdrop-black');
		backdrop.style.position = 'absolute';
		login.style.position = 'absolute';
		//box.style.height = document.documentElement.offsetHeight - 104 + 'px';
		//box.style.width = document.documentElement.offsetWidth - 121 + 'px';
		var backdropHeight = document.body.offsetHeight > document.documentElement.offsetHeight - 4 ? document.body.offsetHeight : document.documentElement.offsetHeight - 4;
		backdrop.style.width = document.body.offsetWidth + 20 + 'px';
		backdrop.style.height = backdropHeight + 'px';
		if(login.style.display != 'none')
		{
			//Effect.Center('login');
			//scroll(0, -1);
			var scrollY = 0;
		
			if ( document.documentElement && document.documentElement.scrollTop )
			{
				scrollY = document.documentElement.scrollTop;
			}
			else if ( document.body && document.body.scrollTop )
			{
				scrollY = document.body.scrollTop;
			}
			else if ( window.pageYOffset )
			{
				scrollY = window.pageYOffset;
			}
			else if ( window.scrollY )
			{
				scrollY = window.scrollY;
			}
			login.style.top = (scrollY + ((document.documentElement.offsetHeight - 104) / 2) - (loginBox.offsetHeight / 2)) + 'px';
		}

		setTimeout(CenterLogin, 10);

		window.onresize = CenterLogin;
	}
}

function showLogin()
{
	setLoginStatus('');
	document.loginForm.reset();
	var userStatus = document.getElementById('userStatus');
	if(user_loggedIn)
		userStatus.innerHTML = 'Logged in as <a href="http://suite.andydvorak.net/login/user-profile.asp" target="_blank">' + user_username + '</a>';
	else
		userStatus.innerHTML = '';

	showBackdrop('black');
	var loginObj = document.getElementById('login');
	CenterLogin();
	if(fadeEffects)
	{
		loginObj.style.visibility = 'hidden';
		loginObj.style.display = 'block';
		setTimeout("document.getElementById('login').style.visibility = 'visible'", 100);
		new Effect.Opacity(loginObj,
			{ duration: 0.5, 
			transition: Effect.Transitions.sinoidal, 
			from: 0, to: _dialogBoxOpacity / 100 });
		setTimeout('document.loginForm.username.select();', 650);
	}
	else
	{
		SetOpacity(loginObj, _dialogBoxOpacity);
		loginObj.style.display = 'block';
		setTimeout('document.loginForm.username.select()', 10);
	}
	document.loginForm.reset();
}

function hideLogin(result)
{
	hideBackdrop('black');
	var loginObj = document.getElementById('login');
	if(fadeEffects)
	{
		new Effect.Opacity(loginObj,
			{ duration: 0.5, 
			transition: Effect.Transitions.sinoidal, 
			from: _dialogBoxOpacity / 100, to: 0 });
		setTimeout("document.getElementById('login').style.display = 'none'", 505)
	}
	else
		loginObj.style.display = 'none';
}

function setLoginStatus(status)
{
	var loginStatus = document.getElementById('loginStatus');
	if(status == 'success')
	{
		loginStatus.className = 'success';
		loginStatus.innerHTML = 'Successfully logged in!';
		if(fadeEffects)
			setTimeout('hideLogin()', 1000);
		// Right now I'm refreshing the page after login... so this is unnecessary
		//setTimeout('document.getElementById("logo").style.backgroundImage="url(/images/header-logo_loggedIn.jpg)";', 1500);
		var doRefresh = refreshAfterLogin();
		if(doRefresh)
			setTimeout('document.location.reload();', 1250);
		else
			setTimeout('adminFunctions();', 1000);

		document.onlogin();
	}
	else if(status == 'failure')
	{
		loginStatus.className = 'error';
		loginStatus.innerHTML = 'Try again, punk';
		document.loginForm.username.select();
	}
	else if(status == 'loading')
	{
		loginStatus.className = 'busy';
		loginStatus.innerHTML = 'Transmitting...';
	}
	else if(status == 'logout')
	{
		loginStatus.className = 'success';
		loginStatus.innerHTML = 'Successfully logged out!';
	}
	else
	{
		loginStatus.className = 'welcome';
		loginStatus.innerHTML = 'Enter your username and password below';
	}
}

function submitLogin(username, password)
{
	var bError = false;
	if(!ajaxLocked && !bError)
	{
		ajaxLocked = true;
		var xmlhttp = new XMLHttpRequest();
		if(xmlhttp)
		{
			setLoginStatus('loading');
			xmlhttp.open('POST', '/suite/login/login.asp?mode=ajax', true);
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4) {
					if(xmlhttp.status == 200) {
						var response = xmlhttp.responseText;
						var responseSplit = response.split('|');
						function AjaxData(key)
						{
							for(i=0;i<responseSplit.length;i++)
							{
								var curQS = responseSplit[i].split('=');
								if(curQS[0].toLowerCase() == key.toLowerCase())
									return curQS[1];
							}
							//return null;
						}
						if(AjaxData('loginSuccessful') == 'true')
						{
							setLoginStatus('success');
							user_loggedIn = true;
							user_username = username;
						}
						else
							setLoginStatus('failure');
					}
					ajaxLocked = false;
				}
			}
			xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			xmlhttp.send('username=' + username + '&password=' + password);
		}
	}
	return bError;
}

function confirmLogout()
{
	if(user_loggedIn)
		showConfirm('Are you sure you wish to log out?', logout, null);
	else
		logout(true);
}

function logout(bool)
{
	if((typeof bool == 'boolean' && bool == true) || (typeof bool == 'undefined'))
	{
		user_loggedIn = false;
		var curCookie = getCookie('antoninsuite');
		var newCookie = curCookie.replace('loggedIn=True', 'loggedIn=False');
		setCookie('antoninsuite', newCookie, '1000');
		/*
		showLogin();
		setLoginStatus('logout');
		setTimeout('hideLogin()', 2000);
		*/
		// Right now I'm refreshing the page after login... so this is unnecessary
		//document.getElementById("logo").style.backgroundImage = "url(/images/header-logo.jpg)";
		var waitForRefresh = 50;
		if(fadeEffects)
			waitForRefresh = 1250;
		var doRefresh = refreshAfterLogin();
		if(doRefresh)
			setTimeout('document.location.reload();', waitForRefresh);
		else
			adminFunctions();

		document.onlogout();
	}
}

function resetKey()
{
	var loginAccess = document.getElementById('loginAccess');
	if(loginAccess)
		loginAccess.value = '';
}

function addKey(key)
{
	var loginAccess = document.getElementById('loginAccess');
	if(loginAccess)
	{
		var doSomething = !activeElement.isFormElement();
		if(doSomething)
		{
			loginAccess.value += key;
			if(loginAccess.value.indexOf('7679717378') != -1)
			{
				showLogin();
				resetKey();
			}
			else if(loginAccess.value.indexOf('767971798584') != -1)
			{
				//logout();
				confirmLogout();
				resetKey();
			}
		}
		if(key == 27)
		{
			hideLogin();
			hideConfirm();
			if(typeof hideTagBox == 'function')
				hideTagBox();
			if(typeof hideTagEntry == 'function')
				hideTagEntry();
			resetKey();
		}
		else if(key == 89) // (y)es
		{
			if(document.getElementById('confirm').style.display == 'block')
				confirmResponse(true);
		}
		else if(key == 78) // (n)o
		{
			if(document.getElementById('confirm').style.display == 'block')
				confirmResponse(false);
		}
	}
}

function captureKeydown()
{
	document.onkeydown = function(evt)
	{
		if(evt)
			addKey(evt.keyCode);
		else
			addKey(event.keyCode);
	}
}

function ActiveElement()
{
	this.element = null;
	this.isFormElement = function() {
		if(this.element.tagName.toLowerCase() == 'input' || this.element.tagName.toLowerCase() == 'textarea')
			return true;
		else
			return false;
	};
	this.init = function() {
		this.element = document.body;
	};
	this.setElement = function(el) {
		this.element = el;
	};
}

var activeElement = new ActiveElement();

function captureFocus()
{
	activeElement.init();
	if (document.forms.length>0) {
		for (i=0;i<document.forms.length;i++) {
			for (j=0;j<document.forms[i].elements.length;j++) {
				document.forms[i].elements[j].onfocus=new Function ("activeElement.setElement(this);");
				document.forms[i].elements[j].onblur=new Function ("activeElement.setElement(document.body);");
			}
		}
	}
	if (document.links.length>0) {
		for (i=0;i<document.links.length;i++) {
			document.links[i].onfocus=new Function ("activeElement.setElement(this);");
			document.links[i].onblur=new Function ("activeElement.setElement(document.body);");
		}
	}
}

function adminFunctions()
{
	for (i=0;i<document.getElementsByTagName('div').length;i++) {
		var curEl = document.getElementsByTagName('div')[i];
		if(curEl.className.indexOf('admin') != -1)
		{
			if(user_loggedIn)
				curEl.style.display = 'block';
			else
				curEl.style.display = 'none';
		}
	}
	for (i=0;i<document.getElementsByTagName('span').length;i++) {
		var curEl = document.getElementsByTagName('span')[i];
		if(curEl.className.indexOf('admin') != -1)
		{
			if(user_loggedIn)
				curEl.style.display = 'inline';
			else
				curEl.style.display = 'none';
		}
	}
	for (i=0;i<document.getElementsByTagName('td').length;i++) {
		var curEl = document.getElementsByTagName('td')[i];
		if(curEl.className.indexOf('admin') != -1)
		{
			if(user_loggedIn)
			{
				if(browser.isIE)
					curEl.style.display = 'block';
				else
					curEl.style.display = 'table-cell';
			}
			else
				curEl.style.display = 'none';
		}
	}
}

function refreshAfterLogin()
{
	var retValue = true;
	/*
	for(i=0;i<privateArray.length;i++)
	{
		if(privateArray[i][1])
		{
			retValue = true;
			break;
		}
	}
	*/
	return retValue;
}

function captureLoginTab(e)
{
	if(document.loginForm)
	{
		document.loginForm.username.onkeydown = function(e) {
			var retValue = true;
			if(!e)
				e = window.event;
			var keyPressed = null;
			if(e.which)
				keyPressed = e.which;
			else if(e.keyCode)
				keyPressed = e.keyCode;
			if(typeof keyPressed == 'number')
			{
				if(keyPressed == 9 || (keyPressed == 13 && document.loginForm.password.value == ''))
				{
					setTimeout(function() {
						document.loginForm.password.focus();
						document.loginForm.password.select();
					}, 10);
					retValue = false;
				}
			}
			return retValue;
		};
	}
}

addLoadFunction(captureLoginTab);

/************************************************************************************************************
	CONFIRM
************************************************************************************************************/

var onconfirmresponse = function() {};
var confirmationVars = new Array();

function showConfirm(question, respFunction, vars)
{
	var confirmQuestion = document.getElementById('confirm-question');
	confirmQuestion.innerHTML = question;

	if(typeof respFunction == 'function')
		onconfirmresponse = respFunction;
	else
		onconfirmresponse = function() {};
	if(typeof confVars == 'object')
		confirmationVars = vars;
	else
		confirmationVars = new Array();

	showBackdrop('white');
	var confirmObj = document.getElementById('confirm');
	CenterConfirm();
	if(fadeEffects)
	{
		confirmObj.style.visibility = 'hidden';
		confirmObj.style.display = 'block';
		setTimeout("document.getElementById('confirm').style.visibility = 'visible';", 100);
		new Effect.Opacity(confirmObj,
			{ duration: 0.50, 
			transition: Effect.Transitions.sinoidal, 
			from: 0, to: _dialogBoxOpacity / 100 });
	}
	else
	{
		SetOpacity(confirmObj, _dialogBoxOpacity);
		confirmObj.style.display = 'block';
	}
	setTimeout('document.getElementById("confirm-yes").focus();', 500);
}

function hideConfirm()
{
	hideBackdrop('white');
	var confirmObj = document.getElementById('confirm');
	if(fadeEffects)
	{
		new Effect.Opacity(confirmObj,
			{ duration: 0.50, 
			transition: Effect.Transitions.sinoidal, 
			from: _dialogBoxOpacity / 100, to: 0 });
		setTimeout("document.getElementById('confirm').style.display = 'none'", 505)
	}
	else
		confirmObj.style.display = 'none';
}

function confirmResponse(bool)
{
	hideConfirm();
	onconfirmresponse(bool);
}

function ConfirmationVar(key)
{
	var retValue = null;
	if(typeof confirmationVars == 'object')
	{
		for(i=0;i<confirmationVars.length;i++)
		{
			if(confirmationVars[i][0].toLowerCase() == key.toLowerCase())
			{
				retValue = confirmationVars[i][1];
				break;
			}
		}
	}
	return retValue;
}

function CenterConfirm()
{
	// IE < 7
	if(browser.isIE && false)
	{
		var obj = document.getElementById('confirm');
		obj.style.position = 'absolute';
		obj.style.padding = '50px';
		obj.style.height = document.documentElement.offsetHeight - 104 + 'px';
		obj.style.width = document.documentElement.offsetWidth - 121 + 'px';
		if(obj.style.display != 'none')
		{
			Effect.Center('confirm');
			//scroll(0, 0);
		}

		setTimeout(CenterConfirm, 10);

		window.onresize = CenterConfirm;
		window.onscroll = CenterConfirm;
	}
}

function confirmYes(state) {
	var yesObj = document.getElementById('confirm-yes');
	if(state == 'over') {
		yesObj.src = '/images/spacer.gif';
	}
	else if(state == 'out') {
		yesObj.src = '/images/confirm-box_yes.gif';
	}
	else if(state == 'click') {
		confirmResponse(true);
		return false;
	}
}
function confirmNo(state) {
	var noObj = document.getElementById('confirm-no');
	if(state == 'over') {
		noObj.src = '/images/spacer.gif';
	}
	else if(state == 'out') {
		noObj.src = '/images/confirm-box_no.gif';
	}
	else if(state == 'click') {
		confirmResponse(false);
		return false;
	}
}
function confirmClose(state) {
	var closeObj = document.getElementById('confirm-close');
	if(state == 'over') {
		closeObj.src = '/images/spacer.gif';
	}
	else if(state == 'out') {
		closeObj.src = '/images/confirm-box_close.gif';
	}
	else if(state == 'click') {
		hideConfirm();
		return false;
	}
}

/************************************************************************************************************
	MENU (ADMIN VIEW) - IMAGE UPLOAD
************************************************************************************************************/

function CenterProgress()
{
	// IE < 7
	if(browser.isIE && false)
	{
		var progress = document.getElementById('progress');
		if(progress.style.display != 'none')
		{
			progress.style.position = 'absolute';
			progress.style.padding = '50px';
			progress.style.height = document.documentElement.offsetHeight - 104 + 'px';
			Effect.Center('progress');
		}

		window.onresize = CenterProgress;
		window.onscroll = CenterProgress;
	}
}

function Stop() {
	if(browser.isIE)
		document.execCommand('Stop');
	else
		window.stop();
}

var uploadComplete = false;

function loadProgress(progressData)
{
	var progressDataSplit = progressData.split('?');
	// taken from a query string function, changed to use ? instead of &
	function GetProgressValue(key)
	{
		for(i=0;i<progressDataSplit.length;i++)
		{
			var curQS = progressDataSplit[i].split('=');
			if(curQS[0].toLowerCase() == key.toLowerCase())
				return curQS[1];
		}
		//return '';
	}
	document.getElementById('progress_bytesReceived').innerHTML = GetProgressValue('bytesReceived');
	document.getElementById('progress_totalBytes').innerHTML = GetProgressValue('totalBytes');
	document.getElementById('progress_timeStarted').innerHTML = GetProgressValue('timeStarted');
	document.getElementById('progress_timeElapsed').innerHTML = GetProgressValue('timeElapsed');
	document.getElementById('progress_timeRemaining').innerHTML = GetProgressValue('timeRemaining');
	document.getElementById('progress_timeLastActive').innerHTML = GetProgressValue('timeLastActive');
	document.getElementById('progress_percentComplete').innerHTML = GetProgressValue('percentComplete') + '%';
	document.getElementById('progress_bar').style.width = GetProgressValue('percentComplete') + "%";
	if(GetProgressValue('percentComplete') == '100')
		uploadComplete = true;
}

function getProgress()
{
	var xmlhttp = false;
	var xmlhttp = new XMLHttpRequest();
	if(!ajaxLocked && !uploadComplete)
	{
		ajaxLocked = true;
		if(xmlhttp)
		{
			qsData = 'Session=' + UploadSession;
			xmlhttp.open("GET", "/upload/getprogress.asp?" + qsData, true);
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4) {
					if(typeof xmlhttp == 'object' && typeof loadProgress == 'function')
					{
						try {
							if(xmlhttp.status == 200) {
								loadProgress(xmlhttp.responseText);
								setTimeout('getProgress()', 15 * 5);
							}
							else {
								alert('The server returned status code ' + xmlhttp.status + '\n\n' + xmlhttp.responseText);
							}
						}
						catch(e) {
							
						}
					}
					ajaxLocked = false;
				}
			}
			xmlhttp.send(null);
		}
	}
	else if(uploadComplete)
	{
		uploadLoaded(true);
	}
}

function createSneakyFrame()
{
	if(!document.getElementById('sneakyFrame'))
	{
		var newDiv = document.createElement('div');
		newDiv.id = 'sneakyFrame-container';

		var newIframe = document.createElement('iframe');
		newIframe.id = 'sneakyFrame';
		newIframe.name = 'sneakyFrame';
		newIframe.height = '20px';
		newIframe.width = '100%';

		newDiv.appendChild(newIframe);
		document.body.appendChild(newDiv);
	}
}

addLoadFunction(createSneakyFrame);

var UploadSession = new String();

function submitUpload()
{
	uploadComplete = false;
	// Create a random session identifier.
	UploadSession = Math.floor(Math.random() * 0xFFFFFF).toString(16);
	var sneakyFrame = document.getElementById('sneakyFrame');

	// set session ID to our upload form
	document.uploadForm.target = "sneakyFrame";
	document.uploadForm.action = document.uploadForm.getAttribute('baseAction') + '&Session=' + UploadSession;
	uploadLoading();
	getProgress();

	return true;
}

function uploadLoading()
{
	CenterProgress();
	var progressObj = document.getElementById('progress');
	progressObj.style.visibility = 'hidden';
	progressObj.style.display = 'block';
	setTimeout("document.getElementById('progress').style.visibility = 'visible'", 100);
	new Effect.Opacity(progressObj,
		{ duration: 0.5, 
		transition: Effect.Transitions.sinoidal, 
		from: 0, to: 1 });
	showBackdrop('black');
}
var uploadResult = false;
function uploadLoaded(result)
{
	ajaxLocked = false;
	uploadResult = result;
	if(result)
		var waitTime = 2000;
	else
		var waitTime = 100;
	var progressObj = document.getElementById('progress');
	setTimeout(function() {
		new Effect.Opacity(progressObj,
			{ duration: 0.5, 
			transition: Effect.Transitions.sinoidal, 
			from: 1, to: 0 });
		setTimeout("document.getElementById('progress').style.display = 'none'; hideBackdrop('black');", 505);
		if(uploadResult)
			setTimeout("document.location = document.getElementById('returnPage').value", 1000);
	}, waitTime);
}

/************************************************************************************************************
	IMAGE RENAME
************************************************************************************************************/

var badCharString = '\\/:*?",\<\>\|';
function isFilenameValid(filename)
{
	var retValue = true;
	for(i=0;i<filename.length;i++)
	{
		if(badCharString.indexOf(filename.charAt(i)) != -1)
		{
			retValue = false;
			break;
		}
	}
	return retValue;
}

/************************************************************************************************************
	EVENT FUNCTIONS
************************************************************************************************************/

function getEvent(e) {
	if(!e)
		e = window.event;
	return e;
}

function getSrcElement(e) {
	if(e.target)
		return e.target;
	else
		return e.srcElement;
}

function getKeyPressed(e) {
	var keyPressed = null;
	if(e.which)
		keyPressed = e.which;
	else if(e.keyCode)
		keyPressed = e.keyCode;
	return keyPressed;
}

function addKeyPressFunction(newFunc) {
	if(typeof document.onkeypress == 'function') {
    	var oldFunc = document.onkeypress;
		document.onkeypress = function(e) {
			oldFunc();
			newFunc();
		}
	}
	else
		document.onkeypress = newFunc;
}

function addLoadFunction(newFunc) {
	if(typeof window.onload == 'function') {
    	var oldFunc = window.onload;
		window.onload = function() {
			oldFunc();
			newFunc();
		}
	}
	else
		window.onload = newFunc;
}

/************************************************************************************************************
	PAGE LOAD
************************************************************************************************************/

addLoadFunction(adminFunctions);
addLoadFunction(resetKey);
addLoadFunction(captureKeydown);
addLoadFunction(captureFocus);

function cleanInputs() {
	if(browser.isIE) {
		var inputs = document.getElementsByTagName('input');
		for(i=0;i<inputs.length;i++) {
			if(inputs[i].type == 'radio' || inputs[i].type == 'checkbox') {
				inputs[i].className = 'cleanInput';
			}
		}
	}
}

addLoadFunction(cleanInputs);