//FILE ADMIN/MENU/FUNCS.JS

// funcs.js version 2.2.1 supports iES.asp v2.2.1



// from ies.asp begin

function myHeight() {

    if (document.layers) 

	{

        return document.body.document.height - window.innerHeight;

	}

    else if (document.all)

        return 0; // cannot get current window size

    else

        return 200; // approx height (adjust as necessary)

}



function myScroll() {

    documentYposition += scrollAmount;

    window.scroll(0,documentYposition);

    if (document.layers) {

        if (documentYposition > documentLength || documentYposition == 0)

			return;

            scrollAmount *= -1;

    }

    else if (document.all) {

        if (document.body.scrollTop == lastScrollTop || document.body.scrollTop == 0)

            scrollAmount *= -1;

    }

	if (nCount < 10)

	{

		// 10 x 200 = 2000 (2 seconds)

		setTimeout('myScroll()',scrollInterval);

		nCount += 1;

	}

	else if (nCount < 13)

	{

		// 3 x 1000 = 3000 (3 seconds)

		setTimeout('myScroll()',scrollIntervalSlow);

		nCount += 1;

	}

}



function start() {

    documentLength = myHeight();

    myScroll();

}



var nCount = 0;

var documentLength;

var scrollAmount = 10000;         // scroll by 100 pixels each time

var scrollInterval = 2;			  // number of milliseconds between scrolls

var scrollIntervalSlow = 10;	  // number of milliseconds between scrolls

var documentYposition = 0;

var lastScrollTop = 0;         // workaround for IE



// from ies.asp end



function lw(t,n,w,h) 

{

	return open(t,n,"scrollbars=yes,resizable=yes,status=no,height="+h+",width="+w);

}



function lw2(t,n,w,h) 

{

	return open(t,n,"scrollbars=yes,toolbar=yes,menubar=yes,location=yes,resizable=yes,status=no,height="+h+",width="+w);

}



function launch(n) 

{

	lw("",n,530,600)

}





var pmwin = 0;

function launchpm()

{

	if (navigator.appVersion.indexOf("3") == 0)	

		pmwin = lw("",'noHoldPM',500,500)	// 3.0 browsers

	else if (pmwin == 0 || pmwin.closed)

	{

		pmwin = lw("",'noHoldPM',window.screen.width-20,window.screen.height-60)

		pmwin.moveTo(0,0)

	}

	else

	{

		pmwin.focus();

		return false;

	}

	return true;

}



var wscale = .50, vscale=.75;



function GetScales()

{

	if (window.screen.width == 640)

	{

		wscale = .75

		vscale=.85

	}

	else if (window.screen.width == 800)

	{

		wscale = .65

		vscale=.80

	}

	else if (window.screen.width == 1024)

	{

		wscale = .60

		vscale=.75

	}

	else // any higher resolution

	{

		wscale = .55

		vscale=.70

	}

}



var kpwin = 0;

function launchkp()

{

try {



	// Knowledge Portal

	if (navigator.appVersion.indexOf("3") == 0)	// doesn't work for 3.0 browsers 

		kpwin = lw("",'noHold',500,500)	// 3.0 browsers

	else if (kpwin == 0 || kpwin.closed)

	{

		GetScales()

		//kpwin = lw("",'noHold',window.screen.width*wscale,window.screen.height*vscale)

		kpwin = lw("",'noHold',500,window.screen.height*vscale)

		if (kpwin != 0 && !kpwin.closed)

			kpwin.moveTo(10,10)

	}

	else

	{

		kpwin.focus()

		return false;

	}



}catch (e) {}	



	return true;

}



function launchkpURL(url)

{

try {



	// Knowledge Portal

	if (navigator.appVersion.indexOf("3") == 0)	// doesn't work for 3.0 browsers 

		kpwin = lw(url,'noHold',500,500)	// 3.0 browsers

	else if (kpwin == 0 || kpwin.closed)

	{

		GetScales()

		//kpwin = lw("",'noHold',window.screen.width*wscale,window.screen.height*vscale)

		kpwin = lw("",'noHold',500,window.screen.height*vscale)

		if (kpwin != 0 && !kpwin.closed)

			kpwin.moveTo(300,100)

		kpwin.location = url;

	}

	else

	{

		kpwin.focus()

		return false;

	}



}catch (e) {}	



	return true;

}



var debugwin = 0;

function launchdebug()

{

	// Debug Window

	if (navigator.appVersion.indexOf("3") == 0)	// doesn't work for 3.0 browsers 

		debugwin = lw("",'noHoldDebug',500,500)	// 3.0 browsers

	else if (debugwin == 0 || debugwin.closed)

	{

		GetScales()

		//debugwin = lw("",'noHoldDebug',window.screen.width*wscale,window.screen.height*vscale)

		debugwin = lw("frames_debug2.asp",'noHoldDebug',500,window.screen.height*vscale)

		debugwin.moveTo(10,10)

	}

	else

	{

		debugwin.focus()

		return false;

	}

	return true;

}



function closedebug()

{

	if (debugwin && !debugwin.closed)

		debugwin.close();

}

var testwin = 0;

function launchtest()

{

	// Test Window

	if (navigator.appVersion.indexOf("3") == 0)	// doesn't work for 3.0 browsers 

		testwin = lw("",'noHoldDebug',500,500)	// 3.0 browsers

	else if (testwin == 0 || testwin.closed)

	{

		GetScales()

		//debugwin = lw("",'noHoldDebug',window.screen.width*wscale,window.screen.height*vscale)

		testwin = lw("frames_test.asp",'noHoldTest',500,window.screen.height*vscale)

		testwin.moveTo(10,10)

	}

	else

	{

		testwin.focus()

		return false;

	}

	return true;

}



function closetest()

{

	if (testwin && !testwin.closed)

		testwin.close();

}



var escwin = 0;

function launchesc(w,h)

{

try {



	// Escalate Window

	if (navigator.appVersion.indexOf("3") == 0)	// doesn't work for 3.0 browsers 

		escwin = lw("",'noHoldEscalate',500,500)	// 3.0 browsers w,h

	else if (escwin == 0 || escwin.closed)

	{

		GetScales()

		if (w==0 || h==0)

			escwin = lw("",'noHoldEscalate',500,window.screen.height*vscale)

		else

			escwin = lw("",'noHoldEscalate',window.screen.width*(w/100),window.screen.height*(h/100))



		if (escwin != 0 && !escwin.closed)

		{

			if (w<=90  && h<=90)

				escwin.moveTo(40,40)

			else

				escwin.moveTo(0,0)

		}

	}

	else

	{

		escwin.focus();

		return false;

	}



}catch (e) {}	



	return true;

}



var fbwin = 0;

function launchfb(w,h)

{

try {

	// Feeback Window

	if (navigator.appVersion.indexOf("3") == 0)	// doesn't work for 3.0 browsers 

		fbwin = lw("",'feedback',500,500)	// 3.0 browsers

	else if (fbwin == 0 || fbwin.closed)

	{

		GetScales()

		if (w==0 || h==0)

		{

			//alert('hello')

			fbwin = lw("",'feedback',500,window.screen.height*vscale)

		}

		else

			fbwin = lw("",'feedback',window.screen.width*(w/100),window.screen.height*(h/100))



		if (fbwin != 0 && !fbwin.closed)

		{

			if (w<=90  && h<=90)

				fbwin.moveTo(40,40)

			else

				fbwin.moveTo(0,0)

		}

	}

	else

	{

		fbwin.focus();

		return false;

	}



}catch (e) {}	



	return true;

}



var artwin = 0;

function launcham(percent_width, percent_height)

{

try {



	// Article Viewer Window

	if (navigator.appVersion.indexOf("3") == 0)	// doesn't work for 3.0 browsers 

		artwin = lw("",'nhArticle',500,500)	// 3.0 browsers

	else if (artwin == 0 || artwin.closed)

	{

		GetScales()

		if (percent_width==0  || percent_height==0)

		{

			artwin = lw("",'nhArticle',500,window.screen.height*vscale)

			artwin.moveTo(window.screen.width*.42,20)

		}

		else

		{

			artwin = lw("",'nhArticle',window.screen.width*(percent_width/100),window.screen.height*(percent_height/100))

			if (percent_width<=90  && percent_height<=90)

				artwin.moveTo(window.screen.width*((90-percent_width)/100),window.screen.height*((90-percent_height)/100))

			else

				artwin.moveTo(0,0)

		}

	}

	else

	{

		artwin.focus();

		//return false;

	}



}catch (e) {}	



	return true;

}



function closeam()

{

	if (artwin && !artwin.closed)

		artwin.close();

}



var amswin = 0;

function launchams()

{

try {



	// Article Search Window

	if (navigator.appVersion.indexOf("3") == 0)	// doesn't work for 3.0 browsers 

		amswin = lw("",'noHoldAms',500,500)	// 3.0 browsers

	else if (amswin == 0 || amswin.closed)

	{

		GetScales()

		amswin = lw("",'noHoldAms',500,window.screen.height*vscale)

		//amswin.moveTo(window.screen.width*.50,20)

		amswin.moveTo(40,140)

	}

	else

	{

		amswin.focus()

		return false;

	}





}catch (e) {}	



	return true;

}



function closeams()

{

	if (amswin && !amswin.closed)

		amswin.close();

}



var routewin = 0;

function launchRoute(percent_width, percent_height)

{

try {



	// Route Window

	if (navigator.appVersion.indexOf("3") == 0)	// doesn't work for 3.0 browsers 

		routewin = lw("",'nhRoute',500,500)	// 3.0 browsers

	else if (routewin == 0 || routewin.closed)

	{

		GetScales()

		if (percent_width==0  || percent_height==0)

			routewin = lw("",'nhRoute',500,window.screen.height*vscale)

		else

			routewin = lw("",'nhRoute',window.screen.width*(percent_width/100),window.screen.height*(percent_height/100))



		if (percent_width<=90  && percent_height<=90)

			routewin.moveTo(40,40)

		else

			routewin.moveTo(0,0)

	}

	else

	{

		routewin.focus();

		return false;

	}



}catch (e) {}	



	return true;

}



