// April, 2004
	var its;
	var browserName;
	var browserNameLong;
	var browserNew;
	var preloadFlag = false;
	var Macintosh = navigator.userAgent.indexOf('Mac')>0;

	function its() {
		var n = navigator;
		var ua = ' ' + n.userAgent.toLowerCase();
		var pl = n.platform.toLowerCase();
		var an = n.appName.toLowerCase();

		// browser version
		this.version = n.appVersion;
		this.nn = ua.indexOf('mozilla') > 0;

		// 'compatible' versions of mozilla aren't navigator
		if(ua.indexOf('compatible') > 0) {
			this.nn = false;
		}
		
		this.opera = ua.indexOf('opera') > 0;
		this.ie = ua.indexOf('msie') > 0;
		this.major = parseInt( this.version );
		this.minor = parseFloat( this.version );

		// platform
		this.mac = ua.indexOf('mac') > 0;
		this.win = ua.indexOf('win') > 0;

		// workaround for IE5 which reports itself as version 4.0
		if(this.ie) {
			if(ua.indexOf("msie 5") > 1) {
			var msieIndex = navigator.appVersion.indexOf("MSIE") + 5;
			this.major = parseFloat(navigator.appVersion.substr(msieIndex,3));
			}
		}

		return this;
	}

	function browserNaming() {
		its = new its();
		
		// is it a DOM-enabled browser?
		if (!document.getElementById) {
			browserNew = false;
		}
		else {
			browserNew = true;
		}

		// need the name, too
		if (its.opera) {
			browserName = "Opera";
		}
		else if (its.ie) {
			browserName = "IE";
		}
		else {
			browserName = "NS";
		}

		// and the number
		browserNameLong = browserName + its.major;
	
	}
	

// CREATING THE MOUSEOVER IMAGES
// USAGE:	createObject('buttonoff','images/specfeature_celluar_off.gif');
// NOTES:	call it from within the preload function
// WORKS:	ie4+, ns4+, opera5

	function createObject(imgName,imgSrc) {
		if (browserNew && (browserName == "NS")) {
		// a DOM-compatible browser
		// which is probably NS6/mozilla (the other code works better in IE/Opera)
			var tempImg = document.createElement("img");
			tempImg.src = imgSrc;
			tempImg.id = imgName;
			tempImg.style.visibility = 'hidden';
			tempImg.style.position = 'absolute';
			tempImg.style.top = 0;
			document.body.appendChild(tempImg);
		}
		else {
		// a non-DOM-compatible browser
		// and IE/Opera
			eval(imgName+' = new Image()');
			eval(imgName+'.src = "'+imgSrc+'"');
		}
	}


// MOUSEOVER SWITCHING
// USAGE:	<a href="#" onmouseover="changeImage(null,'buttonname','buttonnameon');" onmouseout="changeImage(null,'buttonname','buttonnameoff');">
// NOTES:	if the image is in a DIV, substitute 'null' with the DIV name.
// WORKS:	ie4+, ns4+, opera5

	function changeImage(layer,imgName,imgObj) {
		if (preloadFlag) {
			if (browserNew && (browserName == "NS")) {
			// a DOM-compatible browser
			// which is probably NS6/mozilla (the other code works better in IE/Opera)
				thisImage = document.getElementById(imgName);
				newImage = document.getElementById(imgObj);
				newSrc = newImage.getAttribute("src");
				thisImage.setAttribute("src",newSrc);
			}
			else {
			// a non-DOM-compatible browser
			// and IE/Opera
				if ((browserName == "NS") && layer!=null) eval('document.'+layer+'.document.images["'+imgName+'"].src = '+imgObj+'.src')
				else document.images[imgName].src = eval(imgObj+".src")
			}
		}
	}


// REMOVES THE LINK BORDER IN IE5/NS6
// original code by evil@chelu.ro
//
// USAGE:	getLinksToBlur();
// NOTES:	call it from within the preload function
// WORKS:	ie5+, ns6+, opera5+

	function unblur() {
		this.blur();
	}

	function getLinksToBlur() {
		if (!document.getElementById) return
		links = document.getElementsByTagName("a");
		for(i=0; i<links.length; i++) {
			links[i].onfocus = unblur
		}
	}



