﻿var dbg_off = true;
var dbg_trace = false;
var dbg_error = true;
var dbg_stack = true;

var clicker = false, timer = false;

// Get an event for an event handler.
function get_event (evt) {
	enter ("get_event");
	if (!evt) try {evt = window.event;} catch(e) {evt = false;}
	return leave (evt);
}

// Cancel bubbling of an event.
function stop_event (evt) {
	enter ("stop_event");
	evt = get_event (evt);
	if (!evt) return leave (false);
	try {evt.cancelBubble = true;} catch(e) {}
	try {evt.returnValue = false;} catch(e) {}
	return leave (false);
}

// Gets the object that fired the event.
function get_obj (evt) {
	enter ("get_obj");
	var obj = false;
	if (!evt) return leave (false);
	try {obj = evt.srcElement;} catch(e) {}
	if (!obj) try {obj = evt.target;} catch(e) {}
	return leave (obj);
}

// Used to digest cookies.
function get_parm(opt, def) {
	if (!opt) return def;
	var s = this.toUpperCase().indexOf(opt.toUpperCase());
	if (s >= 0) s = this.indexOf("=", s);
	if (s < 0) {
		return def;
	} else {
		var l = this.indexOf(";", s);
		if (l < 0) l = this.length;
		return this.substring(s + 1, l);
	}
}
String.prototype.get_parm = get_parm;

// Retrieve a cookie value by name.
function get_cookie (cookie_name, default_value) {
	return document.cookie.get_parm (cookie_name, default_value);
}

// Set a cookie value by name.
function set_cookie (cookie_name, new_value, expires) {
	if (!expires) expires = (new Date((new Date).getUTCFullYear() + 1, 1, 1)).toGMTString();
	document.cookie = cookie_name + "=" + new_value + ";expires=" + expires;
}

function getNext (obj, tagName) {
	enter ("getNext");
	tagName = tagName.toLowerCase();
	while (obj && obj != obj.nextSibling)
		if ((obj = obj.nextSibling) && obj.tagName && obj.tagName.toLowerCase() == tagName) return leave (obj);
	leave();
}

function toggleClass (className) {
	enter ("toggleClass");
	if (this.findClass (className))
		return this.removeClass (className);
	else
		return this.addClass (className);
	leave();
}
function findClass (className) {
	enter ("findClass");
	return leave (this && (" " + this + " ").indexOf(" " + className + " ") != -1);
}
function addClass (className ) {
	enter ("addClass");
	return leave (this ? this + " " + className : className);
}
function removeClass (className) {
	enter ("removeClass");
	return leave (this.findClass (className) ? this.replace (className, "").replace ("  ", " ") : this);
}
String.prototype.toggleClass = toggleClass;
String.prototype.findClass = findClass;
String.prototype.addClass = addClass;
String.prototype.removeClass = removeClass;

function getFileName (path) {
	enter ("getFileName");
	if (!path) return leave (path);
	var i = path.lastIndexOf ("/") + 1;
	if (i == 0) i = path.lastIndexOf ("\\") + 1;
	var j = path.indexOf ("#") - 1;
	if (j == -2) j = path.indexOf ("?") - 1;
	if (j == -2) j = path.length;
	return leave (path.substr (i, j - i + 1));
}

