/* Group 1 Template JS v2.0 by Josh Lizarraga */
/* Copyright 2009 Autofusion.com */

(function(){

var initMenu = function(){
	YAHOO.util.Dom.addClass(document.body, 'yui-skin-sam');
	var oMenubar = new YAHOO.widget.MenuBar('g1-menubar', { autosubmenudisplay: true });
	oMenubar.render();
}; // initMenu()

var groupOneScroller = function(pConfig){
		
	// Properties:
	
	this.id = 'g1-scroller';
	//this.xmlFeed = '/hmpg_javascript_mm.xml';
	this.imagePath = '/AF2/group1/images/scroller/';
	
	this.bgLink = document.getElementById('g1-scroller-bg');
	this.bgImage = this.bgLink.getElementsByTagName('img')[0];
	this.loadBar = document.getElementById('g1-scroller-loading');
	this.rewind = document.getElementById('g1-scroller-rewind');
	this.fastForward = document.getElementById('g1-scroller-fast-forward');
	this.cars = document.getElementById('g1-scroller-cars');
	
	this.userScrollSpeed = 5;
	this.scrollIncrement = 2;
	this.expandSpeed = .25;
	this.expandWidth = 220;
	this.scrollFrom = 450;
	
	this.autoplay = true;
	this.scrollUpInterval = false;
	this.scrollDownInterval = false;
	this.scrollAnimation = false;
	this.scrollTime = false;
	this.busy = false;
	
	this.results = [];
	
	// Vocab:
	
	this.vocab = {
		'As high as': 'As high as ',
		'MPG': ' MPG',
		'Starting at': 'Starting at '
	};
	
	var V = this.vocab;
	
	// Config:
	
	if(typeof(pConfig) == 'object'){
		for(var i in pConfig){
			this[i] = pConfig[i];
		}
	}
	
	this.container = document.getElementById(this.id);
	var that = this;
	
	// Methods:
	
	this.autoScroll = function(pFirst){
		var oSH = parseInt(that.cars.offsetHeight); // Scroller height.
		if(pFirst){
			that.scrollAnimation = new YAHOO.util.Anim(that.cars, {
					top: { from: that.scrollFrom, to: -(oSH) }
				}, that.scrollTime, YAHOO.util.Easing.easeNone);
		} else {
			that.scrollAnimation = new YAHOO.util.Anim(that.cars, {
					top: { to: -(oSH) }
				}, that.scrollTime, YAHOO.util.Easing.easeNone);
		}
		that.scrollAnimation.animate();
		that.scrollAnimation.onComplete.subscribe(function(){
			if(that.autoplay === true && that.busy === false){
				that.scrollTime = that.results.length * 2;
				that.autoScroll(true);
			} else {
				that.scrollTime = (that.scrollAnimation.totalFrames - that.scrollAnimation.currentFrame)/1000;
			}
		});
	}; // autoScroll()
		
	this.expand = function(pTarget, pDistance){
		var oExpand = new YAHOO.util.Anim(pTarget, {
				width: { to: pDistance }
			}, that.expandSpeed, YAHOO.util.Easing.easeOut);
		oExpand.animate();
	}; // expand()
	
	this.fadeImageOut = function(pHREF, pBG){
		that.startLoad();
		var oFadeOut = new YAHOO.util.Anim(that.bgImage, {
				opacity: { to: 0 }
			}, that.expandSpeed, YAHOO.util.Easing.easeOut);
		oFadeOut.animate();
		oFadeOut.onComplete.subscribe(function(){
			that.bgLink.href = pHREF;
			that.bgImage.src = pBG;
		});
	}; // fadeImageOut()
	
	this.fadeImageIn = function(){
		that.stopLoad();
		var oFadeIn = new YAHOO.util.Anim(that.bgImage, {
				opacity: { to: 1 }
			}, that.expandSpeed, YAHOO.util.Easing.easeOut);
		oFadeIn.animate();
	}; // fadeImageIn()
		
	this.scrollUpLoop = function(){
		var oTop = parseInt(YAHOO.util.Dom.getStyle(that.cars, "top")); // Scroller "top" position.
		var oSH = parseInt(that.cars.offsetHeight); // Scroller height.
		if(oTop < 450){
			YAHOO.util.Dom.setStyle(that.cars, "top", (oTop + that.scrollIncrement) + "px");
		} else {
			YAHOO.util.Dom.setStyle(that.cars, "top", -(oSH) + "px");
		}
	}; // scrollUpLoop()
	
	this.scrollDownLoop = function(){
		var oTop = parseInt(YAHOO.util.Dom.getStyle(that.cars, "top")); // Scroller "top" position.
		var oT = (oTop > 0) ? oTop : -(oTop);
		var oSH = parseInt(that.cars.offsetHeight); // Scroller height.
		if(oT < oSH){
			YAHOO.util.Dom.setStyle(that.cars, "top", (oTop - that.scrollIncrement) + "px");
		} else {
			YAHOO.util.Dom.setStyle(that.cars, "top", "450px");
		}
	}; // scrollDownLoop()
	
	this.scrollUpOver = function(e){
		if(that.autoplay){
			that.autoplay = false;
		}
		that.scrollAnimation.stop();
		if(that.scrollUpInterval === false){
			that.scrollUpInterval = setInterval(that.scrollUpLoop, that.userScrollSpeed);
		}
	}; // scrollUpOver()
	
	this.scrollUpOut = function(e){
		clearInterval(that.scrollUpInterval);
		that.scrollUpInterval = false;
	}; // scrollUpOut()
	
	this.scrollDownOver = function(e){
		if(that.autoplay){
			that.autoplay = false;
		}
		that.scrollAnimation.stop();
		if(that.scrollDownInterval === false){
			that.scrollDownInterval = setInterval(that.scrollDownLoop, that.userScrollSpeed);
		}
	}; // scrollDownOver()
	
	this.scrollDownOut = function(e){
		clearInterval(that.scrollDownInterval);
		that.scrollDownInterval = false;
	}; // scrollDownOut()
	
	this.startLoad = function(e){
		YAHOO.util.Dom.setStyle(that.loadBar, 'display', 'block');
	}; // startLoad()
	
	this.stopLoad = function(e){
		YAHOO.util.Dom.setStyle(that.loadBar, 'display', 'none');
	}; // stopLoad(
	
	// Event Handlers:
	
	this.mouseoverHandler = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.nodeName.toUpperCase() == 'IMG'){
			YAHOO.util.Event.stopPropagation(e);
			that.busy = true;
			that.scrollAnimation.stop();
			var oA = YAHOO.util.Dom.getAncestorByTagName(oTarget, 'a');
			that.expand(oA, that.expandWidth);
			//that.bgLink.href = oA.href;
			//that.bgImage.src = oA.fullBG;
			var oFullBG = that.imagePath + 'bg-' + oA.title.toLowerCase().replace(/\s/g, '-') + '.jpg';
			that.fadeImageOut(oA.href, oFullBG);
		}
	}; // mouseoverHandler()
	
	this.mouseoutHandler = function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		if(oTarget.nodeName.toUpperCase() == 'IMG'){
			YAHOO.util.Event.stopPropagation(e);
			that.busy = false;
			var oA = YAHOO.util.Dom.getAncestorByTagName(oTarget, 'a');
			that.expand(oA, 0);
			if(that.autoplay === true){ that.autoScroll(); }
		}
	}; // mouseoutHandler()
	
	// Init:
	
	this.init = function(){
		if(YAHOO.util.Dom.inDocument('g1-scroller-cars')){
			YAHOO.util.Dom.setStyle([that.rewind, that.fastForward], 'display', 'block');
			YAHOO.util.Event.addListener(that.bgImage, 'load', that.fadeImageIn);
			YAHOO.util.Event.addListener(that.cars, 'mouseover', that.mouseoverHandler);
			YAHOO.util.Event.addListener(that.cars, 'mouseout', that.mouseoutHandler);
			YAHOO.util.Event.addListener(that.rewind, 'mouseover', that.scrollUpOver);
			YAHOO.util.Event.addListener(that.rewind, 'mouseout', that.scrollUpOut);
			YAHOO.util.Event.addListener(that.fastForward, 'mouseover', that.scrollDownOver);
			YAHOO.util.Event.addListener(that.fastForward, 'mouseout', that.scrollDownOut);
			that.results = that.cars.getElementsByTagName('a');
			that.scrollTime = that.results.length * 2;
			that.autoScroll(true);
		}
		that.stopLoad();
	}; // init()
	
}; // groupOneScroller()

