////////////////////////////////////////////////////////////////
			// domHelper - a class that will 
			// - help find width and height properties
			// - help find x & y positions 
			////////////////////////////////////////////////////////////////
			
			var domHelper = function () {
				
				var d = this;

				d.init = function () { 
					if(document.getElementById) {
						// DOM-compliant browsers
						d.getRefById = function(e) { return document.getElementById(e) };
					} else if(document.all) {
						// Older Browsers
						d.getRefById = function(e) { return document.all[e] || null };
					}
				}

				d.getElementHeight = function (p_Element) {
					var e=d.getRefById(p_Element); 
					var h=0;
					var o=document.defaultView;
					if(e) {
						// DOM-compliant browsers
						if(o && d.getComputedStyle) {
							h = d.getComputedStyle(e, null).height;
						// Older Browsers
						} else if('number' == typeof e.offsetHeight) {
							h = e.offsetHeight + 'px';
						}
					}
					return parseInt(h);
				}
				
				d.msg = function (p_Str) { 
					alert(p_Str);
				}
				
				d.init();
				
			}
			
			////////////////////////////////////////////////////////////////
			// marquee - a class that will 
			// - scroll the marquee
			// - help find x & y positions 
			////////////////////////////////////////////////////////////////
			
			var Marquee = function ( p_width, p_height, p_speed ) {
			
				var o = this;
				
				// stuff to set here 
				o.m_mhWidth = p_width;			// marqueeHolder width
				o.m_mhHeight = p_height;		// marqueeHolder height
				o.m_scrollSpeed = p_speed;		// speed 
				o.m_pauseTime = 3000; 			// pause time for mouseover
				o.m_marquee = null; 			// reference to marquee
				o.m_mHeight = 0;	 			// marquee height
				o.m_topItem = 0; 				// first item to be displayed
				o.m_nextItemY = p_height/2; 	// middle of visible area
				o.m_marginBtm = 10; 			// spacing between items
				
				
				// debug
				o.m_debug = false;

				o.init = function () { 
					
					if ( typeof ( domHelper ) != "undefined" ) {
						o.dh = new domHelper();
					} else { 
						if (o.m_debug) { 
							o.Msg ("! no domHelper !");
						}
					}
					
				}
				
				o.isMacIE = function () { 
					var agt=navigator.userAgent.toLowerCase();
					if((agt.indexOf('mac')!=-1)&&(agt.indexOf("msie")!=-1)) { 
						return true ;
					}
					return false;					
				}
				
				// scroller display functions
				o.draw = function () { 
					
					// ### hacks for mac ie :P ###
					if ( ! o.isMacIE() ) {
						marqueeHolderStyle = "overflow:hidden;";
						marqueeStyle = "position:absolute;top:0px;left:0px;height:auto;";
					} else {
						marqueeHolderStyle = "overflow:auto;"; // add scrollbars instead
						marqueeStyle = "";
						o.m_nextItemY = 20; // redefine start
					}
										
					document.write('<div id="marqueeHolder" style="'+marqueeHolderStyle+'">');
					document.write('	<div id="marquee" style="'+marqueeStyle+'">');
									
					for (var i=0;i<marqueeItems.length;i++) { 
					
						// ### hacks for mac ie :P ###
						if ( ! o.isMacIE() ) { 
							mouseFunctions = 'onclick="m.isClicked(this);" onmouseover="m.isOver('+i+');" onmouseout="m.isOut('+i+')"'; 
						} else {
							mouseFunctions = "";
						}
					
						document.write('<div class="item" style="position:absolute;top:'+ o.m_nextItemY +'px;" id="marqueeItem_'+ i + '"'+ mouseFunctions+ '>' );
						document.write('		<div id="itemTop_'+i+'" class="itemTop">' + marqueeItems[i].itemText + '</div>');
						document.write('		<div id="itemBtm_'+i+'" class="itemBtm"></div>');
						document.write('</div>');
						o.m_nextItemY += (o.m_marginBtm + o.dh.getElementHeight('marqueeItem_'+ i));
					}
					
					document.write('	</div>')
					document.write('</div>')

					if (o.m_debug) { 
						document.write('<div id="debug"></div>');
						document.write('<a href="javascript:m.stop()">Stop Scroller</a>')
					}
					
					o.m_marquee = o.dh.getRefById('marquee'); 	// store ref to marquee
					o.m_btmItem = marqueeItems.length-1; 		// last item
					o.m_mHeight = o.dh.getElementHeight('marquee');

				}

				
				// output msg if in debug mode
				o.Msg = function (p_Str) { 
					if (o.m_debug) { 
						o.dh.getRefById("debug").innerHTML = p_Str;
					}
				}
				
				// mouse function - rolled over item
				o.isOver = function (e) {
					o.dh.getRefById("itemTop_"+e).className="itemTop itemTopOver";
					o.dh.getRefById("itemBtm_"+e).className="itemBtm itemBtmOver";
					o.stop();
				}
				
				// mouse function - rolled off item
				o.isOut = function  (e) { 
					o.dh.getRefById("itemTop_"+e).className="itemTop itemTopOut";
					o.dh.getRefById("itemBtm_"+e).className="itemBtm itemBtmOut";
					o.start()
				}
				
				// mouse function - clicked item
				o.isClicked = function (e) {
					var id=e.id.substring(e.id.indexOf('_')+1,e.id.length);
					window.location.href = marqueeItems[id].itemLink
				}
				
				// start scrolling
				o.start = function () {
					if (!o.isScrolling && o.m_marquee) {
						o.isScrolling = setInterval( o.scrollItemsUp , o.m_scrollSpeed );
					}
					if (o.m_debug) o.Msg ( "started..." );
				}
			
				// stop scrolling
				o.stop = function () {
					if (o.isScrolling) {
						clearInterval(o.isScrolling);
						o.isScrolling = 0;
					}
					if (o.m_debug) o.Msg ( "stopped..." );
				}
				
				/*
			    o.pauseScroller = function () {
					o.stopScroller();
					setTimeout(o.startScroller,o.m_pauseTime);
					if (o.m_debug) o.Msg ( "paused..." );
				}
				*/
				
				// check positions of top & btm items
				o.checkPositions = function ( ) { 
				
					var topItem = o.dh.getRefById('marqueeItem_'+o.m_topItem);
					var topItemYpos = parseInt( topItem.style.top );
					var topItemHeight = o.dh.getElementHeight('marqueeItem_'+o.m_topItem);
					
					var btmItem = o.dh.getRefById('marqueeItem_'+o.m_btmItem);
					var btmItemYpos = parseInt( btmItem.style.top );
					var btmItemHeight = o.dh.getElementHeight('marqueeItem_'+o.m_btmItem);

					if ( topItemYpos == -(topItemHeight) ) { 
						o.moveItem ( topItem , btmItemYpos + btmItemHeight + o.m_marginBtm  );
						o.m_topItem++; // track top item
						o.m_btmItem++; // track btm item
						if ( o.m_btmItem > marqueeItems.length-1 ) {
							o.m_btmItem = 0;
						}
						if ( o.m_topItem > marqueeItems.length-1 ) {
							o.m_topItem = 0;
						}
					}
				}

				o.scrollItemsUp = function () { 
  					if ( o.m_marquee != null ) {
						o.checkPositions () // check to see whats at the top & btm
						for (var i=0;i<marqueeItems.length;i++ ) { 
							var currentItem = o.dh.getRefById('marqueeItem_'+i);
							var currentItemYpos = parseInt( currentItem.style.top );
							o.moveItem ( currentItem ,  currentItemYpos - 1 );
						}
					}
				}
				
				// move item to specific Y pos
				o.moveItem = function (p_e, p_Ypos ) {
					p_e.style.top =  p_Ypos + "px";
				}
				
				// kick off
				o.init();
				o.draw();
				if ( ! o.isMacIE() ) { 
					o.start();
				}				
			}

			// width, height, speed
			var m = new Marquee(320, 370, 40);