function launchWebRoute(percent_width, percent_height)

{

try {



	// Route Window

	if (navigator.appVersion.indexOf("3") == 0)	// doesn't work for 3.0 browsers 

		routewin = lw("",'nhRoute',500,500)	// 3.0 browsers

	else if (routewin == 0 || routewin.closed)

	{

		GetScales()

		if (percent_width==0  || percent_height==0)

			routewin = lw2("",'nhRoute',500,window.screen.height*vscale)

		else

			routewin = lw2("",'nhRoute',window.screen.width*(percent_width/100),window.screen.height*(percent_height/100))



		if (percent_width<=90  && percent_height<=90)

			routewin.moveTo(40,40)

		else

			routewin.moveTo(0,0)

	}

	else

	{

		routewin.focus();

		return false;

	}



}catch (e) {}	



	return true;

}



function closeRoute()

{

	if (routewin && !routewin.closed)

		routewin.close();

}



//ProgressBar

var pBar=0;

function launchProgressBar(url)

{	

	pBar=open(url,"nhProgress","scrollbars=no,resizable=yes,status=no,height=20,width=380");

}

function closeProgressBar()

{

	if (pBar && !pBar.closed)

		pBar.close();

}

//FILE ADMIN/MENU/CIS_DROPDOWNC.JS









mtDropDown.spacerGif = "admin/menu/cp.gif";



mtDropDown.dingbatOn = "admin/menu/arrw_rightblack.gif";



mtDropDown.dingbatOff = "admin/menu/arrw_rightblack.gif";



mtDropDown.dingbatSize = 14;



mtDropDown.menuPadding = 1;



mtDropDown.itemPadding = 4;



mtDropDown.shadowSize = 2;



mtDropDown.shadowOffset = 3;



mtDropDown.shadowColor = "#888888";



mtDropDown.shadowPng = "admin/menu/grey-40.png";



mtDropDown.backgroundColor = "#EEEEEE";



mtDropDown.backgroundPng = "admin/menu/white-90.png";



mtDropDown.hideDelay = 1000;



mtDropDown.slideTime = 200;









mtDropDown.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};



mtDropDown.direction = {down:1,right:2};



mtDropDown.registry = [];



mtDropDown._maxZ = 100;











mtDropDown.isSupported = function() {

if (typeof mtDropDown.isSupported.r == "boolean") 

return mtDropDown.isSupported.r;



var ua = navigator.userAgent.toLowerCase();



var an = navigator.appName;

var r = false;



if (ua.indexOf("gecko") > -1) r = true;



else if (an == "Microsoft Internet Explorer") {

if (document.getElementById) r = true;



}

mtDropDown.isSupported.r = r;



return r;



}



mtDropDown.initialize = function() {

for (var i = 0, menu = null;

menu = this.registry[i]; i++) {

menu.initialize();



}

}



mtDropDown.renderAll = function() {

var aMenuHtml = [];



for (var i = 0, menu = null;

menu = this.registry[i];

i++) {

aMenuHtml[i] = menu.toString();



}

document.write(aMenuHtml.join(""));

}



function mtDropDown(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {



this.addItem = addItem;

this.addMenu = addMenu;



this.toString = toString;

this.initialize = initialize;

this.isOpen = false;

this.show = show;

this.hide = hide;



this.items = [];



this.onactivate = new Function();



this.ondeactivate = new Function();



this.onmouseover = new Function();



this.onqueue = new Function();





this.index = mtDropDown.registry.length;



mtDropDown.registry[this.index] = this;

var id = "mtDropDown" + this.index;



var contentHeight = null;



var contentWidth = null;

var childMenuSet = null;

var animating = false;



var childMenus = [];



var slideAccel = -1;



var elmCache = null;



var ready = false;



var _this = this;

var a = null;



var pos = iDirection == mtDropDown.direction.down ? "top" : "left";

var dim = null;



function addItem(sText, sUrl) {

var item = new mtDropDownItem(sText, sUrl, this);

item._index = this.items.length;

this.items[item._index] = item;

}

function addMenu(oMenuItem) {

if (!oMenuItem.parentMenu == this) throw new Error("Nie można tu dodać elementu menu...");

if (childMenuSet == null) childMenuSet = new mtDropDownSet(mtDropDown.direction.right, -5, 2, mtDropDown.reference.topRight);

var m = childMenuSet.addMenu(oMenuItem);

childMenus[oMenuItem._index] = m;

m.onmouseover = child_mouseover;

m.ondeactivate = child_deactivate;

m.onqueue = child_queue;

return m;

}

function initialize() {

initCache();

initEvents();

initSize();

ready = true;

}

function show() {



if (ready) {

_this.isOpen = true;

animating = true;

setContainerPos();

elmCache["clip"].style.visibility = "visible";

elmCache["clip"].style.zIndex = mtDropDown._maxZ++;



slideStart();

_this.onactivate();

}

}

function hide() {

if (ready) {

_this.isOpen = false;

animating = true;

for (var i = 0, item = null; item = elmCache.item[i]; i++) 

dehighlight(item);

if (childMenuSet) childMenuSet.hide();

slideStart();

_this.ondeactivate();

}

}

function setContainerPos() {

var sub = oActuator.constructor == mtDropDownItem; 

var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator; 

var el = act;

var x = 0;

var y = 0;

var minX = 0;

var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);

var minY = 0;

var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);



while (sub ? el.parentNode.className.indexOf("mtDropdownMenu") == -1 : el.offsetParent) {

x += el.offsetLeft;

y += el.offsetTop;

if (el.scrollLeft) x -= el.scrollLeft;

if (el.scrollTop) y -= el.scrollTop;

el = el.offsetParent;

}

if (oActuator.constructor == mtDropDownItem) {

x += parseInt(el.parentNode.style.left);

y += parseInt(el.parentNode.style.top);

}

switch (iReferencePoint) {

case mtDropDown.reference.topLeft:

break;

case mtDropDown.reference.topRight:

x += act.offsetWidth;

break;

case mtDropDown.reference.bottomLeft:

y += act.offsetHeight;

break;

case mtDropDown.reference.bottomRight:

x += act.offsetWidth;

y += act.offsetHeight;

break;

}

x += iLeft;

y += iTop;

x = Math.max(Math.min(x, maxX), minX);

y = Math.max(Math.min(y, maxY), minY);

elmCache["clip"].style.left = x + "px";

elmCache["clip"].style.top = y + "px";

}

function slideStart() {

var x0 = parseInt(elmCache["content"].style[pos]);

var x1 = _this.isOpen ? 0 : -dim;

if (a != null) a.stop();

a = new Accelimation(x0, x1, mtDropDown.slideTime, slideAccel);

a.onframe = slideFrame;

a.onend = slideEnd;

a.start();

}

function slideFrame(x) {

elmCache["content"].style[pos] = x + "px";

}

function slideEnd() {

if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";

animating = false;

}

function initSize() {



var ow = elmCache["items"].offsetWidth;

var oh = elmCache["items"].offsetHeight;

var ua = navigator.userAgent.toLowerCase();



elmCache["clip"].style.width = ow + mtDropDown.shadowSize + 2 + "px";

elmCache["clip"].style.height = oh + mtDropDown.shadowSize + 2 + "px";



elmCache["content"].style.width = ow + mtDropDown.shadowSize + "px";

elmCache["content"].style.height = oh + mtDropDown.shadowSize + "px";

contentHeight = oh + mtDropDown.shadowSize;

contentWidth = ow + mtDropDown.shadowSize;

dim = iDirection == mtDropDown.direction.down ? contentHeight : contentWidth;



elmCache["content"].style[pos] = -dim - mtDropDown.shadowSize + "px";

elmCache["clip"].style.visibility = "hidden";



if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {



elmCache["background"].style.width = ow + "px";

elmCache["background"].style.height = oh + "px";

elmCache["background"].style.backgroundColor = mtDropDown.backgroundColor;



elmCache["shadowRight"].style.left = ow + "px";

elmCache["shadowRight"].style.height = oh - (mtDropDown.shadowOffset - mtDropDown.shadowSize) + "px";

elmCache["shadowRight"].style.backgroundColor = mtDropDown.shadowColor;







elmCache["shadowBottom"].style.top = oh + "px";

elmCache["shadowBottom"].style.width = ow - mtDropDown.shadowOffset + "px";

elmCache["shadowBottom"].style.backgroundColor = mtDropDown.shadowColor;

}



else {



elmCache["background"].firstChild.src = mtDropDown.backgroundPng;

elmCache["background"].firstChild.width = ow;

elmCache["background"].firstChild.height = oh;



elmCache["shadowRight"].firstChild.src = mtDropDown.shadowPng;

elmCache["shadowRight"].style.left = ow + "px";

elmCache["shadowRight"].firstChild.width = mtDropDown.shadowSize;

elmCache["shadowRight"].firstChild.height = oh - (mtDropDown.shadowOffset - mtDropDown.shadowSize);







elmCache["shadowBottom"].firstChild.src = mtDropDown.shadowPng;

elmCache["shadowBottom"].style.top = oh + "px";

elmCache["shadowBottom"].firstChild.height = mtDropDown.shadowSize;

elmCache["shadowBottom"].firstChild.width = ow - mtDropDown.shadowOffset;

}

}

function initCache() {

var menu = document.getElementById(id);

var all = menu.all ? menu.all : menu.getElementsByTagName("*"); 

elmCache = {};

elmCache["clip"] = menu;

elmCache["item"] = [];

for (var i = 0, elm = null;

elm = all[i]; i++) {

switch (elm.className) {

case "items":

case "content":

case "background":

case "shadowRight":

case "shadowBottom":

elmCache[elm.className] = elm;

break;

case "item":

elm._index = elmCache["item"].length;

elmCache["item"][elm._index] = elm;

break;

}

}



_this.elmCache = elmCache;

}

function initEvents() {



for (var i = 0, item = null; item = elmCache.item[i]; i++) {

item.onmouseover = item_mouseover;

item.onmouseout = item_mouseout;

item.onclick = item_click;

}



if (typeof oActuator.tagName != "undefined") {

oActuator.onmouseover = actuator_mouseover;

oActuator.onmouseout = actuator_mouseout;

}



elmCache["content"].onmouseover = content_mouseover;

elmCache["content"].onmouseout = content_mouseout;

}

