/* eGenix.com JavaScript */

/* --- Globals ------------------------------------------------------ */

var EGENIX_CONTENT_OFFSET = 200;

/* --- eGenix.com Support Code -------------------------------------- */

/* eGenix.com Javascript Library 

   (c) Copyright 2006, eGenix.com Software GmbH, Langenfeld.
   
   All Rights Reserved.
   
   Permissions to use for viewing the eGenix.com web-site granted. All other uses
   require a license from eGenix.com.

   Note: Most of these utility functions work with IE6.
 
*/

/* Global flag to detect IE6 */

var IE6 = (navigator.appVersion.indexOf("MSIE 6.0") >= 0);

var egenix = {

    /* Return the inner height of the current window */

    getInnerHeight: function() {
    	return (window.innerHeight || 
		document.documentElement.clientHeight || 
		document.body.clientHeight);
    },

    /* Return the inner width of the current window */

    getInnerWidth: function() {
    	return (window.innerWidth || 
		document.documentElement.clientWidth || 
		document.body.clientWidth);
    },

    /* Move the current frame to top-level, if needed */

    verifyTopLevel: function() {
	if (top != self)
	    top.location = self.location;
        return true;
    },

    /* Open url in a fullscreen popup window with the given name */

    openFullScreenPopup: function(url, name) {
	specs = ('width=' + screen.width 
		  + ', height=' + screen.height
		  + ', top=0, left=0'
		  + 'type=fullWindow,'
		  + 'fullscreen=yes,'
		  + 'directories=no,toolbar=no,location=no,menubar=no,'
		  +             'scrollbars=no,status=no'
		  );
	window.open(url, name, specs);
	return false;
    },

    /* Check all parent nodes of node for elements with an id in the array
       ids.

    */

    hasParentWithId: function(node, ids) {
	var idsLength = ids.length;
	var currentNode = node.parentNode;
	while (currentNode) {
	    var id;
	    id = currentNode.id
	    for (var i = 0; i < idsLength; i++) {
		if (id == ids[i])
		    return true;
	    }
	    currentNode = currentNode.parentNode;
	}
	return false;
    },

    /* Search the DOM for headers matching one of the header tags given in
       acceptHeaders and return an array of nodes. 

       acceptHeaders must be a string of comma-separated header element
       names and defaults to "h1,h2,h3,h4,h5,h6".

       skipIds may be given to hide all children of certain nodes in the
       DOM.

    */

    getHeaderNodes: function(acceptHeaders, skipIds) {
	var headers = new Array();
	var allNodes = document.getElementsByTagName("*");

	/* acceptHeaders must be uppercase, since the .nodeName of DOM
	   nodes is uppercase as well. */
	if (!acceptHeaders)
	    acceptHeaders = "H1,H2,H3,H4,H5,H6";
	else
	    acceptHeaders = acceptHeaders.toUpperCase();

	for (i = 0; i < allNodes.length; i++) {
	    var node = allNodes[i];
	    var nodeName;
	    if (node.nodeType != 1) /* Element */
		continue;
	    nodeName = node.nodeName;
	    /* Note: IE6 doesn't support string indexing using str[0]. You
	       have to use str.slice(0,1) to get the same effect. */
	    if (nodeName.slice(0,1) != "H") /* nodeName is always uppercase */
		continue;
	    if (isNaN(nodeName.slice(1,2)))
		continue;
	    if (acceptHeaders.indexOf(nodeName) < 0)
		continue;
	    if (skipIds &&
		egenix.hasParentWithId(node, skipIds))
		continue;
	    headers.push(node);
	}
	return headers;
    },

    /* Strip whitespace from the left and right side of text and return
       the stripped version. */

    stripText: function(text) {
	var stripRE = /^\s*(.*)\s*$/g;
	return text.replace(stripRE, "$1");
    },

    /* Create an anchor link name from the given text */

    anchorFromText: function(text) {
	return text.replace(/[^a-zA-Z0-9]/g, "");
    },

    /* Extract plain text from the node.

       Note: text is used for recursion and should not be passed in when
       calling the function.

    */

    getNodeText: function(node, text) {
	var childNodes = node.childNodes;
	if (!text)
	    text = "";
	for (var i = 0; i < childNodes.length; i++) {
	    var childNode = childNodes[i];
	    if (childNode.nodeType == 3 &&  /* Text */
		childNode.data) {
		var nodeText = egenix.stripText(childNode.data);
		if (nodeText) {
		    if (text)
			text += " ";
		    text += nodeText;
		}
	    }
	    else if (childNode.nodeType == 1) /* Element */
		text = egenix.getNodeText(childNode, text);
	}
	return text;
    },

    /* Add an anchor element with the given name to node.

       The function returns the new element node.

       It also is careful not to add multiple anchors with the same name
       to a node, so calling it multiple times on the same node is
       allowed.

    */

    addAnchor: function(node, name) {
	var childNodes = node.childNodes;

	/* Check that we are not adding a duplicate anchor */
	for (var i = 0; i < childNodes.length; i++) {
	    var childNode = childNodes[i];
	    if (childNode.nodeType == 1 &&  /* Element */
		childNode.nodeName == "A") {
		if (childNode.name == name)
		    return childNode;
	    }
	}

	/* Add anchor element */
	if (!IE6) {
	    anchorNode = document.createElement("A");
	    anchorNode.name = name;
	    node.appendChild(anchorNode);
	}
	else {
	    /* IE6 has problems with setting the anchor .name attribute */
	    node.innerHTML += "<a name=\"" + name + "\"></a>";
	    anchorNode = node.lastChild;
	}

	return anchorNode;
    },

    /* Create a table of contents and write it to the element targetId.

       The table of contents is generated by extracting all header
       elements and their text from the document, adding anchors to all
       header elements and then creating corresponding header elements
       with a anchor link to the original headers in the elements
       targetId.

       indexHeaders may be given as comma-separated list of header element
       names to select the headers to index. Default is to index all
       header elements.

       skipIds may be given to hide all children of certain nodes in the
       DOM.

    */

    createTableOfContents: function(targetId, indexHeaders, skipIds) {
	var tocDiv = document.getElementById(targetId);
	var tocNodes;
	if (!indexHeaders)
	    indexHeaders = "h1,h2,h3,h4,h5,h6";
	tocNodes = egenix.getHeaderNodes(indexHeaders, skipIds);
	for (var i = 0; i < tocNodes.length; i++) {
	    var node = tocNodes[i];
	    var nodeText = egenix.getNodeText(node);
	    var nodeAnchor = egenix.anchorFromText(nodeText);
	    var tocHeader;
	    var tocLink;
	    var headerText;
	    var headerAnchor;

	    /* Add anchor to header node */
	    egenix.addAnchor(node, nodeAnchor);

	    /* Add header with link to element targetId */
	    tocHeader = document.createElement(node.nodeName);
	    tocLink = document.createElement("a");
	    tocLink.href = "#" + nodeAnchor;
	    headerText = document.createTextNode(egenix.getNodeText(node));
	    tocLink.appendChild(headerText);
	    tocHeader.appendChild(tocLink);
	    tocDiv.appendChild(tocHeader);
	}
	return tocDiv;
    },

    /* IE6 complains if the last entry in a dictionary has a trailing
       comma, so we leave this dummy around as last entry. */
    dummy: 0

}


/* --- SWFObject Helper --------------------------------------------- */

/**
 * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}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=new Object();this.variables=new Object();this.attributes=new Array();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){deconcept.SWFObject.doPrepUnload=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=new Array();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(deconcept.SWFObject.doPrepUnload){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(!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;

