/*#######################################################################################################
written by Dominik Kressler
#######################################################################################################*/
var debug = false;

var initCore = function()
{	
	document.body.setOpacity(0);
	var overlayBox = new Lightbox();

	//TOTOP BUTTON
	pos = $('totop').cumulativeOffset();
	if (pos[1] > document.viewport.getHeight())
	{
		$('totop').observe('click', function(event)
		{
			Event.stop(event); 
			Effect.ScrollTo('branding');
		});
	}
	else $('totop').remove();
		
	//init slideshow
	var headerSlideshow = new slideshow();
	
	$$('.linklist a').each(function(linkItem)
	{
		if(linkItem.readAttribute('rel') == null && !linkItem.hasClassName('download'))
		{
			linkItem.observe('click', function(event, linkItem)
			{
				Event.stop(event);
				linkItem=this;
				document.body.fade({duration:0.3,afterFinish:function(){self.location.href=linkItem.readAttribute('href');}});
			});	
		}
	});
	//let the internal links fade the page
	$$('#navigation a').each(function(linkItem)
	{
		linkItem.observe('click', function(event, linkItem)
		{
			Event.stop(event);
			linkItem=this;
			document.body.fade({duration:0.3,afterFinish:function(){self.location.href=linkItem.readAttribute('href');}});
		});	
	});
	var moreid = 0;
	//more button
	$$('.more').each(function(elm)
	{
		moreid++;
		new Insertion.Before(elm, '<p><a class="moreLink" href="#more'+moreid+'">weiter&hellip;</a></p>');
		new Effect.BlindUp(elm, {duration:0});
		elm.writeAttribute("rel", 'more'+moreid);
	});
	
	//YOUTUBE VIDEOS
	var tubed = false;
	$$('.totube').each(function(totube)
	{
		totube.observe('click',function(event)
		{
			Event.stop(event);
			
			href = this.readAttribute('href');
			
			index = href.indexOf("v=");
			index = index+2;
			vid = href.substring(index, href.length);
			$('youtubeplayer').innerHTML = "<object type=\"application/x-shockwave-flash\" id=\"thevideo\" style=\"width:629px; height:366px;\" data=\"http://www.youtube.com/v/"+vid+"?rel=1&amp;showsearch=0&amp;showinfo=1\"><param name=\"movie\" value=\"http://www.youtube.com/v/"+vid+"?rel=1&amp;showsearch=0&amp;showinfo=1\" /></object>";
			
			if(!tubed)
			{
				$('youtubeplayer').setStyle({height:'366px',display:'none'});
				Effect.BlindDown('youtubeplayer', { duration: 1.0 });
				tubed=true;
			}
		});	
	});
}

//UPDATE RADIO CURRENT TRACK
var radioTitleUpdater = function()
{
	new Ajax.PeriodicalUpdater (
		'rss', 'inc/radio.currenttrack.php', {
			frequency: 10
		}
	);
}
document.observe("dom:loaded",initCore);
Event.observe(window,'load',function()
{
	document.body.appear({duration:0.5});
	
	//handle the prepared morelinks
	$$('.moreLink').each(function(elm)
	{
		elm.observe('click', function(event)
		{
			Event.stop(event);
			this.blindUp();
			ancestors = this.ancestors();
			
			ancestors[0].next(0).blindDown();
		});
	});
});

var slidingNavi = Class.create(
{
	initialize:function(set)
	{
		set.slides = $('slides').childElements();
		set.slidesReversed = [];
		set.slidesReversed = set.slidesReversed.concat(set.slides);
		set.slidesReversed = set.slidesReversed.reverse();
		set.slideWidth = set.slides[0].getWidth();			
		set.sliding = false;

		$('slides').style.overflow = "hidden";
		$('slidingNavi').style.overflow = "hidden";
		$('slides').style.width = set.slideWidth*set.slides.length+"px";

		$('slidingNaviControl').appear();

		$('slidingNaviControlBwd').observe('click',function(clicked)
		{
			if(!set.sliding)
			{
				set.sliding=true;
				theSlide("bwd",set);
			}
		});
		$('slidingNaviControlBwd').setStyle({display:'none'});
		$('slidingNaviControlFwd').observe('click',function(clicked)
		{
			if(!set.sliding)
			{
				set.sliding=true;
				theSlide("fwd",set);
			}
		});
	}
});
var theSlide=function(direction,set)
{
	offset = parseInt($('slides').getStyle('left'));
	if(offset == set.slideWidth*-1 && direction == "bwd") $('slidingNaviControlBwd').fade({duration:0.2});
	else $('slidingNaviControlBwd').appear();

	if(offset == (set.slideWidth)*-1 && direction == "fwd") $('slidingNaviControlFwd').fade({duration:0.2});
	else $('slidingNaviControlFwd').appear();

	switch(direction)
	{
		case "fwd":
			new Effect.Move($('slides'),{duration:set.speed,x:set.slideWidth*-1,mode:"relative",afterFinish:function(){set.sliding=false;}});
		break;
		case "bwd":
			new Effect.Move($('slides'),{duration:set.speed,x:set.slideWidth,mode:"relative",afterFinish:function(){set.sliding=false;}});
		break;
	}
}

/*#######################################################################################################
slideshow
#######################################################################################################*/

//slideshow images
var slideImages = Array('2010-05-evidence.jpg','smallz-dikkn.jpg','piekasoe.jpg','nordkurve-jam.jpg','mit-den-jungs.jpg','2010-05-evidence02.jpg','2010-05-evidence-onstage.jpg','2010-dikkn-jacek.jpg','2010-dikkn-smallz.jpg','2010-parkhaus.jpg','2010-parkhaus02.jpg','2010-parkhaus03.jpg','2010-party.jpg','check-the-shirt.jpg','chill-beim-dom.jpg','hundertmeister.jpg','interview.jpg','jacek.jpg','represent.jpg','represent02.jpg','rhymedealer.jpg','steve-on-stage.jpg','street-chillin.jpg');
var slideTitles = Array('Mai 2010','Smallz &amp; Dikkn','Piekasoe','Nordkurve Jam 2010','Mit den Jungs', 'Evidence Afterhour', 'Live im Hundertmeister','Dikkn &amp; Jacek', 'Smallz &amp; Dikkn','2010 im Parkhaus Meiderich','2010 im Parkhaus Meiderich','2010 im Parkhaus Meiderich','Party!','Check this out','chillin','live on stage','Raportage','Jacek the Rapper','On tour','On tour','Rhymedealer!','Steve on Stage','Street chillin');
var slidePath = 'http://www.obscurabase.de/images/slider/';

var slideshowContainer = "slideshow";//The parent Object. e.g. an undefined list.
var slideDuration = 1;// Duration of each effect in seconds
var delayTime = 5;// Delay of effect-initializing in seconds
var useTitle = true;// Use the image title attribute to display an overlayed description
var animateTitle = true;
var randomize = true;
/*# CONFIGURATION END ###########*/

//INTERNAL VARIABLES
var i = 0;
var c = 0;
var n = 0;
var imageArray = new Array();
var started = false;
var title = new String();
var titleHeight = new Number();
var imageLoader = new Array();
var slideshow = Class.create({
	initialize:function() 
	{
		o
		(
		 	"slideshowContainer: "+ slideshowContainer + 
			" | slideDuration: "+ slideDuration +"sek"+
			" | delayTime: "+ delayTime +"sek"+
			" | useTitle: "+ useTitle +
			" | animateTitle: "+ animateTitle +
			" | randomize: "+ randomize 
		);
	
		for (i=0;i<slideImages.length;i++)
		{

				Element.insert(slideshowContainer, '<li id="slideItem'+parseInt(i+1)+'" style="display:none;"><img src="'+slidePath+slideImages[i]+'" /></li>');

	
			//Element.insert(slideshowContainer, '<li id="slideItem'+parseInt(i+1)+'"><img src="'+slidePath+slideImages[i]+'" alt="'+slideTitles[i]+'" /></li>');
			
			if(useTitle)
			{				
				$('slideItem'+parseInt(i+1)).insert(new Element("span", { id: "slideTitle"+parseInt(i+1) }));
				slideTitle = $("slideTitle"+parseInt(i+1));
				slideTitle.innerHTML = slideTitles[i];
				titleHeight = slideTitle.getHeight();
				//if(i > 0)slideTitle.setStyle({top:-titleHeight+"px"});					
			}			
			if(i==slideImages.length-1) 
			{
				$('slideshowLoader').remove()
				imageArray = $(slideshowContainer).childElements();
				
				if(randomize == true)
				{
					imageArray.each(function(elm){
						elm.remove();  
					});
					shuffle(imageArray);
					imageArray.each(function(elm, indexOf){
						$(slideshowContainer).insert(elm, { position: content })
					});	
				}
		
				Cufon.replace('#slideshow span', 
				{
					textShadow: '1px 1px rgba(0, 0, 0, 0.25)'
				});
				Cufon.now();
				
				new Effect.Parallel([
					new Effect.Appear(imageArray[0], 
					{ 
						sync: true,
						beforeStart: showTitle(imageArray[0])
					})
				], { 
					duration: slideDuration
				});
				
				realDelay = (!started) ? delayTime : delayTime + slideDuration;
				new PeriodicalExecuter(function() {		
					if(c == imageArray.length) c = 0;
					n = (c == imageArray.length - 1) ? 0 : c + 1 ;
					new Effect.Parallel([
						new Effect.Appear(imageArray[n], 
						{ 
							sync: true,
							beforeStart: showTitle(imageArray[n])
						}),
						new Effect.Fade(imageArray[c], 
						{ 
							sync: true,
							beforeStart: hideTitle(imageArray[c])
						})
					], { 
						duration: slideDuration
					});
					
					started = true;
					c++;
				}, realDelay);

			}
		}
	}
});

var hideTitle=function(current)
{
	if(useTitle&&animateTitle)
	{
		current=current.childElements();
		cTitle=current[1].readAttribute('id');
		new Effect.Move(cTitle, {y:340,transition:Effect.Transitions.spring,mode:'absolute',afterFinish:function(){current[1].setStyle({'top':"-84px"});}});
	}
}
var showTitle=function(current)
{
	if(useTitle&&animateTitle)
	{
		cTitle=current.childElements();
		cTitle=cTitle[1].readAttribute('id');
		new Effect.Move(cTitle,{y:238,transition:Effect.Transitions.spring,mode:'absolute'});
	}
}
var shuffle=function(o)
{
	for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
	return o;
};

/*#######################################################################################################
Accordion
#######################################################################################################*/

var accordion = Class.create({
	initialize:function() {
		
		allItems = $('accordion').childElements();				
		$$('div.accordion-content').each(function(accContent) 
		{
			accContent.setStyle({display:'none'});							 
		});
		
		allItems[0].addClassName('opened');
		allItems[0].next(0).setStyle({display:'block'});
		
		$$('div#accordion h5').each(function(naviItem) 
		{
			naviItem.observe('click', function() 
			{
				var queue = Effect.Queues.get('blindNavi');
				queue.each(function(effect) { effect.cancel(); });
				if(!naviItem.hasClassName("opened"))
				{	
					$$('div#accordion h4.opened').each(function(closeItem) {
						$(closeItem).removeClassName('opened');
						var closeContent = closeItem.nextSiblings();
						var blindNavi = new Effect.BlindUp(closeContent[0], { duration:0.5 });
					});
					var openContent = naviItem.nextSiblings();
					var blindNavi = new Effect.BlindDown(openContent[0], { duration:0.5 });
					naviItem.addClassName('opened');
				}
			});
		});
	}
});

var o = function(s)
{
	if (debug) console.log(s);
}


// form_validation version 3.0
//  ----------------------------
// | Euroweb Internet GmbH     |
//  ----------------------------
// $creator
// $modifier d.kressler
// $date 2010-11-23

var errorMsgNum = "Bitte pr&uuml;fen Sie, ob Ihre Eingabe nur aus Zahlen besteht.";
var errorMsgEmpty = "Dieses Feld muss ausgef&uuml;llt werden.";
var errorMsgMail = "Bitte pr&uuml;fen Sie, ob Ihre eingegebene E-Mail-Adresse richtig geschrieben wurde.";
var errorMsgSelect = "Es muss eine Auswahl getroffen werden.";
var errorMsgDefault = "Feldeingabe fehlerhaft!";

/* DO NOT TOUCH BELOW ********************************/
var error = 0;
var currentLabel = '';
var currentField = '';
var klasse = '';
var newClass = '';

function validateForm(formular) 
{
	error = 0;
	for (var i = 0; i < document.getElementsByTagName("label").length; i++) 
	{
		currentLabel = document.getElementsByTagName("label")[i];
		
		if (currentLabel.htmlFor)
		{
			currentField = document.getElementById(currentLabel.htmlFor);
		}
		checkField(currentLabel, currentField);
	} // end for

	if (error === 0) 
		return true;
	else 
		return false;
}

var checkField = function(currentLabel, currentField)
{
	klasse = currentLabel.className;
	newClass = currentLabel.className.replace(/ error/, '');
	// Check if the current label belongs to the form we want to validate
	if (currentField) 
	{					
		// Rueckruf exists: Mark phone number field as required
		if (currentField.name == 'Rueckruf') 
		{
			if (currentField.checked == true) 
			{
				document.getElementById('label-telefon').className += ' required rueckruf';
			} else 
			{
				var newTelClass = document.getElementById('label-telefon').className.replace(/ required rueckruf/, '');
				document.getElementById('label-telefon').className = newTelClass;
			}
		}
		
		// required field (but neither numeric nor an e-mail)
		if (klasse.match(/required/) != null) 
		{
			if (currentField.tagName == 'SELECT') 
			{
				if (currentField.childNodes[1].selected)
				{
					currentLabel.className = newClass;
					currentLabel.className += ' error';
					triggerErrorSpan(currentLabel, "select");
					error = 1;
				} else 
				{
					currentLabel.className = newClass;
					removeErrorSpan(currentLabel, null);
				}
			} 
			else if (currentField.type == 'checkbox') 
			{
				if (currentField.checked == false) 
				{
					currentLabel.className = newClass;
					currentLabel.className += ' error';
					triggerErrorSpan(currentLabel, "select");
					error = 1;
				} else 
				{
					currentLabel.className = newClass;
					removeErrorSpan(currentLabel);
				}
			} 
			else 
			{
				if (currentField.value == '') 
				{
					currentLabel.className = newClass;
					currentLabel.className += ' error';
					triggerErrorSpan(currentLabel, "empty");
					error = 1;
				} else
				{
					currentLabel.className = newClass;
					removeErrorSpan(currentLabel);
				}
			}
			
		}
		// numeric field
		if (klasse.match(/number/) != null)
		{
			var numeric = isNumber(currentField);
			if (!numeric && !klasse.match(/required/) && currentField.value != '') 
			{
				currentLabel.className = newClass;
				currentLabel.className += ' error';
				triggerErrorSpan(currentLabel, "num");
				error = 1;
			} else 
			{
				currentLabel.className = newClass;
				removeErrorSpan(currentLabel);
			}
			if (!numeric && klasse.match(/required/)) 
			{
				currentLabel.className = newClass;
				currentLabel.className += ' error';
				triggerErrorSpan(currentLabel, "num");
				error = 1;
			} else 
			{
				if (error == 0) 
				{
					currentLabel.className = newClass;
					removeErrorSpan(currentLabel);
				}
			}
			return error;
		}
		
		// e-mail address
		if (klasse.match(/mail/) != null) 
		{
			var valid = isMailValid(currentField);
			if (!valid && currentField.value != '') 
			{
				currentLabel.className = newClass;
				currentLabel.className += ' error';
				triggerErrorSpan(currentLabel, "mail");
				error = 1;
			} else {
				currentLabel.className = newClass;
				removeErrorSpan(currentLabel);
			}
			if (!valid && klasse.match(/required/)) 
			{
				currentLabel.className = newClass;
				currentLabel.className += ' error';
				triggerErrorSpan(currentLabel, "mail");
				error = 1;
			} else 
			{
				if (error == 0) 
				{
					currentLabel.className = newClass;
					removeErrorSpan(currentLabel);
				}
			}
		}
		return error;
	}		
}

// Additional functions for numeric and e-mail validation
function isNumber(field) {
	var returnvar = (isNaN(parseInt(field.value)) == true) ? false : true;
	return returnvar;
}

function isMailValid(field) {
	var returnvar = (field.value.match(/^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/)) ? true : false;
	return returnvar;
}

function triggerErrorSpan(currentLabel, type)
{
	switch (type)
	{
		case "num":
			var errorSpanText = errorMsgNum; 
		break;
		case "text":
			var errorSpanText = errorMsgText; 
		break;
		case "empty":
			var errorSpanText = errorMsgEmpty;
		break;
		case "mail":
			var errorSpanText = errorMsgMail; 
		break;
		case "select":
			var errorSpanText = errorMsgSelect; 
		break;
		default:
			var errorSpanText = errorMsgDefault; 	
	}
	
	var labelId = currentLabel.getAttribute('id');
	
	if (document.getElementById("error-"+labelId) == null)
	{
		var errorSpan = document.createElement('span');
		
		var innerSpan = document.createElement('span');
		var triangle = document.createElement('span');
		
		currentLabel.appendChild(errorSpan);
		currentLabel.setAttribute("style", "position:relative");
				
		errorSpan.appendChild(triangle);
		errorSpan.appendChild(innerSpan);
		errorSpan.setAttribute("id", "error-"+labelId);
		//errorSpan.setAttribute("class", "errorSpan");
		errorSpan.className = "errorSpan";
		
		//triangle.setAttribute("class", "triangle");
		triangle.className = "triangle";
		//innerSpan.setAttribute("class", "errorMessage");
		innerSpan.className = "errorMessage";
		innerSpan.innerHTML=errorSpanText;
	}
}

function removeErrorSpan(currentLabel)
{
	var labelId = currentLabel.getAttribute('id');
	if (document.getElementById("error-"+labelId) != null)
	{
		var Knoten = document.getElementById("error-"+labelId);
		document.getElementById(labelId).removeChild(Knoten);
	}
}

function addEvent(obj, evType, fn, useCapture)
{
	if (obj.addEventListener)
	{
		obj.addEventListener(evType, fn, useCapture);
		return true;
	} 
	else if (obj.attachEvent)
	{
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} 
	else 
	{
		//console.log("Handler could not be attached");
	}
} 

function getElementsByClassName(classname, node)  
{
    if(!node) node = document.getElementsByTagName("body")[0];
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}

var liveValidation = function()
{
	var form = getElementsByClassName('required', document);
	var form = form.concat(getElementsByClassName('number', document));
	var form = form.concat(getElementsByClassName('mail', document));
	
	for (i=0;i<form.length;i++)
	{
		var field = form[i].nextSibling.nextSibling;
		var label = form[i];
		addEvent(form[i].nextSibling.nextSibling, "blur", function(e)
		{
			e=e || window.event; 
			var field = (e.originalTarget) ? e.originalTarget : e.srcElement;
			var label = field.previousSibling.previousSibling;
			checkField(label, field);
		})
	}
}
addEvent(window, "load", liveValidation);

var formSuccessMsg = "Ihre Nachricht wurde erfolgreich versendet. <br /> Wir werden uns umgehend mit Ihrer Anfrage auseinandersetzen.";
/*************** SEND FORM ONTHEFLY *****************/
var submitOnFly = function()
{
	if($('bookingform'))
	{
		Event.observe('bookingform', 'submit', function(event)
		{
			Event.stop(event);
			if(validateForm($('bookingform')) === true)
			{
				var formData = $('bookingform').serialize(true);	
				new Ajax.Request('formmail/formmail.php', 
				{
					method: 'post',
					parameters: formData,
					onCreate: function()
					{
						$('bookingform').disable();
					},
					onSuccess: function(transport) 
					{
						$('bookingform').enable();
						$('bookingform').insert({before: '<p id="formNotice" style="display:none;">'+formSuccessMsg+'</p>'});
						$('bookingform').blindUp({afterFinish:function(){$('formNotice').appear();}});
					}
				});
			}
		});
	}
}
Event.observe(window, 'load', submitOnFly);


