var AP = Array.prototype;
if (!AP.pop) AP.pop = function () { return this.splice (-1)[0]; };
if (!AP.push) AP.push = function () { for (var i = 0; i < arguments.length; i++) this [this.length] = arguments [i]; return this.length; };
if (!AP.shift) AP.shift = function () { return this.splice (0, 1)[0]; };
AP.splice = function (start, deleteCount) { if (!arguments.length) return start; start = isNaN (start = parseInt (start)) ? 0 : (start < 0 ? Math.max (0, this.length + start) : Math.min (this.length, start)); if (arguments.length < 2) { var removeItems = this.slice (start); this.length = start; return removeItems; } deleteCount = isNaN (deleteCount = parseInt (deleteCount)) ? 0 : Math.max (0, deleteCount); var removeItems = this.slice (start, start + deleteCount); var endItems = this.slice (start + deleteCount); this.length = start; for (var i = 2; i < arguments.length; i++) this [start - 2 + i] = arguments [i]; for (var i = 0; i < endItems.length; i++) this [start + arguments.length - 2 + i] = endItems [i]; return removeItems; };
if (!AP.unshift) AP.unshift = function () { var i = arguments.length; while (i--) this.splice (0, 0, arguments [i]); return this.length; };
AP.indexOf = function (searchValue, position) { for (var i = isNaN (position = parseInt (position)) ? 0 : Math.min (Math.max (position, 0), this.length - 1); i < this.length; i++) if (searchValue.constructor == RegExp ? searchValue.test (this [i]) : this [i] == searchValue) return i; return -1; };
AP.lastIndexOf = function (searchValue, position) { var i = isNaN (position = parseInt (position)) ? this.length : Math.min (Math.max (position + 1, 0), this.length); while (i--) if (searchValue.constructor == RegExp ? searchValue.test (this [i]) : this [i] == searchValue) return i; return -1; };

var RP = RegExp.prototype;
if (!RP.test) RP.test = function (string) { return string.match (this) != null; };

function UserAgent () { var version = navigator.appVersion; var userAgent = navigator.userAgent; UserAgent.operatingSystem = { isWindows : /Win/.test (version), isMac : /Mac/.test (version) }; var isOpera = /Opera/.test (userAgent); UserAgent.browser = { isExplorer : (/MSIE/.test (userAgent) && !isOpera), isGecko : /rv:/.test (userAgent), isSafari : /Safari/.test (userAgent), isOpera : isOpera, isNavigator4 : Boolean (document.layers) }; var objects = [UserAgent.operatingSystem, UserAgent.browser]; while (objects.length) { var object = objects.shift (); var isUnknown = true; for (var i in object) if (object [i]) { isUnknown = false; break; } object.isUnknown = isUnknown; } UserAgent.version = parseFloat (/Opera[^\d]([\d\.]+)/.test (userAgent) ? RegExp.$1 : (/(MSIE |rv:|Safari\/)([\d\.]+)/.test (userAgent) ? RegExp.$2 : (/Mozilla\/([\d\.]+)/.test (userAgent) ? RegExp.$1 : version))); UserAgent.toString = function () { var string = ""; var objects = [UserAgent.operatingSystem, UserAgent.browser]; while (objects.length) { var object = objects.shift (); for (var i in object) if (object [i]) { string += i.replace (/\d/, "").substring (2); break; }} return string + UserAgent.version; }; }; UserAgent ();

function addPreloadImage () { for (var i = 0; i < arguments.length; i++) PreloadImages.push (arguments [i]); return PreloadImages.length; }
function preloadImage () { var images = arguments.length ? arguments : PreloadImages; for (var i = 0; i < images.length; i++) { var url = (new Image).src = images [i]; if (document.getElementById) { var image = document.createElement ("img"); image.style.display = "none"; image.src = url; document.body.appendChild (image); } PreloadedImages.push (url); } return true; }
function changeImage () { var length = RestoreImages.length; for (var i = 0; i < arguments.length; i += 2) { var object = arguments [i]; var image = typeof object == "string" ? document.images [object] : object; RestoreImages.unshift (image, image.src); image.src = arguments [i + 1]; } return (RestoreImages.length > length); }
function restoreImage () { if (arguments.length) { var length = RestoreImages.length; for (var i = 0; i < arguments.length; i++) { var object = arguments [i]; var image = typeof object == "string" ? document.images [object] : object; var index = RestoreImages.indexOf (image); if (index != -1) { var pair = RestoreImages.splice (index, 2); pair [0].src = pair [1]; }} return (RestoreImages.length < length); } while (RestoreImages.length) RestoreImages.shift ().src = RestoreImages.shift (); return true; }
function deleteRestoreImage () { if (arguments.length) { var length = RestoreImages.length; for (var i = 0; i < arguments.length; i++) { var object = arguments [i]; var image = typeof object == "string" ? document.images [object] : object; var index; while ((index = RestoreImages.indexOf (image)) != -1) RestoreImages.splice (index, 2); } return (RestoreImages.length < length); } RestoreImages.splice (0); return true; }; var PreloadImages = []; var PreloadedImages = []; var RestoreImages = [];