function highlight(oRow) {

oRow.className = "item hover";

if (childMenus[oRow._index]) 

oRow.lastChild.firstChild.src = mtDropDown.dingbatOn;

}

function dehighlight(oRow) {

oRow.className = "item";

if (childMenus[oRow._index]) 

oRow.lastChild.firstChild.src = mtDropDown.dingbatOff;

}

function item_mouseover() {

if (!animating) {

highlight(this);

if (childMenus[this._index]) 

childMenuSet.showMenu(childMenus[this._index]);

else if (childMenuSet) childMenuSet.hide();

}

}

function item_mouseout() {

if (!animating) {

if (childMenus[this._index])

childMenuSet.hideMenu(childMenus[this._index]);

else 

dehighlight(this);

}

}

function item_click() {

if (!animating) {

if (_this.items[this._index].url) 

location.href = _this.items[this._index].url;

}

}

function actuator_mouseover() {

parentMenuSet.showMenu(_this);

}

function actuator_mouseout() {

parentMenuSet.hideMenu(_this);

}

function content_mouseover() {

if (!animating) {

parentMenuSet.showMenu(_this);

_this.onmouseover();

}

}

function content_mouseout() {

if (!animating) {

parentMenuSet.hideMenu(_this);

}

}

function child_mouseover() {

if (!animating) {

parentMenuSet.showMenu(_this);

}

}

function child_deactivate() {

for (var i = 0; i < childMenus.length; i++) {

if (childMenus[i] == this) {

dehighlight(elmCache["item"][i]);

break;

}

}

}

function child_queue() {

parentMenuSet.hideMenu(_this);

}

function toString() {

var aHtml = [];

var sClassName = "mtDropdownMenu" + (oActuator.constructor != mtDropDownItem ? " top" : "");

for (var i = 0, item = null; item = this.items[i]; i++) {

aHtml[i] = item.toString(childMenus[i]);

}

return '<div id="' + id + '" class="' + sClassName + '">' + 

'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' + 

'<tr><td colspan="2"><img src="' + mtDropDown.spacerGif + '" width="1" height="' + mtDropDown.menuPadding + '"></td></tr>' + 

aHtml.join('') + 

'<tr><td colspan="2"><img src="' + mtDropDown.spacerGif + '" width="1" height="' + mtDropDown.menuPadding + '"></td></tr></table>' + 

'<div class="shadowBottom"><img src="' + mtDropDown.spacerGif + '" width="1" height="1"></div>' + 

'<div class="shadowRight"><img src="' + mtDropDown.spacerGif + '" width="1" height="1"></div>' + 

'<div class="background"><img src="' + mtDropDown.spacerGif + '" width="1" height="1"></div>' + 

'</div></div>';

}

}

















mtDropDownSet.registry = [];

function mtDropDownSet(iDirection, iLeft, iTop, iReferencePoint) {



this.addMenu = addMenu;

this.showMenu = showMenu;

this.hideMenu = hideMenu;

this.hide = hide;



var menus = [];

var _this = this;

var current = null;

this.index = mtDropDownSet.registry.length;

mtDropDownSet.registry[this.index] = this;



function addMenu(oActuator) {

var m = new mtDropDown(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);

menus[menus.length] = m;

return m;

}

function showMenu(oMenu) {

if (oMenu != current) {



if (current != null) hide(current); 



current = oMenu;



oMenu.show();

}

else {



cancelHide(oMenu);

}

}

function hideMenu(oMenu) {



if (current == oMenu && oMenu.isOpen) {



if (!oMenu.hideTimer) scheduleHide(oMenu);

}

}

function scheduleHide(oMenu) {



oMenu.onqueue();

oMenu.hideTimer = window.setTimeout("mtDropDownSet.registry[" + _this.index + "].hide(mtDropDown.registry[" + oMenu.index + "])", mtDropDown.hideDelay);

}

function cancelHide(oMenu) {



if (oMenu.hideTimer) {

window.clearTimeout(oMenu.hideTimer);

oMenu.hideTimer = null;

}

}

function hide(oMenu) { 

if (!oMenu && current) oMenu = current;

if (oMenu && current == oMenu && oMenu.isOpen) {



cancelHide(oMenu);

current = null;

oMenu.hideTimer = null;

oMenu.hide();

}

}

}

















function mtDropDownItem(sText, sUrl, oParent) {

this.toString = toString;

this.text = sText;

this.url = sUrl;

this.parentMenu = oParent;

function toString(bDingbat) {

var sDingbat = bDingbat ? mtDropDown.dingbatOff : mtDropDown.spacerGif;

var iEdgePadding = mtDropDown.itemPadding + mtDropDown.menuPadding;

var sPaddingLeft = "padding:" + mtDropDown.itemPadding + "px; padding-left:" + iEdgePadding + "px;"

var sPaddingRight = "padding:" + mtDropDown.itemPadding + "px; padding-right:" + iEdgePadding + "px;"

return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' + 

sText + '</td><td width="14" style="' + sPaddingRight + '">' + 

'<img src="' + sDingbat + '" width="14" height="14"></td></tr>';

}

}





































function Accelimation(from, to, time, zip) {

if (typeof zip == "undefined") zip = 0;

if (typeof unit == "undefined") unit = "px";

this.x0 = from;

this.x1 = to;

this.dt = time;

this.zip = -zip;

this.unit = unit;

this.timer = null;

this.onend = new Function();

this.onframe = new Function();

}









Accelimation.prototype.start = function() {

this.t0 = new Date().getTime();

this.t1 = this.t0 + this.dt;

var dx = this.x1 - this.x0;

this.c1 = this.x0 + ((1 + this.zip) * dx / 3);

this.c2 = this.x0 + ((2 + this.zip) * dx / 3);

Accelimation._add(this);

}



Accelimation.prototype.stop = function() {

Accelimation._remove(this);

}









Accelimation.prototype._paint = function(time) {

if (time < this.t1) {

var elapsed = time - this.t0;

this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));

}

else this._end();

}



Accelimation.prototype._end = function() {

Accelimation._remove(this);

this.onframe(this.x1);

this.onend();

}









Accelimation._add = function(o) {

var index = this.instances.length;

this.instances[index] = o;



if (this.instances.length == 1) {

this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);

}

}



Accelimation._remove = function(o) {

for (var i = 0; i < this.instances.length; i++) {

if (o == this.instances[i]) {

this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );

break;

}

}



if (this.instances.length == 0) {

window.clearInterval(this.timerID);

this.timerID = null;

}

}



Accelimation._paintAll = function() {

var now = new Date().getTime();

for (var i = 0; i < this.instances.length; i++) {

this.instances[i]._paint(now);

}

}



Accelimation._B1 = function(t) { return t*t*t }

Accelimation._B2 = function(t) { return 3*t*t*(1-t) }

Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }

Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }



Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {

return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);

}







Accelimation.instances = [];

Accelimation.targetRes = 10;

Accelimation.timerID = null;

//FILE ADMIN/MENU/CIS_DROPDOWN_INITIALIZE.JS

var preloaded = [];
//here is a lame preloading script i am putting in just for demonstration
for (var i = 1; i <= 1; i++) {
preloaded[i] = [loadImage(i + ".gif"), loadImage(i + ".gif")];
}

function init() {
//whatever stuff you need to do onload goes here.
//==========================================================================================
//if supported, initialize mtdropdowns
//==========================================================================================
//Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
//This is better than server-side checking because it will also catch browsers which would
//normally support the menus but have javascript disabled.
//
//If supported, call initialize() and then hook whatever image rollover code you need to do
//to the .onactivate and .ondeactivate events for each menu.
//==========================================================================================
if (mtDropDown.isSupported()) {
mtDropDown.initialize();
//hook all the image swapping of the main toolbar to menu activation/deactivation
//instead of simple rollover to get the effect where the button stays hightlit until
//the menu is closed.
}
}
//this is a crappy example preloader. Use whichever one you want.
function loadImage(sFilename) {
var img = new Image();
img.src ="https://www.atthelakecottagerentals.com/" + sFilename;
return img;
}
//this is a crappy example image swapper. Use whichever you want.
function swapImage(imgName, sFilename) {
document.images[imgName].src = sFilename;
}

//FILE ADMIN/MENU/HOME32.JS

//-------------------------------------------------------------

//cross-browser helper functions

//-------------------------------------------------------------



//Global variables

var isCSS 			= false;

var isW3C 			= false;

var isIE4 			= false;

var isNN4 			= false;

var isIE6 			= false;

var isGecko 		= false;

var isOpera 		= false;

var isDHTML 		= false;

var suppressMenus	= false;

var legacyMode		= false;

var timerID			= null;

var subtimerID		= null;



//initialize upon load to let all browsers establish content objects

function autoconfig()