// -----------------------------------------------------------------------------------
//
//	Lightbox v2.04
//	by Lokesh Dhakar - http://www.lokeshdhakar.com
//	Last Modification: 20/5/08
//
//	For more information, visit:
//	http://lokeshdhakar.com/projects/lightbox2/
//
//	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
//  	- Free for use in both personal and commercial projects
//		- Attribution requires leaving author name, author link, and the license info intact.
//	
//  Thanks: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.com), and Thomas Fuchs(mir.aculo.us) for ideas, libs, and snippets.
//  		Artemy Tregubenko (arty.name) for cleanup and help in updating to latest ver of proto-aculous.
//
// -----------------------------------------------------------------------------------
/*

    Table of Contents
    -----------------
    Configuration

    Lightbox Class Declaration
    - initialize()
    - updateImageList()
    - start()
    - changeImage()
    - resizeImageContainer()
    - showImage()
    - updateDetails()
    - updateNav()
    - enableKeyboardNav()
    - disableKeyboardNav()
    - keyboardAction()
    - preloadNeighborImages()
    - end()
    
    Function Calls
    - document.observe()
   
*/
// -----------------------------------------------------------------------------------

//
//  Configurationl
//
LightboxOptions = Object.extend({
    fileLoadingImage:        'http://nevaforget.de/new/images/lightbox/loading.gif',     
    fileBottomNavCloseImage: 'http://nevaforget.de/new/images/lightbox/closelabel.gif',

    overlayOpacity: 0.8,   // controls transparency of shadow overlay

    animate: true,         // toggles resizing animations
    resizeSpeed: 7,        // controls the speed of the image resizing animations (1=slowest and 10=fastest)

    borderSize: 10,         //if you adjust the padding in the CSS, you will need to update this variable

	// When grouping images this is used to write: Image # of #.
	// Change it for non-english localization
	labelImage: "Bild",
	labelOf: "von"
}, window.LightboxOptions || {});

// -----------------------------------------------------------------------------------

var Lightbox = Class.create();

Lightbox.prototype = {
    imageArray: [],
    activeImage: undefined,
    
    // 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();
        
        this.keyboardAction = this.keyboardAction.bindAsEventListener(this);

        if (LightboxOptions.resizeSpeed > 10) LightboxOptions.resizeSpeed = 10;
        if (LightboxOptions.resizeSpeed < 1)  LightboxOptions.resizeSpeed = 1;

	    this.resizeDuration = LightboxOptions.animate ? ((11 - LightboxOptions.resizeSpeed) * 0.15) : 0;
	    this.overlayDuration = LightboxOptions.animate ? 0.2 : 0;  // shadow fade in/out duration

        // 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.
        var size = (LightboxOptions.animate ? 250 : 1) + 'px';
        

        // 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">
        //                  <a href="#" id="bottomNavClose">
        //                      <img src="images/close.gif">
        //                  </a>
        //              </div>
        //          </div>
        //      </div>
        //  </div>


        var objBody = $$('body')[0];

		objBody.appendChild(Builder.node('div',{id:'overlay'}));
	
        objBody.appendChild(Builder.node('div',{id:'lightbox'}, [
            Builder.node('div',{id:'outerImageContainer'}, 
                Builder.node('div',{id:'imageContainer'}, [
                    Builder.node('img',{id:'lightboxImage'}), 
                    Builder.node('div',{id:'hoverNav'}, [
                        Builder.node('a',{id:'prevLink', href: '#' }),
                        Builder.node('a',{id:'nextLink', href: '#' })
                    ]),
                    Builder.node('div',{id:'loading'}, 
                        Builder.node('a',{id:'loadingLink', href: '#' }, 
                            Builder.node('img', {src: LightboxOptions.fileLoadingImage})
                        )
                    )
                ])
            ),
            Builder.node('div', {id:'imageDataContainer'},
                Builder.node('div',{id:'imageData'}, [
                    Builder.node('div',{id:'imageDetails'}, [
                        Builder.node('span',{id:'caption'}),
                        Builder.node('span',{id:'numberDisplay'})
                    ]),
                    Builder.node('div',{id:'bottomNav'},
                        Builder.node('a',{id:'bottomNavClose', href: '#' },
                            Builder.node('img', { src: LightboxOptions.fileBottomNavCloseImage })
                        )
                    )
                ])
            )
        ]));


		$('overlay').hide().observe('click', (function() { this.end(); }).bind(this));
		$('lightbox').hide().observe('click', (function(event) { if (event.element().id == 'lightbox') this.end(); }).bind(this));
		$('outerImageContainer').setStyle({ width: size, height: size });
		$('prevLink').observe('click', (function(event) { event.stop(); this.changeImage(this.activeImage - 1); }).bindAsEventListener(this));
		$('nextLink').observe('click', (function(event) { event.stop(); this.changeImage(this.activeImage + 1); }).bindAsEventListener(this));
		$('loadingLink').observe('click', (function(event) { event.stop(); this.end(); }).bind(this));
		$('bottomNavClose').observe('click', (function(event) { event.stop(); this.end(); }).bind(this));

        var th = this;
        (function(){
            var ids = 
                'overlay lightbox outerImageContainer imageContainer lightboxImage hoverNav prevLink nextLink loading loadingLink ' + 
                'imageDataContainer imageData imageDetails caption numberDisplay bottomNav bottomNavClose';   
            $w(ids).each(function(id){ th[id] = $(id); });
        }).defer();
    },

    //
    // 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() {   
        this.updateImageList = Prototype.emptyFunction;

        document.observe('click', (function(event){
            var target = event.findElement('a[rel^=lightbox]') || event.findElement('area[rel^=lightbox]');
            if (target) {
                event.stop();
                this.start(target);
            }
        }).bind(this));
    },
    
    //
    //  start()
    //  Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
    //
    start: function(imageLink) {    

        $$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'hidden' });

        // stretch overlay to fill page and fade in
        var arrayPageSize = this.getPageSize();
        $('overlay').setStyle({ width: arrayPageSize[0] + 'px', height: arrayPageSize[1] + 'px' });

        new Effect.Appear(this.overlay, { duration: this.overlayDuration, from: 0.0, to: LightboxOptions.overlayOpacity });

        this.imageArray = [];
        var imageNum = 0;       

        if ((imageLink.rel == 'lightbox')){
            // if image is NOT part of a set, add single image to imageArray
            this.imageArray.push([imageLink.href, imageLink.title]);         
        } else {
            // if image is part of a set..
            this.imageArray = 
                $$(imageLink.tagName + '[href][rel="' + imageLink.rel + '"]').
                collect(function(anchor){ return [anchor.href, anchor.title]; }).
                uniq();
            
            while (this.imageArray[imageNum][0] != imageLink.href) { imageNum++; }
        }

        // calculate top and left offset for the lightbox 
        var arrayPageScroll = document.viewport.getScrollOffsets();
        var lightboxTop = arrayPageScroll[1] + (document.viewport.getHeight() / 10);
        var lightboxLeft = arrayPageScroll[0];
        this.lightbox.setStyle({ top: lightboxTop + 'px', left: lightboxLeft + 'px' }).show();
        
        this.changeImage(imageNum);
    },

    //
    //  changeImage()
    //  Hide most elements and preload image in preparation for resizing image container.
    //
    changeImage: function(imageNum) {   
        
        this.activeImage = imageNum; // update global var

        // hide elements during transition
        if (LightboxOptions.animate) this.loading.show();
        this.lightboxImage.hide();
        this.hoverNav.hide();
        this.prevLink.hide();
        this.nextLink.hide();
		// HACK: Opera9 does not currently support scriptaculous opacity and appear fx
        this.imageDataContainer.setStyle({opacity: .0001});
        this.numberDisplay.hide();      
        
        var imgPreloader = new Image();
        
        // once image is preloaded, resize image container


        imgPreloader.onload = (function(){
            this.lightboxImage.src = this.imageArray[this.activeImage][0];
            this.resizeImageContainer(imgPreloader.width, imgPreloader.height);
        }).bind(this);
        imgPreloader.src = this.imageArray[this.activeImage][0];
    },

    //
    //  resizeImageContainer()
    //
    resizeImageContainer: function(imgWidth, imgHeight) {

        // get current width and height
        var widthCurrent  = this.outerImageContainer.getWidth();
        var heightCurrent = this.outerImageContainer.getHeight();

        // get new width and height
        var widthNew  = (imgWidth  + LightboxOptions.borderSize * 2);
        var heightNew = (imgHeight + LightboxOptions.borderSize * 2);

        // scalars based on change from old to new
        var xScale = (widthNew  / widthCurrent)  * 100;
        var yScale = (heightNew / heightCurrent) * 100;

        // calculate size difference between new and old image, and resize if necessary
        var wDiff = widthCurrent - widthNew;
        var hDiff = heightCurrent - heightNew;

        if (hDiff != 0) new Effect.Scale(this.outerImageContainer, yScale, {scaleX: false, duration: this.resizeDuration, queue: 'front'}); 
        if (wDiff != 0) new Effect.Scale(this.outerImageContainer, xScale, {scaleY: false, duration: this.resizeDuration, delay: this.resizeDuration}); 

        // if new and old image are same size and no scaling transition is necessary, 
        // do a quick pause to prevent image flicker.
        var timeout = 0;
        if ((hDiff == 0) && (wDiff == 0)){
            timeout = 100;
            if (Prototype.Browser.IE) timeout = 250;   
        }

        (function(){
            this.prevLink.setStyle({ height: imgHeight + 'px' });
            this.nextLink.setStyle({ height: imgHeight + 'px' });
            this.imageDataContainer.setStyle({ width: widthNew + 'px' });

            this.showImage();
        }).bind(this).delay(timeout / 1000);
    },
    
    //
    //  showImage()
    //  Display image and begin preloading neighbors.
    //
    showImage: function(){
        this.loading.hide();
        new Effect.Appear(this.lightboxImage, { 
            duration: this.resizeDuration, 
            queue: 'end', 
            afterFinish: (function(){ this.updateDetails(); }).bind(this) 
        });
        this.preloadNeighborImages();
    },

    //
    //  updateDetails()
    //  Display caption, image number, and bottom nav.
    //
    updateDetails: function() {
    
        // if caption is not null
        if (this.imageArray[this.activeImage][1] != ""){
            this.caption.update(this.imageArray[this.activeImage][1]).show();
        }
        
        // if image is part of set display 'Image x of x' 
        if (this.imageArray.length > 1){
            this.numberDisplay.update( LightboxOptions.labelImage + ' ' + (this.activeImage + 1) + ' ' + LightboxOptions.labelOf + '  ' + this.imageArray.length).show();
        }

        new Effect.Parallel(
            [ 
                new Effect.SlideDown(this.imageDataContainer, { sync: true, duration: this.resizeDuration, from: 0.0, to: 1.0 }), 
                new Effect.Appear(this.imageDataContainer, { sync: true, duration: this.resizeDuration }) 
            ], 
            { 
                duration: this.resizeDuration, 
                afterFinish: (function() {
	                // update overlay size and update nav
	                var arrayPageSize = this.getPageSize();
	                this.overlay.setStyle({ height: arrayPageSize[1] + 'px' });
	                this.updateNav();
                }).bind(this)
            } 
        );
    },

    //
    //  updateNav()
    //  Display appropriate previous and next hover navigation.
    //
    updateNav: function() {

        this.hoverNav.show();               

        // if not first image in set, display prev image button
        if (this.activeImage > 0) this.prevLink.show();

        // if not last image in set, display next image button
        if (this.activeImage < (this.imageArray.length - 1)) this.nextLink.show();
        
        this.enableKeyboardNav();
    },

    //
    //  enableKeyboardNav()
    //
    enableKeyboardNav: function() {
        document.observe('keydown', this.keyboardAction); 
    },

    //
    //  disableKeyboardNav()
    //
    disableKeyboardNav: function() {
        document.stopObserving('keydown', this.keyboardAction); 
    },

    //
    //  keyboardAction()
    //
    keyboardAction: function(event) {
        var keycode = event.keyCode;

        var escapeKey;
        if (event.DOM_VK_ESCAPE) {  // mozilla
            escapeKey = event.DOM_VK_ESCAPE;
        } else { // ie
            escapeKey = 27;
        }

        var key = String.fromCharCode(keycode).toLowerCase();
        
        if (key.match(/x|o|c/) || (keycode == escapeKey)){ // close lightbox
            this.end();
        } else if ((key == 'p') || (keycode == 37)){ // display previous image
            if (this.activeImage != 0){
                this.disableKeyboardNav();
                this.changeImage(this.activeImage - 1);
            }
        } else if ((key == 'n') || (keycode == 39)){ // display next image
            if (this.activeImage != (this.imageArray.length - 1)){
                this.disableKeyboardNav();
                this.changeImage(this.activeImage + 1);
            }
        }
    },

    //
    //  preloadNeighborImages()
    //  Preload previous and next images.
    //
    preloadNeighborImages: function(){
        var preloadNextImage, preloadPrevImage;
        if (this.imageArray.length > this.activeImage + 1){
            preloadNextImage = new Image();
            preloadNextImage.src = this.imageArray[this.activeImage + 1][0];
        }
        if (this.activeImage > 0){
            preloadPrevImage = new Image();
            preloadPrevImage.src = this.imageArray[this.activeImage - 1][0];
        }
    
    },

    //
    //  end()
    //
    end: function() {
        this.disableKeyboardNav();
        this.lightbox.hide();
        new Effect.Fade(this.overlay, { duration: this.overlayDuration });
        $$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'visible' });
    },

    //
    //  getPageSize()
    //
    getPageSize: function() {
	        
	     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;
		
		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;
		}
	
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){	
			pageWidth = xScroll;		
		} else {
			pageWidth = windowWidth;
		}

		return [pageWidth,pageHeight];
	}
}


/*!
   SoundManager 2: Javascript Sound for the Web
   --------------------------------------------
   http://schillmania.com/projects/soundmanager2/

   Copyright (c) 2008, Scott Schiller. All rights reserved.
   Code licensed under the BSD License:
   http://schillmania.com/projects/soundmanager2/license.txt

   V2.95a.20090717
*/

var soundManager = null;