var initQuoteForm = function(){
	
	var oQuote = document.getElementById('g1-homepage-quote');
	var oBody = YAHOO.util.Dom.getElementsByClassName('g1-body', 'div', oQuote)[0];
	
	var oBusy = false;
	var oState = false;
	
	YAHOO.util.Event.addListener('g1-sidebar-buttons-quote', 'click', function(e){
		YAHOO.util.Event.preventDefault(e);
		YAHOO.util.Event.stopPropagation(e);
		if(oBusy === false){
			oBusy = true;
			var oHeight = ( oState ) ? 0 : oBody.offsetHeight ;
			var oExpand = new YAHOO.util.Anim(oQuote, {
					height: { to: oHeight }
				}, 0.25, YAHOO.util.Easing.easeOut);
			
			/*var oSEO = ( YAHOO.util.Dom.inDocument('seo_homepage') ) ? true : false ;
			
			if(oSEO){
				
				var oSEOHeight = ( oState ) ? -(oBody.offsetHeight) : oBody.offsetHeight ;
				
				var oSEOExpand = new YAHOO.util.Anim('seo_homepage', {
						top: { by: oSEOHeight }
					}, 0.25, YAHOO.util.Easing.easeOut);
				oSEOExpand.animate();
				
			}*/
			
			oExpand.animate();
			oExpand.onComplete.subscribe(function(){
				oState = !oState;
				oBusy = false;
			});
		}
	});
	
}; // initQuoteForm()