{

 if(document && document.images)

 {

     isCSS		= (document.body && document.body.style) ? true : false;

     isW3C		= (isCSS && document.getElementById) ? true : false;

     isIE4		= (isCSS && document.all && readIEVer() >= 4.0) ? true : false;

     isNN4		= (document.layers) ? true : false;

     isGecko		= (isCSS && navigator && navigator.product && navigator.product == "Gecko");

     isOpera		= (isCSS && navigator.userAgent.indexOf( "Opera") != -1 );

		isIE6CSS	= (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;

		isIE6		= ( isIE6CSS && readIEVer() >= 6.0 );

     isDHTML		= isCSS && ( isIE4 || isGecko || isOpera );

     

     if( suppressMenus || ( isOpera && readOperaVer() < 7 ) || ( isGecko && navigator.productSub <= 20011022 ) || ( isGecko && navigator.productSub == 20030107 ) )

     {

			// Opera 6.x doesn't seem to like the DHTML...

			// Netscape 6.2 puts the menus in the wrong place...

			// Safari, the menus don't go away... problem in ResetMenu

			isDHTML	= false;

     }

     

 }

 

 

}





function readIEVer()

{

	var agent	= navigator.userAgent;

	var offset	= agent.indexOf( "MSIE" );

	if( offset < 0 )

	{

		return 0;

	}

	return parseFloat( agent.substring( offset + 5, agent.indexOf( ";", offset ) ) );

}



function readOperaVer()

{

	var agent	= navigator.userAgent;

	var offset	= agent.indexOf( "Opera" );

	if( offset < 0 )

	{

		return 0;

	}

	return parseFloat( agent.substring( offset + 6 ) );

}



//-------------------------------------------------------------

//client-side masthead

//-------------------------------------------------------------



var m_pnlinks;

var m_crumbs;



function mhFixupLink( href, extra )

{

	if( typeof(extra) == "undefined" )

	{

		extra = "&~ck=mn";

	}

	

	if( href )

	{

		var anchor		= null;

		var anchorix	= href.indexOf( "#" );

		

		if( anchorix != -1 )

		{

			anchor		= href.substr( anchorix );

			href		= href.substr( 0, anchorix );

		}

		

		if( href.indexOf( "?" ) == -1 )

		{

			extra = "?" + extra.substr( 1 );

		}



		if( href.toLowerCase().indexOf( "javascript:" ) == -1 )

		{

			href += extra;

		}

		else

		{

			start = href.indexOf( "?" );

			

			if( start != -1 )

			{

				ix = href.indexOf( "\'", start );

				

				if( ix == -1 )

				{

					ix = href.indexOf( "\\", start );



					if( ix == -1 )

					{

						ix = href.indexOf( "\"", start );

					}

				}

				

				if( ix != -1 )

				{

					href = href.substr( 0, ix ) + extra + href.substr( ix );

				}

			}

		}

		

		if( anchor )

		{

			href += anchor;

		}

	}

	

	return href;

}



function writeMH( phoneTitle, phoneMsg, phoneTariff, segmentTitle, hasLocale, logoLink, pnmsg )

{

	autoconfig();



	{

		return;

	}



}







function mhLink( text, href, icon, extra )

{

	href = mhFixupLink( href, extra );



	this.Text			= text;

	this.Href			= href;

	this.Icon			= icon;

}



function addPnLink( text, href, icon )

{

	if( !m_pnlinks )

	{

		m_pnlinks = new Array();

	}

	

	m_pnlinks[m_pnlinks.length] = new mhLink( text, href, icon );

}



function addCrumb( text, href )

{

	if( !m_crumbs )

	{

		m_crumbs = new Array();

	}

	

	m_crumbs[m_crumbs.length] = new mhLink( text, href, null );

}





//-------------------------------------------------------------

//end of home.js

//-------------------------------------------------------------

//FILE JS/PROTOTYPE.JS

/*  Prototype JavaScript framework, version 1.4.0
 *  (c) 2005 Sam Stephenson <sam@conio.net>
 *
 *  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
 *  against the source tree, available from the Prototype darcs repository.
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *
 *  For details, see the Prototype web site: http://prototype.conio.net/
 *
/*--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.4.0',
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',

  emptyFunction: function() {},
  K: function(x) {return x}
}

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

var Abstract = new Object();

Object.extend = function(destination, source) {
  for (property in source) {
    destination[property] = source[property];
  }
  return destination;
}

Object.inspect = function(object) {
  try {
    if (object == undefined) return 'undefined';
    if (object == null) return 'null';
    return object.inspect ? object.inspect() : object.toString();
  } catch (e) {
    if (e instanceof RangeError) return '...';
    throw e;
  }
}

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this;
  return function(event) {
    return __method.call(object, event || window.event);
  }
}

Object.extend(Number.prototype, {
  toColorPart: function() {
    var digits = this.toString(16);
    if (this < 16) return '0' + digits;
    return digits;
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator) {
    $R(0, this, true).each(iterator);
    return this;
  }
});

var Try = {
  these: function() {
    var returnValue;

    for (var i = 0; i < arguments.length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }

    return returnValue;
  }
}

/*--------------------------------------------------------------------------*/

var PeriodicalExecuter = Class.create();
PeriodicalExecuter.prototype = {
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.callback();
      } finally {
        this.currentlyExecuting = false;
      }
    }
  }
}

/*--------------------------------------------------------------------------*/

function $() {
  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1)
      return element;

    elements.push(element);
  }

  return elements;
}
Object.extend(String.prototype, {
  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  },

  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(eval);
  },

  escapeHTML: function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
  },

  unescapeHTML: function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
  },

  toQueryParams: function() {
    var pairs = this.match(/^\??(.*)$/)[1].split('&');
    return pairs.inject({}, function(params, pairString) {
      var pair = pairString.split('=');
      params[pair[0]] = pair[1];
      return params;
    });
  },

  toArray: function() {
    return this.split('');
  },

  camelize: function() {
    var oStringList = this.split('-');
    if (oStringList.length == 1) return oStringList[0];

    var camelizedString = this.indexOf('-') == 0
      ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
      : oStringList[0];

    for (var i = 1, len = oStringList.length; i < len; i++) {
      var s = oStringList[i];
      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
    }

    return camelizedString;
  },

  inspect: function() {
    return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";
  }
});

String.prototype.parseQuery = String.prototype.toQueryParams;

var $break    = new Object();
var $continue = new Object();

var Enumerable = {
  each: function(iterator) {
    var index = 0;
    try {
      this._each(function(value) {
        try {
          iterator(value, index++);
        } catch (e) {
          if (e != $continue) throw e;
        }
      });
    } catch (e) {
      if (e != $break) throw e;
    }
  },

  all: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      result = result && !!(iterator || Prototype.K)(value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      if (result = !!(iterator || Prototype.K)(value, index))
        throw $break;
    });
    return result;
  },

  collect: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      results.push(iterator(value, index));
    });
    return results;
  },

  detect: function (iterator) {
    var result;
    this.each(function(value, index) {
      if (iterator(value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (iterator(value, index))
        results.push(value);
    });
    return results;
  },

  grep: function(pattern, iterator) {
    var results = [];
    this.each(function(value, index) {
      var stringValue = value.toString();
      if (stringValue.match(pattern))
        results.push((iterator || Prototype.K)(value, index));
    })
    return results;
  },

  include: function(object) {
    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  },

  inject: function(memo, iterator) {
    this.each(function(value, index) {
      memo = iterator(memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args = $A(arguments).slice(1);
    return this.collect(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (value >= (result || value))
        result = value;
    });
    return result;
  },

  min: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (value <= (result || value))
        result = value;
    });
    return result;
  },

  partition: function(iterator) {
    var trues = [], falses = [];
    this.each(function(value, index) {
      ((iterator || Prototype.K)(value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results = [];
    this.each(function(value, index) {
      results.push(value[property]);
    });
    return results;
  },

  reject: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator(value, index))
        results.push(value);
    });
    return results;
  },

  sortBy: function(iterator) {
    return this.collect(function(value, index) {
      return {value: value, criteria: iterator(value, index)};
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  },

  toArray: function() {
    return this.collect(Prototype.K);
  },

  zip: function() {
    var iterator = Prototype.K, args = $A(arguments);
    if (typeof args.last() == 'function')
      iterator = args.pop();

    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      iterator(value = collections.pluck(index));
      return value;
    });
  },

  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
}

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray
});
var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
}

Object.extend(Array.prototype, Enumerable);

Array.prototype._reverse = Array.prototype.reverse;

Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i = 0; i < this.length; i++)
      iterator(this[i]);
  },

  clear: function() {
    this.length = 0;
    return this;
  },

  first: function() {
    return this[0];
  },

  last: function() {
    return this[this.length - 1];
  },

  compact: function() {
    return this.select(function(value) {
      return value != undefined || value != null;
    });
  },

  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(value.constructor == Array ?
        value.flatten() : [value]);
    });
  },

  without: function() {
    var values = $A(arguments);
    return this.select(function(value) {
      return !values.include(value);
    });
  },

  indexOf: function(object) {
    for (var i = 0; i < this.length; i++)
      if (this[i] == object) return i;
    return -1;
  },

  reverse: function(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  },

  shift: function() {
    var result = this[0];
    for (var i = 0; i < this.length - 1; i++)
      this[i] = this[i + 1];
    this.length--;
    return result;
  },

  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  }
});
var Hash = {
  _each: function(iterator) {
    for (key in this) {
      var value = this[key];
      if (typeof value == 'function') continue;

      var pair = [key, value];
      pair.key = key;
      pair.value = value;
      iterator(pair);
    }
  },

  keys: function() {
    return this.pluck('key');
  },

  values: function() {
    return this.pluck('value');
  },

  merge: function(hash) {
    return $H(hash).inject($H(this), function(mergedHash, pair) {
      mergedHash[pair.key] = pair.value;
      return mergedHash;
    });
  },

  toQueryString: function() {
    return this.map(function(pair) {
      return pair.map(encodeURIComponent).join('=');
    }).join('&');
  },

  inspect: function() {
    return '#<Hash:{' + this.map(function(pair) {
      return pair.map(Object.inspect).join(': ');
    }).join(', ') + '}>';
  }
}

function $H(object) {
  var hash = Object.extend({}, object || {});
  Object.extend(hash, Enumerable);
  Object.extend(hash, Hash);
  return hash;
}
ObjectRange = Class.create();
Object.extend(ObjectRange.prototype, Enumerable);
Object.extend(ObjectRange.prototype, {
  initialize: function(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  },

  _each: function(iterator) {
    var value = this.start;
    do {
      iterator(value);
      value = value.succ();
    } while (this.include(value));
  },

  include: function(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }
});

var $R = function(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
}

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')},
      function() {return new XMLHttpRequest()}
    ) || false;
  },

  activeRequestCount: 0
}

Ajax.Responders = {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responderToAdd) {
    if (!this.include(responderToAdd))
      this.responders.push(responderToAdd);
  },

  unregister: function(responderToRemove) {
    this.responders = this.responders.without(responderToRemove);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (responder[callback] && typeof responder[callback] == 'function') {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) {}
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate: function() {
    Ajax.activeRequestCount++;
  },

  onComplete: function() {
    Ajax.activeRequestCount--;
  }
});