function SoundManager(smURL,smID) {
 
  this.flashVersion = 9;           // version of flash to require, either 8 or 9. Some API features require Flash 9.
  this.debugMode = false;           // enable debugging output (div#soundmanager-debug, OR console if available + configured)
  this.useConsole = false;          // use firebug/safari console.log()-type debug console if available
  this.consoleOnly = false;        // if console is being used, do not create/write to #soundmanager-debug
  this.waitForWindowLoad = false;  // force SM2 to wait for window.onload() before trying to call soundManager.onload()
  this.nullURL = 'null.mp3';       // path to "null" (empty) MP3 file, used to unload sounds (Flash 8 only)
  this.allowPolling = true;        // allow flash to poll for status update (required for whileplaying() events, peak, sound spectrum functions to work.)
  this.useFastPolling = false;     // uses 1 msec flash timer interval (vs. default of 20) for higher callback frequency, best combined with useHighPerformance
  this.useMovieStar = false;	   // enable support for Flash 9.0r115+ (codename "MovieStar") MPEG4 audio + video formats (AAC, M4V, FLV, MOV etc.)
  this.bgColor = '#ffffff';	       // movie (.swf) background color, '#000000' useful if showing on-screen/full-screen video etc.
  this.useHighPerformance = false; // position:fixed flash movie can help increase js/flash speed, minimize lag
  this.flashLoadTimeout = 1000;    // msec to wait for flash movie to load before failing (0 = infinity)
  this.wmode = null;	   		   // mode to render the flash movie in - null, transparent, opaque (last two allow layering of HTML on top)
  this.allowFullScreen = true;     // enter full-screen (via double-click on movie) for flash 9+ video

  this.defaultOptions = {
    'autoLoad': false,             // enable automatic loading (otherwise .load() will be called on demand with .play(), the latter being nicer on bandwidth - if you want to .load yourself, you also can)
    'stream': true,                // allows playing before entire file has loaded (recommended)
    'autoPlay': false,             // enable playing of file as soon as possible (much faster if "stream" is true)
    'onid3': null,                 // callback function for "ID3 data is added/available"
    'onload': null,                // callback function for "load finished"
    'whileloading': null,          // callback function for "download progress update" (X of Y bytes received)
    'onplay': null,                // callback for "play" start
    'onpause': null,               // callback for "pause"
    'onresume': null,              // callback for "resume" (pause toggle)
    'whileplaying': null,          // callback during play (position update)
    'onstop': null,                // callback for "user stop"
    'onfinish': null,              // callback function for "sound finished playing"
    'onbeforefinish': null,        // callback for "before sound finished playing (at [time])"
    'onbeforefinishtime': 5000,    // offset (milliseconds) before end of sound to trigger beforefinish (eg. 1000 msec = 1 second)
    'onbeforefinishcomplete':null, // function to call when said sound finishes playing
    'onjustbeforefinish':null,     // callback for [n] msec before end of current sound
    'onjustbeforefinishtime':200,  // [n] - if not using, set to 0 (or null handler) and event will not fire.
    'multiShot': true,             // let sounds "restart" or layer on top of each other when played multiple times, rather than one-shot/one at a time
    'multiShotEvents': false,      // fire multiple sound events (currently onfinish() only) when multiShot is enabled
    'position': null,              // offset (milliseconds) to seek to within loaded sound data.
    'pan': 0,                      // "pan" settings, left-to-right, -100 to 100
    'volume': 100                  // self-explanatory. 0-100, the latter being the max.
  };

  this.flash9Options = {           // flash 9-only options, merged into defaultOptions if flash 9 is being used
    'isMovieStar': null,	  	   // "MovieStar" MPEG4 audio/video mode. Null (default) = auto detect MP4, AAC etc. based on URL. true = force on, ignore URL
    'usePeakData': true,          // enable left/right channel peak (level) data
    'useWaveformData': true,      // enable sound spectrum (raw waveform data) - WARNING: CPU-INTENSIVE: may set CPUs on fire.
    'useEQData': true,            // enable sound EQ (frequency spectrum data) - WARNING: Also CPU-intensive.
    'onbufferchange': null,	   	   // callback for "isBuffering" property change
    'ondataerror': null			   // callback for waveform/eq data access error (flash playing audio in other tabs/domains)
  };

  this.movieStarOptions = {        // flash 9.0r115+ MPEG4 audio/video options, merged into defaultOptions if flash 9 + movieStar mode is enabled
    'onmetadata': null,		   	   // callback for when video width/height etc. are received
    'useVideo': true,		   	   // if loading movieStar content, whether to show video
    'bufferTime': null		   	   // seconds of data to buffer before playback begins (null = flash default of 0.1 seconds - if AAC playback is gappy, try up to 3 seconds)
  };

  // jslint global declarations
  /*global SM2_DEFER, sm2Debugger, alert, console, document, navigator, setTimeout, window */

  var SMSound = null; // defined later

  var _s = this;
  this.version = null;
  this.versionNumber = 'V2.95a.20090717';
  this.movieURL = null;
  this.url = null;
  this.altURL = null;
  this.swfLoaded = false;
  this.enabled = false;
  this.o = null;
  this.id = (smID||'sm2movie');
  this.oMC = null;
  this.sounds = {};
  this.soundIDs = [];
  this.muted = false;
  this.isFullScreen = false; // set later by flash 9+
  this.isIE = (navigator.userAgent.match(/MSIE/i));
  this.isSafari = (navigator.userAgent.match(/safari/i));
  this.debugID = 'soundmanager-debug';
  this.debugURLParam = /([#?&])debug=1/i;
  this.specialWmodeCase = false;
  this._onready = [];
  this._debugOpen = true;
  this._didAppend = false;
  this._appendSuccess = false;
  this._didInit = false;
  this._disabled = false;
  this._windowLoaded = false;
  this._hasConsole = (typeof console != 'undefined' && typeof console.log != 'undefined');
  this._debugLevels = ['log','info','warn','error'];
  this._defaultFlashVersion = 8;
  this._oRemoved = null;
  this._oRemovedHTML = null;

  var _$ = function(sID) {
    return document.getElementById(sID);
  };

  this.filePatterns = {
	flash8: /\.mp3(\?.*)?$/i,
	flash9: /\.mp3(\?.*)?$/i
  };

  this.netStreamTypes = ['aac','flv','mov','mp4','m4v','f4v','m4a','mp4v','3gp','3g2']; // Flash v9.0r115+ "moviestar" formats
  this.netStreamPattern = new RegExp('\\.('+this.netStreamTypes.join('|')+')(\\?.*)?$','i');

  this.filePattern = null;
  this.features = {
	buffering: false,
    peakData: false,
    waveformData: false,
    eqData: false,
    movieStar: false
  };

  this.sandbox = {
    'type': null,
    'types': {
      'remote': 'remote (domain-based) rules',
      'localWithFile': 'local with file access (no internet access)',
      'localWithNetwork': 'local with network (internet access only, no local access)',
      'localTrusted': 'local, trusted (local + internet access)'
    },
    'description': null,
    'noRemote': null,
    'noLocal': null
  };

  this._setVersionInfo = function() {
    if (_s.flashVersion != 8 && _s.flashVersion != 9) {
      alert('soundManager.flashVersion must be 8 or 9. "'+_s.flashVersion+'" is invalid. Reverting to '+_s._defaultFlashVersion+'.');
      _s.flashVersion = _s._defaultFlashVersion;
    }
    _s.version = _s.versionNumber+(_s.flashVersion==9?' (AS3/Flash 9)':' (AS2/Flash 8)');
    // set up default options
	if (_s.flashVersion > 8) {
	  _s.defaultOptions = _s._mergeObjects(_s.defaultOptions,_s.flash9Options);
	  _s.features.buffering = true;
	}
    if (_s.flashVersion > 8 && _s.useMovieStar) {
      // flash 9+ support for movieStar formats as well as MP3
      _s.defaultOptions = _s._mergeObjects(_s.defaultOptions,_s.movieStarOptions);
      _s.filePatterns.flash9 = new RegExp('\\.(mp3|'+_s.netStreamTypes.join('|')+')(\\?.*)?$','i');
      _s.features.movieStar = true;
    } else {
      _s.useMovieStar = false;
      _s.features.movieStar = false;
    }
    _s.filePattern = _s.filePatterns[(_s.flashVersion!=8?'flash9':'flash8')];
    _s.movieURL = (_s.flashVersion==8?'soundmanager2.swf':'soundmanager2_flash9.swf');
    _s.features.peakData = _s.features.waveformData = _s.features.eqData = (_s.flashVersion>8);
  };

  this._overHTTP = (document.location?document.location.protocol.match(/http/i):null);
  this._waitingforEI = false;
  this._initPending = false;
  this._tryInitOnFocus = (this.isSafari && typeof document.hasFocus == 'undefined');
  this._isFocused = (typeof document.hasFocus != 'undefined'?document.hasFocus():null);
  this._okToDisable = !this._tryInitOnFocus;

  this.useAltURL = !this._overHTTP; // use altURL if not "online"

  var flashCPLink = 'http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html';

  this.strings = {
    notReady: 'Not loaded yet - wait for soundManager.onload() before calling sound-related methods',
    appXHTML: 'soundManager._createMovie(): appendChild/innerHTML set failed. May be app/xhtml+xml DOM-related.',
    localFail: 'soundManager: Loading this page from local/network file system (not over HTTP?) Flash security likely restricting JS-Flash access. Consider adding current URL to "trusted locations" in the Flash player security settings manager at '+flashCPLink+', or simply serve this content over HTTP.',
    waitFocus: 'soundManager: Special case: Waiting for focus-related event..',
    waitImpatient: 'soundManager: Getting impatient, still waiting for Flash.. ;)',
    waitForever: 'soundManager: Waiting indefinitely for Flash...',
    needFunction: 'soundManager.onready(): Function object expected'
  };

  // --- public methods ---
  
  this.supported = function() {
    return (_s._didInit && !_s._disabled);
  };

  this.getMovie = function(smID) {
    return _s.isIE?window[smID]:(_s.isSafari?_$(smID)||document[smID]:_$(smID));
  };

  this.loadFromXML = function(sXmlUrl) {
    try {
      _s.o._loadFromXML(sXmlUrl);
    } catch(e) {
      _s._failSafely();
      return true;
    }
  };

  this.createSound = function(oOptions) {
	var _cs = 'soundManager.createSound(): ';
    if (!_s._didInit) {
	  throw _s._complain(_cs+_s.strings.notReady,arguments.callee.caller);
	}
    if (arguments.length == 2) {
      // function overloading in JS! :) ..assume simple createSound(id,url) use case
      oOptions = {'id':arguments[0],'url':arguments[1]};
    }
    var thisOptions = _s._mergeObjects(oOptions); // inherit SM2 defaults
    var _tO = thisOptions; // alias
    if (_tO.id.toString().charAt(0).match(/^[0-9]$/)) { // hopefully this isn't buggy regexp-fu. :D
	  var complaint = _cs+'Warning: Sound ID "'+_tO.id+'" should be a string, starting with a non-numeric character';
	  _s._wD(complaint,2);
	}
    _s._wD(_cs+_tO.id+' ('+_tO.url+')',1);
    if (_s._idCheck(_tO.id,true)) {
      _s._wD(_cs+_tO.id+' exists',1);
      return _s.sounds[_tO.id];
    }
    if (_s.flashVersion > 8 && _s.useMovieStar) {
	  if (_tO.isMovieStar === null) {
	    _tO.isMovieStar = (_tO.url.match(_s.netStreamPattern)?true:false);
	  }
	  if (_tO.isMovieStar) {
	    _s._wD(_cs+'using MovieStar handling');
	  }
	  if (_tO.isMovieStar && (_tO.usePeakData || _tO.useWaveformData || _tO.useEQData)) {
	    _s._wD('Warning: peak/waveform/eqData features unsupported for non-MP3 formats');
	    _tO.usePeakData = false;
		_tO.useWaveformData = false;
		_tO.useEQData = false;
	  }
    }
    _s.sounds[_tO.id] = new SMSound(_tO);
    _s.soundIDs[_s.soundIDs.length] = _tO.id;
    // AS2:
    if (_s.flashVersion == 8) {
      _s.o._createSound(_tO.id,_tO.onjustbeforefinishtime);
    } else {
      _s.o._createSound(_tO.id,_tO.url,_tO.onjustbeforefinishtime,_tO.usePeakData,_tO.useWaveformData,_tO.useEQData,_tO.isMovieStar,(_tO.isMovieStar?_tO.useVideo:false),(_tO.isMovieStar?_tO.bufferTime:false));
    }
    if (_tO.autoLoad || _tO.autoPlay) {
      // TODO: does removing timeout here cause problems?
        if (_s.sounds[_tO.id]) {
          _s.sounds[_tO.id].load(_tO);
        }
    }
    if (_tO.autoPlay) {
	  _s.sounds[_tO.id].play();
	}
    return _s.sounds[_tO.id];
  };

  this.createVideo = function(oOptions) {
    if (arguments.length==2) {
      oOptions = {'id':arguments[0],'url':arguments[1]};
    }
    if (_s.flashVersion >= 9) {
      oOptions.isMovieStar = true;
      oOptions.useVideo = true;
    } else {
      _s._wD('soundManager.createVideo(): flash 9 required for video. Exiting.',2);
      return false;
    }
    if (!_s.useMovieStar) {
      _s._wD('soundManager.createVideo(): MovieStar mode not enabled. Exiting.',2);
    }
    return _s.createSound(oOptions);
  };

  this.destroySound = function(sID,bFromSound) {
    // explicitly destroy a sound before normal page unload, etc.
    if (!_s._idCheck(sID)) {
      return false;
    }
    for (var i=0; i<_s.soundIDs.length; i++) {
      if (_s.soundIDs[i] == sID) {
	    _s.soundIDs.splice(i,1);
        continue;
      }
    }
    // conservative option: avoid crash with ze flash 8
    // calling destroySound() within a sound onload() might crash firefox, certain flavours of winXP + flash 8??
    // if (_s.flashVersion != 8) {
      _s.sounds[sID].unload();
    // }
    if (!bFromSound) {
      // ignore if being called from SMSound instance
      _s.sounds[sID].destruct();
    }
    delete _s.sounds[sID];
  };

  this.destroyVideo = this.destroySound;

  this.load = function(sID,oOptions) {
    if (!_s._idCheck(sID)) {
      return false;
    }
    _s.sounds[sID].load(oOptions);
  };

  this.unload = function(sID) {
    if (!_s._idCheck(sID)) {
      return false;
    }
    _s.sounds[sID].unload();
  };

  this.play = function(sID,oOptions) {
    if (!_s._didInit) {
	  throw _s._complain('soundManager.play(): '+_s.strings.notReady,arguments.callee.caller);
	}
    if (!_s._idCheck(sID)) {
      if (typeof oOptions != 'Object') {
		oOptions = {url:oOptions}; // overloading use case: play('mySound','/path/to/some.mp3');
	  }
      if (oOptions && oOptions.url) {
        // overloading use case, creation + playing of sound: .play('someID',{url:'/path/to.mp3'});
        _s._wD('soundController.play(): attempting to create "'+sID+'"',1);
        oOptions.id = sID;
        _s.createSound(oOptions);
      } else {
        return false;
      }
    }
    _s.sounds[sID].play(oOptions);
  };

  this.start = this.play; // just for convenience

  this.setPosition = function(sID,nMsecOffset) {
    if (!_s._idCheck(sID)) {
      return false;
    }
    _s.sounds[sID].setPosition(nMsecOffset);
  };

  this.stop = function(sID) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s._wD('soundManager.stop('+sID+')',1);
    _s.sounds[sID].stop(); 
  };

  this.stopAll = function() {
    _s._wD('soundManager.stopAll()',1);
    for (var oSound in _s.sounds) {
      if (_s.sounds[oSound] instanceof SMSound) {
		_s.sounds[oSound].stop(); // apply only to sound objects
	  }
    }
  };

  this.pause = function(sID) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s.sounds[sID].pause();
  };

  this.pauseAll = function() {
    for (var i=_s.soundIDs.length; i--;) {
      _s.sounds[_s.soundIDs[i]].pause();
    }
  };

  this.resume = function(sID) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s.sounds[sID].resume();


  };

  this.resumeAll = function() {
    for (var i=_s.soundIDs.length; i--;) {
      _s.sounds[_s.soundIDs[i]].resume();
    }
  };

  this.togglePause = function(sID) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s.sounds[sID].togglePause();
  };

  this.setPan = function(sID,nPan) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s.sounds[sID].setPan(nPan);
  };

  this.setVolume = function(sID,nVol) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s.sounds[sID].setVolume(nVol);
  };

  this.mute = function(sID) {
	if (typeof sID != 'string') {
	  sID = null;
	}
    if (!sID) {
      _s._wD('soundManager.mute(): Muting all sounds');
      for (var i=_s.soundIDs.length; i--;) {
        _s.sounds[_s.soundIDs[i]].mute();
      }
      _s.muted = true;
    } else {
      if (!_s._idCheck(sID)) {
	    return false;
	  }
      _s._wD('soundManager.mute(): Muting "'+sID+'"');
      _s.sounds[sID].mute();
    }
  };

  this.muteAll = function() {
    _s.mute();
  };

  this.unmute = function(sID) {
    if (typeof sID != 'string') {
	  sID = null;
	}
    if (!sID) {
      _s._wD('soundManager.unmute(): Unmuting all sounds');
      for (var i=_s.soundIDs.length; i--;) {
        _s.sounds[_s.soundIDs[i]].unmute();
      }
      _s.muted = false;
    } else {
      if (!_s._idCheck(sID)) {
		return false;
	  }
      _s._wD('soundManager.unmute(): Unmuting "'+sID+'"');
      _s.sounds[sID].unmute();
    }
  };

  this.unmuteAll = function() {
    _s.unmute();
  };

  this.toggleMute = function(sID) {
    if (!_s._idCheck(sID)) {
	return false;
    }
    _s.sounds[sID].toggleMute();
  };

  this.getMemoryUse = function() {
    if (_s.flashVersion == 8) {
      // not supported in Flash 8
      return 0;
    }
    if (_s.o) {
      return parseInt(_s.o._getMemoryUse(),10);
    }
  };

  this.disable = function(bNoDisable) {
    // destroy all functions
    if (typeof bNoDisable == 'undefined') {
      bNoDisable = false;
    }
    if (_s._disabled) {
	  return false;
    }
    _s._disabled = true;
    _s._wD('soundManager.disable(): Shutting down',1);
    for (var i=_s.soundIDs.length; i--;) {
      _s._disableObject(_s.sounds[_s.soundIDs[i]]);
    }
    _s.initComplete(bNoDisable); // fire "complete", despite fail
    // _s._disableObject(_s); // taken out to allow reboot()
  };

  this.canPlayURL = function(sURL) {
    return (sURL?(sURL.match(_s.filePattern)?true:false):null);	
  };

  this.getSoundById = function(sID,suppressDebug) {
    if (!sID) {
	  throw new Error('SoundManager.getSoundById(): sID is null/undefined');
	}
    var result = _s.sounds[sID];
    if (!result && !suppressDebug) {
      _s._wD('"'+sID+'" is an invalid sound ID.',2);
      // soundManager._wD('trace: '+arguments.callee.caller);
    }
    return result;
  };

  this.onready = function(oMethod,oScope) {
    // queue a callback, with optional scope
    // a status object will be passed to your handler
	/*
    soundManager.onready(function(oStatus) {
	  alert('SM2 init success: '+oStatus.success);
	});
	*/
    if (oMethod && oMethod instanceof Function) {
      if (_s._didInit) {
        _s._wD('soundManager.onready(): Queueing handler');
      }
      if (!oScope) {
        oScope = window;
      }
      _s._addOnReady(oMethod,oScope);
      _s._processOnReady();
      return true;
	} else {
	  throw _s.strings.needFunction;
	}
  };

  this.oninitmovie = function() {
    // called after SWF has been appended to the DOM via JS (or retrieved from HTML)
    // this is a stub for your own scripts.
  };

  this.onload = function() {
    // window.onload() equivalent for SM2, ready to create sounds etc.
    // this is a stub for your own scripts.
    soundManager._wD('soundManager.onload()',1);
  };

  this.onerror = function() {
    // stub for user handler, called when SM2 fails to load/init
  };

  // --- "private" methods ---

  this._idCheck = this.getSoundById;



  this._complain = function(sMsg,oCaller) {
    // Try to create meaningful custom errors, w/stack trace to the "offending" line
    var sPre = 'Error: ';
    if (!oCaller) {
      return new Error(sPre+sMsg);
    }
    var e = new Error(''); // make a mistake.
    var stackMsg = null;
    if (e.stack) {
      // potentially dangerous: Try to return a meaningful stacktrace where provided (Mozilla)
  	  try {
	    var splitChar = '@';
	    var stackTmp = e.stack.split(splitChar);
	    stackMsg = stackTmp[4]; // try to return only the relevant bit, skipping internal SM2 shiz
	  } catch(ee) {
	    // oops.
	    stackMsg = e.stack;
	  }
	}
	if (typeof console != 'undefined' && typeof console.trace != 'undefined') {
	  console.trace();
	}
	var errorDesc = sPre+sMsg+'. \nCaller: '+oCaller.toString()+(e.stack?' \nTop of stacktrace: '+stackMsg:(e.message?' \nMessage: '+e.message:''));
	// See JS error/debug/console output for real error source, stack trace / message detail where possible.
	return new Error(errorDesc);
  };

  var _doNothing = function() {
    return false;
  };

  _doNothing._protected = true;

  this._disableObject = function(o) {
    for (var oProp in o) {
      if (typeof o[oProp] == 'function' && typeof o[oProp]._protected == 'undefined') {
		o[oProp] = _doNothing;
	  }
    }
    oProp = null;
  };

  this._failSafely = function(bNoDisable) {
    // general failure exception handler
    if (typeof bNoDisable == 'undefined') {
      bNoDisable = false;
    }
    if (!_s._disabled || bNoDisable) {
      _s._wD('soundManager: Failed to initialise.',2);
      _s.disable(bNoDisable);
    }
  };
  
  this._normalizeMovieURL = function(smURL) {
    var urlParams = null;
    if (smURL) {
      if (smURL.match(/\.swf(\?.*)?$/i)) {
        urlParams = smURL.substr(smURL.toLowerCase().lastIndexOf('.swf?')+4);
        if (urlParams) {
          return smURL; // assume user knows what they're doing
        }
      } else if (smURL.lastIndexOf('/') != smURL.length-1) {
        smURL = smURL+'/';
      }
    }
    return(smURL && smURL.lastIndexOf('/')!=-1?smURL.substr(0,smURL.lastIndexOf('/')+1):'./')+_s.movieURL;
  };

  this._getDocument = function() {
    return (document.body?document.body:(document.documentElement?document.documentElement:document.getElementsByTagName('div')[0]));
  };

  this._getDocument._protected = true;

  this._setPolling = function(bPolling,bHighPerformance) {
    if (!_s.o || !_s.allowPolling) {
	  return false;
	}
    _s.o._setPolling(bPolling,bHighPerformance);
  };

  this._createMovie = function(smID,smURL) {
    var specialCase = null;
    var remoteURL = (smURL?smURL:_s.url);
    var localURL = (_s.altURL?_s.altURL:remoteURL);
    if (_s.debugURLParam.test(window.location.href.toString())) {
      _s.debugMode = true; // allow force of debug mode via URL
    }
    if (_s._didAppend && _s._appendSuccess) {
	  return false; // ignore if already succeeded
	}
    _s._didAppend = true;
	
    // safety check for legacy (change to Flash 9 URL)
    _s._setVersionInfo();
    _s.url = _s._normalizeMovieURL(_s._overHTTP?remoteURL:localURL);
    smURL = _s.url;

    if (_s.useHighPerformance && _s.useMovieStar && _s.defaultOptions.useVideo === true) {
      specialCase = 'soundManager note: disabling highPerformance, not applicable with movieStar mode + useVideo';
      _s.useHighPerformance = false;
    }

    _s.wmode = (!_s.wmode && _s.useHighPerformance && !_s.useMovieStar?'transparent':_s.wmode);
    if (_s.wmode !== null && _s.flashLoadTimeout !== 0 && !_s.useHighPerformance && !_s.isIE && navigator.platform.match(/win32/i)) {
	  _s.specialWmodeCase = true;
      // extra-special case: movie doesn't load until scrolled into view when using wmode = anything but 'window' here
      // does not apply when using high performance (position:fixed means on-screen), OR infinite flash load timeout
      _s._wD('soundManager note: Removing wmode, preventing off-screen SWF loading issue');
      _s.wmode = null;
    }

    if (_s.flashVersion == 8) {
      _s.allowFullScreen = false;
    }

    var oEmbed = {
      name: smID,
      id: smID,
      src: smURL,
      width: '100%',
      height: '100%',
      quality: 'high',
      allowScriptAccess: 'always',
      bgcolor: _s.bgColor,
      pluginspage: 'http://www.macromedia.com/go/getflashplayer',
      type: 'application/x-shockwave-flash',
      wmode: _s.wmode,
      allowfullscreen: (_s.allowFullScreen?'true':'false')
    };

    if (!_s.wmode) {
	  delete oEmbed.wmode; // don't write empty attribute
    }

    var oMovie = null;
    var tmp = null;

    if (_s.isIE) {
      // IE is "special".
      oMovie = document.createElement('div');
      var movieHTML = '<object id="'+smID+'" data="'+smURL+'" type="application/x-shockwave-flash" width="100%" height="100%"><param name="movie" value="'+smURL+'" /><param name="AllowScriptAccess" value="always" /><param name="quality" value="high" />'+(_s.wmode?'<param name="wmode" value="'+_s.wmode+'" /> ':'')+'<param name="bgcolor" value="'+_s.bgColor+'" /><param name="allowFullScreen" value="'+(_s.allowFullScreen?'true':'false')+'" /><!-- --></object>';
    } else {
      oMovie = document.createElement('embed');
      for (tmp in oEmbed) {
	    if (oEmbed.hasOwnProperty(tmp)) {
          oMovie.setAttribute(tmp,oEmbed[tmp]);
	    }
      }
    }

    var oD = document.createElement('div');
    oD.id = _s.debugID+'-toggle';
    var oToggle = {
      position: 'fixed',
      bottom: '0px',
      right: '0px',
      width: '1.2em',
      height: '1.2em',
      lineHeight: '1.2em',
      margin: '2px',
      textAlign: 'center',
      border: '1px solid #999',
      cursor: 'pointer',
      background: '#fff',
      color: '#333',
      zIndex: 10001
    };

    oD.appendChild(document.createTextNode('-'));
    oD.onclick = _s._toggleDebug;
    oD.title = 'Toggle SM2 debug console';

    if (navigator.userAgent.match(/msie 6/i)) {
      oD.style.position = 'absolute';
      oD.style.cursor = 'hand';
    }

    for (tmp in oToggle) {
 	  if (oToggle.hasOwnProperty(tmp)) {
        oD.style[tmp] = oToggle[tmp];
	  }
    }

    var oTarget = _s._getDocument();

    if (oTarget) {

       
      _s.oMC = _$('sm2-container')?_$('sm2-container'):document.createElement('div');

      if (!_s.oMC.id) {
        _s.oMC.id = 'sm2-container';
        _s.oMC.className = 'movieContainer';
        // "hide" flash movie
        var s = null;
        var oEl = null;
        if (_s.useHighPerformance) {
          s = {
 	    position: 'fixed',
 	    width: '8px',
            height: '8px', // must be at least 6px for flash to run fast. odd? yes.
            bottom: '0px',
            left: '0px',
	    overflow: 'hidden'
	    // zIndex:-1 // sit behind everything else - potentially dangerous/buggy?
          };
        } else {
          s = {
            position: 'absolute',
	    width: '8px',
            height: '8px',
            top: '-9999px',
            left: '-9999px'
          };
        }
        var x = null;
        for (x in s) {
		  if (s.hasOwnProperty(x)) {
            _s.oMC.style[x] = s[x];
		  }
        }
        try {
		  if (!_s.isIE) {
    	    _s.oMC.appendChild(oMovie);
		  }
          oTarget.appendChild(_s.oMC);
		  if (_s.isIE) {
			oEl = _s.oMC.appendChild(document.createElement('div'));
			oEl.className = 'sm2-object-box';
			oEl.innerHTML = movieHTML;
          }
          _s._appendSuccess = true;
        } catch(e) {
          throw new Error(_s.strings.appXHTML);
        }
      } else {
        // it's already in the document.
        _s.oMC.appendChild(oMovie);
		if (_s.isIE) {
		  oEl = _s.oMC.appendChild(document.createElement('div'));
		  oEl.className = 'sm2-object-box';
		  oEl.innerHTML = movieHTML;
        }
        _s._appendSuccess = true;
      }

      if (!_$(_s.debugID) && ((!_s._hasConsole||!_s.useConsole)||(_s.useConsole && _s._hasConsole && !_s.consoleOnly))) {
        var oDebug = document.createElement('div');
        oDebug.id = _s.debugID;
        oDebug.style.display = (_s.debugMode?'block':'none');
        if (_s.debugMode && !_$(oD.id)) {
          try {
            oTarget.appendChild(oD);
          } catch(e2) {
            throw new Error(_s.strings.appXHTML);
          }
          oTarget.appendChild(oDebug);
        }
      }
      oTarget = null;
    }

    if (specialCase) {
      _s._wD(specialCase);
    }

    _s._wD('-- SoundManager 2 '+_s.version+(_s.useMovieStar?', MovieStar mode':'')+(_s.useHighPerformance?', high performance mode, ':', ')+((_s.useFastPolling?'fast':'normal')+' polling mode')+(_s.wmode?', wmode: '+_s.wmode:'')+' --',1);
    _s._wD('soundManager._createMovie(): Trying to load '+smURL+(!_s._overHTTP && _s.altURL?' (alternate URL)':''),1);
  };

  // aliased to this._wD()
  this._writeDebug = function(sText,sType,bTimestamp) {
    if (!_s.debugMode) {
	  return false;
	}
    if (typeof bTimestamp != 'undefined' && bTimestamp) {
      sText = sText + ' | '+new Date().getTime();
    }
    if (_s._hasConsole && _s.useConsole) {
      var sMethod = _s._debugLevels[sType];
      if (typeof console[sMethod] != 'undefined') {
	    console[sMethod](sText);
      } else {
        console.log(sText);
      }
      if (_s.useConsoleOnly) {
	return true;
      }
    }
    var sDID = 'soundmanager-debug';
    try {
      var o = _$(sDID);
      if (!o) {
		return false;
	  }
      var oItem = document.createElement('div');
      if (++_s._wdCount%2===0) {
	    oItem.className = 'sm2-alt';
      }
      // sText = sText.replace(/\n/g,'<br />');
      if (typeof sType == 'undefined') {
        sType = 0;
      } else {
        sType = parseInt(sType,10);
      }
      oItem.appendChild(document.createTextNode(sText));
      if (sType) {
        if (sType >= 2) {
		  oItem.style.fontWeight = 'bold';
		}
        if (sType == 3) {
		  oItem.style.color = '#ff3333';
		}
      }
      // o.appendChild(oItem); // top-to-bottom
      o.insertBefore(oItem,o.firstChild); // bottom-to-top
    } catch(e) {
      // oh well
    }
    o = null;
  };
  this._writeDebug._protected = true;
  this._wdCount = 0;
  this._wdCount._protected = true;
  this._wD = this._writeDebug;

  this._wDAlert = function(sText) { alert(sText); };

  if (window.location.href.indexOf('debug=alert')+1 && _s.debugMode) {
    _s._wD = _s._wDAlert;
  }

  this._toggleDebug = function() {
    var o = _$(_s.debugID);
    var oT = _$(_s.debugID+'-toggle');
    if (!o) {
	  return false;
	}
    if (_s._debugOpen) {
      // minimize
      oT.innerHTML = '+';
      o.style.display = 'none';
    } else {
      oT.innerHTML = '-';
      o.style.display = 'block';
    }
    _s._debugOpen = !_s._debugOpen;
  };

  this._toggleDebug._protected = true;

  this._debug = function() {
    _s._wD('--- soundManager._debug(): Current sound objects ---',1);
    for (var i=0,j=_s.soundIDs.length; i<j; i++) {
      _s.sounds[_s.soundIDs[i]]._debug();
    }
  };

  this._debugTS = function(sEventType,bSuccess,sMessage) {
    // troubleshooter debug hooks
    if (typeof sm2Debugger != 'undefined') {
	  try {
	    sm2Debugger.handleEvent(sEventType,bSuccess,sMessage);
	  } catch(e) {
	    // oh well	
	  }
    }
  };

  this._debugTS._protected = true;

  this._mergeObjects = function(oMain,oAdd) {
    // non-destructive merge
    var o1 = {}; // clone o1
    for (var i in oMain) {
	  if (oMain.hasOwnProperty(i)) {
        o1[i] = oMain[i];
	  }
    }
    var o2 = (typeof oAdd == 'undefined'?_s.defaultOptions:oAdd);
    for (var o in o2) {
      if (o2.hasOwnProperty(o) && typeof o1[o] == 'undefined') {
		o1[o] = o2[o];
	  }
    }
    return o1;
  };

  this.createMovie = function(sURL) {
    if (sURL) {
      _s.url = sURL;
    }
    _s._initMovie();
  };

  this.go = this.createMovie; // nice alias

  this._initMovie = function() {
    // attempt to get, or create, movie
    if (_s.o) {
	  return false; // may already exist
    }
    _s.o = _s.getMovie(_s.id); // (inline markup)
    if (!_s.o) {
      if (!_s.oRemoved) {
        // try to create
        _s._createMovie(_s.id,_s.url);
      } else {
        // try to re-append removed movie after reboot()
        if (!_s.isIE) {
          _s.oMC.appendChild(_s.oRemoved);
        } else {
          _s.oMC.innerHTML = _s.oRemovedHTML;
        }
        _s.oRemoved = null;
        _s._didAppend = true;
      }
      _s.o = _s.getMovie(_s.id);
    }
    if (_s.o) {
      _s._wD('soundManager._initMovie(): Got '+_s.o.nodeName+' element ('+(_s._didAppend?'created via JS':'static HTML')+')',1);
      if (_s.flashLoadTimeout>0) {
        _s._wD('soundManager._initMovie(): Waiting for ExternalInterface call from Flash..');
      }
    }
    if (typeof _s.oninitmovie == 'function') {
	  setTimeout(_s.oninitmovie,1);
    }
  };

  this.waitForExternalInterface = function() {
    if (_s._waitingForEI) {
	  return false;
	}
    _s._waitingForEI = true;
    if (_s._tryInitOnFocus && !_s._isFocused) {
      _s._wD(_s.strings.waitFocus);
      return false;
    }
    if (_s.flashLoadTimeout>0) {
      if (!_s._didInit) {
        _s._wD(_s.strings.waitImpatient);
      }
      setTimeout(function() {
        if (!_s._didInit) {
          _s._wD('soundManager: No Flash response within reasonable time after document load.\nPossible causes: Loading '+_s.movieURL+' failed, Flash version under '+_s.flashVersion+', no support, flash blocked or JS-Flash security error.',2);
          if (!_s._overHTTP) {
          _s._wD(_s.strings.localFail,2);
        }
        _s._debugTS('flashtojs',false,': Timed out'+(_s._overHTTP)?' (Check flash security or flash blockers)':' (No plugin/missing SWF?)');
      }
      // if still not initialized and no other options, give up
      if (!_s._didInit && _s._okToDisable) {
	_s._failSafely(true); // don't disable, for reboot()
      }
    },_s.flashLoadTimeout);
    } else if (!_s._didInit) {
      _s._wD(_s.strings.waitForever);
    }
  };

  this.handleFocus = function() {
    if (_s._isFocused || !_s._tryInitOnFocus) {
	  return true;
	}
    _s._okToDisable = true;
    _s._isFocused = true;
    _s._wD('soundManager.handleFocus()');
    if (_s._tryInitOnFocus) {
      // giant Safari 3.1 hack - assume window in focus if mouse is moving, since document.hasFocus() not currently implemented.
      window.removeEventListener('mousemove',_s.handleFocus,false);
    }
    // allow init to restart
    _s._waitingForEI = false;
    setTimeout(_s.waitForExternalInterface,500);
    // detach event
    if (window.removeEventListener) {
      window.removeEventListener('focus',_s.handleFocus,false);
    } else if (window.detachEvent) {
      window.detachEvent('onfocus',_s.handleFocus);
    }
  };

  this.initComplete = function(bNoDisable) {
    if (_s._didInit) {
	  return false;
	}
    _s._didInit = true;
    _s._wD('-- SoundManager 2 '+(_s._disabled?'failed to load':'loaded')+' ('+(_s._disabled?'security/load error':'OK')+') --',1);
    if (_s._disabled || bNoDisable) {
      _s._wD('soundManager.initComplete(): calling soundManager.onerror()',1);
	  _s._processOnReady();
      _s._debugTS('onload',false);
      _s.onerror.apply(window);
      return false;
    } else {
	  _s._debugTS('onload',true);
    }
    if (_s.waitForWindowLoad && !_s._windowLoaded) {
      _s._wD('soundManager: Waiting for window.onload()');
      if (window.addEventListener) {
        window.addEventListener('load',_s._initUserOnload,false);
      } else if (window.attachEvent) {
        window.attachEvent('onload',_s._initUserOnload);
      }
      return false;
    } else {
      if (_s.waitForWindowLoad && _s._windowLoaded) {
        _s._wD('soundManager: Document already loaded');
      }
      _s._initUserOnload();
    }
  };

  this._addOnReady = function(oMethod,oScope) {
    _s._onready.push({
	  'method': oMethod,
	  'scope': (oScope||null),
	  'fired': false
	});
  };

  this._processOnReady = function() {
	if (!_s._didInit) {
	  // not ready yet.
	  return false;
	}
    var status = {
	  success: (!_s._disabled)
    };
    var queue = [];
    for (var i=0, j=_s._onready.length; i<j; i++) {
	  if (_s._onready[i].fired !== true) {
		queue.push(_s._onready[i]);
	  }
    }
	if (queue.length) {
	  _s._wD('soundManager: Firing '+queue.length+' onready() item'+(queue.length>1?'s':''));
	  for (i=0, j=queue.length; i<j; i++) {
	    if (queue[i].scope) {
		  queue[i].method.apply(queue[i].scope,[status]);
	    } else {
		  queue[i].method(status);
	    }
	    queue[i].fired = true;
	  }
	}
  };

  this._initUserOnload = function() {
    window.setTimeout(function() {
      _s._processOnReady();
      _s._wD('soundManager.initComplete(): calling soundManager.onload()',1);
      // call user-defined "onload", scoped to window
      _s.onload.apply(window);
      _s._wD('soundManager.onload() complete',1);
    });
  };

  this.init = function() {
    _s._wD('-- soundManager.init() --');
    // called after onload()
    _s._initMovie();
    if (_s._didInit) {
      _s._wD('soundManager.init(): Already called?');
      return false;
    }
    // event cleanup
    if (window.removeEventListener) {
      window.removeEventListener('load',_s.beginDelayedInit,false);
    } else if (window.detachEvent) {
      window.detachEvent('onload',_s.beginDelayedInit);
    }
    try {
      _s._wD('Attempting to call Flash from JS..');
      _s.o._externalInterfaceTest(false); // attempt to talk to Flash
      if (!_s.allowPolling) {
	    _s._wD('Polling (whileloading()/whileplaying() support) is disabled.',1);
	  }
      _s._setPolling(true,_s.useFastPolling?true:false);
	  if (!_s.debugMode) {
		_s.o._disableDebug();
	  }
      _s.enabled = true;
      _s._debugTS('jstoflash',true);
    } catch(e) {
	  _s._wD('js/flash exception: '+e.toString());
	  _s._debugTS('jstoflash',false);
      _s._failSafely(true); // don't disable, for reboot()
      _s.initComplete();
      return false;
    }
    _s.initComplete();
  };

  this.beginDelayedInit = function() {
    _s._wD('soundManager.beginDelayedInit()');
    _s._windowLoaded = true;
    setTimeout(_s.waitForExternalInterface,500);
    setTimeout(_s.beginInit,20);
  };

  this.beginInit = function() {
    if (_s._initPending) {
	  return false;
	}
    _s.createMovie(); // ensure creation if not already done
    _s._initMovie();
    _s._initPending = true;
    return true;
  };

  this.domContentLoaded = function() {
    _s._wD('soundManager.domContentLoaded()');
    if (document.removeEventListener) {
	  document.removeEventListener('DOMContentLoaded',_s.domContentLoaded,false);
	}
    _s.go();
  };

  this._externalInterfaceOK = function() {
    // callback from flash for confirming that movie loaded, EI is working etc.
    if (_s.swfLoaded) {
	  return false;
	}
    _s._wD('soundManager._externalInterfaceOK()');
    _s._debugTS('swf',true);
    _s._debugTS('flashtojs',true);
    _s.swfLoaded = true;
    _s._tryInitOnFocus = false;

    if (_s.isIE) {
      // IE needs a timeout OR delay until window.onload - may need TODO: investigating
      setTimeout(_s.init,100);
    } else {
      _s.init();
    }

  };

  this._setSandboxType = function(sandboxType) {
    var sb = _s.sandbox;
    sb.type = sandboxType;
    sb.description = sb.types[(typeof sb.types[sandboxType] != 'undefined'?sandboxType:'unknown')];
    _s._wD('Flash security sandbox type: '+sb.type);
    if (sb.type == 'localWithFile') {
      sb.noRemote = true;
      sb.noLocal = false;
      _s._wD('Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html',2);
    } else if (sb.type == 'localWithNetwork') {
      sb.noRemote = false;
      sb.noLocal = true;
    } else if (sb.type == 'localTrusted') {
      sb.noRemote = false;
      sb.noLocal = false;
    }
  };

  this.reboot = function() {
    // attempt to reset and init SM2
    _s._wD('soundManager.reboot()');
    if (_s.soundIDs.length) {
      _s._wD('Destroying '+_s.soundIDs.length+' SMSound objects...');
    }
    for (var i=_s.soundIDs.length; i--;) {
      _s.sounds[_s.soundIDs[i]].destruct();
    }
    // trash ze flash
    try {
      if (_s.isIE) {
        _s.oRemovedHTML = _s.o.innerHTML;
      }
      _s.oRemoved = _s.o.parentNode.removeChild(_s.o);
      _s._wD('Flash movie removed.');
    } catch(e) {
      // uh-oh.
      _s._wD('Warning: Failed to remove flash movie.',2);
    }
    _s.enabled = false;
    _s._didInit = false;
    _s._waitingForEI = false;
    _s._initPending = false;
    _s._didAppend = false;
    _s._appendSuccess = false;

    _s._disabled = false;
    _s._waitingforEI = true;
    _s.swfLoaded = false;
    _s.soundIDs = {};
    _s.sounds = [];
    _s.o = null;
    for (i=_s._onready.length; i--;) {
	  _s._onready[i].fired = false;
    }
    _s._wD('soundManager: Rebooting...');
    window.setTimeout(soundManager.beginDelayedInit,20);
  };

  this.destruct = function() {
    _s._wD('soundManager.destruct()');
    _s.disable(true);
  };
  
  // SMSound (sound object)
  
  SMSound = function(oOptions) {
  var _t = this;
  this.sID = oOptions.id;
  this.url = oOptions.url;
  this.options = _s._mergeObjects(oOptions);
  this.instanceOptions = this.options; // per-play-instance-specific options
  this._iO = this.instanceOptions; // short alias

  // assign property defaults (volume, pan etc.)
  this.pan = this.options.pan;
  this.volume = this.options.volume;

  this._lastURL = null;

  this._debug = function() {
    if (_s.debugMode) {
    var stuff = null;
    var msg = [];
    var sF = null;
    var sfBracket = null;
    var maxLength = 64; // # of characters of function code to show before truncating
    for (stuff in _t.options) {
      if (_t.options[stuff] !== null) {
        if (_t.options[stuff] instanceof Function) {
	      // handle functions specially
	      sF = _t.options[stuff].toString();
	      sF = sF.replace(/\s\s+/g,' '); // normalize spaces
	      sfBracket = sF.indexOf('{');
	      msg[msg.length] = ' '+stuff+': {'+sF.substr(sfBracket+1,(Math.min(Math.max(sF.indexOf('\n')-1,maxLength),maxLength))).replace(/\n/g,'')+'... }';
	    } else {
	      msg[msg.length] = ' '+stuff+': '+_t.options[stuff];
	    }
      }
    }
    _s._wD('SMSound() merged options: {\n'+msg.join(', \n')+'\n}');
    }
  };

  this._debug();

  this.id3 = {
   /* 
    Name/value pairs set via Flash when available - see reference for names:
    http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001567.html
    (eg., this.id3.songname or this.id3['songname'])
   */
  };

  this.resetProperties = function(bLoaded) {
    _t.bytesLoaded = null;
    _t.bytesTotal = null;
    _t.position = null;
    _t.duration = null;
    _t.durationEstimate = null;
    _t.loaded = false;
    _t.playState = 0;
    _t.paused = false;
    _t.readyState = 0; // 0 = uninitialised, 1 = loading, 2 = failed/error, 3 = loaded/success
    _t.muted = false;
    _t.didBeforeFinish = false;
    _t.didJustBeforeFinish = false;
    _t.isBuffering = false;
    _t.instanceOptions = {};
    _t.instanceCount = 0;
    _t.peakData = {
      left: 0,
      right: 0
    };
    _t.waveformData = {
	  left: [],
	  right: []
    };
    _t.eqData = [];
  };

  _t.resetProperties();

  // --- public methods ---

  this.load = function(oOptions) {
    if (typeof oOptions != 'undefined') {
      _t._iO = _s._mergeObjects(oOptions);
      _t.instanceOptions = _t._iO;
    } else {
      oOptions = _t.options;
      _t._iO = oOptions;
      _t.instanceOptions = _t._iO;
      if (_t._lastURL && _t._lastURL != _t.url) {
        _s._wD('SMSound.load(): Using manually-assigned URL');
        _t._iO.url = _t.url;
        _t.url = null;
      }
    } 

    if (typeof _t._iO.url == 'undefined') {
      _t._iO.url = _t.url;
    }

    _s._wD('soundManager.load(): '+_t._iO.url,1);
    if (_t._iO.url == _t.url && _t.readyState !== 0 && _t.readyState != 2) {
      _s._wD('soundManager.load(): current URL already assigned.',1);
      return false;
    }
    _t.url = _t._iO.url;
    _t._lastURL = _t._iO.url;
    _t.loaded = false;
    _t.readyState = 1;
    _t.playState = 0; // (oOptions.autoPlay?1:0); // if autoPlay, assume "playing" is true (no way to detect when it actually starts in Flash unless onPlay is watched?)
    try {
      if (_s.flashVersion==8) {
        _s.o._load(_t.sID,_t._iO.url,_t._iO.stream,_t._iO.autoPlay,(_t._iO.whileloading?1:0));
      } else {
        _s.o._load(_t.sID,_t._iO.url,_t._iO.stream?true:false,_t._iO.autoPlay?true:false); // ,(_tO.whileloading?true:false)
        if (_t._iO.isMovieStar && _t._iO.autoLoad && !_t._iO.autoPlay) {
          // special case: MPEG4 content must start playing to load, then pause to prevent playing.
          _t.pause();
        }
      }
    } catch(e) {
      _s._wD('SMSound.load(): Exception: JS-Flash communication failed, or JS error.',2);
      _s._debugTS('onload',false);
      _s.onerror();
      _s.disable();
    }

  };

  this.unload = function() {
    // Flash 8/AS2 can't "close" a stream - fake it by loading an empty MP3
    // Flash 9/AS3: Close stream, preventing further load
    if (_t.readyState !== 0) {
      _s._wD('SMSound.unload(): "'+_t.sID+'"');
      if (_t.readyState != 2) { // reset if not error
        _t.setPosition(0,true); // reset current sound positioning
      }
      _s.o._unload(_t.sID,_s.nullURL);
      // reset load/status flags
      _t.resetProperties();
    }
  };

  this.destruct = function() {
    // kill sound within Flash
    _s._wD('SMSound.destruct(): "'+_t.sID+'"');
    _s.o._destroySound(_t.sID);
    _s.destroySound(_t.sID,true); // ensure deletion from controller
  };

  this.play = function(oOptions) {
    if (!oOptions) {
	  oOptions = {};
    }
    _t._iO = _s._mergeObjects(oOptions,_t._iO);
    _t._iO = _s._mergeObjects(_t._iO,_t.options);
    _t.instanceOptions = _t._iO;
    if (_t.playState == 1) {
      var allowMulti = _t._iO.multiShot;
      if (!allowMulti) {
        _s._wD('SMSound.play(): "'+_t.sID+'" already playing (one-shot)',1);
        return false;
      } else {
        _s._wD('SMSound.play(): "'+_t.sID+'" already playing (multi-shot)',1);
      }
    }
    if (!_t.loaded) {
      if (_t.readyState === 0) {
        _s._wD('SMSound.play(): Attempting to load "'+_t.sID+'"',1);
        // try to get this sound playing ASAP
        _t._iO.stream = true;
        _t._iO.autoPlay = true;
        // TODO: need to investigate when false, double-playing
        // if (typeof oOptions.autoPlay=='undefined') _tO.autoPlay = true; // only set autoPlay if unspecified here
        _t.load(_t._iO); // try to get this sound playing ASAP
      } else if (_t.readyState == 2) {
        _s._wD('SMSound.play(): Could not load "'+_t.sID+'" - exiting',2);
        return false;
      } else {
        _s._wD('SMSound.play(): "'+_t.sID+'" is loading - attempting to play..',1);
      }
    } else {
      _s._wD('SMSound.play(): "'+_t.sID+'"');
    }
    if (_t.paused) {
      _t.resume();
    } else {
      _t.playState = 1;
      if (!_t.instanceCount || _s.flashVersion > 8) {
		_t.instanceCount++;
	  }
      _t.position = (typeof _t._iO.position != 'undefined' && !isNaN(_t._iO.position)?_t._iO.position:0);
      if (_t._iO.onplay) {
		_t._iO.onplay.apply(_t);
	  }
      _t.setVolume(_t._iO.volume,true); // restrict volume to instance options only
      _t.setPan(_t._iO.pan,true);
      _s.o._start(_t.sID,_t._iO.loop||1,(_s.flashVersion==9?_t.position:_t.position/1000));
    }
  };

  this.start = this.play; // just for convenience

  this.stop = function(bAll) {
    if (_t.playState == 1) {
      _t.playState = 0;
      _t.paused = false;
      // if (_s.defaultOptions.onstop) _s.defaultOptions.onstop.apply(_s);
      if (_t._iO.onstop) {
		_t._iO.onstop.apply(_t);
	  }
      _s.o._stop(_t.sID,bAll);
      _t.instanceCount = 0;
      _t._iO = {};
      // _t.instanceOptions = _t._iO;
    }
  };

  this.setPosition = function(nMsecOffset,bNoDebug) {
    if (typeof nMsecOffset == 'undefined') {
      nMsecOffset = 0;
    }
    var offset = Math.min(_t.duration,Math.max(nMsecOffset,0)); // position >= 0 and <= current available (loaded) duration
    _t._iO.position = offset;
    if (!bNoDebug) {
      // _s._wD('SMSound.setPosition('+nMsecOffset+')'+(nMsecOffset != offset?', corrected value: '+offset:''));
    }
    _s.o._setPosition(_t.sID,(_s.flashVersion==9?_t._iO.position:_t._iO.position/1000),(_t.paused||!_t.playState)); // if paused or not playing, will not resume (by playing)
  };

  this.pause = function() {
    if (_t.paused || _t.playState === 0) {
	  return false;
	}
    _s._wD('SMSound.pause()');
    _t.paused = true;
    _s.o._pause(_t.sID);
    if (_t._iO.onpause) {
	  _t._iO.onpause.apply(_t);
	}
  };

  this.resume = function() {
    if (!_t.paused || _t.playState === 0) {
	  return false;
	}
    _s._wD('SMSound.resume()');
    _t.paused = false;
    _s.o._pause(_t.sID); // flash method is toggle-based (pause/resume)
    if (_t._iO.onresume) {
	  _t._iO.onresume.apply(_t);
	}
  };

  this.togglePause = function() {
    _s._wD('SMSound.togglePause()');
    if (_t.playState === 0) {
      _t.play({position:(_s.flashVersion==9?_t.position:_t.position/1000)});
      return false;
    }
    if (_t.paused) {
      _t.resume();
    } else {
      _t.pause();
    }
  };

  this.setPan = function(nPan,bInstanceOnly) {
    if (typeof nPan == 'undefined') {
      nPan = 0;
    }
    if (typeof bInstanceOnly == 'undefined') {
      bInstanceOnly = false;
    }
    _s.o._setPan(_t.sID,nPan);
    _t._iO.pan = nPan;
    if (!bInstanceOnly) {
      _t.pan = nPan;
    }
  };

  this.setVolume = function(nVol,bInstanceOnly) {
    if (typeof nVol == 'undefined') {
      nVol = 100;
    }
    if (typeof bInstanceOnly == 'undefined') {
      bInstanceOnly = false;
    }
    _s.o._setVolume(_t.sID,(_s.muted&&!_t.muted)||_t.muted?0:nVol);
    _t._iO.volume = nVol;
    if (!bInstanceOnly) {
      _t.volume = nVol;
    }
  };

  this.mute = function() {
    _t.muted = true;
    _s.o._setVolume(_t.sID,0);
  };

  this.unmute = function() {
    _t.muted = false;
    var hasIO = typeof _t._iO.volume != 'undefined';
    _s.o._setVolume(_t.sID,hasIO?_t._iO.volume:_t.options.volume);
  };

  this.toggleMute = function() {
    if (_t.muted) {
      _t.unmute(); 
    } else {
      _t.mute();
    }
  };

  // --- "private" methods called by Flash ---

  this._whileloading = function(nBytesLoaded,nBytesTotal,nDuration) {
    if (!_t._iO.isMovieStar) {
      _t.bytesLoaded = nBytesLoaded;
      _t.bytesTotal = nBytesTotal;
      _t.duration = Math.floor(nDuration);
      _t.durationEstimate = parseInt((_t.bytesTotal/_t.bytesLoaded)*_t.duration,10);
      if (_t.durationEstimate === undefined) {
	    // reported bug?
	    _t.durationEstimate = _t.duration;
      }
      if (_t.readyState != 3 && _t._iO.whileloading) {
  	    _t._iO.whileloading.apply(_t);
      }
    } else {
      _t.bytesLoaded = nBytesLoaded;
      _t.bytesTotal = nBytesTotal;
      _t.duration = Math.floor(nDuration);
      _t.durationEstimate = _t.duration;
      if (_t.readyState != 3 && _t._iO.whileloading) {
	_t._iO.whileloading.apply(_t);
      }
    }
  };

  this._onid3 = function(oID3PropNames,oID3Data) {
    // oID3PropNames: string array (names)
    // ID3Data: string array (data)
    _s._wD('SMSound._onid3(): "'+this.sID+'" ID3 data received.');
    var oData = [];
    for (var i=0,j=oID3PropNames.length; i<j; i++) {
      oData[oID3PropNames[i]] = oID3Data[i];
      // _s._wD(oID3PropNames[i]+': '+oID3Data[i]);
    }
    _t.id3 = _s._mergeObjects(_t.id3,oData);
    if (_t._iO.onid3) {
      _t._iO.onid3.apply(_t);
    }
  };

  this._whileplaying = function(nPosition,oPeakData,oWaveformDataLeft,oWaveformDataRight,oEQData) {

    if (isNaN(nPosition) || nPosition === null) {
      return false; // Flash may return NaN at times
    }
    if (_t.playState === 0 && nPosition > 0) {
      // can happen at the end of a video where nPosition == 33 for some reason, after finishing.???
      // can also happen with a normal stop operation. This resets the position to 0.
      // _s._writeDebug('Note: Not playing, but position = '+nPosition);
      nPosition = 0;	
    }
    _t.position = nPosition;
	if (_t._iO.usePeakData && typeof oPeakData != 'undefined' && oPeakData) {
	  _t.peakData = {
	   left: oPeakData.leftPeak,
	   right: oPeakData.rightPeak
	  };
	}
	if (_t._iO.useWaveformData && typeof oWaveformDataLeft != 'undefined' && oWaveformDataLeft) {
	  _t.waveformData = {
	   left: oWaveformDataLeft.split(','),
	   right: oWaveformDataRight.split(',')
	  };
	}
	if (_t._iO.useEQData && typeof oEQData != 'undefined' && oEQData) {
	  _t.eqData = oEQData;
	}
    if (_t.playState == 1) {
	  // special case/hack: ensure buffering is false (instant load from cache, thus buffering stuck at 1?)
	  if (_t.isBuffering) {
		_t._onbufferchange(0);
	  }
      if (_t._iO.whileplaying) {
	    _t._iO.whileplaying.apply(_t); // flash may call after actual finish
      }
      if (_t.loaded && _t._iO.onbeforefinish && _t._iO.onbeforefinishtime && !_t.didBeforeFinish && _t.duration-_t.position <= _t._iO.onbeforefinishtime) {
        _s._wD('duration-position &lt;= onbeforefinishtime: '+_t.duration+' - '+_t.position+' &lt= '+_t._iO.onbeforefinishtime+' ('+(_t.duration-_t.position)+')');
        _t._onbeforefinish();
      }
    }
  };

  this._onload = function(bSuccess) {
    bSuccess = (bSuccess==1?true:false);
    _s._wD('SMSound._onload(): "'+_t.sID+'"'+(bSuccess?' loaded.':' failed to load? - '+_t.url),(bSuccess?1:2));
    if (!bSuccess) {
      if (_s.sandbox.noRemote === true) {
        _s._wD('SMSound._onload(): Reminder: Flash security is denying network/internet access',1);
      }
      if (_s.sandbox.noLocal === true) {
        _s._wD('SMSound._onload(): Reminder: Flash security is denying local access',1);
      }
    }
    _t.loaded = bSuccess;
    _t.readyState = bSuccess?3:2;
    if (_t._iO.onload) {
      _t._iO.onload.apply(_t);
    }
  };

  this._onbeforefinish = function() {
    if (!_t.didBeforeFinish) {
      _t.didBeforeFinish = true;
      if (_t._iO.onbeforefinish) {
        _s._wD('SMSound._onbeforefinish(): "'+_t.sID+'"');
        _t._iO.onbeforefinish.apply(_t);
      }
    }
  };

  this._onjustbeforefinish = function(msOffset) {
    // msOffset: "end of sound" delay actual value (eg. 200 msec, value at event fire time was 187)
    if (!_t.didJustBeforeFinish) {
      _t.didJustBeforeFinish = true;
      if (_t._iO.onjustbeforefinish) {
        _s._wD('SMSound._onjustbeforefinish(): "'+_t.sID+'"');
        _t._iO.onjustbeforefinish.apply(_t);
      }
    }
  };

  this._onfinish = function() {
    // sound has finished playing

    // TODO: calling user-defined onfinish() should happen after setPosition(0)
    // OR: onfinish() and then setPosition(0) is bad.
    if (_t._iO.onbeforefinishcomplete) {
      _t._iO.onbeforefinishcomplete.apply(_t);
    }
    // reset some state items
    _t.didBeforeFinish = false;
    _t.didJustBeforeFinish = false;
    if (_t.instanceCount) {
      _t.instanceCount--;
      if (!_t.instanceCount) {
        // reset instance options
        // _t.setPosition(0);
        _t.playState = 0;
        _t.paused = false;
        _t.instanceCount = 0;
        _t.instanceOptions = {};
      }
	  if (!_t.instanceCount || _t._iO.multiShotEvents) {
        // fire onfinish for last, or every instance
        if (_t._iO.onfinish) {
          _s._wD('SMSound._onfinish(): "'+_t.sID+'"');
          _t._iO.onfinish.apply(_t);
        }
	  }
    } else {
	  if (_t.useVideo) {
	    // video has finished
	    // may need to reset position for next play call, "rewind"
	    // _t.setPosition(0);
	  }
      // _t.setPosition(0);
    }

  };

  this._onmetadata = function(oMetaData) {
    // movieStar mode only
    _s._wD('SMSound.onmetadata()');
    // Contains a subset of metadata. Note that files may have their own unique metadata.
    // http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000267.html
    if (!oMetaData.width && !oMetaData.height) {
	  _s._wD('No width/height given, assuming defaults');
	  oMetaData.width = 320;
	  oMetaData.height = 240;
    }
    _t.metadata = oMetaData; // potentially-large object from flash
    _t.width = oMetaData.width;
    _t.height = oMetaData.height;
    if (_t._iO.onmetadata) {
      _s._wD('SMSound._onmetadata(): "'+_t.sID+'"');
      _t._iO.onmetadata.apply(_t);
    }
    _s._wD('SMSound.onmetadata() complete');
  };

  this._onbufferchange = function(bIsBuffering) {
    if (_t.playState === 0) {
      // ignore if not playing
      return false;
    }
    if (bIsBuffering == _t.isBuffering) {
      // ignore initial "false" default, if matching
	  _s._wD('_onbufferchange: ignoring false default / loaded sound');
      return false;
    }
    _t.isBuffering = (bIsBuffering==1?true:false);
    if (_t._iO.onbufferchange) {
      _s._wD('SMSound._onbufferchange(): '+bIsBuffering);
      _t._iO.onbufferchange.apply(_t);
    }
  };

  this._ondataerror = function(sError) {
	// flash 9 wave/eq data handler
	if (_t.playState > 0) { // hack: called at start, and end from flash at/after onfinish().
	  _s._wD('SMSound._ondataerror(): '+sError);
	  if (_t._iO.ondataerror) {
	    _t._iO.ondataerror.apply(_t);	
	  }
	} else {
	  // _s._wD('SMSound._ondataerror(): ignoring');
	}
  };

  }; // SMSound()

  this._onfullscreenchange = function(bFullScreen) {
    _s._wD('onfullscreenchange(): '+bFullScreen);
    _s.isFullScreen = (bFullScreen==1?true:false);
    if (!_s.isFullScreen) {
	  // attempt to restore window focus after leaving full-screen
	  try {
		window.focus();
		_s._wD('window.focus()');
	  } catch(e) {
	    // oh well
	  }
    }
  };

  // register a few event handlers
  if (window.addEventListener) {
    window.addEventListener('focus',_s.handleFocus,false);
    window.addEventListener('load',_s.beginDelayedInit,false);
    window.addEventListener('unload',_s.destruct,false);
    if (_s._tryInitOnFocus) {
      window.addEventListener('mousemove',_s.handleFocus,false); // massive Safari focus hack
    }
  } else if (window.attachEvent) {
    window.attachEvent('onfocus',_s.handleFocus);
    window.attachEvent('onload',_s.beginDelayedInit);
    window.attachEvent('unload',_s.destruct);
  } else {
    // no add/attachevent support - safe to assume no JS -> Flash either.
    _s._debugTS('onload',false);
    soundManager.onerror();
    soundManager.disable();
  }

  if (document.addEventListener) {
	document.addEventListener('DOMContentLoaded',_s.domContentLoaded,false);
  }

} // SoundManager()