var initSlideshow = function(){
	var oMake = (group1Make.indexOf(',') == -1) ? group1Make : group1Make.split(',')[0];
	
	var oResearchSlide = ( oMake.toLowerCase() == 'vehicle' ? '' : '<a href="/carresearch/BodystylesGroup/make_' + oMake + '/confid_' + group1confid + '/"><img src="/AF2/group1/images/research-slide.jpg" alt="Research" /></a>' );
	
	if( oMake.indexOf(' ') > -1 ){
		
		var oResearchMake = oMake.split(' ')[0];
		
		oResearchSlide = '<a href="/carresearch/BodystylesGroup/make_' + oResearchMake + '/confid_' + group1confid + '/"><img src="/AF2/group1/images/research-slide.jpg" alt="Research" /></a>';
		
	}
	
	//var oSearchUsed = ( oMake.toLowerCase() == 'honda' || oMake.toLowerCase() == 'acura' ? '/searchused/' : '/search/' );
	var oSearchUsed = ( oMake.toLowerCase() == 'honda' || oMake.toLowerCase() == 'acura' ? '/search/' : '/search/' );
	var oCounter = (YAHOO.util.Dom.inDocument('g1-homepage-slideshow-counter')) ? 'g1-homepage-slideshow-counter': false;
	
	//Per ticket #36387, remove JavaScript triggered slides
	if( YAHOO.util.Dom.hasClass('g1-homepage-slideshow', 'g1-homepage-slideshow-groupsite') ) {
		var oSlideshow = new YAHOO.widget.Slideshow('g1-homepage-slideshow', {
			autoplay: true,
			timer: 4000,
			hideAll: true,
			previousButton: 'g1-homepage-slideshow-prev',
			nextButton: 'g1-homepage-slideshow-next',
			counter: oCounter,
			lazyLoad: ''
		});
	} else {
		var oSlideshow = new YAHOO.widget.Slideshow('g1-homepage-slideshow', {
			autoplay: true,
			timer: 4000,
			hideAll: true,
			previousButton: 'g1-homepage-slideshow-prev',
			nextButton: 'g1-homepage-slideshow-next',
			counter: oCounter,
			lazyLoad: '\
				<a href="/sell-us-your-car.html"><img src="/AF2/group1/images/sell-us-your-car-slide.jpg" alt="Sell Us Your Car" /></a>\
				' + oResearchSlide + '\
				<a href="/map.html"><img src="/AF2/group1/images/directions-slide.jpg" alt="Finding Us" /></a>\
				<a href="' + oSearchUsed + 'Used+t"><img src="/AF2/group1/images/carfax-slide.jpg" alt="Carfax" /></a>\
			'
		});
	}
	

}; // initSlideshow()

// 1. We want the menubar to be ready right away, so it loads first:

YAHOO.util.Event.onAvailable('g1-menubar', initMenu);

// 2. Set up the homepage scroller if present:

if(YAHOO.util.Dom.inDocument('g1-scroller') && YAHOO.util.Dom.inDocument('g1-scroller-bg')){
	var oScroller = new groupOneScroller();
	oScroller.init();
} else {
	var oLoading = document.getElementById('g1-scroller-loading');
	if(oLoading != null){
		oLoading.style.display = 'none';
	}
}

// 3. If the homepage quote form is present, set it up:

if(YAHOO.util.Dom.inDocument('g1-homepage-quote')){ initQuoteForm(); }

// 4. If the homepage slideshow is present, run it:

if(YAHOO.util.Dom.inDocument('g1-homepage-slideshow')){ initSlideshow(); }

})();