function addWindowListener (event, listener) { var listeners = WindowListeners [event]; if (!listeners) { listeners = WindowListeners [event] = []; window ["on" + event] = function () { for (var i = 0; i < listeners.length; i++) { var listener = listeners [i]; if (typeof listener == "string") eval (listener); else listener (); } if (event == "load") preloadImage (); }; } return listeners.push (listener); }
function removeWindowListener (event, listener) { var listeners = WindowListeners [event]; if (listeners) { var index = listeners.lastIndexOf (listener); if (index != -1) return listeners.splice (index, 1)[0]; } return null; }; var WindowListeners = {}; addWindowListener ("load", ""); removeWindowListener ("load", "");

function presetMouseOverImage () { var elements = [document.getElementsByTagName ("img"), document.getElementsByTagName ("input")]; var images = []; for (var i = 0; i < elements.length; i++) for (var j = 0; j < elements [i].length; j++) { var element = elements [i][j]; if (element.tagName == "IMG" || element.type == "image") images.push (element); } for (var i = 0; i < images.length; i++) { var image = images [i]; if (image.className.split (" ").indexOf ("hover") != -1) { var node = image; if (node.tagName != "INPUT") { if (node.linker) node = node.linker; else while (node.tagName != "A") node = node.parentNode; } if (!node.mouseOverImages) { node.mouseOverImages = []; node.onmouseover = function () { var images = this.mouseOverImages; for (var i = 0; i < images.length; i++) { var image = images [i]; var extension = image.src.match (/\.(gif|jpg|png)$/)[0]; changeImage (image, image.src.replace (new RegExp ("(_hover)*" + extension + "$"), "_over" + extension)); }}; node.onmouseout = function () { var images = this.mouseOverImages; for (var i = 0; i < images.length; i++) restoreImage (images [i]); }; } node.mouseOverImages.push (image); var extension = image.src.match (/\.(gif|jpg|png)$/)[0]; addPreloadImage (image.src.replace (new RegExp ("(_hover)*" + extension + "$"), "_hover" + extension)); }}}
function presetPseudoLink () { var elements = document.all ? document.all : document.getElementsByTagName ("*"); for (var i = 0; i < elements.length; i++) { var element = elements [i]; if (element.className.split (" ").indexOf ("PseudoLink") != -1) { var node = element; while (node.className.split (" ").indexOf ("PseudoLinkRoot") == -1) node = node.parentNode; var links = node.getElementsByTagName ("a"); if (links.length) { var link = links [0]; element.linker = link; if (!link.linkees) link.linkees = []; link.linkees.push (element); element.style.cursor = /Explorer/.test (UserAgent) ? "hand" : "pointer"; element.onmouseover = function () { var linker = this.linker ? this.linker : this; var links = [linker].concat (linker.linkees); while (links.length) changePseudoLinkClassName (links.shift ()); if (linker.onmouseover) linker.onmouseover (); }; element.onmouseout = function () { var linker = this.linker ? this.linker : this; var links = [linker].concat (linker.linkees); while (links.length) restorePseudoLinkClassName (links.shift ()); if (linker.onmouseout) linker.onmouseout (); }; element.onmousedown = function () { if (!/Opera/.test (UserAgent)) this.linker.focus (); return false; }; element.onclick = function (e) { var linker = this.linker; var tagName = window.event ? event.srcElement.tagName : e.target.tagName; if (tagName && tagName != "A") { var returnValue = true; if (linker.onclick) returnValue = linker.onclick (); if (returnValue != false) { if (linker.target) window.open (linker.href, linker.target); else location.href = linker.href; }}}; }}}}; function changePseudoLinkClassName (linkee) { var classNames = linkee.className.split (" "); var pseudoKeys = []; var index; while ((index = classNames.indexOf (/^Pseudo/)) != -1) pseudoKeys.push (classNames.splice (index, 1)); var newClassNames = ["Hover"]; var length = classNames.length; if (length) { classNames.push ("Hover"); for (var i = 0; i < length; i++) { var className = classNames [i]; if (!/Hover$/.test (className)) classNames.push (className + "Hover"); } newClassNames = pseudoKeys.concat (classNames); } return changeClassName (linkee, newClassNames); }; function restorePseudoLinkClassName (linkee) { return restoreClassName (linkee); }; if (document.getElementById) { addWindowListener ("load", presetPseudoLink); addWindowListener ("load", presetMouseOverImage); }