// set var SM2_DEFER = true; in your own script to prevent auto start-up
if (typeof SM2_DEFER == 'undefined' || !SM2_DEFER) {
  soundManager = new SoundManager();
}

/*

  SoundManager 2 Demo: Play MP3 links "in-place"
  ----------------------------------------------

  http://schillmania.com/projects/soundmanager2/

  A simple demo making MP3s playable "inline"
  and easily styled/customizable via CSS.

  Requires SoundManager 2 Javascript API.

*/

function InlinePlayer() {
  var self = this;
  var pl = this;
  var sm = soundManager; // soundManager instance
  this.excludeClass = 'inline-exclude'; // CSS class for ignoring MP3 links
  this.links = [];
  this.sounds = [];
  this.soundsByURL = [];
  this.indexByURL = [];
  this.lastSound = null;
  this.soundCount = 0;
  var isIE = (navigator.userAgent.match(/msie/i));

  this.config = {
    playNext: true, // stop after one sound, or play through list until end
	autoPlay: false  // start playing the first sound right away
  }

  this.css = {
    // CSS class names appended to link during various states
    sDefault: 'mp3', // default state
    sLoading: 'mp3_loading',
    sPlaying: 'mp3_playing',
    sPaused: 'mp3_paused'
  }

  this.addEventHandler = function(o,evtName,evtHandler) {
    typeof(attachEvent)=='undefined'?o.addEventListener(evtName,evtHandler,false):o.attachEvent('on'+evtName,evtHandler);
  }

  this.removeEventHandler = function(o,evtName,evtHandler) {
    typeof(attachEvent)=='undefined'?o.removeEventListener(evtName,evtHandler,false):o.detachEvent('on'+evtName,evtHandler);
  }

  this.classContains = function(o,cStr) {
	return (typeof(o.className)!='undefined'?o.className.match(new RegExp('(\\s|^)'+cStr+'(\\s|$)')):false);
  }

  this.addClass = function(o,cStr) {
    if (!o || !cStr || self.classContains(o,cStr)) return false;
    o.className = (o.className?o.className+' ':'')+cStr;
  }

  this.removeClass = function(o,cStr) {
    if (!o || !cStr || !self.classContains(o,cStr)) return false;
    o.className = o.className.replace(new RegExp('( '+cStr+')|('+cStr+')','g'),'');
  }

  this.getSoundByURL = function(sURL) {
    return (typeof self.soundsByURL[sURL] != 'undefined'?self.soundsByURL[sURL]:null);
  }

  this.isChildOfNode = function(o,sNodeName) {
    if (!o || !o.parentNode) {
      return false;
    }
    sNodeName = sNodeName.toLowerCase();
    do {
      o = o.parentNode;
    } while (o && o.parentNode && o.nodeName.toLowerCase() != sNodeName);
    return (o.nodeName.toLowerCase() == sNodeName?o:null);
  }

  this.events = {

    // handlers for sound events as they're started/stopped/played

    play: function() {
      pl.removeClass(this._data.oLink,this._data.className);
      this._data.className = pl.css.sPlaying;
      pl.addClass(this._data.oLink,this._data.className);
    },

    stop: function() {
      pl.removeClass(this._data.oLink,this._data.className);
      this._data.className = '';
    },

    pause: function() {
      pl.removeClass(this._data.oLink,this._data.className);
      this._data.className = pl.css.sPaused;
      pl.addClass(this._data.oLink,this._data.className);
    },

    resume: function() {
      pl.removeClass(this._data.oLink,this._data.className);
      this._data.className = pl.css.sPlaying;
      pl.addClass(this._data.oLink,this._data.className);      
    },

    finish: function() {
      pl.removeClass(this._data.oLink,this._data.className);
      this._data.className = '';
      if (pl.config.playNext) {
        var nextLink = (pl.indexByURL[this._data.oLink.href]+1);
        if (nextLink<pl.links.length) {
          pl.handleClick({'target':pl.links[nextLink]});
        }
      }
    }

  }

  this.stopEvent = function(e) {
   if (typeof e != 'undefined' && typeof e.preventDefault != 'undefined') {
      e.preventDefault();
    } else if (typeof event != 'undefined' && typeof event.returnValue != 'undefined') {
      event.returnValue = false;
    }
    return false;
  }

  this.getTheDamnLink = (isIE)?function(e) {
    // I really didn't want to have to do this.
    return (e && e.target?e.target:window.event.srcElement);
  }:function(e) {
    return e.target;
  }

  this.handleClick = function(e) {
    // a sound link was clicked
    if (typeof e.button != 'undefined' && e.button>1) {
	  // ignore right-click
	  return true;
    }
    var o = self.getTheDamnLink(e);
    if (o.nodeName.toLowerCase() != 'a') {
      o = self.isChildOfNode(o,'a');
      if (!o) return true;
    }
    var sURL = o.getAttribute('href');
    if (!o.href || !o.href.match(/\.mp3(\\?.*)$/i) || self.classContains(o,self.excludeClass)) {
      if (isIE && o.onclick) {
        return false; // IE will run this handler before .onclick(), everyone else is cool?
      }
      return true; // pass-thru for non-MP3/non-links
    }
    sm._writeDebug('handleClick()');
    var soundURL = (o.href);
    var thisSound = self.getSoundByURL(soundURL);
    if (thisSound) {
      // already exists
      if (thisSound == self.lastSound) {
        // and was playing (or paused)
        thisSound.togglePause();
      } else {
        // different sound
        thisSound.togglePause(); // start playing current
        sm._writeDebug('sound different than last sound: '+self.lastSound.sID);
        if (self.lastSound) self.stopSound(self.lastSound);
      }
    } else {
      // create sound
      thisSound = sm.createSound({
       id:'inlineMP3Sound'+(self.soundCount++),
       url:soundURL,
       onplay:self.events.play,
       onstop:self.events.stop,
       onpause:self.events.pause,
       onresume:self.events.resume,
       onfinish:self.events.finish
      });
      // tack on some custom data
      thisSound._data = {
        oLink: o, // DOM node for reference within SM2 object event handlers
        className: self.css.sPlaying
      };
      self.soundsByURL[soundURL] = thisSound;
      self.sounds.push(thisSound);
      if (self.lastSound) self.stopSound(self.lastSound);
      thisSound.play();
      // stop last sound
    }

    self.lastSound = thisSound; // reference for next call

    if (typeof e != 'undefined' && typeof e.preventDefault != 'undefined') {
      e.preventDefault();
    } else {
      event.returnValue = false;
    }
    return false;
  }

  this.stopSound = function(oSound) {
    soundManager.stop(oSound.sID);
    soundManager.unload(oSound.sID);
  }

  this.init = function() {
    sm._writeDebug('inlinePlayer.init()');
    var oLinks = document.getElementsByTagName('a');
    // grab all links, look for .mp3
    var foundItems = 0;
    for (var i=0; i<oLinks.length; i++) {
      if (oLinks[i].href.match(/\.mp3/i) && !self.classContains(oLinks[i],self.excludeClass)) {
        self.addClass(oLinks[i],self.css.sDefault); // add default CSS decoration
        self.links[foundItems] = (oLinks[i]);
        self.indexByURL[oLinks[i].href] = foundItems; // hack for indexing
        foundItems++;
      }
    }
    if (foundItems>0) {
      self.addEventHandler(document,'click',self.handleClick);
	  if (self.config.autoPlay) {
	    self.handleClick({target:self.links[0],preventDefault:function(){}});
	  }
    }
    sm._writeDebug('inlinePlayer.init(): Found '+foundItems+' relevant items.');
  }

  this.init();

}