Ajax.Base = function() {};
Ajax.Base.prototype = {
  setOptions: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      parameters:   ''
    }
    Object.extend(this.options, options || {});
  },

  responseIsSuccess: function() {
    return this.transport.status == undefined
        || this.transport.status == 0
        || (this.transport.status >= 200 && this.transport.status < 300);
  },

  responseIsFailure: function() {
    return !this.responseIsSuccess();
  }
}

Ajax.Request = Class.create();
Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(url, options) {
    this.transport = Ajax.getTransport();
    this.setOptions(options);
    this.request(url);
  },

  request: function(url) {
    var parameters = this.options.parameters || '';
    if (parameters.length > 0) parameters += '&_=';

    try {
      this.url = url;
      if (this.options.method == 'get' && parameters.length > 0)
        this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;

      Ajax.Responders.dispatch('onCreate', this, this.transport);

      this.transport.open(this.options.method, this.url,
        this.options.asynchronous);

      if (this.options.asynchronous) {
        this.transport.onreadystatechange = this.onStateChange.bind(this);
        setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
      }

      this.setRequestHeaders();

      var body = this.options.postBody ? this.options.postBody : parameters;
      this.transport.send(this.options.method == 'post' ? body : null);

    } catch (e) {
      this.dispatchException(e);
    }
  },

  setRequestHeaders: function() {
    var requestHeaders =
      ['X-Requested-With', 'XMLHttpRequest',
       'X-Prototype-Version', Prototype.Version];

    if (this.options.method == 'post') {
      requestHeaders.push('Content-type',
        'application/x-www-form-urlencoded');

      /* Force "Connection: close" for Mozilla browsers to work around
       * a bug where XMLHttpReqeuest sends an incorrect Content-length
       * header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType)
        requestHeaders.push('Connection', 'close');
    }

    if (this.options.requestHeaders)
      requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);

    for (var i = 0; i < requestHeaders.length; i += 2)
      this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
  },

  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState != 1)
      this.respondToReadyState(this.transport.readyState);
  },

  header: function(name) {
    try {
      return this.transport.getResponseHeader(name);
    } catch (e) {}
  },

  evalJSON: function() {
    try {
      return eval(this.header('X-JSON'));
    } catch (e) {}
  },

  evalResponse: function() {
    try {
      return eval(this.transport.responseText);
    } catch (e) {
      this.dispatchException(e);
    }
  },

  respondToReadyState: function(readyState) {
    var event = Ajax.Request.Events[readyState];
    var transport = this.transport, json = this.evalJSON();

    if (event == 'Complete') {
      try {
        (this.options['on' + this.transport.status]
         || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(transport, json);
      } catch (e) {
        this.dispatchException(e);
      }

      if ((this.header('Content-type') || '').match(/^text\/javascript/i))
        this.evalResponse();
    }

    try {
      (this.options['on' + event] || Prototype.emptyFunction)(transport, json);
      Ajax.Responders.dispatch('on' + event, this, transport, json);
    } catch (e) {
      this.dispatchException(e);
    }

    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
    if (event == 'Complete')
      this.transport.onreadystatechange = Prototype.emptyFunction;
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Updater = Class.create();

Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
  initialize: function(container, url, options) {
    this.containers = {
      success: container.success ? $(container.success) : $(container),
      failure: container.failure ? $(container.failure) :
        (container.success ? null : $(container))
    }

    this.transport = Ajax.getTransport();
    this.setOptions(options);

    var onComplete = this.options.onComplete || Prototype.emptyFunction;
    this.options.onComplete = (function(transport, object) {
      this.updateContent();
      onComplete(transport, object);
    }).bind(this);

    this.request(url);
  },

  updateContent: function() {
    var receiver = this.responseIsSuccess() ?
      this.containers.success : this.containers.failure;
    var response = this.transport.responseText;

    if (!this.options.evalScripts)
      response = response.stripScripts();

    if (receiver) {
      if (this.options.insertion) {
        new this.options.insertion(receiver, response);
      } else {
        Element.update(receiver, response);
      }
    }

    if (this.responseIsSuccess()) {
      if (this.onComplete)
        setTimeout(this.onComplete.bind(this), 10);
    }
  }
});

Ajax.PeriodicalUpdater = Class.create();
Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(container, url, options) {
    this.setOptions(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);

    this.updater = {};
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(request) {
    if (this.options.decay) {
      this.decay = (request.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = request.responseText;
    }
    this.timer = setTimeout(this.onTimerEvent.bind(this),
      this.decay * this.frequency * 1000);
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});
document.getElementsByClassName = function(className, parentElement) {
  var children = ($(parentElement) || document.body).getElementsByTagName('*');
  return $A(children).inject([], function(elements, child) {
    if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      elements.push(child);
    return elements;
  });
}

/*--------------------------------------------------------------------------*/

if (!window.Element) {
  var Element = new Object();
}

Object.extend(Element, {
  visible: function(element) {
    return $(element).style.display != 'none';
  },

  toggle: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      Element[Element.visible(element) ? 'hide' : 'show'](element);
    }
  },

  hide: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = 'none';
    }
  },

  show: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = '';
    }
  },

  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
  },

  update: function(element, html) {
    $(element).innerHTML = html.stripScripts();
    setTimeout(function() {html.evalScripts()}, 10);
  },

  getHeight: function(element) {
    element = $(element);
    return element.offsetHeight;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).include(className);
  },

  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).add(className);
  },

  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).remove(className);
  },

  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element = $(element);
    for (var i = 0; i < element.childNodes.length; i++) {
      var node = element.childNodes[i];
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        Element.remove(node);
    }
  },

  empty: function(element) {
    return $(element).innerHTML.match(/^\s*$/);
  },

  scrollTo: function(element) {
    element = $(element);
    var x = element.x ? element.x : element.offsetLeft,
        y = element.y ? element.y : element.offsetTop;
    window.scrollTo(x, y);
  },

  getStyle: function(element, style) {
    element = $(element);
    var value = element.style[style.camelize()];
    if (!value) {
      if (document.defaultView && document.defaultView.getComputedStyle) {
        var css = document.defaultView.getComputedStyle(element, null);
        value = css ? css.getPropertyValue(style) : null;
      } else if (element.currentStyle) {
        value = element.currentStyle[style.camelize()];
      }
    }

    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
      if (Element.getStyle(element, 'position') == 'static') value = 'auto';

    return value == 'auto' ? null : value;
  },

  setStyle: function(element, style) {
    element = $(element);
    for (name in style)
      element.style[name.camelize()] = style[name];
  },

  getDimensions: function(element) {
    element = $(element);
    if (Element.getStyle(element, 'display') != 'none')
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = '';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = 'none';
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      // Opera returns the offset relative to the positioning context, when an
      // element is position relative but top and left have not been defined
      if (window.opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
  },

  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
  },

  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return;
    element._overflow = element.style.overflow;
    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
      element.style.overflow = 'hidden';
  },

  undoClipping: function(element) {
    element = $(element);
    if (element._overflow) return;
    element.style.overflow = element._overflow;
    element._overflow = undefined;
  }
});

var Toggle = new Object();
Toggle.display = Element.toggle;

/*--------------------------------------------------------------------------*/

Abstract.Insertion = function(adjacency) {
  this.adjacency = adjacency;
}

Abstract.Insertion.prototype = {
  initialize: function(element, content) {
    this.element = $(element);
    this.content = content.stripScripts();

    if (this.adjacency && this.element.insertAdjacentHTML) {
      try {
        this.element.insertAdjacentHTML(this.adjacency, this.content);
      } catch (e) {
        if (this.element.tagName.toLowerCase() == 'tbody') {
          this.insertContent(this.contentFromAnonymousTable());
        } else {
          throw e;
        }
      }
    } else {
      this.range = this.element.ownerDocument.createRange();
      if (this.initializeRange) this.initializeRange();
      this.insertContent([this.range.createContextualFragment(this.content)]);
    }

    setTimeout(function() {content.evalScripts()}, 10);
  },

  contentFromAnonymousTable: function() {
    var div = document.createElement('div');
    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
    return $A(div.childNodes[0].childNodes[0].childNodes);
  }
}

var Insertion = new Object();

Insertion.Before = Class.create();
Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
  initializeRange: function() {
    this.range.setStartBefore(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment, this.element);
    }).bind(this));
  }
});

Insertion.Top = Class.create();
Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(true);
  },

  insertContent: function(fragments) {
    fragments.reverse(false).each((function(fragment) {
      this.element.insertBefore(fragment, this.element.firstChild);
    }).bind(this));
  }
});

Insertion.Bottom = Class.create();
Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.appendChild(fragment);
    }).bind(this));
  }
});

Insertion.After = Class.create();
Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
  initializeRange: function() {
    this.range.setStartAfter(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment,
        this.element.nextSibling);
    }).bind(this));
  }
});

/*--------------------------------------------------------------------------*/

Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
  initialize: function(element) {
    this.element = $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className = className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set(this.toArray().concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set(this.select(function(className) {
      return className != classNameToRemove;
    }).join(' '));
  },

  toString: function() {
    return this.toArray().join(' ');
  }
}

Object.extend(Element.ClassNames.prototype, Enumerable);
var Field = {
  clear: function() {
    for (var i = 0; i < arguments.length; i++)
      $(arguments[i]).value = '';
  },

  focus: function(element) {
    $(element).focus();
  },

  present: function() {
    for (var i = 0; i < arguments.length; i++)
      if ($(arguments[i]).value == '') return false;
    return true;
  },

  select: function(element) {
    $(element).select();
  },

  activate: function(element) {
    element = $(element);
    element.focus();
    if (element.select)
      element.select();
  }
}

/*--------------------------------------------------------------------------*/