function resolve_menu() {
	enter ("resolve_menu");
	var obj = false, submenu = false, foundit = false, menu = "";
  if (obj = document.getElementById ("noScript")) obj.style.display = "none";
	if (document.URL.indexOf("index=1") > -1) menu = document.getElementById ("ulVisitorMenu");
	else if (document.URL.indexOf("index=2") > -1) menu = document.getElementById ("ulMemberMenu");
	else if (document.URL.indexOf("index=3") > -1) menu = document.getElementById ("ulAdminMenu");
	if (menu) {
		menu = menu.parentNode;
	} else {
		menu = document.getElementById ("leftNavBar");
		if (menu) menu = menu.getElementsByTagName ("LI");
		if (menu.length) menu = menu[0]; else menu = false;
	}
	if (!menu) return leave (false);
	var links = menu.getElementsByTagName ("A");
	var fileName = decodeURI(getFileName(document.URL).toLowerCase());
	menu.style.display = "block";
	menu.className.addClass("selected");
	for (var i = 0; i < links.length; i++) {
		obj = links.item(i);
//		debug (decodeURI(getFileName(obj.href).toLowerCase()) + " = " + fileName + ":  " + (decodeURI(getFileName(obj.href).toLowerCase()) == fileName));
		if (obj.id != "submenu" && decodeURI(getFileName(obj.href).toLowerCase()) == fileName) {
			obj.className = obj.className.addClass("selected");
			while (obj != obj.parentNode && (obj = obj.parentNode)) {
				if (obj.tagName == "LI") {
					obj.parentNode.style.display = "block";
					if (submenu = obj.getElementsByTagName ("UL")) submenu = submenu.item(0);
					if (submenu) {
						obj.className = obj.className.addClass ("open");
						submenu.style.display = "block";
					}
				}
			}
			foundit = true;
			break;
		}
	}
	if (!foundit) {
	  if (menu = document.getElementById ("leftNavBar")) menu.style.display = "none";
	  if (obj = document.getElementById ("leftBack")) obj.style.display = "block";
	}
	leave();
}

// Emulate the DOM function for collections.
function getElementById (obj, id) {
	enter ("getElementById");
	with (obj) for (var i = 0; i < length; i++)
		if (item(i).id == id) return leave (item(i));
	return leave (false);
}

// Emulate the DOM function for collections, but return only one item.
function getElementByName (obj, id) {
	enter ("getElementByName");
	with (obj) for (var i = 0; i < length; i++)
		if (item(i).name == id) return leave (item(i));
	return leave (false);
}

// Find the parent node of the type requested.
function getParentNodeByType (obj, tag) {
	enter ("getParentNodeByType");
	for (obj = obj.parentNode; obj && obj != obj.parentNode; obj = obj.parentNode)
		if (obj.tagName == tag) return leave (obj);
	return leave (false);
}

// Scrolling debugger output.  This opens a separate window for output.
// Window will be found if it already exists.
// Window is re-opened if it is closed.  Refreshing the window resets it.
// *** Make sure all explicit calls to this function are removed for production. ***
// Used by the error handler to report errors.  Don't remove that reference.
var dWin = false;
function debug (value, nobr) {
	if (dbg_off) return value;
	if (!dWin || dWin.closed) {
		dWin = open_window ("", "debugger",
			"directories=no,width=350,height=200,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,titlebar=yes,toobar=no");
		if (!dWin) return value;
	}
	with (dWin.document) {
		if (body.childNodes.length == 0) {
			writeln ('<html>');
			writeln ('<head>');
			writeln ('      <title>Information</title>');
			writeln ('      <style>');
			writeln ('              body {font-family:arial;font-size:8pt;background-color:#CC3333;color:#FFFF33;margin:2 2 2 2;}');
			writeln ('      </style>');
			writeln ('</head>');
			writeln ('<body>');
			writeln ('</body>');
			writeln ('</html>');
		}
		body.appendChild (createTextNode (value));
		if (!nobr) body.appendChild (createElement ("br")).scrollIntoView(false);
	}
	return value;
}

// Attempt to open a popup window.
function open_window (URL, title, options) {
	if (title != "debugger") enter ("open_window");
	var retval = false;
	try {retval = window.open (URL, title, options);} catch (e) {}
	if (!retval && title != "debugger") alert ("A window was blocked from opening.");
	if (title != "debugger") return leave (retval); else return retval;
}

// Push a function call onto the stack for stack-tracing.
// Call whenever entering a function.
// Syntax:  enter ("function_name");
var Stack = new Array();
function enter (fname) {
	try {
		Stack.push(fname);
		if (dbg_trace) debug (Stack.join(" > "));
	} catch (e) {}
}