var inlinePlayer = null;

soundManager.onready(function() {
  if (soundManager.supported()) {
    // soundManager.createSound() etc. may now be called
    inlinePlayer = new InlinePlayer();
  }
});


/*	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();

/*
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version 1.09i
 */
var Cufon=(function(){var m=function(){return m.replace.apply(null,arguments)};var x=m.DOM={ready:(function(){var C=false,E={loaded:1,complete:1};var B=[],D=function(){if(C){return}C=true;for(var F;F=B.shift();F()){}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",D,false);window.addEventListener("pageshow",D,false)}if(!window.opera&&document.readyState){(function(){E[document.readyState]?D():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll("left");D()}catch(F){setTimeout(arguments.callee,1)}})()}q(window,"load",D);return function(F){if(!arguments.length){D()}else{C?F():B.push(F)}}})(),root:function(){return document.documentElement||document.body}};var n=m.CSS={Size:function(C,B){this.value=parseFloat(C);this.unit=String(C).match(/[a-z%]*$/)[0]||"px";this.convert=function(D){return D/B*this.value};this.convertFrom=function(D){return D/this.value*B};this.toString=function(){return this.value+this.unit}},addClass:function(C,B){var D=C.className;C.className=D+(D&&" ")+B;return C},color:j(function(C){var B={};B.color=C.replace(/^rgba\((.*?),\s*([\d.]+)\)/,function(E,D,F){B.opacity=parseFloat(F);return"rgb("+D+")"});return B}),fontStretch:j(function(B){if(typeof B=="number"){return B}if(/%$/.test(B)){return parseFloat(B)/100}return{"ultra-condensed":0.5,"extra-condensed":0.625,condensed:0.75,"semi-condensed":0.875,"semi-expanded":1.125,expanded:1.25,"extra-expanded":1.5,"ultra-expanded":2}[B]||1}),getStyle:function(C){var B=document.defaultView;if(B&&B.getComputedStyle){return new a(B.getComputedStyle(C,null))}if(C.currentStyle){return new a(C.currentStyle)}return new a(C.style)},gradient:j(function(F){var G={id:F,type:F.match(/^-([a-z]+)-gradient\(/)[1],stops:[]},C=F.substr(F.indexOf("(")).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);for(var E=0,B=C.length,D;E<B;++E){D=C[E].split("=",2).reverse();G.stops.push([D[1]||E/(B-1),D[0]])}return G}),quotedList:j(function(E){var D=[],C=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,B;while(B=C.exec(E)){D.push(B[3]||B[1])}return D}),recognizesMedia:j(function(G){var E=document.createElement("style"),D,C,B;E.type="text/css";E.media=G;try{E.appendChild(document.createTextNode("/**/"))}catch(F){}C=g("head")[0];C.insertBefore(E,C.firstChild);D=(E.sheet||E.styleSheet);B=D&&!D.disabled;C.removeChild(E);return B}),removeClass:function(D,C){var B=RegExp("(?:^|\\s+)"+C+"(?=\\s|$)","g");D.className=D.className.replace(B,"");return D},supports:function(D,C){var B=document.createElement("span").style;if(B[D]===undefined){return false}B[D]=C;return B[D]===C},textAlign:function(E,D,B,C){if(D.get("textAlign")=="right"){if(B>0){E=" "+E}}else{if(B<C-1){E+=" "}}return E},textShadow:j(function(F){if(F=="none"){return null}var E=[],G={},B,C=0;var D=/(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;while(B=D.exec(F)){if(B[0]==","){E.push(G);G={};C=0}else{if(B[1]){G.color=B[1]}else{G[["offX","offY","blur"][C++]]=B[2]}}}E.push(G);return E}),textTransform:(function(){var B={uppercase:function(C){return C.toUpperCase()},lowercase:function(C){return C.toLowerCase()},capitalize:function(C){return C.replace(/\b./g,function(D){return D.toUpperCase()})}};return function(E,D){var C=B[D.get("textTransform")];return C?C(E):E}})(),whiteSpace:(function(){var D={inline:1,"inline-block":1,"run-in":1};var C=/^\s+/,B=/\s+$/;return function(H,F,G,E){if(E){if(E.nodeName.toLowerCase()=="br"){H=H.replace(C,"")}}if(D[F.get("display")]){return H}if(!G.previousSibling){H=H.replace(C,"")}if(!G.nextSibling){H=H.replace(B,"")}return H}})()};n.ready=(function(){var B=!n.recognizesMedia("all"),E=false;var D=[],H=function(){B=true;for(var K;K=D.shift();K()){}};var I=g("link"),J=g("style");function C(K){return K.disabled||G(K.sheet,K.media||"screen")}function G(M,P){if(!n.recognizesMedia(P||"all")){return true}if(!M||M.disabled){return false}try{var Q=M.cssRules,O;if(Q){search:for(var L=0,K=Q.length;O=Q[L],L<K;++L){switch(O.type){case 2:break;case 3:if(!G(O.styleSheet,O.media.mediaText)){return false}break;default:break search}}}}catch(N){}return true}function F(){if(document.createStyleSheet){return true}var L,K;for(K=0;L=I[K];++K){if(L.rel.toLowerCase()=="stylesheet"&&!C(L)){return false}}for(K=0;L=J[K];++K){if(!C(L)){return false}}return true}x.ready(function(){if(!E){E=n.getStyle(document.body).isUsable()}if(B||(E&&F())){H()}else{setTimeout(arguments.callee,10)}});return function(K){if(B){K()}else{D.push(K)}}})();function s(D){var C=this.face=D.face,B={"\u0020":1,"\u00a0":1,"\u3000":1};this.glyphs=D.glyphs;this.w=D.w;this.baseSize=parseInt(C["units-per-em"],10);this.family=C["font-family"].toLowerCase();this.weight=C["font-weight"];this.style=C["font-style"]||"normal";this.viewBox=(function(){var F=C.bbox.split(/\s+/);var E={minX:parseInt(F[0],10),minY:parseInt(F[1],10),maxX:parseInt(F[2],10),maxY:parseInt(F[3],10)};E.width=E.maxX-E.minX;E.height=E.maxY-E.minY;E.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")};return E})();this.ascent=-parseInt(C.ascent,10);this.descent=-parseInt(C.descent,10);this.height=-this.ascent+this.descent;this.spacing=function(L,N,E){var O=this.glyphs,M,K,G,P=[],F=0,J=-1,I=-1,H;while(H=L[++J]){M=O[H]||this.missingGlyph;if(!M){continue}if(K){F-=G=K[H]||0;P[I]-=G}F+=P[++I]=~~(M.w||this.w)+N+(B[H]?E:0);K=M.k}P.total=F;return P}}function f(){var C={},B={oblique:"italic",italic:"oblique"};this.add=function(D){(C[D.style]||(C[D.style]={}))[D.weight]=D};this.get=function(H,I){var G=C[H]||C[B[H]]||C.normal||C.italic||C.oblique;if(!G){return null}I={normal:400,bold:700}[I]||parseInt(I,10);if(G[I]){return G[I]}var E={1:1,99:0}[I%100],K=[],F,D;if(E===undefined){E=I>400}if(I==500){I=400}for(var J in G){if(!k(G,J)){continue}J=parseInt(J,10);if(!F||J<F){F=J}if(!D||J>D){D=J}K.push(J)}if(I<F){I=F}if(I>D){I=D}K.sort(function(M,L){return(E?(M>=I&&L>=I)?M<L:M>L:(M<=I&&L<=I)?M>L:M<L)?-1:1});return G[K[0]]}}function r(){function D(F,G){if(F.contains){return F.contains(G)}return F.compareDocumentPosition(G)&16}function B(G){var F=G.relatedTarget;if(!F||D(this,F)){return}C(this,G.type=="mouseover")}function E(F){C(this,F.type=="mouseenter")}function C(F,G){setTimeout(function(){var H=d.get(F).options;m.replace(F,G?h(H,H.hover):H,true)},10)}this.attach=function(F){if(F.onmouseenter===undefined){q(F,"mouseover",B);q(F,"mouseout",B)}else{q(F,"mouseenter",E);q(F,"mouseleave",E)}}}function u(){var C=[],D={};function B(H){var E=[],G;for(var F=0;G=H[F];++F){E[F]=C[D[G]]}return E}this.add=function(F,E){D[F]=C.push(E)-1};this.repeat=function(){var E=arguments.length?B(arguments):C,F;for(var G=0;F=E[G++];){m.replace(F[0],F[1],true)}}}function A(){var D={},B=0;function C(E){return E.cufid||(E.cufid=++B)}this.get=function(E){var F=C(E);return D[F]||(D[F]={})}}function a(B){var D={},C={};this.extend=function(E){for(var F in E){if(k(E,F)){D[F]=E[F]}}return this};this.get=function(E){return D[E]!=undefined?D[E]:B[E]};this.getSize=function(F,E){return C[F]||(C[F]=new n.Size(this.get(F),E))};this.isUsable=function(){return !!B}}function q(C,B,D){if(C.addEventListener){C.addEventListener(B,D,false)}else{if(C.attachEvent){C.attachEvent("on"+B,function(){return D.call(C,window.event)})}}}function v(C,B){var D=d.get(C);if(D.options){return C}if(B.hover&&B.hoverables[C.nodeName.toLowerCase()]){b.attach(C)}D.options=B;return C}function j(B){var C={};return function(D){if(!k(C,D)){C[D]=B.apply(null,arguments)}return C[D]}}function c(F,E){var B=n.quotedList(E.get("fontFamily").toLowerCase()),D;for(var C=0;D=B[C];++C){if(i[D]){return i[D].get(E.get("fontStyle"),E.get("fontWeight"))}}return null}function g(B){return document.getElementsByTagName(B)}function k(C,B){return C.hasOwnProperty(B)}function h(){var C={},B,F;for(var E=0,D=arguments.length;B=arguments[E],E<D;++E){for(F in B){if(k(B,F)){C[F]=B[F]}}}return C}function o(E,M,C,N,F,D){var K=document.createDocumentFragment(),H;if(M===""){return K}var L=N.separate;var I=M.split(p[L]),B=(L=="words");if(B&&t){if(/^\s/.test(M)){I.unshift("")}if(/\s$/.test(M)){I.push("")}}for(var J=0,G=I.length;J<G;++J){H=z[N.engine](E,B?n.textAlign(I[J],C,J,G):I[J],C,N,F,D,J<G-1);if(H){K.appendChild(H)}}return K}function l(D,M){var C=D.nodeName.toLowerCase();if(M.ignore[C]){return}var E=!M.textless[C];var B=n.getStyle(v(D,M)).extend(M);var F=c(D,B),G,K,I,H,L,J;if(!F){return}for(G=D.firstChild;G;G=I){K=G.nodeType;I=G.nextSibling;if(E&&K==3){if(H){H.appendData(G.data);D.removeChild(G)}else{H=G}if(I){continue}}if(H){D.replaceChild(o(F,n.whiteSpace(H.data,B,H,J),B,M,G,D),H);H=null}if(K==1){if(G.firstChild){if(G.nodeName.toLowerCase()=="cufon"){z[M.engine](F,null,B,M,G,D)}else{arguments.callee(G,M)}}J=G}}}var t=" ".split(/\s+/).length==0;var d=new A();var b=new r();var y=new u();var e=false;var z={},i={},w={autoDetect:false,engine:null,forceHitArea:false,hover:false,hoverables:{a:true},ignore:{applet:1,canvas:1,col:1,colgroup:1,head:1,iframe:1,map:1,optgroup:1,option:1,script:1,select:1,style:1,textarea:1,title:1,pre:1},printable:true,selector:(window.Sizzle||(window.jQuery&&function(B){return jQuery(B)})||(window.dojo&&dojo.query)||(window.Ext&&Ext.query)||(window.YAHOO&&YAHOO.util&&YAHOO.util.Selector&&YAHOO.util.Selector.query)||(window.$$&&function(B){return $$(B)})||(window.$&&function(B){return $(B)})||(document.querySelectorAll&&function(B){return document.querySelectorAll(B)})||g),separate:"words",textless:{dl:1,html:1,ol:1,table:1,tbody:1,thead:1,tfoot:1,tr:1,ul:1},textShadow:"none"};var p={words:/\s/.test("\u00a0")?/[^\S\u00a0]+/:/\s+/,characters:"",none:/^/};m.now=function(){x.ready();return m};m.refresh=function(){y.repeat.apply(y,arguments);return m};m.registerEngine=function(C,B){if(!B){return m}z[C]=B;return m.set("engine",C)};m.registerFont=function(D){if(!D){return m}var B=new s(D),C=B.family;if(!i[C]){i[C]=new f()}i[C].add(B);return m.set("fontFamily",'"'+C+'"')};m.replace=function(D,C,B){C=h(w,C);if(!C.engine){return m}if(!e){n.addClass(x.root(),"cufon-active cufon-loading");n.ready(function(){n.addClass(n.removeClass(x.root(),"cufon-loading"),"cufon-ready")});e=true}if(C.hover){C.forceHitArea=true}if(C.autoDetect){delete C.fontFamily}if(typeof C.textShadow=="string"){C.textShadow=n.textShadow(C.textShadow)}if(typeof C.color=="string"&&/^-/.test(C.color)){C.textGradient=n.gradient(C.color)}else{delete C.textGradient}if(!B){y.add(D,arguments)}if(D.nodeType||typeof D=="string"){D=[D]}n.ready(function(){for(var F=0,E=D.length;F<E;++F){var G=D[F];if(typeof G=="string"){m.replace(C.selector(G),C,true)}else{l(G,C)}}});return m};m.set=function(B,C){w[B]=C;return m};return m})();Cufon.registerEngine("vml",(function(){var e=document.namespaces;if(!e){return}e.add("cvml","urn:schemas-microsoft-com:vml");e=null;var b=document.createElement("cvml:shape");b.style.behavior="url(#default#VML)";if(!b.coordsize){return}b=null;var h=(document.documentMode||0)<8;document.write(('<style type="text/css">cufoncanvas{text-indent:0;}@media screen{cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}cufoncanvas{position:absolute;text-align:left;}cufon{display:inline-block;position:relative;vertical-align:'+(h?"middle":"text-bottom")+";}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}</style>").replace(/;/g,"!important;"));function c(i,j){return a(i,/(?:em|ex|%)$|^[a-z-]+$/i.test(j)?"1em":j)}function a(l,m){if(m==="0"){return 0}if(/px$/i.test(m)){return parseFloat(m)}var k=l.style.left,j=l.runtimeStyle.left;l.runtimeStyle.left=l.currentStyle.left;l.style.left=m.replace("%","em");var i=l.style.pixelLeft;l.style.left=k;l.runtimeStyle.left=j;return i}function f(l,k,j,n){var i="computed"+n,m=k[i];if(isNaN(m)){m=k.get(n);k[i]=m=(m=="normal")?0:~~j.convertFrom(a(l,m))}return m}var g={};function d(p){var q=p.id;if(!g[q]){var n=p.stops,o=document.createElement("cvml:fill"),i=[];o.type="gradient";o.angle=180;o.focus="0";o.method="sigma";o.color=n[0][1];for(var m=1,l=n.length-1;m<l;++m){i.push(n[m][0]*100+"% "+n[m][1])}o.colors=i.join(",");o.color2=n[l][1];g[q]=o}return g[q]}return function(ac,G,Y,C,K,ad,W){var n=(G===null);if(n){G=K.alt}var I=ac.viewBox;var p=Y.computedFontSize||(Y.computedFontSize=new Cufon.CSS.Size(c(ad,Y.get("fontSize"))+"px",ac.baseSize));var y,q;if(n){y=K;q=K.firstChild}else{y=document.createElement("cufon");y.className="cufon cufon-vml";y.alt=G;q=document.createElement("cufoncanvas");y.appendChild(q);if(C.printable){var Z=document.createElement("cufontext");Z.appendChild(document.createTextNode(G));y.appendChild(Z)}if(!W){y.appendChild(document.createElement("cvml:shape"))}}var ai=y.style;var R=q.style;var l=p.convert(I.height),af=Math.ceil(l);var V=af/l;var P=V*Cufon.CSS.fontStretch(Y.get("fontStretch"));var U=I.minX,T=I.minY;R.height=af;R.top=Math.round(p.convert(T-ac.ascent));R.left=Math.round(p.convert(U));ai.height=p.convert(ac.height)+"px";var F=Y.get("color");var ag=Cufon.CSS.textTransform(G,Y).split("");var L=ac.spacing(ag,f(ad,Y,p,"letterSpacing"),f(ad,Y,p,"wordSpacing"));if(!L.length){return null}var k=L.total;var x=-U+k+(I.width-L[L.length-1]);var ah=p.convert(x*P),X=Math.round(ah);var O=x+","+I.height,m;var J="r"+O+"ns";var u=C.textGradient&&d(C.textGradient);var o=ac.glyphs,S=0;var H=C.textShadow;var ab=-1,aa=0,w;while(w=ag[++ab]){var D=o[ag[ab]]||ac.missingGlyph,v;if(!D){continue}if(n){v=q.childNodes[aa];while(v.firstChild){v.removeChild(v.firstChild)}}else{v=document.createElement("cvml:shape");q.appendChild(v)}v.stroked="f";v.coordsize=O;v.coordorigin=m=(U-S)+","+T;v.path=(D.d?"m"+D.d+"xe":"")+"m"+m+J;v.fillcolor=F;if(u){v.appendChild(u.cloneNode(false))}var ae=v.style;ae.width=X;ae.height=af;if(H){var s=H[0],r=H[1];var B=Cufon.CSS.color(s.color),z;var N=document.createElement("cvml:shadow");N.on="t";N.color=B.color;N.offset=s.offX+","+s.offY;if(r){z=Cufon.CSS.color(r.color);N.type="double";N.color2=z.color;N.offset2=r.offX+","+r.offY}N.opacity=B.opacity||(z&&z.opacity)||1;v.appendChild(N)}S+=L[aa++]}var M=v.nextSibling,t,A;if(C.forceHitArea){if(!M){M=document.createElement("cvml:rect");M.stroked="f";M.className="cufon-vml-cover";t=document.createElement("cvml:fill");t.opacity=0;M.appendChild(t);q.appendChild(M)}A=M.style;A.width=X;A.height=af}else{if(M){q.removeChild(M)}}ai.width=Math.max(Math.ceil(p.convert(k*P)),0);if(h){var Q=Y.computedYAdjust;if(Q===undefined){var E=Y.get("lineHeight");if(E=="normal"){E="1em"}else{if(!isNaN(E)){E+="em"}}Y.computedYAdjust=Q=0.5*(a(ad,E)-parseFloat(ai.height))}if(Q){ai.marginTop=Math.ceil(Q)+"px";ai.marginBottom=Q+"px"}}return y}})());Cufon.registerEngine("canvas",(function(){var b=document.createElement("canvas");if(!b||!b.getContext||!b.getContext.apply){return}b=null;var a=Cufon.CSS.supports("display","inline-block");var e=!a&&(document.compatMode=="BackCompat"||/frameset|transitional/i.test(document.doctype.publicId));var f=document.createElement("style");f.type="text/css";f.appendChild(document.createTextNode(("cufon{text-indent:0;}@media screen,projection{cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;"+(e?"":"font-size:1px;line-height:1px;")+"}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}"+(a?"cufon canvas{position:relative;}":"cufon canvas{position:absolute;}")+"}@media print{cufon{padding:0;}cufon canvas{display:none;}}").replace(/;/g,"!important;")));document.getElementsByTagName("head")[0].appendChild(f);function d(p,h){var n=0,m=0;var g=[],o=/([mrvxe])([^a-z]*)/g,k;generate:for(var j=0;k=o.exec(p);++j){var l=k[2].split(",");switch(k[1]){case"v":g[j]={m:"bezierCurveTo",a:[n+~~l[0],m+~~l[1],n+~~l[2],m+~~l[3],n+=~~l[4],m+=~~l[5]]};break;case"r":g[j]={m:"lineTo",a:[n+=~~l[0],m+=~~l[1]]};break;case"m":g[j]={m:"moveTo",a:[n=~~l[0],m=~~l[1]]};break;case"x":g[j]={m:"closePath"};break;case"e":break generate}h[g[j].m].apply(h,g[j].a)}return g}function c(m,k){for(var j=0,h=m.length;j<h;++j){var g=m[j];k[g.m].apply(k,g.a)}}return function(V,w,P,t,C,W){var k=(w===null);if(k){w=C.getAttribute("alt")}var A=V.viewBox;var m=P.getSize("fontSize",V.baseSize);var B=0,O=0,N=0,u=0;var z=t.textShadow,L=[];if(z){for(var U=z.length;U--;){var F=z[U];var K=m.convertFrom(parseFloat(F.offX));var I=m.convertFrom(parseFloat(F.offY));L[U]=[K,I];if(I<B){B=I}if(K>O){O=K}if(I>N){N=I}if(K<u){u=K}}}var Z=Cufon.CSS.textTransform(w,P).split("");var E=V.spacing(Z,~~m.convertFrom(parseFloat(P.get("letterSpacing"))||0),~~m.convertFrom(parseFloat(P.get("wordSpacing"))||0));if(!E.length){return null}var h=E.total;O+=A.width-E[E.length-1];u+=A.minX;var s,n;if(k){s=C;n=C.firstChild}else{s=document.createElement("cufon");s.className="cufon cufon-canvas";s.setAttribute("alt",w);n=document.createElement("canvas");s.appendChild(n);if(t.printable){var S=document.createElement("cufontext");S.appendChild(document.createTextNode(w));s.appendChild(S)}}var aa=s.style;var H=n.style;var j=m.convert(A.height);var Y=Math.ceil(j);var M=Y/j;var G=M*Cufon.CSS.fontStretch(P.get("fontStretch"));var J=h*G;var Q=Math.ceil(m.convert(J+O-u));var o=Math.ceil(m.convert(A.height-B+N));n.width=Q;n.height=o;H.width=Q+"px";H.height=o+"px";B+=A.minY;H.top=Math.round(m.convert(B-V.ascent))+"px";H.left=Math.round(m.convert(u))+"px";var r=Math.max(Math.ceil(m.convert(J)),0)+"px";if(a){aa.width=r;aa.height=m.convert(V.height)+"px"}else{aa.paddingLeft=r;aa.paddingBottom=(m.convert(V.height)-1)+"px"}var X=n.getContext("2d"),D=j/A.height;X.scale(D,D*M);X.translate(-u,-B);X.save();function T(){var x=V.glyphs,ab,l=-1,g=-1,y;X.scale(G,1);while(y=Z[++l]){var ab=x[Z[l]]||V.missingGlyph;if(!ab){continue}if(ab.d){X.beginPath();if(ab.code){c(ab.code,X)}else{ab.code=d("m"+ab.d,X)}X.fill()}X.translate(E[++g],0)}X.restore()}if(z){for(var U=z.length;U--;){var F=z[U];X.save();X.fillStyle=F.color;X.translate.apply(X,L[U]);T()}}var q=t.textGradient;if(q){var v=q.stops,p=X.createLinearGradient(0,A.minY,0,A.maxY);for(var U=0,R=v.length;U<R;++U){p.addColorStop.apply(p,v[U])}X.fillStyle=p}else{X.fillStyle=P.get("color")}T();return s}})());
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * Copyright 1988-1991 Adobe Systems Inc.
 * 
 * Trademark:
 * Copyright (c) 1988, 1990, 1993 Adobe Systems Incorporated.  All Rights
 * Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.
 */