// POPUP WINDOW (FIXES THE IE4/MAC PROBLEM WHICH MAKES WINDOWS TOO SMALL)
// USAGE:	<a href="#" onclick="spawnWindow('newpage.html','windowname',400,384,'no');">
// NOTES:	substitute 400 with the width, 384 with the height, windowname with the name of the new window, scroll with either 'yes', 'no' or 'auto'
// WORKS:	ie4+, ns4+, opera5

	function spawnWindow(desktopURL,windowName,width,height,scroll) {
 		if (Macintosh) {
 			if (browserNameLong == "IE4") {
				newheight = parseInt(height + 17);
			}
			else if (browserNameLong == "IE4.5") {
				newheight = parseInt(height + 17);
			}
			else {
				newheight = height;
			}
 		}
 		else { newheight = height; }	
 		window.open(desktopURL, windowName, "toolbar=no,location=no,status=yes,menubar=no,scrollbars="+scroll+",width="+width+",height="+newheight+",resizable=no" );
	}

	function spawnWindowToo(desktopURL,windowName,width,height) {
 		window.open(desktopURL, windowName, "toolbar=no,location=no,status=no,menubar=no,scrollbars=no,width="+width+",height="+height+",resizable=no" );
	}


// HIDE AND SHOW LAYERS (ON THE SAME PAGE)
// USAGE:	show('layername'); hide('layername');
// WORKS:	ie4+, ns4+, opera

	function hide(id) {
		if (browserNew) {
			setIdProperty(id,"visibility","hidden");
		}
		else {
			if (browserName == "NS") { document.layers[id].visibility = "hide"; }
			else { document.all[id].style.visibility = "hidden"; }
		}
	}

	function show(id) {
		if (browserNew) {
			setIdProperty(id,"visibility","visible");
		}
		else {
			if (browserName == "NS") { document.layers[id].visibility = "show"; }
			else { document.all[id].style.visibility = "visible"; }
		}
	}

	
// DOM / GET PROPERTY
// original code from http://www.alistapart.com/
//
// NOTES:	given an id and a property (as strings), return the given property of that id.
// WORKS:	ie5+, ns6+, opera5+

	function getIdProperty(id,property) {
		var styleObject = document.getElementById( id );
		if (styleObject != null) {
			styleObject = styleObject.style;
				if (styleObject[property]) {
					return styleObject[ property ];
				}
			}
		return (styleObject != null) ?
		styleObject[property] :
		null;
	}


// DOM / SET PROPERTY
// original code from http://www.alistapart.com/
//
// NOTES:	given an id and a property (as strings), set the given property of that id to the value provided.
// WORKS:	ie5+, ns6+, opera5+

	function setIdProperty(id,property,value) {
		var styleObject = document.getElementById( id );
		if (styleObject != null) {
			styleObject = styleObject.style;
			styleObject[ property ] = value;
		}
	}

// RANDOM NUMBER GENERATOR
// USAGE:	var ranNumber = 0+randNum(40);
// NOTES:	call it from within the main html page
// WORKS:	ie4+, ns4+, opera

	function randNum (num) {
		var now = new Date();
		var rand = Math.round(num * Math.cos(now.getTime()));
		if (rand < 0) rand = - rand; 
		if (rand == 0) rand++;
		return rand;
	}