var Form = {
  serialize: function(form) {
    var elements = Form.getElements($(form));
    var queryComponents = new Array();

    for (var i = 0; i < elements.length; i++) {
      var queryComponent = Form.Element.serialize(elements[i]);
      if (queryComponent)
        queryComponents.push(queryComponent);
    }

    return queryComponents.join('&');
  },

  getElements: function(form) {
    form = $(form);
    var elements = new Array();

    for (tagName in Form.Element.Serializers) {
      var tagElements = form.getElementsByTagName(tagName);
      for (var j = 0; j < tagElements.length; j++)
        elements.push(tagElements[j]);
    }
    return elements;
  },

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name)
      return inputs;

    var matchingInputs = new Array();
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) ||
          (name && input.name != name))
        continue;
      matchingInputs.push(input);
    }

    return matchingInputs;
  },

  disable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.blur();
      element.disabled = 'true';
    }
  },

  enable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.disabled = '';
    }
  },

  findFirstElement: function(form) {
    return Form.getElements(form).find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    Field.activate(Form.findFirstElement(form));
  },

  reset: function(form) {
    $(form).reset();
  }
}

Form.Element = {
  serialize: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter) {
      var key = encodeURIComponent(parameter[0]);
      if (key.length == 0) return;

      if (parameter[1].constructor != Array)
        parameter[1] = [parameter[1]];

      return parameter[1].map(function(value) {
        return key + '=' + encodeURIComponent(value);
      }).join('&');
    }
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter)
      return parameter[1];
  }
}

Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Serializers.textarea(element);
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
    }
    return false;
  },

  inputSelector: function(element) {
    if (element.checked)
      return [element.name, element.value];
  },

  textarea: function(element) {
    return [element.name, element.value];
  },

  select: function(element) {
    return Form.Element.Serializers[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value;
      if (!value && !('value' in opt))
        value = opt.text;
    }
    return [element.name, value];
  },

  selectMany: function(element) {
    var value = new Array();
    for (var i = 0; i < element.length; i++) {
      var opt = element.options[i];
      if (opt.selected) {
        var optValue = opt.value;
        if (!optValue && !('value' in opt))
          optValue = opt.text;
        value.push(optValue);
      }
    }
    return [element.name, value];
  }
}

/*--------------------------------------------------------------------------*/

var $F = Form.Element.getValue;

/*--------------------------------------------------------------------------*/

Abstract.TimedObserver = function() {}
Abstract.TimedObserver.prototype = {
  initialize: function(element, frequency, callback) {
    this.frequency = frequency;
    this.element   = $(element);
    this.callback  = callback;

    this.lastValue = this.getValue();
    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  }
}

Form.Element.Observer = Class.create();
Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create();
Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*--------------------------------------------------------------------------*/

Abstract.EventObserver = function() {}
Abstract.EventObserver.prototype = {
  initialize: function(element, callback) {
    this.element  = $(element);
    this.callback = callback;

    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },

  registerFormCallbacks: function() {
    var elements = Form.getElements(this.element);
    for (var i = 0; i < elements.length; i++)
      this.registerCallback(elements[i]);
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        case 'password':
        case 'text':
        case 'textarea':
        case 'select-one':
        case 'select-multiple':
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
}

Form.Element.EventObserver = Class.create();
Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver = Class.create();
Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) {
  var Event = new Object();
}

Object.extend(Event, {
  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,

  element: function(event) {
    return event.target || event.srcElement;
  },

  isLeftClick: function(event) {
    return (((event.which) && (event.which == 1)) ||
            ((event.button) && (event.button == 1)));
  },

  pointerX: function(event) {
    return event.pageX || (event.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft));
  },

  pointerY: function(event) {
    return event.pageY || (event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop));
  },

  stop: function(event) {
    if (event.preventDefault) {
      event.preventDefault();
      event.stopPropagation();
    } else {
      event.returnValue = false;
      event.cancelBubble = true;
    }
  },

  // find the first node with the given tagName, starting from the
  // node the event was triggered on; traverses the DOM upwards
  findElement: function(event, tagName) {
    var element = Event.element(event);
    while (element.parentNode && (!element.tagName ||
        (element.tagName.toUpperCase() != tagName.toUpperCase())))
      element = element.parentNode;
    return element;
  },

  observers: false,

  _observeAndCache: function(element, name, observer, useCapture) {
    if (!this.observers) this.observers = [];
    if (element.addEventListener) {
      this.observers.push([element, name, observer, useCapture]);
      element.addEventListener(name, observer, useCapture);
    } else if (element.attachEvent) {
      this.observers.push([element, name, observer, useCapture]);
      element.attachEvent('on' + name, observer);
    }
  },

  unloadCache: function() {
    if (!Event.observers) return;
    for (var i = 0; i < Event.observers.length; i++) {
      Event.stopObserving.apply(this, Event.observers[i]);
      Event.observers[i][0] = null;
    }
    Event.observers = false;
  },

  observe: function(element, name, observer, useCapture) {
    var element = $(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.attachEvent))
      name = 'keydown';

    this._observeAndCache(element, name, observer, useCapture);
  },

  stopObserving: function(element, name, observer, useCapture) {
    var element = $(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.detachEvent))
      name = 'keydown';

    if (element.removeEventListener) {
      element.removeEventListener(name, observer, useCapture);
    } else if (element.detachEvent) {
      element.detachEvent('on' + name, observer);
    }
  }
});

/* prevent memory leaks in IE */
Event.observe(window, 'unload', Event.unloadCache, false);
var Position = {
  // set to true if needed, warning: firefox performance problems
  // NOT neeeded for page scrolling, only if draggable contained in
  // scrollable elements
  includeScrollOffsets: false,

  // must be called before calling withinIncludingScrolloffset, every time the
  // page is scrolled
  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  realOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return [valueL, valueT];
  },

  cumulativeOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return [valueL, valueT];
  },

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        p = Element.getStyle(element, 'position');
        if (p == 'relative' || p == 'absolute') break;
      }
    } while (element);
    return [valueL, valueT];
  },

  offsetParent: function(element) {
    if (element.offsetParent) return element.offsetParent;
    if (element == document.body) return element;

    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return element;

    return document.body;
  },

  // caches x/y coordinate pair to use with overlap
  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = this.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = this.realOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = this.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  // within must be called directly before
  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },

  clone: function(source, target) {
    source = $(source);
    target = $(target);
    target.style.position = 'absolute';
    var offsets = this.cumulativeOffset(source);
    target.style.top    = offsets[1] + 'px';
    target.style.left   = offsets[0] + 'px';
    target.style.width  = source.offsetWidth + 'px';
    target.style.height = source.offsetHeight + 'px';
  },

  page: function(forElement) {
    var valueT = 0, valueL = 0;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;

      // Safari fix
      if (element.offsetParent==document.body)
        if (Element.getStyle(element,'position')=='absolute') break;

    } while (element = element.offsetParent);

    element = forElement;
    do {
      valueT -= element.scrollTop  || 0;
      valueL -= element.scrollLeft || 0;
    } while (element = element.parentNode);

    return [valueL, valueT];
  },

  clone: function(source, target) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || {})

    // find page position of source
    source = $(source);
    var p = Position.page(source);

    // find coordinate system to use
    target = $(target);
    var delta = [0, 0];
    var parent = null;
    // delta [0,0] will do fine with position: fixed elements,
    // position:absolute needs offsetParent deltas
    if (Element.getStyle(target,'position') == 'absolute') {
      parent = Position.offsetParent(target);
      delta = Position.page(parent);
    }

    // correct by body offsets (fixes Safari)
    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    }

    // set position
    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
  },

  absolutize: function(element) {
    element = $(element);
    if (element.style.position == 'absolute') return;
    Position.prepare();

    var offsets = Position.positionedOffset(element);
    var top     = offsets[1];
    var left    = offsets[0];
    var width   = element.clientWidth;
    var height  = element.clientHeight;

    element._originalLeft   = left - parseFloat(element.style.left  || 0);
    element._originalTop    = top  - parseFloat(element.style.top || 0);
    element._originalWidth  = element.style.width;
    element._originalHeight = element.style.height;

    element.style.position = 'absolute';
    element.style.top    = top + 'px';;
    element.style.left   = left + 'px';;
    element.style.width  = width + 'px';;
    element.style.height = height + 'px';;
  },

  relativize: function(element) {
    element = $(element);
    if (element.style.position == 'relative') return;
    Position.prepare();

    element.style.position = 'relative';
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.height = element._originalHeight;
    element.style.width  = element._originalWidth;
  }
}

// Safari returns margins on body which is incorrect if the child is absolutely
// positioned.  For performance reasons, redefine Position.cumulativeOffset for
// KHTML/WebKit only.
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
  Position.cumulativeOffset = function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == document.body)
        if (Element.getStyle(element, 'position') == 'absolute') break;

      element = element.offsetParent;
    } while (element);

    return [valueL, valueT];
  }
}

//FILE JS/LIGHTBOX.JS

//-----------------------------------------------------------------------------------
//
//	Lightbox v2.03.3
//	by Lokesh Dhakar - http://www.huddletogether.com
//	5/21/06
//
//	For more information on this script, visit:
//	http://huddletogether.com/projects/lightbox2/
//
//	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
//	
//	Credit also due to those who have helped, inspired, and made their code available to the public.
//	Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.com), Thomas Fuchs(mir.aculo.us), and others.
//
//
// -----------------------------------------------------------------------------------
/*

	Table of Contents
	-----------------
	Configuration
	Global Variables

	Extending Built-in Objects	
	- Object.extend(Element)
	- Array.prototype.removeDuplicates()
	- Array.prototype.empty()

	Lightbox Class Declaration
	- initialize()
	- updateImageList()
	- start()
	- changeImage()
	- resizeImageContainer()
	- showImage()
	- updateDetails()
	- updateNav()
	- enableKeyboardNav()
	- disableKeyboardNav()
	- keyboardAction()
	- preloadNeighborImages()
	- end()
	
	Miscellaneous Functions
	- getPageScroll()
	- getPageSize()
	- getKey()
	- listenKey()
	- showSelectBoxes()
	- hideSelectBoxes()
	- showFlash()
	- hideFlash()
	- pause()
	- initLightbox()
	
	Function Calls
	- addLoadEvent(initLightbox)
	
*/
// -----------------------------------------------------------------------------------

//
//	Configuration
//
var fileLoadingImage = "images/loading.gif";		
var fileBottomNavCloseImage = "images/closelabel.gif";
var fileBackImage = "images/backlabel.gif";
var fileNextImage = "images/nextlabel.gif";

