
// Hover Behaviour for Nav etc.
var HoverBehavior = Class.create();
HoverBehavior.prototype = {
	initialize: function() {
		$A(document.styleSheets).each( function(stylesheet) {
		$A(stylesheet.rules).each( function(rule) {
		if( rule.selectorText.match(/:hover/i) ) {
			stylesheet.addRule( rule.selectorText.replace(/:hover/ig, '.hover'), rule.style.cssText );
		}
		});
	});

	$A(arguments).each( function(arg) {
		$$(arg).each( function(tag) {
			Event.observe(tag, 'mouseover', function() { Element.addClassName(tag, 'hover'); });
			Event.observe(tag, 'mouseout', function() { Element.removeClassName(tag, 'hover'); });
			});
		});
	}
};


// 
var TruckMap = Class.create({
	
	// expected args { viewer:node, infobox:node, views:nodearray, spots:nodearray }
	initialize: function(args){
		this.viewer = (args.viewer) ? args.viewer : null;
		this.infobox = (args.infobox) ? args.infobox : null;
		this.views = (args.views) ? this.buildViewsArray(args.views) : null;
		this.spots = (args.spots) ? this.buildSpotsArray(args.spots) : null;
	},
	
	// -- Expected Markup Structure -- 
	// <div class="viewname" style="background:url(/path/to/image.jpg) -1000px -1000px no-repeat;"></div>
	// <div>...</div>	
	buildViewsArray: function(viewsMarkup) {
		var allViews = [];
		
		viewsMarkup.each( function(div) {
			if (div.tagName!='DIV') { return; }	
			if (!allViews[div.className]){ allViews[div.className] = []; }		
			allViews[div.className].push(div.getStyle('background-image'));
		});
		
		return allViews;
	},
	
	// -- Expected Markup Structure -- 
	// <dl>
	//	<dt>spot name</dt>
	//	<dd>
	//		<span>spot data</span>
	//		<span>spot data</span>
	//		<img />
	//	</dd>
	// </dl>
	// <dl>...</dl>	
	buildSpotsArray: function(spotsMarkup){
		var allSpots = {'left':[],'right':[],'back':[]};
	
		spotsMarkup.each( function(dl) {
			if (dl.tagName!='DL') { return; }

			var spot = { heading:dl.down('dt').innerHTML };		
			dl.down('dd').childElements().each( function(attr) {	
				if (attr.hasClassName('icon')) {
					spot.icon = attr.src; }
				if (attr.hasClassName('desc')) { 
					spot.desc = attr.innerHTML; }
				if (attr.hasClassName('view')) { 
					spot.view = attr.innerHTML; }					
				if (attr.hasClassName('xpos')) { 
					spot.xpos = attr.innerHTML; }	
				if (attr.hasClassName('ypos')) { 
					spot.ypos = attr.innerHTML; }	
			});	

			// Add the spot to the array, sorted by angle
			allSpots[spot.view].push(spot);
		});
		
		return allSpots;
	},
	
	
	updateInfoBox: function(spot){
		// Backup original truck info box
		this.infoboxbackup = $(this.infobox).innerHTML;

		// Update truck info box
		if (spot.icon) {
			$(this.infobox).down(".middle").down(".right").down("img").src = spot.icon;
			$(this.infobox).down(".middle").down(".left").removeClassName('full');
			$(this.infobox).down(".middle").down(".right").show();
		} else {
			$(this.infobox).down(".middle").down(".right").hide();
			$(this.infobox).down(".middle").down(".left").addClassName('full');
		}
		$(this.infobox).down("h3").innerHTML = spot.heading;
		$(this.infobox).down("p").innerHTML = spot.desc;	
	},
	
	// Revert original truck info box
	revertInfoBox: function(){
		$(this.infobox).innerHTML = this.infoboxbackup;		
	},
	
	
	// Switch the map and place all the spots
	switchMap: function(view){
		
		// Set up some variable the loop functions will be able to see
		var theTruckMap = this;
		var theViewer = $(this.viewer);
		
		// Clear out any existing spots
		theViewer.innerHTML = '';
		
		// Change the background image
		theViewer.setStyle({'background': this.views[view] +' top left no-repeat'})
		
		// Map spots to view
		this.spots[view].each(function(spot){
			
			// Create new div 
			var divSpot = new Element('div', { 'class': 'spot', 'style': 'left:'+ spot.xpos +'px; top:'+ spot.ypos +'px;' });
			
			// Watch mouseover and mouseout
			divSpot.observe('mouseover', function(){
				divSpot.addClassName('spot-over');
				divSpot.removeClassName('spot');
				theTruckMap.updateInfoBox(spot);
			});	
			divSpot.observe('mouseout', function(){
				divSpot.addClassName('spot');
				divSpot.removeClassName('spot-over');				
				theTruckMap.revertInfoBox();
			});	
			
			// Stick the div into the viewer		
			theViewer.insert(divSpot);		
		});
	}
});


