var SAFARI_STYLESHEET_REFERENCE = "../../style/screen/styles-safari.css";
var MACOS_STYLESHEET_REFERENCE  = "../../style/screen/styles-macos.css";

/********************************************************************/
/* START: browser detection                                         */

var Info = new function() {
	var userAgent = navigator.userAgent.toLowerCase();
	var b = {};
	b.isIE      = userAgent.indexOf("msie") != -1;
	b.isIE7     = b.isIE && (typeof window.XMLHttpRequest != "undefined");
	b.isIEpre7  = b.isIE && !b.isIE7;
	b.isSafari  = userAgent.indexOf("safari") != - 1;
	b.isMozilla = userAgent.indexOf("gecko") != -1 && b.isSafari == false;
	b.isFirefox = b.isMozilla == true && userAgent.indexOf("firefox") != -1;
	b.isOpera   = userAgent.indexOf("opera") != -1 || typeof window.opera != "undefined";
	this.browser = b;
	this.os = {
		isLinux: (navigator.platform.indexOf("Linux") == 0),
		isMac:   (navigator.platform.indexOf("Mac") == 0),
		isWin:   (navigator.platform.indexOf("Win") == 0)
	}
}

/* END: browser detection                                           */
/********************************************************************/
/* START: serve special styles                                      */

if (Info.browser.isSafari) document.write ("<link rel=\"stylesheet\" type=\"text/css\" href=\"" + SAFARI_STYLESHEET_REFERENCE + "\" />");
if (Info.os.isMac)         document.write ("<link rel=\"stylesheet\" type=\"text/css\" href=\"" + MACOS_STYLESHEET_REFERENCE + "\" />");

/* END: serve special styles                                        */
/********************************************************************/
/* START: Fix Flickering Background Images                          */

if (window.createPopup && document.compatMode && document.compatMode=="CSS1Compat" && !window.XMLHttpRequest) {
	try{
		document.execCommand("BackgroundImageCache", false, true);
	} catch(e) {}
}
// @@ os: removed fix for text selection bug due to problems with footer (or performance problems)

/* END: Fix Flickering Background Images                            */
/********************************************************************/
/* START: Prototype extensions                                      */

Object.extend(Event, {
  _domReady : function() {
    if (arguments.callee.done) return;
    arguments.callee.done = true;

    if (this._timer)  clearInterval(this._timer);

    this._readyCallbacks.each(function(f) { f() });
    this._readyCallbacks = null;
},
  onDOMReady : function(f) {
    if (!this._readyCallbacks) {
      var domReady = this._domReady.bind(this);

      if (document.addEventListener)
        document.addEventListener("DOMContentLoaded", domReady, false);

		/*@cc_on @*/
        /*@if (@_win32)
            document.write("<script id=__ie_onload defer src=//:><\/script>");
            document.getElementById("__ie_onload").onreadystatechange = function() {
                if (this.readyState == "complete") domReady();
            };
        /*@end @*/

        if (/WebKit/i.test(navigator.userAgent)) {
          this._timer = setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) domReady();
          }, 10);
        }

//		Event.observe(window, "load", domReady);
        Event._readyCallbacks =  [];
    }
    Event._readyCallbacks.push(f);
  }
});

Position.getWindowSize = function(w)
{
	var width, height;
	w = w ? w : window;
	width = w.innerWidth || (w.document.documentElement.clientWidth || w.document.body.clientWidth);
	height = w.innerHeight || (w.document.documentElement.clientHeight || w.document.body.clientHeight);
	return { width: width, height: height };
}

/* END: Prototype extensions                                        */
/********************************************************************/
/* START: SWFObject v1.5.1 (http://blog.deconcept.com/swfobject/)   */

if(typeof deconcept=="undefined"){var deconcept={};}if(typeof deconcept.util=="undefined"){deconcept.util={};}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil={};}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params={};this.variables={};this.attributes=[];if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10]||"";},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15]||"";},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=[];var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+(this.getAttribute("style")||"")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+(this.getAttribute("style")||"")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;