// Pop a function call off the stack for stack-tracing.
// Call whenever exiting a function.
// Syntax:  return leave (return_value);
function leave (value) {
	if (Stack.length) Stack.pop ();
	return value;
}

// Error handler.  Reports the error and allows execution to continue.
// Functions can poll and reset error_tripped to check for problems.
// This cannot trap or handle fatal syntax errors.
var error_tripped = false;
function handle_error (msg, url, line) {
//	enter ("handle_error");
	if (dbg_error) debug ('Error:  "' + msg + '" from ' + url + ' line ' + line);  // Do not remove.
	if (dbg_stack) debug ('Stack:  ' + Stack.join(' > '));                     // Do not remove.
	Stack = new Array();
	error_tripped = true;
	return stop_event();
//	return leave(stop_event());
} 

function click_handler (evt) {
	enter ("click_handler");
	var retval = true;
	evt = get_event (evt);
	if (!evt) return retval;
	var srcElement = get_obj (evt);
	if (!srcElement) return retval;
	var obj, i;

	switch (srcElement.tagName) {
		case "A" :
			// Preserve the query string on ASPX pages.  Specify a query string on the link to override.
			i = document.URL.indexOf ("?");
			if (i != -1 && srcElement.href.indexOf("?") == -1 && srcElement.href.indexOf(".aspx") != -1) srcElement.href += document.URL.substr (i);
			break;
	}

	switch (srcElement.id) {
		case "submenu":
			srcElement.parentNode.className = srcElement.parentNode.className.toggleClass("open");
			if (obj = getNext(srcElement, "UL")) obj.style.display = (obj.style.display == "" ? "block" : "");
			retval = false;
			break;
			
		case "goBack" :
		  window.history.back();
			retval = false;
		  break;
			
		default :
	}

	if (!retval) stop_event (evt);
	return leave (retval);
}

var banner_image = false, banner_num = 1;
function init_wipe (img) {
  if (!banner_image) banner_image = img;
  else try {img.filters[0].Play(duration=2);} catch(e) {}
  banner_num = Number(img.src.substr(img.src.length - 6, 2));
}

function timer_handler (evt) {
  if (++timer.banner_timer % 800 == 0) {
    timer.banner_timer = 0;
    if (!timer.banner_image) {
      timer.banner_image = banner_image;
      timer.banner_num = banner_num;
    }
    timer.banner_num = timer.banner_num % 9 + 1;
    document.cookie = "story_banner=" + timer.banner_num;
    if (timer.banner_image) {
      try {timer.banner_image.filters[0].Apply();} catch(e) {}
      timer.banner_image.src = "../media/story_banner0" + timer.banner_num + ".jpg?updated=20100703";
      timer.banner_image.parentNode.href = "../pages/member_story0" + timer.banner_num + ".aspx";
    }
  }
}

function Clicker (handler) {
	document.body.onclick = handler;
}

function Timer (handler, interval) {
	this.Interval = window.setInterval (handler, interval);
	this.banner_num = Number (get_cookie ("story_banner", 1));
	this.banner_timer = Number (get_cookie("banner_timer", 0));
	this.banner_image = document.getElementById ("imgStory");
	if (this.banner_image) {
		this.banner_image.src = "../media/story_banner0" + this.banner_num + ".jpg";
		this.banner_image.parentNode.href = "../pages/member_story0" + this.banner_num + ".aspx";
	}
}

function Loader (evt) {
	enter ("Loader");
	clicker = new Clicker (click_handler);
	timer = new Timer (timer_handler, 30);
	try {page_load()} catch (e) {}
	return leave (true);
}

function Unloader (evt) {
	enter ("Unloader");
	if (timer) document.cookie = "banner_timer=" + timer.banner_timer;
	return leave (true);
}

function Initialize() {
	enter ("Initialize");
	window.onload = Loader;
	try { window.onerror = handle_error; } catch (e) { }
	try { window.onunload = Unloader } catch (e) { }
	leave();
}

Initialize();