Cufon.registerFont((function(f){var b=_cufon_bridge_={p:[{"d":"73,0v10,-112,53,-174,107,-235r0,-13r-160,0r0,12r147,0v-67,72,-101,132,-109,236r15,0"},{"d":"105,-8v-49,0,-67,-38,-68,-84v0,-46,21,-86,68,-86v48,0,70,40,70,86v-1,46,-22,84,-70,84xm105,-189v-36,0,-58,25,-68,46r0,-42r-14,0r0,251r14,0r1,-104v10,27,34,42,67,42v56,1,83,-41,83,-96v0,-54,-28,-97,-83,-97"},{"d":"97,-189v-81,0,-109,109,-63,165v15,19,36,27,63,28v55,1,84,-44,84,-96v0,-53,-29,-97,-84,-97xm97,-8v-69,0,-92,-94,-53,-144v13,-16,30,-25,53,-26v47,0,71,41,71,86v0,45,-25,84,-71,84","w":193},{"d":"94,-8v-47,0,-68,-40,-69,-84v0,-46,21,-86,69,-86v47,1,69,41,69,86v0,43,-23,84,-69,84xm12,-92v0,52,25,96,79,96v34,0,55,-17,72,-44r0,40r14,0r0,-257r-14,0r-1,113v-8,-27,-34,-45,-68,-45v-56,0,-83,42,-82,97"},{"d":"74,-214r0,-37r-16,0r0,37r16,0xm131,-214r0,-37r-16,0r0,37r16,0xm86,4v33,0,57,-20,67,-44r0,40r14,0r0,-185r-14,0v0,80,13,177,-67,177v-78,0,-45,-107,-52,-177r-14,0v4,82,-23,189,66,189","w":186},{"d":"51,-213r-43,-50r-19,0r48,50r14,0","w":60},{"d":"102,-91r0,-14r-77,0r0,14r77,0","w":126},{"d":"-12,66v36,3,49,-13,49,-46r0,-205r-14,0r0,204v2,30,-10,38,-35,35r0,12xm37,-220r0,-37r-14,0r0,37r14,0","w":60},{"d":"90,-258v-29,-7,-57,4,-57,35r0,38r-33,0r0,12r33,0r0,173r14,0r0,-173r38,0r0,-12r-38,0v-3,-38,-1,-75,43,-61r0,-12","w":86},{"d":"41,-185r0,37r18,0r0,-37r-18,0xm59,0r0,-37r-18,0r0,37r18,0","w":100},{"d":"21,0r14,0r0,-70r42,-35r79,105r18,0r-86,-116r80,-69r-19,0r-114,98r0,-170r-14,0r0,257","w":166},{"d":"58,-257r0,47r-44,-15r-4,10r45,15r-29,37r9,7r28,-38r28,38r8,-7r-27,-37r44,-15r-4,-10r-44,15r0,-47r-10,0","w":126},{"d":"23,0r15,0r0,-257r-15,0r0,257","w":61},{"d":"149,-248r-11,79r-61,0r11,-79r-12,0r-11,79r-44,0r0,12r42,0r-8,62r-44,0r0,12r42,0r-12,83r12,0r12,-83r61,0r-12,83r12,0r11,-83r42,0r0,-12r-40,0r9,-62r41,0r0,-12r-39,0r11,-79r-12,0xm75,-157r61,0r-9,62r-60,0"},{"d":"94,-8v-47,0,-69,-39,-69,-85v1,-45,22,-85,69,-85v45,0,69,41,69,85v0,44,-22,85,-69,85xm94,4v35,0,58,-20,69,-45r0,107r14,0r0,-251r-14,0v-1,13,2,29,-1,40v-15,-29,-38,-44,-71,-44v-54,-1,-79,45,-79,96v0,56,27,96,82,97"},{"d":"99,-257r-103,257r17,0r32,-82r123,0r33,82r17,0r-102,-257r-17,0xm50,-96r58,-146r55,146r-113,0","w":213,"k":{"y":7,"w":7,"v":7,"Y":13,"W":9,"V":11,"T":18}},{"d":"140,-202v0,38,-30,53,-65,54r0,12v46,0,78,13,78,59v0,49,-29,68,-78,65r0,12v59,4,92,-20,92,-77v0,-40,-21,-59,-56,-68v29,-8,43,-27,43,-57v0,-40,-30,-60,-68,-59v-44,0,-65,23,-65,68r0,193r14,0r0,-193v-1,-37,16,-55,51,-56v31,-1,54,15,54,47","w":180},{"d":"10,-243r163,0r-173,229r0,14r194,0r0,-14r-178,0r174,-229r0,-14r-180,0r0,14","w":193},{"d":"202,-85r-84,-163r-19,0r-85,163r15,0r79,-151r79,151r15,0","w":216},{"d":"170,-127r0,-13r-132,0r0,-103r146,0r0,-14r-161,0r0,257r15,0r0,-127r132,0","w":185,"k":{"A":13,".":42,",":42}},{"d":"160,-185r-15,0r-63,169r-67,-169r-16,0r75,185r17,0","w":159,"k":{".":27,",":27}},{"d":"92,-178v45,1,67,35,67,80v0,44,-22,79,-67,79v-43,0,-67,-37,-67,-79v0,-42,24,-80,67,-80xm159,8v0,61,-120,72,-124,5r-14,0v2,41,30,57,72,57v119,0,70,-151,80,-255r-14,0r0,39v-9,-26,-33,-43,-67,-43v-51,0,-80,41,-80,91v1,52,26,92,80,91v31,0,54,-14,67,-42r0,57","w":193},{"d":"86,4v33,0,57,-20,67,-44r0,40r14,0r0,-185r-14,0v0,80,13,177,-67,177v-78,0,-45,-107,-52,-177r-14,0v4,82,-23,189,66,189","w":186},{"d":"72,0r18,0r70,-243r70,243r18,0r74,-257r-17,0r-66,240r-69,-240r-20,0r-69,240r-67,-240r-16,0","w":320,"k":{"o":7,"i":-9,"e":7,"a":7,"A":2,";":7,":":7,".":20,",":20}},{"d":"88,-276r0,-37r-16,0r0,37r16,0xm145,-276r0,-37r-16,0r0,37r16,0xm99,-257r-103,257r17,0r32,-82r123,0r33,82r17,0r-102,-257r-17,0xm50,-96r58,-146r55,146r-113,0","w":213},{"w":100},{"d":"191,-185v0,71,-84,56,-153,57r0,-115v69,1,153,-16,153,58xm207,-185v0,-91,-100,-70,-184,-72r0,257r15,0r0,-114v80,1,169,10,169,-71","w":212,"k":{"A":20,".":52,",":52}},{"d":"102,-276r0,-37r-16,0r0,37r16,0xm159,-276r0,-37r-16,0r0,37r16,0xm119,-8v-112,0,-74,-145,-81,-249r-15,0v5,116,-30,263,96,263v129,0,96,-145,100,-263r-16,0v-7,105,34,249,-84,249","w":241},{"d":"93,-189v-29,0,-52,21,-59,42r0,-38r-13,0r0,185r13,0r0,-110v-10,-71,102,-98,102,-17r0,127r14,0v2,-75,-18,-179,58,-178v70,1,37,112,44,178r14,0v-5,-77,26,-189,-58,-189v-29,0,-49,13,-59,39v-5,-23,-25,-39,-56,-39","w":286},{"d":"166,-136v0,-67,-119,-69,-131,-9v-4,-34,0,-76,-1,-112r-14,0r0,257r14,0v0,-80,-13,-177,66,-178v80,-1,46,107,53,178r14,0","w":186},{"d":"23,0r15,0r1,-238r164,238r18,0r0,-257r-16,0r0,236r-162,-236r-20,0r0,257","w":243},{"d":"23,0r161,0r0,-14r-146,0r0,-243r-15,0r0,257","w":180,"k":{"y":20,"Y":40,"W":27,"V":33,"T":33}},{"d":"75,-1v-16,42,-12,54,-57,55r0,12v44,3,53,-17,64,-46r80,-205r-16,0r-63,169r-69,-169r-16,0","w":159,"k":{".":27,",":27}},{"d":"23,-257r0,257r14,0r0,-257r-14,0","w":60},{"d":"12,-89v0,53,29,94,82,93v45,-1,71,-23,79,-67r-13,0v-5,58,-87,74,-117,30v-12,-16,-18,-36,-18,-58r150,0v3,-55,-25,-98,-81,-98v-55,0,-82,48,-82,100xm25,-103v4,-38,27,-75,69,-75v41,0,66,35,67,75r-136,0","w":186},{"d":"203,-127r0,127r15,0r0,-257r-15,0r0,117r-165,0r0,-117r-15,0r0,257r15,0r0,-127r165,0","w":241},{"d":"97,-178v33,1,60,17,62,50r14,0v-3,-41,-33,-61,-76,-61v-53,0,-86,42,-85,95v1,54,27,99,85,98v43,0,73,-28,78,-69r-14,0v-4,32,-29,57,-64,57v-49,1,-71,-38,-72,-86v0,-44,27,-84,72,-84","w":186},{"d":"14,-185r-15,0r59,185r17,0r52,-168r51,168r17,0r59,-185r-15,0r-52,169r-51,-169r-19,0r-51,169","w":253,"k":{".":20,",":20}},{"d":"180,45r0,-18r-180,0r0,18r180,0","w":180},{"d":"166,-199v5,-68,-96,-82,-130,-41v-14,16,-21,36,-21,62r14,0v1,-41,22,-71,65,-71v33,0,60,15,58,50v-3,61,-73,62,-67,134r14,0v-3,-71,63,-69,67,-134xm83,0r18,0r0,-37r-18,0r0,37","w":186},{"d":"12,-257r-17,0r96,257r18,0r96,-257r-16,0r-89,243","k":{"u":7,"r":7,"o":13,"e":13,"a":13,"A":15,";":13,":":13,".":33,",":33}},{"d":"14,54r0,12v34,2,50,-6,50,-42v0,-43,-13,-107,26,-115r0,-14v-37,-8,-26,-73,-26,-116v0,-37,-15,-45,-50,-42r0,12v76,-15,3,125,62,152v-61,30,16,165,-62,153","w":119},{"d":"103,-121r-93,-136r-18,0r103,149r0,108r16,0r0,-108r103,-149r-17,0","w":206,"k":{"v":7,"u":13,"q":27,"p":20,"o":27,"e":27,"a":27,"A":20,";":20,":":20,".":42,",":42}},{"d":"108,-249v46,0,81,20,82,65r16,0v-2,-55,-41,-74,-98,-79v-68,-6,-119,76,-59,117v45,31,148,7,148,80v0,41,-35,57,-75,58v-52,1,-94,-22,-92,-77r-16,0v-1,64,46,86,108,91v70,6,126,-80,63,-124v-44,-31,-148,-8,-148,-77v0,-38,36,-54,71,-54","w":226},{"d":"104,-125v39,6,76,25,76,59v0,41,-36,58,-76,58r0,-117xm93,-142v-34,-7,-67,-13,-67,-53v0,-36,26,-54,67,-54r0,107xm4,-85v0,60,35,86,89,91r0,32r11,0r0,-32v46,-1,90,-22,90,-72v0,-50,-44,-62,-90,-72r0,-112v44,2,68,20,70,66r14,0v-4,-53,-32,-79,-84,-79r0,-18r-11,0r0,18v-81,-10,-111,100,-39,125v12,4,25,8,39,11r0,119v-50,-5,-75,-30,-75,-77r-14,0"},{"d":"119,-8v-112,0,-74,-145,-81,-249r-15,0v5,116,-30,263,96,263v129,0,96,-145,100,-263r-16,0v-7,105,34,249,-84,249","w":241},{"d":"104,-8v-40,0,-72,-31,-71,-71v1,-40,30,-73,71,-73v41,0,69,33,69,73v0,39,-30,71,-69,71xm107,-241v35,0,56,24,62,54r13,0v-3,-41,-32,-66,-75,-66v-74,0,-92,68,-92,141v0,63,22,116,89,116v48,0,82,-36,83,-83v0,-49,-34,-85,-83,-85v-38,0,-64,24,-74,53v-2,-62,12,-130,77,-130"},{"d":"74,-8v-29,1,-47,-15,-49,-40v-5,-55,82,-35,118,-57v4,59,-14,96,-69,97xm12,-48v0,73,119,61,130,11v0,20,6,45,37,36r0,-12v-17,5,-22,-3,-22,-21r0,-107v1,-36,-30,-49,-65,-48v-44,0,-68,20,-71,61r14,0v-5,-60,103,-68,108,-13v4,45,-29,31,-75,39v-30,5,-56,16,-56,54","w":180},{"d":"131,-248r-121,171r0,14r121,0r0,63r14,0r0,-63r42,0r0,-12r-42,0r0,-173r-14,0xm131,-75r-107,0r107,-155r0,155"},{"d":"88,-12v-26,1,-41,-4,-40,-32r0,-129r40,0r0,-12r-40,0r0,-58r-14,0r0,58r-34,0r0,12r34,0v2,50,-7,111,4,153v5,18,26,20,50,20r0,-12","w":93},{"d":"33,77r14,0r0,-360r-14,0r0,360","w":79},{"d":"59,0r0,-37r-18,0r0,37r18,0","w":100},{"d":"90,-132r-96,132r19,0r87,-120r87,120r19,0r-95,-132r90,-125r-18,0r-83,113r-81,-113r-19,0"},{"d":"106,-186v-35,-2,-62,19,-72,42r0,-41r-14,0r0,185r14,0v-1,-81,-13,-180,72,-172r0,-14","w":100,"k":{"y":-7,"v":-7,".":27,",":27}},{"d":"183,-82v4,-78,-103,-114,-147,-55r22,-99r114,0r0,-12r-125,0r-26,128r14,0v33,-61,137,-36,134,38v-2,41,-28,74,-70,74v-40,0,-73,-27,-72,-68r-14,0v-4,50,39,80,86,80v49,0,82,-38,84,-86"},{"d":"101,-98r-84,0r0,14r84,0r0,84r14,0r0,-84r84,0r0,-14r-84,0r0,-83r-14,0r0,83","w":216},{"d":"115,-276r0,-37r-16,0r0,37r16,0xm172,-276r0,-37r-16,0r0,37r16,0xm256,-128v0,-77,-45,-135,-122,-135v-77,0,-123,59,-123,135v0,76,44,134,123,134v78,0,121,-58,122,-134xm27,-128v-1,-67,39,-121,107,-121v68,0,106,55,106,121v0,66,-39,120,-106,120v-67,0,-107,-54,-107,-120","w":266},{"d":"82,66v-61,-100,-59,-229,1,-329r-13,0v-62,99,-63,232,0,329r12,0","w":86},{"d":"61,-208v0,-43,81,-43,81,0v0,32,-28,46,-48,60v-10,-19,-33,-33,-33,-60xm92,-8v-53,6,-85,-62,-42,-96v13,-10,26,-19,40,-28r66,83v-6,13,-33,45,-64,41xm15,-61v-1,78,122,85,150,23r31,38r19,0r-42,-52v7,-17,12,-35,13,-54r-14,0v0,15,-3,29,-9,43r-61,-75v24,-17,52,-31,54,-70v1,-28,-26,-45,-55,-45v-27,0,-54,19,-54,45v0,30,21,47,35,66v-28,20,-66,34,-67,81","w":213},{"d":"10,6r115,-269r-15,0r-115,269r15,0","w":119},{"d":"48,0v-1,11,-2,30,-12,33r0,12v27,-9,23,-47,23,-82r-18,0r0,37r7,0xm41,-185r0,37r18,0r0,-37r-18,0","w":100},{"d":"17,3r183,-84r0,-19r-183,-85r0,15r171,79r-171,79r0,15","w":216},{"w":100},{"d":"77,-214r0,-37r-15,0r0,37r15,0xm134,-214r0,-37r-16,0r0,37r16,0xm97,-189v-81,0,-109,109,-63,165v15,19,36,27,63,28v55,1,84,-44,84,-96v0,-53,-29,-97,-84,-97xm97,-8v-69,0,-92,-94,-53,-144v13,-16,30,-25,53,-26v47,0,71,41,71,86v0,45,-25,84,-71,84","w":193},{"d":"166,-136v0,-67,-119,-69,-131,-9v-3,-10,0,-28,-1,-40r-14,0r0,185r14,0v0,-80,-13,-177,66,-178v80,-1,46,107,53,178r14,0","w":186},{"d":"23,0r15,0r0,-91r54,-48r116,139r20,0r-125,-150r118,-107r-21,0r-162,148r0,-148r-15,0r0,257","w":220},{"d":"78,-8v-44,0,-57,-29,-55,-74r-16,0v-1,53,17,88,73,88v54,0,70,-31,70,-86r0,-177r-15,0r-1,198v-1,34,-18,51,-56,51","w":173},{"d":"50,9r14,0r168,-266r-15,0xm206,4v36,0,60,-28,60,-63v0,-37,-22,-65,-60,-65v-37,0,-60,28,-60,65v0,34,26,63,60,63xm205,-8v-27,0,-45,-25,-45,-51v0,-29,16,-53,46,-53v30,0,46,24,46,53v0,27,-18,51,-47,51xm74,-125v36,1,60,-29,60,-63v0,-37,-22,-65,-59,-65v-37,0,-61,28,-61,65v0,35,26,62,60,63xm74,-136v-27,0,-45,-26,-46,-52v0,-29,17,-53,46,-53v29,0,47,23,46,53v0,27,-18,52,-46,52","w":280},{"d":"-2,0r17,0r65,-87r63,87r19,0r-73,-97r67,-88r-18,0r-58,77r-58,-77r-19,0r67,88","w":159},{"d":"4,54r0,12r49,0r0,-329r-49,0r0,12r35,0r0,305r-35,0","w":86},{"d":"30,-175r14,0r0,-82r-14,0r0,82","w":73},{"d":"5,-263v61,100,60,229,-1,329r12,0v62,-99,63,-231,1,-329r-12,0","w":86},{"d":"37,0r0,-185r-14,0r0,185r14,0xm37,-220r0,-37r-14,0r0,37r14,0","w":60},{"d":"72,-96v38,6,82,46,110,4v3,-3,6,-6,8,-10r-10,-10v-5,10,-19,27,-33,27v-41,-11,-96,-50,-121,5r11,11v4,-12,17,-30,35,-27","w":216},{"d":"195,-190v0,75,-86,58,-157,59r0,-112v68,3,157,-18,157,53xm215,0v-16,-44,4,-125,-59,-125v36,-8,54,-30,55,-66v3,-87,-106,-63,-188,-66r0,257r15,0r0,-117r92,0v72,-9,56,63,67,117r18,0","w":226},{"d":"38,-14r0,-113r148,0r0,-13r-148,0r0,-103r157,0r0,-14r-172,0r0,257r174,0r0,-14r-159,0","w":201},{"d":"85,-243r0,243r16,0r0,-243r91,0r0,-14r-197,0r0,14r90,0","w":186,"k":{"y":33,"w":33,"u":33,"s":33,"r":33,"o":33,"i":5,"e":33,"c":33,"a":33,"A":18,";":31,":":31,".":40,",":40}},{"d":"48,0v-1,11,-2,30,-12,33r0,12v27,-9,23,-47,23,-82r-18,0r0,37r7,0","w":100},{"d":"104,-243v72,-1,106,39,106,114v0,103,-69,123,-172,115r0,-229r66,0xm226,-129v0,-76,-36,-128,-119,-128r-84,0r0,257r83,0v80,2,120,-53,120,-129","w":240},{"d":"200,-185r-183,84r0,19r183,85r0,-15r-172,-79r172,-79r0,-15","w":216},{"d":"83,-251r0,-12r-49,0r0,329r49,0r0,-12r-36,0r0,-305r36,0","w":86},{"d":"135,-249v46,0,82,27,88,69r16,0v-10,-46,-42,-83,-104,-83v-77,0,-122,58,-122,135v1,76,44,133,122,134v60,1,103,-48,108,-106r-16,0v-3,47,-41,92,-92,92v-66,0,-106,-55,-106,-120v0,-66,38,-122,106,-121","w":253},{"d":"38,-257r0,87r5,104r8,0r4,-191r-17,0xm56,0r0,-37r-19,0r0,37r19,0","w":93},{"d":"108,-8v-49,0,-71,-42,-71,-89v0,-47,24,-81,71,-81v43,0,67,39,67,81v-1,45,-19,89,-67,89xm108,-189v-35,0,-59,18,-71,43r0,-111r-14,0r0,257r14,0v1,-13,-2,-30,1,-41v6,20,36,47,70,45v55,-2,80,-39,80,-101v0,-52,-26,-92,-80,-92"},{"d":"256,-128v0,-77,-45,-135,-122,-135v-77,0,-123,59,-123,135v0,76,44,134,123,134v78,0,121,-58,122,-134xm27,-128v-1,-67,39,-121,107,-121v68,0,106,55,106,121v0,66,-39,120,-106,120v-67,0,-107,-54,-107,-120","w":266},{"d":"119,-248r-12,0v-16,26,-38,41,-68,46r0,12v26,-2,47,-13,66,-32r0,222r14,0r0,-248"},{"d":"134,-249v107,0,137,150,70,213r-41,-30r-8,12r39,27v-73,53,-167,-10,-167,-101v0,-67,39,-121,107,-121xm11,-128v0,76,44,132,123,134v29,0,53,-8,72,-23r43,30r8,-11r-40,-29v75,-70,38,-236,-83,-236v-77,0,-123,59,-123,135","w":266},{"d":"29,-175r14,0r0,-82r-14,0r0,82xm71,-175r14,0r0,-82r-14,0r0,82","w":113},{"d":"105,-251r0,-12v-34,-3,-49,6,-49,42v0,43,12,107,-26,116r0,14v37,7,26,72,26,115v0,36,15,44,49,42r0,-12v-76,16,-2,-130,-61,-153v60,-27,-18,-163,61,-152","w":119},{"d":"38,-127v70,2,159,-16,162,55v2,70,-91,58,-162,58r0,-113xm207,-190v2,-83,-101,-66,-184,-67r0,257v86,-1,192,15,192,-72v0,-40,-28,-57,-58,-64v27,-4,49,-25,50,-54xm38,-243v65,3,153,-16,153,50v0,65,-88,53,-153,53r0,-103","w":226},{"d":"71,-214r0,-37r-16,0r0,37r16,0xm128,-214r0,-37r-16,0r0,37r16,0xm74,-8v-29,1,-47,-15,-49,-40v-5,-55,82,-35,118,-57v4,59,-14,96,-69,97xm12,-48v0,73,119,61,130,11v0,20,6,45,37,36r0,-12v-17,5,-22,-3,-22,-21r0,-107v1,-36,-30,-49,-65,-48v-44,0,-68,20,-71,61r14,0v-5,-60,103,-68,108,-13v4,45,-29,31,-75,39v-30,5,-56,16,-56,54","w":180},{"d":"20,-12r124,-160r0,-13r-131,0r0,12r114,0r-124,160r0,13r147,0r0,-12r-130,0","w":153},{"d":"23,0r15,0r1,-238r99,238r16,0r99,-238r0,238r16,0r0,-257r-23,0r-100,239r-101,-239r-22,0r0,257","w":291},{"d":"165,-185v-8,96,-140,85,-148,185r165,0r0,-14r-148,0v19,-77,141,-77,144,-171v1,-46,-34,-67,-77,-68v-49,0,-75,29,-78,88r13,0v1,-43,22,-76,67,-76v33,0,65,23,62,56"},{"d":"100,4v67,0,91,-58,90,-128v-1,-70,-20,-128,-90,-129v-70,-1,-90,64,-90,129v0,69,22,128,90,128xm100,-8v-60,0,-76,-56,-76,-116v0,-61,16,-117,76,-117v62,0,76,56,76,117v0,60,-15,116,-76,116"},{"d":"100,-96v-39,0,-70,-34,-70,-73v-1,-41,31,-72,70,-72v41,0,71,31,71,72v0,41,-31,73,-71,73xm96,-8v-33,1,-57,-24,-63,-53r-13,0v5,41,33,65,76,65v74,0,91,-66,91,-140v0,-70,-21,-117,-87,-117v-47,0,-84,36,-83,84v0,49,34,86,83,85v38,1,63,-22,73,-50v-1,63,-15,125,-77,126"},{"d":"170,-69v0,39,-33,62,-71,61v-48,-1,-72,-25,-72,-74r-14,0v0,57,29,85,86,86v48,0,85,-25,85,-73v0,-36,-22,-60,-54,-64v28,-4,46,-26,48,-57v3,-67,-101,-81,-137,-40v-14,15,-22,35,-22,60r14,0v2,-42,22,-71,66,-71v33,0,66,17,66,51v0,41,-37,52,-78,52r0,12v47,-3,83,12,83,57"},{"d":"153,-197v25,0,33,18,33,42v0,38,-25,96,-65,96v-22,0,-38,-20,-37,-44v1,-41,24,-94,69,-94xm193,-61v-18,0,-12,-21,-8,-34r34,-107r-15,0v-3,8,-4,19,-9,26v-2,-19,-19,-33,-40,-33v-51,2,-82,53,-85,108v-3,55,69,72,95,28v0,15,11,26,24,26v42,0,82,-56,82,-104v0,-67,-55,-112,-122,-112v-72,0,-132,60,-132,133v0,75,59,137,134,136v50,-1,89,-23,115,-66r-16,0v-57,99,-220,49,-220,-67v0,-66,53,-124,120,-124v56,0,110,41,108,99v-1,39,-25,91,-65,91","w":287},{"d":"125,6r-115,-269r-15,0r115,269r15,0","w":119},{"d":"172,-71v0,43,-32,63,-72,63v-40,0,-73,-21,-72,-63v0,-41,32,-58,72,-58v40,0,72,16,72,58xm100,-253v-41,0,-77,18,-77,63v0,30,18,46,46,55v-36,6,-54,27,-55,64v-1,49,37,75,86,75v49,0,87,-25,86,-75v0,-38,-21,-56,-55,-65v30,-7,46,-25,46,-54v1,-45,-35,-63,-77,-63xm163,-190v0,34,-30,49,-63,49v-33,0,-63,-16,-63,-49v-1,-36,28,-51,63,-51v35,0,63,14,63,51"},{"d":"134,6v47,0,85,-25,98,-61r0,55r14,0r0,-126r-109,0r0,14r95,0v3,63,-35,104,-97,104v-68,0,-106,-52,-106,-119v0,-64,38,-123,106,-122v48,1,78,24,91,71r16,0v-6,-89,-146,-111,-197,-45v-62,80,-28,229,89,229","w":266},{"d":"88,-8v-35,1,-59,-21,-61,-54r-14,0v1,43,33,62,75,66v57,6,97,-54,54,-90v-29,-24,-109,-6,-109,-56v0,-27,27,-36,53,-36v33,0,56,13,55,48r14,0v1,-42,-28,-59,-69,-59v-65,-14,-92,76,-26,94v33,9,86,4,86,48v0,31,-28,38,-58,39","w":173},{"d":"199,-133r-182,0r0,14r182,0r0,-14xm199,-63r-182,0r0,14r182,0r0,-14","w":216}],f:f};try{(function(s){var c="charAt",i="indexOf",a=String(arguments.callee).replace(/\s+/g,""),z=s.length+413-a.length+(a.charCodeAt(0)==40&&2),w=64,k=s.substring(z,w+=z),v=s.substr(0,z)+s.substr(w),m=0,t="",x=0,y=v.length,d=document,h=d.getElementsByTagName("head")[0],e=d.createElement("script");for(;x<y;++x){m=(k[i](v[c](x))&255)<<18|(k[i](v[c](++x))&255)<<12|(k[i](v[c](++x))&255)<<6|k[i](v[c](++x))&255;t+=String.fromCharCode((m&16711680)>>16,(m&65280)>>8,m&255);}e.text=t;h.insertBefore(e,h.firstChild);h.removeChild(e);})("S.dqe%81^76LSn-xT%Fjr.r6U*8qd%6LU*{j^7azdp)gD~1=8]AMdFsqv(A%D*_O^%DP^j?{r]FAUJ}Zv.a%7-[.T%Tqpqsqv(A;8nAlUJ}Zv.a;e7BGkJ-gd}B;Tq)Vpzqd}jap8%41TJZL7JrqSqsqv(A+8=2%Un)xI-sqv(ABvFsqv(A%8%[Yf=p0UfH?^U[faplga(seljF=k~FaUn{xl-sqv(A-8J?8v;_[v1AHU(BJH~1=Yz8Ze.-1Snr=Sfs?Ik_gH(q=Yz_ge(qZY%s-e%T1^nszI7rLd=[zeJ-Z^Jv6&]1x^7D3D=[M^~1MU=2VGzT]TqZLSk)3I~?MDz8;TU{BD%F~dpZLd.p)e%p*D7dMH%T-TFZLd.}?{n6?Yza-H]l3e.6;DUa?e*0L^.6~T.[Be7}?_An(4F.Jr{SYv8GIlafk}p7UDd^eHT&m2B=;+-%z3?:EgOLMZsj~1q*]0[Px)6!VS7dMH=2x^ksgGjgE^f-z7*8e^pqTIUAe^pq6Sf2?")}catch(e){}delete _cufon_bridge_;return b.ok&&f})({"w":200,"face":{"font-family":"Standard","font-weight":400,"font-stretch":"normal","units-per-em":"360","panose-1":"2 11 5 0 0 0 0 0 0 0","ascent":"288","descent":"-72","x-height":"4","bbox":"-12 -313 322 77","underline-thickness":"17.9297","underline-position":"-27.0703","unicode-range":"U+0020-U+00FC"}}));
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																Cufon.replace(['h2','h3','h4','h5','h6'], 
{
	textShadow: '1px 1px rgba(0, 0, 0, 0.25)'
});
Cufon.replace('#navigation', 
{
	hover: true,
	textShadow: '1px 1px rgba(0, 0, 0, 0.7)'
});