/*"*/
/* END: SWFObject v1.5.1                                            */
/********************************************************************/



/* > > >> >>> INDIVIDUAL FUNCTIONS >>>>> >>>>>>>> */



var CHECK_HASH_REGEX = /^.*#jump-to-([^#]+).*$/;
var LINK_REL_REGEX   = /^jump-to-(.+)$/;

/********************************************************************/
/* START: layout initalisation                                      */

// provides min-width/max-width for IE < 7

function initLayout_IEPre7() {

	var innerWidth = Position.getWindowSize().width;

	var contentZone = $("content-zone");

	if (innerWidth < 990) {
		$("toolbar-zone").setStyle({"width": "916px"});
	} else {
		$("toolbar-zone").setStyle({"width": (innerWidth - 66) + "px"});
	}
	if (contentZone) {
		if (innerWidth < 960) {
			$("content-zone").setStyle({"width": "960px"});
		} else {
			$("content-zone").setStyle({"width": "auto"});
		}
	}

	if ($("headervisual-zone") && $("fluid-zone") && !$("header-zone").hasClassName("w362")) {
		var realHeaderWidth = $("headervisual-zone").getWidth() + $("fluid-zone").getWidth();
		if (innerWidth <= realHeaderWidth) {
			var fluidWidth = $("fluid-zone").getWidth();
			var newWidth = innerWidth;
			newWidth = (newWidth - fluidWidth < 364) ? fluidWidth + 364 : newWidth;
			$("header-zone").setStyle({"width": newWidth + "px"});
		} else {
			$("header-zone").setStyle({"width": realHeaderWidth + "px"});
		}
	}
}

/* END: layout initalisation                                        */
/********************************************************************/
/* START: layer controller                                          */

// layer class: Opens and closes layers, augents and diminishs the header

var LayerController = Class.create();

LayerController.prototype = {
	initialize: function() {

		var initialLayerId = document.location.href.replace(CHECK_HASH_REGEX, "$1");

		this.layers        = $A([]);
		this.currentLayer  = null;
		this.slide         = {}; // misc. values for sliding animations

		this.toolbarNode   = $("toolbar-nav");
		this.toolbarHeight = this.toolbarNode.up().getHeight();

		this.diminishable = $(document.body).hasClassName("h393");
		this.diminished   = false; // not in use yet

		this.diminish = (this.diminishable) ? this.diminish_h393 : function() {};
		this.augment  = (this.diminishable) ? this.augment_h393 : function() {};

		$A(this.toolbarNode.getElementsByTagName("a")).each(
			function(elt) {
				elt = $(elt);
				if (LINK_REL_REGEX.test(elt.rel)) { // layer link
					var id = elt.rel.replace(LINK_REL_REGEX, "$1");
					var layer = new ContentLayer(this, id, elt);
					if (id == initialLayerId) {
						this.animate = false;
						this.openLayer(layer);
					}
					this.layers.push(layer);
					elt.observe("click", function(e) {this.onClick(layer); Event.stop(e); }.bindAsEventListener(this));
				} else { // standard link, probably external
					elt.observe("click", function() {this.closeLayer(this.currentLayer)}.bindAsEventListener(this));
				}
			}.bind(this)
		);

		this.animate = true;
	},

	closeLayer: function(layer) {
		if (layer) {
			if (Info.browser.isIEpre7) {
				// comment fixes ie 6 toolbar layer error
				//IntersectElements.showElements();				
			}

			layer.close();
			this.augment();
			this.currentLayer = null;
			Location.clearMarker();
		}
	},

	openLayer: function(layer) {
		if (layer) {
			if (Info.browser.isIEpre7) {
				// comment fixes ie 6 toolbar layer error
				//IntersectElements.hideElements(layer);			
			}

			layer.open();
			this.currentLayer = layer;
			this.diminish();
			Location.setMarker(layer.id);
			initToolbar_sifr(layer.id);
		}
	},

	toggleLayer: function(oldLayer, newLayer) {
		if (oldLayer && newLayer) {
			if (Info.browser.isIEpre7) {
				IntersectElements.hideElements(newLayer);
			}
			newLayer.open();
			oldLayer.close();
			this.currentLayer = newLayer;
			Location.setMarker(newLayer.id);
			initToolbar_sifr(newLayer.id);
		}
	},

	onClick: function(layer) {
		if (this.currentLayer == layer) {
			this.closeLayer(layer);
		} else if (this.currentLayer) {
			this.toggleLayer(this.currentLayer, layer);
		} else {
			this.openLayer(layer);
		}
	},

	diminish_h393: function() {
		if (this.animate) {
			this._toggleAnimated([363, 313, 263, 213, 183, 163, 152, 144]);
		} else {
			this._toggle(144);
		}
	},

	augment_h393: function() {
		if (this.animate) {
			// old: this._toggleAnimated([174, 224, 274, 324, 354, 374, 385, 393]);
			this._toggleAnimated([154, 174, 204, 244, 284, 324, 354, 385, 393]);
		} else {
			this._toggle(393);
		}
	},

	_toggle: function(offset) {
		this.diminished = !this.diminished;
		this._setOffsets(offset);
	},

	_toggleAnimated: function(offsets) {
		this.slide.offsets = offsets;
		this.slide.length = offsets.length;
		this.slide.index = 1;

		this._toggle(this.slide.offsets[0]);

		new PeriodicalExecuter(function(pe) {
			if (this.slide.index >= this.slide.length) {
				this.diminished = !this.diminished;
				pe.stop();
			} else {
				this._setOffsets(this.slide.offsets[this.slide.index]);
				this.slide.index++;
			}
		}.bind(this), .06);
	},

	_setOffsets: function(offset) {
		$(document.body).style.backgroundPosition = "0 " + (offset - 393) + "px";
		$("header-zone").style.height = offset + "px";
		if(this.currentLayer) {
			this.currentLayer.node.style.top = (offset + this.toolbarHeight) + "px";
		}
	}
}