var overlayOpacity = 0.8;	// controls transparency of shadow overlay

var animate = true;			// toggles resizing animations
var resizeSpeed = 7;		// controls the speed of the image resizing animations (1=slowest and 10=fastest)

var borderSize = 10;		//if you adjust the padding in the CSS, you will need to update this variable

// -----------------------------------------------------------------------------------

//
//	Global Variables
//
var imageArray = new Array;
var activeImage;

if(animate == true){
	overlayDuration = 0.2;	// shadow fade in/out duration
	if(resizeSpeed > 10){ resizeSpeed = 10;}
	if(resizeSpeed < 1){ resizeSpeed = 1;}
	resizeDuration = (11 - resizeSpeed) * 0.15;
} else { 
	overlayDuration = 0;
	resizeDuration = 0;
}

// -----------------------------------------------------------------------------------

//
//	Additional methods for Element added by SU, Couloir
//	- further additions by Lokesh Dhakar (huddletogether.com)
//
Object.extend(Element, {
	getWidth: function(element) {
	   	element = $(element);
	   	return element.offsetWidth; 
	},
	setWidth: function(element,w) {
	   	element = $(element);
    	element.style.width = w +"px";
	},
	setHeight: function(element,h) {
   		element = $(element);
    	element.style.height = h +"px";
	},
	setTop: function(element,t) {
	   	element = $(element);
    	element.style.top = t +"px";
	},
	setLeft: function(element,l) {
	   	element = $(element);
    	element.style.left = l +"px";
	},
	setSrc: function(element,src) {
    	element = $(element);
    	element.src = src; 
	},
	setHref: function(element,href) {
    	element = $(element);
    	element.href = href; 
	},
	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	}
});

// -----------------------------------------------------------------------------------

//
//	Extending built-in Array object
//	- array.removeDuplicates()
//	- array.empty()
//
Array.prototype.removeDuplicates = function () {
    for(i = 0; i < this.length; i++){
        for(j = this.length-1; j>i; j--){        
            if(this[i][0] == this[j][0]){
                this.splice(j,1);
            }
        }
    }
}

// -----------------------------------------------------------------------------------

Array.prototype.empty = function () {
	for(i = 0; i <= this.length; i++){
		this.shift();
	}
}

// -----------------------------------------------------------------------------------

//
//	Lightbox Class Declaration
//	- initialize()
//	- start()
//	- changeImage()
//	- resizeImageContainer()
//	- showImage()
//	- updateDetails()
//	- updateNav()
//	- enableKeyboardNav()
//	- disableKeyboardNav()
//	- keyboardNavAction()
//	- preloadNeighborImages()
//	- end()
//
//	Structuring of code inspired by Scott Upton (http://www.uptonic.com/)
//
var Lightbox = Class.create();

Lightbox.prototype = {
	
	// initialize()
	// Constructor runs on completion of the DOM loading. Calls updateImageList and then
	// the function inserts html at the bottom of the page which is used to display the shadow 
	// overlay and the image container.
	//
	initialize: function() {	
		
		this.updateImageList();

		// Code inserts html at the bottom of the page that looks similar to this:
		//
		//	<div id="overlay"></div>
		//	<div id="lightbox">
		//		<div id="outerImageContainer">
		//			<div id="imageContainer">
		//				<img id="lightboxImage">
		//				<div style="" id="hoverNav">
		//					<a href="#" id="prevLink"></a>
		//					<a href="#" id="nextLink"></a>
		//				</div>
		//				<div id="loading">
		//					<a href="#" id="loadingLink">
		//						<img src="images/loading.gif">
		//					</a>
		//				</div>
		//			</div>
		//		</div>
		//		<div id="imageDataContainer">
		//			<div id="imageData">
		//				<div id="imageDetails">
		//					<span id="caption"></span>
		//					<span id="numberDisplay"></span>
		//				</div>
		//				<div id="bottomNav">
		//				POPRZEDNIE / NASTEPNE
		//					<a href="#" id="bottomNavClose">
		//						<img src="images/close.gif">
		//					</a>
		//				</div>
		//			</div>
		//		</div>
		//	</div>


		var objBody = document.getElementsByTagName("body").item(0);
		
		var objOverlay = document.createElement("div");
		objOverlay.setAttribute('id','overlay');
		objOverlay.style.display = 'none';
		objOverlay.onclick = function() { myLightbox.end(); }
		objBody.appendChild(objOverlay);
		
		var objLightbox = document.createElement("div");
		objLightbox.setAttribute('id','lightbox');
		objLightbox.style.display = 'none';
		objLightbox.onclick = function(e) {	// close Lightbox is user clicks shadow overlay
			if (!e) var e = window.event;
			var clickObj = Event.element(e).id;
			if ( clickObj == 'lightbox') {
				myLightbox.end();
			}
		};
		objBody.appendChild(objLightbox);
			
		var objOuterImageContainer = document.createElement("div");
		objOuterImageContainer.setAttribute('id','outerImageContainer');
		objLightbox.appendChild(objOuterImageContainer);

		// When Lightbox starts it will resize itself from 250 by 250 to the current image dimension.
		// If animations are turned off, it will be hidden as to prevent a flicker of a
		// white 250 by 250 box.
		if(animate){
			Element.setWidth('outerImageContainer', 250);
			Element.setHeight('outerImageContainer', 250);			
		} else {
			Element.setWidth('outerImageContainer', 1);
			Element.setHeight('outerImageContainer', 1);			
		}

		var objImageContainer = document.createElement("div");
		objImageContainer.setAttribute('id','imageContainer');
		objOuterImageContainer.appendChild(objImageContainer);
	
		var objLightboxImage = document.createElement("img");
		objLightboxImage.setAttribute('id','lightboxImage');
		objImageContainer.appendChild(objLightboxImage);
	
		var objHoverNav = document.createElement("div");
		objHoverNav.setAttribute('id','hoverNav');
		objImageContainer.appendChild(objHoverNav);
	
		var objPrevLink = document.createElement("a");
		objPrevLink.setAttribute('id','prevLink');
		objPrevLink.setAttribute('href','#');
		objPrevLink.setAttribute('title','Back');
		objHoverNav.appendChild(objPrevLink);
		
		var objNextLink = document.createElement("a");
		objNextLink.setAttribute('id','nextLink');
		objNextLink.setAttribute('href','#');
		objNextLink.setAttribute('title','Next');
		objHoverNav.appendChild(objNextLink);
	
		var objLoading = document.createElement("div");
		objLoading.setAttribute('id','loading');
		objImageContainer.appendChild(objLoading);
	
		var objLoadingLink = document.createElement("a");
		objLoadingLink.setAttribute('id','loadingLink');
		objLoadingLink.setAttribute('href','#');
		objLoadingLink.onclick = function() { myLightbox.end(); return false; }
		objLoading.appendChild(objLoadingLink);
	
		var objLoadingImage = document.createElement("img");
		objLoadingImage.setAttribute('src', fileLoadingImage);
		objLoadingLink.appendChild(objLoadingImage);

		var objImageDataContainer = document.createElement("div");
		objImageDataContainer.setAttribute('id','imageDataContainer');
		objLightbox.appendChild(objImageDataContainer);

		var objImageData = document.createElement("div");
		objImageData.setAttribute('id','imageData');
		objImageDataContainer.appendChild(objImageData);
	
		var objImageDetails = document.createElement("div");
		objImageDetails.setAttribute('id','imageDetails');
		objImageData.appendChild(objImageDetails);
	
		var objCaption = document.createElement("span");
		objCaption.setAttribute('id','caption');
		objImageDetails.appendChild(objCaption);
	
		var objNumberDisplay = document.createElement("span");
		objNumberDisplay.setAttribute('id','numberDisplay');
		objImageDetails.appendChild(objNumberDisplay);
		
		var objBottomNav = document.createElement("div");
		objBottomNav.setAttribute('id','bottomNav');
		objImageData.appendChild(objBottomNav);
	
		var objBottomNavCloseLink = document.createElement("a");
		objBottomNavCloseLink.setAttribute('id','bottomNavClose');
		objBottomNavCloseLink.setAttribute('href','#');
		objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }
		objBottomNav.appendChild(objBottomNavCloseLink);
	
		var objBottomNavCloseImage = document.createElement("img");
		objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
		objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
	},


	//
	// updateImageList()
	// Loops through anchor tags looking for 'lightbox' references and applies onclick
	// events to appropriate links. You can rerun after dynamically adding images w/ajax.
	//
	updateImageList: function() {	
		if (!document.getElementsByTagName){ return; }
		var anchors = document.getElementsByTagName('a');
		var areas = document.getElementsByTagName('area');

		// loop through all anchor tags
		for (var i=0; i<anchors.length; i++){
			var anchor = anchors[i];
			
			var relAttribute = String(anchor.getAttribute('rel'));
			
			// use the string.match() method to catch 'lightbox' references in the rel attribute
			if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
				anchor.onclick = function () {myLightbox.start(this); return false;}
			}
		}

		// loop through all area tags
		// todo: combine anchor & area tag loops
		for (var i=0; i< areas.length; i++){
			var area = areas[i];
			
			var relAttribute = String(area.getAttribute('rel'));
			
			// use the string.match() method to catch 'lightbox' references in the rel attribute
			if (area.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
				area.onclick = function () {myLightbox.start(this); return false;}
			}
		}
	},
	
	
	//
	//	start()
	//	Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
	//
	start: function(imageLink) {	

		hideSelectBoxes();
		hideFlash();

		// stretch overlay to fill page and fade in
		var arrayPageSize = getPageSize();
		Element.setWidth('overlay', arrayPageSize[0]);
		Element.setHeight('overlay', arrayPageSize[1]);

		new Effect.Appear('overlay', { duration: overlayDuration, from: 0.0, to: overlayOpacity });

		imageArray = [];
		imageNum = 0;		

		if (!document.getElementsByTagName){ return; }
		var anchors = document.getElementsByTagName( imageLink.tagName);

		// if image is NOT part of a set..
		if((imageLink.getAttribute('rel') == 'lightbox')){
			// add single image to imageArray
			imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));			
		} else {
		// if image is part of a set..

			// loop through anchors, find other images in set, and add them to imageArray
			for (var i=0; i<anchors.length; i++){
				var anchor = anchors[i];
				if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){
					imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
				}
			}
			imageArray.removeDuplicates();
			while(imageArray[imageNum][0] != imageLink.getAttribute('href')) { imageNum++;}
		}

		// calculate top and left offset for the lightbox 
		var arrayPageScroll = getPageScroll();
		var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 10);
		var lightboxLeft = arrayPageScroll[0];
		Element.setTop('lightbox', lightboxTop);
		Element.setLeft('lightbox', lightboxLeft);
		
		Element.show('lightbox');
		
		this.changeImage(imageNum);
	},

	//
	//	changeImage()
	//	Hide most elements and preload image in preparation for resizing image container.
	//
	changeImage: function(imageNum) {	
		
		activeImage = imageNum;	// update global var

		// hide elements during transition
		if(animate){ Element.show('loading');}
		Element.hide('lightboxImage');
		Element.hide('hoverNav');
		Element.hide('prevLink');
		Element.hide('nextLink');
		Element.hide('imageDataContainer');
		Element.hide('numberDisplay');		
		
		imgPreloader = new Image();
		
		// once image is preloaded, resize image container
		imgPreloader.onload=function(){
			Element.setSrc('lightboxImage', imageArray[activeImage][0]);
			myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height);
			
			imgPreloader.onload=function(){};	//	clear onLoad, IE behaves irratically with animated gifs otherwise 
		}
		imgPreloader.src = imageArray[activeImage][0];
	},

	//
	//	resizeImageContainer()
	//
	resizeImageContainer: function( imgWidth, imgHeight) {

		// get curren width and height
		this.widthCurrent = Element.getWidth('outerImageContainer');
		this.heightCurrent = Element.getHeight('outerImageContainer');

		// get new width and height
		var widthNew = (imgWidth  + (borderSize * 2));
		var heightNew = (imgHeight  + (borderSize * 2));

		// scalars based on change from old to new
		this.xScale = ( widthNew / this.widthCurrent) * 100;
		this.yScale = ( heightNew / this.heightCurrent) * 100;

		// calculate size difference between new and old image, and resize if necessary
		wDiff = this.widthCurrent - widthNew;
		hDiff = this.heightCurrent - heightNew;

		if(!( hDiff == 0)){ new Effect.Scale('outerImageContainer', this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); }
		if(!( wDiff == 0)){ new Effect.Scale('outerImageContainer', this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration}); }

		// if new and old image are same size and no scaling transition is necessary, 
		// do a quick pause to prevent image flicker.
		if((hDiff == 0) && (wDiff == 0)){
			if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);} 
		}

		Element.setHeight('prevLink', imgHeight);
		Element.setHeight('nextLink', imgHeight);
		Element.setWidth( 'imageDataContainer', widthNew);

		this.showImage();
	},
	
	//
	//	showImage()
	//	Display image and begin preloading neighbors.
	//
	showImage: function(){
		Element.hide('loading');
		new Effect.Appear('lightboxImage', { duration: resizeDuration, queue: 'end', afterFinish: function(){	myLightbox.updateDetails(); } });
		this.preloadNeighborImages();
	},

	//
	//	updateDetails()
	//	Display caption, image number, and bottom nav.
	//
	updateDetails: function() {
	
		// if caption is not null
		if(imageArray[activeImage][1]){
			Element.show('caption');
			Element.setInnerHTML( 'caption', imageArray[activeImage][1]);
		}
		
		// if image is part of set display 'Image x of x' 
		if(imageArray.length > 1){
			Element.show('numberDisplay');
			Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + 1) + " of " + imageArray.length);
		}

		new Effect.Parallel(
			[ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: resizeDuration, from: 0.0, to: 1.0 }), 
			  new Effect.Appear('imageDataContainer', { sync: true, duration: resizeDuration }) ], 
			{ duration: resizeDuration, afterFinish: function() {
				// update overlay size and update nav
				var arrayPageSize = getPageSize();
				Element.setHeight('overlay', arrayPageSize[1]);
				myLightbox.updateNav();
				}
			} 
		);
	},

	//
	//	updateNav()
	//	Display appropriate previous and next hover navigation.
	//
	updateNav: function() {

		Element.show('hoverNav');				

		// if not first image in set, display prev image button
		if(activeImage != 0){
			Element.show('prevLink');
			document.getElementById('prevLink').onclick = function() {
				myLightbox.changeImage(activeImage - 1); return false;
			}
		}

		// if not last image in set, display next image button
		if(activeImage != (imageArray.length - 1)){
			Element.show('nextLink');
			document.getElementById('nextLink').onclick = function() {
				myLightbox.changeImage(activeImage + 1); return false;
			}
		}
		
		this.enableKeyboardNav();
	},

	//
	//	enableKeyboardNav()
	//
	enableKeyboardNav: function() {
		document.onkeydown = this.keyboardAction; 
	},

	//
	//	disableKeyboardNav()
	//
	disableKeyboardNav: function() {
		document.onkeydown = '';
	},

	//
	//	keyboardAction()
	//
	keyboardAction: function(e) {
		if (e == null) { // ie
			keycode = event.keyCode;
			escapeKey = 27;
		} else { // mozilla
			keycode = e.keyCode;
			escapeKey = e.DOM_VK_ESCAPE;
		}

		key = String.fromCharCode(keycode).toLowerCase();
		
		if((key == 'x') || (key == 'o') || (key == 'c') || (keycode == escapeKey)){	// close lightbox
			myLightbox.end();
		} else if((key == 'p') || (keycode == 37)){	// display previous image
			if(activeImage != 0){
				myLightbox.disableKeyboardNav();
				myLightbox.changeImage(activeImage - 1);
			}
		} else if((key == 'n') || (keycode == 39)){	// display next image
			if(activeImage != (imageArray.length - 1)){
				myLightbox.disableKeyboardNav();
				myLightbox.changeImage(activeImage + 1);
			}
		}

	},

	//
	//	preloadNeighborImages()
	//	Preload previous and next images.
	//
	preloadNeighborImages: function(){

		if((imageArray.length - 1) > activeImage){
			preloadNextImage = new Image();
			preloadNextImage.src = imageArray[activeImage + 1][0];
		}
		if(activeImage > 0){
			preloadPrevImage = new Image();
			preloadPrevImage.src = imageArray[activeImage - 1][0];
		}
	
	},

	//
	//	end()
	//
	end: function() {
		this.disableKeyboardNav();
		Element.hide('lightbox');
		new Effect.Fade('overlay', { duration: overlayDuration});
		showSelectBoxes();
		showFlash();
	}
}

