if (!SI) { var SI = new Object(); };
SI.hasRequired 	= function() { 
	if (document.getElementById && document.getElementsByTagName) {
		var html = document.getElementsByTagName('html')[0];
		html.className += ((html.className=='')?'':' ')+'has-dom';
		return true;
		};
	return false;
	}();
SI.hasFlash		= function() {
	var flashVersion = 0;
	var required = 6;
	var m =16; // maximum version to test for
	var ua = navigator.userAgent.toLowerCase();
	if (navigator.plugins && navigator.plugins.length) {
		var p = navigator.plugins['Shockwave Flash'];
		if (typeof p == 'object') {
			for (var i=m;i>=3;i--) {
				if (p.description && p.description.indexOf(i + '.') != -1) { flashVersion = i; break; };
				};
			};
		}
	else if (window.ActiveXObject && window.print) {
		var found = false;
		for (var i=m; i>=3 && !found; i--) {
			try {
				found = eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash." + i + "');");
				if(found) { flashVersion = i; };
				}
			catch(e) {};
			};
		};
	if (required<flashVersion) {
		var html = document.getElementsByTagName('html')[0];
		html.className += ((html.className=='')?'':' ')+'has-flash';
		return true;
		};
	return false;
	}();
SI.onbeforeload	= function() {
	if (this.hasRequired) {
		this.CSSattach();
		var attachOnSubmit = false;

		for (var module in this) { 
			if (this[module].onbeforeload) { 
				this[module].onbeforeload();
				};
			if (this[module].onsubmit) { attachOnSubmit = true; };
			};
		
		if (attachOnSubmit) {
			var forms = document.getElementsByTagName('form');
			for (var i=0; form=forms[i]; i++) {
				if (typeof form.onsubmit!='function') {
					form.onsubmit = function() { return SI.onsubmit(this); };
					};
				};
			};
		};
	};
SI.onload		= function() { if (this.hasRequired) { for (var module in this) { if (this[module].onload) { this[module].onload(); };};};};
SI.onresize		= function() { if (this.hasRequired) { for (var module in this) { if (this[module].onresize) { this[module].onresize(); };};};};
SI.onsubmit		= function(form) { for (var module in this) { if (this[module].onsubmit) { if (this[module].onsubmit(form)==false) { return false; };};}; return true; };
SI.oncssload	= function() { if (this.hasRequired) { for (var module in this) { if (this[module].oncssload) { this[module].oncssload(); };};};};
/* Support functions of onCSSload event handler */
SI.CSSattach	= function() {
	var d=document.createElement('div'),s=d.style;
	s.position		= 'fixed';
	s.top			= '0';
	s.visibility	= 'hidden';
	s.width			= '600px';
	s.height		= '16px';
	d.id='SI-CSS-seed';
	document.body.appendChild(d);
	window.setTimeout('SI.CSSwatch()',0);
	};
SI.CSSwatch			= function() {
	
	var d = document.getElementById('SI-CSS-seed');
	if (d.offsetWidth<600) {
		var html = document.getElementsByTagName('html')[0];
		html.className += ((html.className=='')?'':' ')+'has-css';
		
		this.oncssload();
		d.parentNode.removeChild(d);
		}
	else { window.setTimeout('SI.CSSwatch()',1); };
	};





/******************************************************************************
 SI.CSS module v1.1
 
 Includes functions to add and remove CSS classes as well as functions to add
 relationship (first-, only-, and last-child) and alt classes. Also has a simple,
 single CSS selector element grabber.
 
 v1.1 : relate now clears relational classes before applying
 		select now handles being passed arrays of selectors or a valid HTML element
 ******************************************************************************/