/* END: layer controller                                            */
/********************************************************************/
/* START: content layer                                             */

// a single content layer. Hides and shows

var ContentLayer = Class.create();

ContentLayer.prototype = {
	initialize: function(controller, id, triggerLink) {
		this.controller  = controller;
		this.id          = id;
		this.node        = $("toolbar-layer-" + id);
		this.triggerLink = triggerLink;

		var closeButton = Helper.getCloseButton(this.node);
		if(!closeButton) alert("Warning: close button unknown");
		closeButton.observe("click",
			function() {
				this.controller.closeLayer(this);
			}.bindAsEventListener(this)
		);
	},

	close: function() {
		this.node.removeClassName("active-layer");
		this.triggerLink.up().removeClassName("active");
	},

	open: function() {
		this.setOffset();
		this.node.addClassName("active-layer");
		this.triggerLink.up().addClassName("active");
		this.triggerLink.addClassName("clicked"); // avoids hover effect (only for the first time)
		this.triggerLink.observe("mouseout",
			function(e) {
				var elm = Event.findElement(e, "a");
				elm.removeClassName("clicked");
				elm.stopObserving("mouseout");
			}
		);
	},

	setOffset:function() {
		ctrl = this.controller;
		var calcHeight = ctrl.toolbarHeight + Position.cumulativeOffset(ctrl.toolbarNode)[1];
		this.node.style.top = calcHeight + "px";
	}

}

/* END: content layer                                               */
/********************************************************************/
/* START: intersect elements                                        */

// A helper class for hiding intersecting <select>-elements when layer is open (just for IE6)

var IntersectElements = Class.create();

IntersectElements.initialize = function() {
	var contentZone = $("content-zone");
	if (contentZone) {
		IntersectElements.elements = $A(contentZone.getElementsByTagName("select"));
	} else {
		IntersectElements.elements = $A([]);
	}
	IntersectElements.clear();
}