function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

		browserNaming();
		function startBottom() {
			MM_preloadImages('images/sub_nav_news_over.gif','images/sub_nav_bio_over.gif','images/sub_nav_music_over.gif','images/sub_nav_photos_over.gif','images/sub_nav_thank_over.gif','images/sub_nav_contact_over.gif');
			preloadFlag = true;
			eventLoader();
			getLinksToBlur();
		}
		var upH = 16; // Height of up-arrow
		var upW = 16; // Width of up-arrow
		var downH = 16; // Height of down-arrow
		var downW = 16; // Width of down-arrow
		var dragH = 21; // Height of dragger
		var dragW = 16; // Width of dragger
		var speed = 4; // Scroll speed
		var dom = document.getElementById ? true:false;
		var nn4 = document.layers ? true:false;
		var ie4 = document.all ? true:false;
		var mouseY; // Mouse Y position onclick
		var mouseX; // Mouse X position onclick
		var clickUp = false; // If click on up-arrow
		var clickDown = false; // If click on down-arrow
		var clickDrag = false; // If click on scrollbar
		var clickAbove = false; // If click above scrollbar
		var clickBelow = false; // If click below scrollbar
		var timer = setTimeout("",500); // Repeat variable

		var upL; // Up-arrow X
		var upT; // Up-arrow Y
		var downL; // Down-arrow X
		var downT; // Down-arrow Y
		var dragL; // Scrollbar X
		var dragT; // Scrollbar Y
		var rulerL; // Ruler X
		var rulerT; // Ruler Y
		var contentT; // Content layer Y;
		var contentH; // Content height
		var contentClipH; // Content clip height
		var scrollLength; // Number of pixels scrollbar should move
		var startY; // Keeps track of offset between mouse and span

		function down(e){
			if((document.layers && e.which!=1) || (document.all && event.button!=1)) return true;
				getMouse(e);
				startY = (mouseY - dragT);
				if(mouseX >= upL && (mouseX <= (upL + upW)) && mouseY >= upT && (mouseY <= (upT + upH))){
					clickUp = true;
					return scrollUp();
				}	
				else if(mouseX >= downL && (mouseX <= (downL + downW)) && mouseY >= downT && (mouseY <= (downT + downH))){
					clickDown = true;
					return scrollDown();
				}
				else if(mouseX >= dragL && (mouseX <= (dragL + dragW)) && mouseY >= dragT && (mouseY <= (dragT + dragH))){
					clickDrag = true;
					return false;
				}
				else if(mouseX >= dragL && (mouseX <= (dragL + dragW)) && mouseY >= rulerT && (mouseY <= (rulerT + scrollH))){
					if(mouseY < dragT){
						clickAbove = true;
						clickUp = true;
						return scrollUp();
					}
					else{
						clickBelow = true;
						clickDown = true;
						return scrollDown();
					}
				}
			else{
				return true;
			}
		}
		function move(e){
			if(clickDrag && contentH > contentClipH){
				getMouse(e);
				dragT = (mouseY - startY);
		
				if(dragT < (rulerT))
					dragT = rulerT;		
				if(dragT > (rulerT + scrollH - dragH))
					dragT = (rulerT + scrollH - dragH);
		
				contentT = ((dragT - rulerT)*(1/scrollLength));
				contentT = eval('-' + contentT);

				moveTo();
				if(ie4)
					return false;
			}
		}

		function up(){
			clearTimeout(timer);
			// Resetting variables
			clickUp = false;
			clickDown = false;
			clickDrag = false;
			clickAbove = false;
			clickBelow = false;
			return true;
		}

		// Reads content layer top
		function getT(){
			if(ie4)
				contentT = document.all.content.style.pixelTop;
			else if(nn4)
				contentT = document.contentClip.document.content.top;
			else if(dom)
				contentT = parseInt(document.getElementById("content").style.top);
		}

		// Reads mouse X and Y coordinates
		function getMouse(e){
			if(ie4){
				mouseY = event.clientY + document.body.scrollTop;
				mouseX = event.clientX + document.body.scrollLeft;
			}
			else if(nn4 || dom){
				mouseY = e.pageY;
				mouseX = e.pageX;
			}
		}

		// Moves the layer
		function moveTo(){
			if(ie4){
				document.all.content.style.top = contentT;
				document.all.ruler.style.top = dragT;
				document.all.drag.style.top = dragT;
			}
			else if(nn4){
				document.contentClip.document.content.top = contentT;
				document.ruler.top = dragT;
				document.drag.top = dragT;
			}
			else if(dom){
				document.getElementById("content").style.top = contentT + "px";
				document.getElementById("drag").style.top = dragT + "px";
				document.getElementById("ruler").style.top = dragT + "px";
			}
		}

		// Scrolls up
		function scrollUp(){
			getT();
	
			if(clickAbove){
				if(dragT <= (mouseY-(dragH/2)))
					return up();
			}
	
			if(clickUp){
				if(contentT < 0){		
					dragT = dragT - (speed*scrollLength);
			
					if(dragT < (rulerT))
						dragT = rulerT;
				
					contentT = contentT + speed;
					if(contentT > 0)
						contentT = 0;
			
					moveTo();
					timer = setTimeout("scrollUp()",25);
				}
			}
			return false;
		}

		// Scrolls down
		function scrollDown(){
			getT();
	
			if(clickBelow){
				if(dragT >= (mouseY-(dragH/2)))
					return up();
			}

			if(clickDown){
				if(contentT > -(contentH - contentClipH)){			
					dragT = dragT + (speed*scrollLength);
					if(dragT > (rulerT + scrollH - dragH))
						dragT = (rulerT + scrollH - dragH);
			
					contentT = contentT - speed;
					if(contentT < -(contentH - contentClipH))
						contentT = -(contentH - contentClipH);
			
					moveTo();
					timer = setTimeout("scrollDown()",25);
				}
			}
			return false;
		}

		// reloads page to position the layers again
		function reloadPage(){
			location.reload();
		}

		// preloads the scroller stuff
		function eventLoader(){
			if(ie4){
				// Up-arrow X and Y variables
				upL = document.all.up.style.pixelLeft;
				upT = document.all.up.style.pixelTop;		
				// Down-arrow X and Y variables
				downL = document.all.down.style.pixelLeft;
				downT = document.all.down.style.pixelTop;
				// Scrollbar X and Y variables
				dragL = document.all.drag.style.pixelLeft;
				dragT = document.all.drag.style.pixelTop;		
				// Ruler Y variable
				rulerT = document.all.ruler.style.pixelTop;		
				// Height of content layer and clip layer
				contentH = parseInt(document.all.content.scrollHeight);
				contentClipH = parseInt(document.all.contentClip.style.height);
			}
			else if(nn4){
				// Up-arrow X and Y variables
				upL = document.up.left;
				upT = document.up.top;		
				// Down-arrow X and Y variables
				downL = document.down.left;
				downT = document.down.top;		
				// Scrollbar X and Y variables
				dragL = document.drag.left;
				dragT = document.drag.top;		
				// Ruler Y variable
				rulerT = document.ruler.top;
				// Height of content layer and clip layer
				contentH = document.contentClip.document.content.clip.bottom;
				contentClipH = document.contentClip.clip.bottom;
			}
			else if(dom){
				// Up-arrow X and Y variables
				upL = parseInt(document.getElementById("up").style.left);
				upT = parseInt(document.getElementById("up").style.top);
				// Down-arrow X and Y variables
				downL = parseInt(document.getElementById("down").style.left);
				downT = parseInt(document.getElementById("down").style.top);
				// Scrollbar X and Y variables
				dragL = parseInt(document.getElementById("drag").style.left);
				dragT = parseInt(document.getElementById("drag").style.top);
				// Ruler Y variable
				rulerT = parseInt(document.getElementById("ruler").style.top);
				// Height of content layer and clip layer
				contentH = parseInt(document.getElementById("content").offsetHeight);
				contentClipH = parseInt(document.getElementById("contentClip").offsetHeight);
				document.getElementById("content").style.top = 0 + "px";
		
			}
			// Number of pixels scrollbar should move
			scrollLength = ((scrollH-dragH)/(contentH-contentClipH));
			// Initializes event capturing
			if(nn4){
				document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
				window.onresize = reloadPage;
			}
			document.onmousedown = down;
			document.onmousemove = move;
			document.onmouseup = up;
		}
		
		// SOME NS4 STUFF HERE
		
		if (nn4) {
			document.write('<style type="text/css"><!--');
			document.write('#contentClip { z-index: 5; }');
			document.write('--></style>');
		}
		else {
			document.write('<style type="text/css"><!--');
			document.write('#contentClip { z-index: 5; overflow: hidden; }');
			document.write('--></style>');
		}
		// -->