// -----------------------------------------------------------------------------------

//
// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.com
//
function getPageScroll(){

	var xScroll, yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;	
	}

	arrayPageScroll = new Array(xScroll,yScroll) 
	return arrayPageScroll;
}

// -----------------------------------------------------------------------------------

//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.com
// Edit for Firefox by pHaez
//
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	
//	console.log(self.innerWidth);
//	console.log(document.documentElement.clientWidth);

	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

//	console.log("xScroll " + xScroll)
//	console.log("windowWidth " + windowWidth)

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}
//	console.log("pageWidth " + pageWidth)

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

// -----------------------------------------------------------------------------------

//
// getKey(key)
// Gets keycode. If 'x' is pressed then it hides the lightbox.
//
function getKey(e){
	if (e == null) { // ie
		keycode = event.keyCode;
	} else { // mozilla
		keycode = e.which;
	}
	key = String.fromCharCode(keycode).toLowerCase();
	
	if(key == 'x'){
	}
}

// -----------------------------------------------------------------------------------

//
// listenKey()
//
function listenKey () {	document.onkeypress = getKey; }
	
// ---------------------------------------------------

function showSelectBoxes(){
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}
}

// ---------------------------------------------------

function hideSelectBoxes(){
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "hidden";
	}
}

// ---------------------------------------------------

function showFlash(){
	var flashObjects = document.getElementsByTagName("object");
	for (i = 0; i < flashObjects.length; i++) {
		flashObjects[i].style.visibility = "visible";
	}

	var flashEmbeds = document.getElementsByTagName("embed");
	for (i = 0; i < flashEmbeds.length; i++) {
		flashEmbeds[i].style.visibility = "visible";
	}
}

// ---------------------------------------------------

function hideFlash(){
	var flashObjects = document.getElementsByTagName("object");
	for (i = 0; i < flashObjects.length; i++) {
		flashObjects[i].style.visibility = "hidden";
	}

	var flashEmbeds = document.getElementsByTagName("embed");
	for (i = 0; i < flashEmbeds.length; i++) {
		flashEmbeds[i].style.visibility = "hidden";
	}

}


// ---------------------------------------------------

//
// pause(numberMillis)
// Pauses code execution for specified time. Uses busy code, not good.
// Help from Ran Bar-On [ran2103@gmail.com]
//

function pause(ms){
	var date = new Date();
	curDate = null;
	do{var curDate = new Date();}
	while( curDate - date < ms);
}
/*
function pause(numberMillis) {
	var curently = new Date().getTime() + sender;
	while (new Date().getTime();	
}
*/
// ---------------------------------------------------



function initLightbox() { myLightbox = new Lightbox(); }
Event.observe(window, 'load', initLightbox, false);

//FILE JS/GENERAL.JS

Event.observe(window, 'load', toptextchange());


function displayWindow(url, width, height)
{
    noweOkno = window.open(url,"displayWindow",'width=' + width + ',height=' + height + ',resizable=0,scrollbars=yes,menubar=no');
	noweOkno.focus();
}

function check_del(link)
{
	if(confirm("Do you want to remove this product from the shopping cart?"))
	{
		document.location=link;
	}
	
	
}

function openCalendar(params, form, field, type) 
{
    window.open("admin/popups/calendar/calendar.php?" + params,
"calendar", "width=200,height=150,status=yes");
    dateField = eval("document." + form + "." + field);
    dateType = type;
}

function toptextchange()
{
	var x=document.getElementById("toptexth1");
	var y=document.getElementById("httext");
	if(y)
		x.textContent = y.value;
}