IntersectElements.showElements = function() {
	IntersectElements.clear();
	IntersectElements.render();
}

IntersectElements.hideElements = function(layer) {
	IntersectElements.clear();
	IntersectElements.setCurrentLayer(layer);
	IntersectElements.elements.each(function(elt) {
		elt.toHide = IntersectElements.intersect(elt);
	});
	IntersectElements.render();
}

IntersectElements.clear = function() {
	IntersectElements.elements.each(function(elt) {
		elt.toHide = false;
	});
	IntersectElements.currentLayer = null;
	IntersectElements.currentLayerRect = null;
}

IntersectElements.setCurrentLayer = function(layer) {
	IntersectElements.currentLayer = layer;
	IntersectElements.currentLayerRect = IntersectElements._getRect(layer.node);
}

IntersectElements.intersect = function(element) {
	var l = IntersectElements.currentLayerRect;  // current layer
	var e = IntersectElements._getRect(element); // current element
	return (e.right >= l.left && e.left <= l.right);
}

IntersectElements._getRect = function(element) {
	var offset     = Position.cumulativeOffset(element);
	var dimensions = $(element).getDimensions();
	return {
		bottom: offset[1] + dimensions.height,
		left:   offset[0],
		right:	offset[0] + dimensions.width,
		top:    offset[1]
	}
}

IntersectElements.watchResize = function() {
	var layer = IntersectElements.currentLayer;
	if (layer) {
		IntersectElements.currentLayerRect = IntersectElements._getRect(layer.node);
		IntersectElements.hideElements(layer);
	}
}

IntersectElements.render = function() {
	IntersectElements.elements.each(function(elt) {
		elt.style.visibility = (elt.toHide) ? "hidden" : "visible";
	});
}

/* END: intersect elements                                          */
/********************************************************************/
/* START: image magnifier                                           */

var Magnifier = Class.create();

Magnifier.getInstance = function() {
	Magnifier.contentZone = $("content-zone");
	if (!Magnifier.contentZone) {
		return null;
	}
	if (!Magnifier.instance) {
		Magnifier.instance = new Magnifier();
	}
	return Magnifier.instance;
}

Magnifier.prototype = {
	initialize: function() {

		$A(Magnifier.contentZone.getElementsByTagName("a")).findAll( function(link) {
			return $(link).hasClassName("magnifier");
		}).each( function(magnifier) {
			magnifier.observe("click", function(e) {Magnifier.getInstance().open(e); }.bindAsEventListener($(magnifier)));
		});
	},

	open: function(e) {
		var mLink     = Event.element(e);
		var smallImg  = mLink.up().previous();

		var miWrapper = $(document.createElement("div")); // mi stands for "magnified image"
		var miImg     = $(document.createElement("img"));
		var miClose   = $(document.createElement("a"));

		miWrapper.className = "mi-wrapper";
		miImg.src           = mLink.getAttribute("href");
		miClose.href        = location.href;

		if (this.currentMiWrapper) {
			this.closeCurrent(true);
		}

		miWrapper.appendChild(miImg);
		miWrapper.appendChild(miClose);

		var offset = Position.cumulativeOffset(smallImg);

		miWrapper.style.left = offset[0] + "px";
		miWrapper.style.top =  offset[1] + "px";
		document.body.appendChild(miWrapper);
		this.currentMiWrapper = miWrapper;

		$A([miImg, miClose]).each(function (closeElt) {
			closeElt.observe("click", function(e) {
				Magnifier.getInstance().closeCurrent(false);
				Event.stop(e);
			});
		});
		Event.stop(e);
	},

	closeCurrent: function(reopen) {
		document.body.removeChild(this.currentMiWrapper);
		this.currentMiWrapper = null;
	}
}

/* END: image magnifier                                             */
/********************************************************************/
/* START: swap header visuals                                       */

var HeaderVisual = Class.create();