Event.observe(window,'load',function(){ 

	//sIFR
	if(typeof sIFR == "function"){
		
		sIFR.replaceElement(named({
			sSelector:"#main h1, #main h2, #sidebar h1, #sidebar h2", 
			sFlashSrc:"/javascripts/sIFR2/morgan_font.swf", 
			sColor:"#ecb01f", 
			sLinkColor:"#ecb01f", 
			sBgColor:"#000000", 
			sHoverColor:"#ecb01f", 
			nPaddingTop:1, 
			nPaddingBottom:1, 
			sFlashVars:"textalign=left&offsetTop=0",
			sWmode:"opaque"
		}));

		
		
		sIFR.replaceElement(named({
			sSelector:"#main .customer_quote h3", 
			sFlashSrc:"/javascripts/sIFR2/morgan_font.swf", 
			sColor:"#000000", 
			sLinkColor:"#000000", 
			sBgColor:"#ecb01f", 
			sHoverColor:"#000000", 
			nPaddingTop:1, 
			nPaddingBottom:1, 
			sFlashVars:"textalign=right&offsetTop=0",
			sWmode:"transparent"
		}));	
		
/*	
		sIFR.replaceElement(named({
			//sSelector:"#truck-info h3, .truck-spot dt", 
			sSelector:"#truck-info h3", 
			sFlashSrc:"/javascripts/sIFR2/morgan_font.swf", 
			sColor:"#000000", 
			sLinkColor:"#000000", 
			sBgColor:"#ecb01f", 
			sHoverColor:"#000000", 
			nPaddingTop:1, 
			nPaddingBottom:1, 
			sWmode:"transparent"
		}));
*/		
		
		sIFR.replaceElement(named({
			sSelector:"#content .specs tr.top h3", 
			sFlashSrc:"/javascripts/sIFR2/morgan_font.swf", 
			sColor:"#000000", 
			sLinkColor:"#000000", 
			sBgColor:"#ecb01f", 
			sHoverColor:"#000000",
			sFlashVars:"textalign=center&offsetTop=0",
			sWmode:"transparent"
		}));		
			
	};
	
	

	// Home page
	if ($("home-left")) {

		Event.observe($("li-vacs"), 'mouseover', function(){
			$("home-left").setStyle({ background: 'url(/images/layout/front-vac.jpg) top left no-repeat' });
		});
		Event.observe($("li-hydrovacs"), 'mouseover', function(){
			$("home-left").setStyle({ background: 'url(/images/layout/front-hydrovac.jpg) top left no-repeat' });
		});	
	}
	

	// View the Truck
	if ($("truck")) { 

		$('truck-spots').hide();
		if ($('truck-spots').down(0).hasClassName('pageContentAdd')) {
			$('truck-spots').show();
		}

		// Create truckmap object
		var map = new TruckMap({
			viewer: $('truck-viewer'),
			infobox: $('truck-info'),
			views: $('truck-views').childElements(),
			spots: $('truck-spots').childElements()
		});
		
		// Watch angles links to switch map views
		$("truck-angle").setStyle({visibility:'visible'});
		$("truck-angle").down('ul').childElements().each(function(li){
			li.down('a').observe('mouseover', function(){
				map.switchMap(li.className);
			})
		});
		
		// Set up initial view
		var defaultAngle = 'right';
		map.switchMap(defaultAngle);
	}
		


 
	// Mark external and download links!

	    // Mark external links    
		$$('a[href^=http]').each( function(link) {
			link.addClassName('external');
			link.addClassName('new-window');
			link.target='_BLANK';
		});		
		
	    // Mark download links
	    var filetypes = ['pdf'];
	    var d = new Date(); var timestamp = (d.getTime()-d.getMilliseconds())/1000;

	    // Loop each filetype    
	    $A(filetypes).each(function(filetype){

	      // Append a timestamp to all file downloads
	      $$('a[href$=.'+filetype+']').each(function(link){
	        link.href = link.href+'?'+timestamp;
			link.addClassName('file');
			link.addClassName('new-window');
			link.target='_BLANK';
	      });

	    });




	
	// Make :hover work for IE6
	new HoverBehavior('#nav li');
	//document.execCommand("BackgroundImageCache",false,true);
	

});