SI.CSS = {
	// operates on the children of the given element
	relate		: function() { // adds appropriate class to first, last and only child as well as alt
		if (!SI.hasRequired) { return; };
		
		var elems = this.select(arguments);
		for (var i=0; i<elems.length; i++) {
			var elem 	= elems[i];
			var alt 	= false;
			
			var children = [];
			// make sure we're dealing with real HTML elements
			if (elem.nodeName=='TABLE') { children = elem.getElementsByTagName('tr'); } // won't work with nested tables
			// else if (elem.nodeName=='UL' || elem.nodeName=='OL') { children = elem.getElementsByTagName('li'); }
			else {
				SI.output('Not a table: '+elem.nodeName+' (children: '+elem.childNodes.length+')',1);
				for (var j=0; j<elem.childNodes.length; j++) {
					if (elem.childNodes[j].nodeType==1) { children[children.length] = elem.childNodes[j]; };
					};
				};
			
			for (var j=0; j<children.length; j++) {
				var child = children[j];
				child.className = this.removeClass(child.className,'first-child','only-child','last-child','alt');
				if (children.length==1) { child.className = this.addClass(child.className,'only-child'); break; }
				else if (j==0) { child.className = this.addClass(child.className,'first-child'); }
				else if (j==children.length-1) { child.className = this.addClass(child.className,'last-child'); };
				if (alt) { child.className = this.addClass(child.className,'alt'); };
				alt=!alt;
				};
			};
		},
	// operates on the children of the given element
	alt		: function() { // pass any number of simple, single element CSS selectors
		if (!SI.hasRequired) { return; };
		var elems = this.select(arguments);
		for (var i=0; i<elems.length; i++) {
			var elem 	= elems[i];
			var alt 	= false;
			
			var children = elem.childNodes
			if (elem.nodeName=='TABLE') { children = elem.getElementsByTagName('tr'); };
			
			for (var j=0; j<children.length; j++) {
				var child = children[j];
				if (child.nodeType==1) { // make sure we're dealing with an HTML element
					if (alt) { child.className = this.addClass(child.className,'alt'); };
					alt=!alt;
					};
				};
			};
		},
	select		: function() { // a simple, single element CSS selector (handles unlimited number of selector strings)
		if (!SI.hasRequired) { return; };
		var selected = [];
		
		var parser = function(selector,parents) {
			var selected = [];
			// Establish our actual selector and the remaindered selector to pass to the recursive call
			var remainder = '';
			var pos		= selector.indexOf(' ');
			if (pos!=-1) { 
				remainder	= selector.substring(pos+1,selector.length);
				selector	= selector.substring(0,pos); 
				};
			//SI.output('S: '+selector+' r['+remainder+']');
			for (var i=0; i<parents.length; i++) {
				if (selector.indexOf('#')!=-1) { 
					selected[selected.length] = document.getElementById(selector.replace(/^([^#]*#)/,'')); 
					}
				else {
					var useClassName = false,elem,className;
					if (selector.indexOf('.')!=-1) {
						useClassName = true;
						selectees = selector.split('.');
						elem = (selectees[0]!='')?selectees[0]:'*';
						className = selectees[1];
						}
					else {
						elem = selector;
						};
					var elems = parents[i].getElementsByTagName(elem);
					for (var j=0; j<elems.length; j++) {
						var re = new RegExp('^('+elems[j].className.replace(/ /g,'|')+')$');
						if (useClassName && className.search(re)==-1) { continue; };
						selected[selected.length] = elems[j];
						};
					};
				};
			if (remainder=='') { return selected; }
			else { return parser(remainder,selected); };
			};
	
		// Make sure we haven't been passed another array (arguments from another function)
 		var args = (arguments.length===1 && typeof arguments[0]!='string')?arguments[0]:arguments;
		for (var i=0; i<args.length; i++) {
			selected = selected.concat(((typeof args[i]=='object')?args[i]:parser(args[i],[document])));
			}
		return selected;
		},
	addClass	: function() {
		if (!SI.hasRequired) { return; };
		var txt = arguments[0];
		for (var i=1; i<arguments.length; i++) { 
			// first remove the class so we don't have duplicates
			txt = txt.replace(new RegExp('( '+arguments[i]+'\\b|\\b'+arguments[i]+' |\\b'+arguments[i]+'\\b)'),'');
			txt += ((txt=='')?'':' ')+arguments[i];
			};
		return txt;
		},
	removeClass	: function() {
		if (!SI.hasRequired) { return; };
		var txt = arguments[0];
		for (var i=1; i<arguments.length; i++) { 
			txt = txt.replace(new RegExp('( '+arguments[i]+'\\b|\\b'+arguments[i]+' |\\b'+arguments[i]+'\\b)'),'');
			};
		return txt;
		}
	};
	






/******************************************************************************
 SI.IFR module v1.1
 
 v1.1 : escaped text before adding to flashvar when double quotes are detected
 
 ******************************************************************************/
SI.IFR = {
	replaced		: 0,
	replace			: function(selector,swf,size,lineheight,color,altcolor,bgcolor,uppercase,padding) {
		var d = document;
		
		if (!SI.hasFlash) return;
		
		var elems = SI.CSS.select(selector);
		for (var i=0; i<elems.length; i++) {
			e = elems[i];
			
			var orig	= e.innerHTML.normalize();
			var txt 	= new Array();
			var fv		= '';
			for (var j=0; j<e.childNodes.length; j++) {
				var c = e.childNodes[j];
				switch (c.nodeType) {
					case 3:
						txt[txt.length] = c.nodeValue.normalize();
						break;
					case 1:
						txt[txt.length] = c.innerHTML.normalize();
						break;
					}
				}
			
			var c = d.createElement('div');
			
			var nw = nh = 0;
			if (padding.length==1) {
				nw = nh = padding[0] * 2;
				}
			else if (padding.length==2) {
				nh = padding[0] * 2;
				nw = padding[1] * 2;
				}
			else if (padding.length==3) {
				nh = padding[0] + padding[2];
				nw = padding[1] * 2;
				}
			else if (padding.length==4) {
				nh = padding[0] + padding[2];
				nw = padding[1] + padding[3];
				}
			
			w = e.offsetWidth-nw;
			h = e.offsetHeight-nh-10;
			c.className = 'replaced-'+e.nodeName.toLowerCase();
			c.id = 'SI_replaced'+this.replaced++;
			e.parentNode.replaceChild(c,e);
			
			for (var k=0; k<txt.length; k++) { 
				if (txt[k].indexOf('"')!=-1) { txt[k] = escape(txt[k]); }
				fv += 'txt'+(k+1)+'='+txt[k]+'&';
				}
			fv += 't='+ txt.length+'&w=470&h=40&id='+c.id+'&s='+size+'&l='+lineheight+'&c='+color+'&ac='+altcolor+'&uc='+uppercase;
			
			var swfHTML;
			swfHTML  = '<object class="mlIFRobject" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="470" height="40">\n';
			swfHTML += '	<param name="movie" value="'+swf+'" />\n';
			swfHTML += '	<param name="flashvars" value="'+fv+'" />\n';
			swfHTML += '	<param name="bgcolor" value="'+bgcolor+'" />\n';
			swfHTML += '	<param name="wmode" value="opaque" />\n';
			swfHTML += '	<embed class="mlIFRobject" src="'+swf+'" flashvars="'+fv+'" width="470" height="40" bgcolor="'+bgcolor+'" wmode="opaque" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />\n';
			swfHTML += '<'+'/object>\n';
			swfHTML += '<'+e.nodeName.toLowerCase()+((e.id)?' id="'+e.id+'"':'')+' class="'+((e.className)?e.className+' ':'')+'replaced">'+orig+'<'+'/'+e.nodeName.toLowerCase()+'>\n';
			c.innerHTML = swfHTML;
			txt='';
			}
		},
	refresh			: function() { document.body.innerHTML+=''; },
	oncssload		: function() {
		this.replace('h1.headline','/stuff/din-light.swf',20,15,'333333','AB6666','FFFFFF',true,[0]);
		}
	};

String.prototype.normalize = function(){ return this.replace(/\s+/g, " "); };
if(Array.prototype.push == null){ Array.prototype.push = function(){ for(var i = 0; i < arguments.length; i++){ this[this.length] = arguments[i]; }; return this.length; };};
window.onload	= function() { SI.onload(); };
window.onresize	= function() { SI.onresize(); };