HeaderVisual.initalize = function() {
	HeaderVisual.node  = $("headervisual-zone");
	HeaderVisual.defaultContentNode = $("headertext-zone").down();
	var contentZone = $("content-zone");
	if (!contentZone) return;

	$A(contentZone.getElementsByTagName("ul")).findAll(function(elt) {
		return $(elt).hasClassName("js-swap-headervisual");
	}).each(function(elt) {
		$A(elt.getElementsByTagName("li")).each(function(elt) {
			new HeaderVisual($(elt));
		});
	});
}

HeaderVisual.prototype = {
	initialize: function(listItem) {
		this.source = headerVisualDefinitions[listItem.id].img;
		this.loaded = false;
		this.active = false;
		if (__LOADED__) {
			this.initBgImage();
		} else {
			Event.observe(window,"load", function() { // preload bgimage _after_ loading other resources -> therefore onload
				this.initBgImage();
			}.bindAsEventListener(this));
		}


		this.contentNode = document.createElement("div");
		this.contentNode.className = "marketing-teaser";
		this.contentNode.style.left = "-7000px";
		this.contentNode.innerHTML = headerVisualDefinitions[listItem.id].content;
		$("headertext-zone").appendChild(this.contentNode);

		listItem.observe("mouseover", function() {
			this.show();
		}.bindAsEventListener(this));

		listItem.observe("mouseout", function() {
			this.hide();
		}.bindAsEventListener(this));
/*
		listItem.observe("mousedown", function(event) {
			Event.element(event).innerHTML;
		})
*/
	},

	initBgImage: function() {
		this.image  = new Image;
		this.image.onload = function() {
			this.loaded = true;
			if (this.active) {
				this.hideProgress();
				this.show();
			}
		}.bindAsEventListener(this);

		this.image.src = this.source;

		this.imageNode = document.createElement("div");
		this.imageNode.className = "swap-image-container";
		this.imageNode.style.backgroundImage = "url(" + this.source + ")";
		HeaderVisual.node.up().insertBefore(this.imageNode, HeaderVisual.node);
	},

	hide: function() {
		this.active = false;
		HeaderVisual.defaultContentNode.show();
		this.contentNode.style.left = "-7000px";
		if (this.loaded) {
			this.imageNode.style.display = "none";
		} else {
			this.hideProgress();
		}
	},

	hideProgress: function() {
	},

	show: function() {
		this.active = true;
		HeaderVisual.defaultContentNode.hide();
		this.contentNode.style.left = "0";
		if (this.loaded) {
			this.imageNode.style.display = "block";
		} else {
			this.showProgress();
		}
	},

	showProgress: function() {
		// hook to show a progress symbol (image still loading)
	}
}

/* END: swap header visuals                                         */
/********************************************************************/
/* START: misc. helper                                              */

var Location = Class.create();

Location.setMarker = function(id) {
	location.hash = "jump-to-" + id;
}

Location.clearMarker = function() {
	var empty = (Info.browser.isSafari) ? "#" : "##";
	location.hash = empty;
}

var Helper = Class.create();

Helper.getCloseButton = function(layer) {
	var closeButton = layer.down("div.close");
	if (!closeButton) { // could be IE<6
		$A(layer.getElementsByTagName("div")).each(
			function(div) {
				if ($(div).hasClassName("close")) {
					closeButton = $(div);
				}
			}
		);
	}
	return closeButton;
}

/* END: misc. helper                                                */
/********************************************************************/

/********************************************************************/
/* START: register functions                                        */

var __LOADED__ = false;
Event.observe(window, "load", function() {__LOADED__ = true;} )

if (Info.browser.isIEpre7) {
	Event.onDOMReady(IntersectElements.initialize);
	Event.onDOMReady(initLayout_IEPre7);
	Event.observe(window, "resize", initLayout_IEPre7);
	Event.observe(window, "resize", IntersectElements.watchResize);
}


Event.onDOMReady(function() {
	HeaderVisual.initalize();
	initLayout_sifr();
	new LayerController;
	Magnifier.getInstance();
});

/* END: register functions                                          */
/********************************************************************/
