// YUI Research Carousel version 0.1 by Josh

(function(){

/* CONFIG */

// Path to XML file:
var cXML = "/xml_feeds/ford.xml";

// Research Model Page URL:
var cURL = "/carresearch/TrimsBuildDealer/";

// Research Make:
var cMake = "Ford";

// Research ConfID:
var cID = "confid_racewayford";

// Number of cars per page:
var cCars = 2;

// Animation speed in seconds:
var cSpeed = 1.0;

/* END CONFIG */

var gCurrentItem = 0;

function XMLSuccess(o){
	var oRoot = o.responseXML.getElementsByTagName("results")[0];
	var oBodystyles = oRoot.getElementsByTagName("bodystyle");
	var oName = "";
	var oChildren = [];
	var oVehicles = {};
	for(var i=0; i<oBodystyles.length; i++){
		oName = oBodystyles[i].getAttribute("label");
		oVehicles[oName] = [];
		oChildren = oBodystyles[i].getElementsByTagName("model");
		for(var j=0; j<oChildren.length; j++){
			oVehicles[oName].push(oChildren[j]);
		}
	}
	var oCarousel = new YAHOO.widget.Carousel("carouselContainer", {
		numVisible: cCars,
		revealAmount: 35,
		animation: { speed: cSpeed }
	});
	oCarousel.render();
	oCarousel.show();
	// Carousel is ready, load the nav buttons:
	var oNav = document.getElementById("c_Bodystyles");
	var oNextPrev = document.getElementById("c_NextPrev");
	var oLoadingMessage01 = YAHOO.util.Dom.getFirstChild(oNav);
	var oLoadingMessage02 = YAHOO.util.Dom.getFirstChild(oNextPrev);
	oNav.removeChild(oLoadingMessage01);
	var oNavLinks = {};
	var itemLI = {};
	var itemA = {};
	var itemIMG = {};
	var itemSPAN = {};
	var oCount = 0;
	for(var i in oVehicles){
		itemLI[i] = [];
		itemA[i] = [];
		itemIMG[i] = [];
		itemSPAN[i] = [];
		oNavLinks[i] = document.createElement("a");
		oNavLinks[i].href = "javascript:void(0);";
		oNavLinks[i].id = "c_" + i;
		oNavLinks[i].rel = oCount;
		oCount += oVehicles[i].length;
		oNav.appendChild(oNavLinks[i]);
		YAHOO.util.Event.addListener(oNavLinks[i], "click", function(e){
			var oTarget = YAHOO.util.Event.getTarget(e);
			YAHOO.util.Event.preventDefault(e);
			gCurrentItem = parseInt(oTarget.rel);
			oCarousel.scrollTo(gCurrentItem);
		});
		// Nav buttons ready, load the vehicles:
		for(var j=0; j<oVehicles[i].length; j++){
			itemLI[i][j] = document.createElement("li");
			itemLI[i][j].className = "c_Item";
			itemA[i][j] = document.createElement("a");
			itemA[i][j].href = cURL + "year_" + oVehicles[i][j].getAttribute("year") + "/make_" + cMake + "/model_" + oVehicles[i][j].getAttribute("name") + "/" + cID + "/";
			itemLI[i][j].appendChild(itemA[i][j]);
			itemIMG[i][j] = document.createElement("img");
			itemIMG[i][j].alt = oVehicles[i][j].getAttribute("year") + " " + cMake + " " + oVehicles[i][j].getAttribute("name");
			itemIMG[i][j].src = oVehicles[i][j].getAttribute("image");
			itemA[i][j].appendChild(itemIMG[i][j]);
			itemSPAN[i][j] = document.createElement("span");
			itemSPAN[i][j].appendChild(document.createTextNode(oVehicles[i][j].getAttribute("year") + " " + oVehicles[i][j].getAttribute("name")));
			itemA[i][j].appendChild(itemSPAN[i][j]);
			oCarousel.addItem(itemLI[i][j]);
		}
	}
	// Vehicles ready, load next/prev buttons:
	oNextPrev.removeChild(oLoadingMessage02);
	var oNext = document.createElement("a");
	var oPrev = document.createElement("a");
	oNext.href = "javascript:void(0);";
	oPrev.href = "javascript:void(0);";
	oNext.id = "c_Next";
	oPrev.id = "c_Prev";
	oNextPrev.appendChild(oNext);
	oNextPrev.appendChild(oPrev);
	oCarousel.on("afterScroll", function(o){
		oLastPage = oCount - cCars;
		if(gCurrentItem <= 0) {
			YAHOO.util.Dom.setStyle(oNext, "opacity", "1");
			YAHOO.util.Dom.setStyle(oPrev, "opacity", "0.25");
		} else if(gCurrentItem > 0 && gCurrentItem <= oLastPage) {
			YAHOO.util.Dom.setStyle(oNext, "opacity", "1");
			YAHOO.util.Dom.setStyle(oPrev, "opacity", "1");
		} else if(gCurrentItem >= oLastPage) {
			YAHOO.util.Dom.setStyle(oNext, "opacity", "0.25");
			YAHOO.util.Dom.setStyle(oPrev, "opacity", "1");
		}
	});
	YAHOO.util.Event.addListener(oNext, "click", function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		YAHOO.util.Event.preventDefault(e);
		gCurrentItem += cCars;
		if(gCurrentItem > oCount){
			gCurrentItem = oCount;
		}
		oCarousel.scrollTo(gCurrentItem);
	});
	YAHOO.util.Event.addListener(oPrev, "click", function(e){
		var oTarget = YAHOO.util.Event.getTarget(e);
		YAHOO.util.Event.preventDefault(e);
		gCurrentItem -= cCars;
		if(gCurrentItem < 0){
			gCurrentItem = 0;
		}
		oCarousel.scrollTo(gCurrentItem);
	});
	var oLastPage = oCount - cCars;
	if(gCurrentItem <= 0) {
		YAHOO.util.Dom.setStyle(oNext, "opacity", "1");
		YAHOO.util.Dom.setStyle(oPrev, "opacity", "0.25");
	} else if(gCurrentItem > 0 && gCurrentItem <= oLastPage) {
		YAHOO.util.Dom.setStyle(oNext, "opacity", "1");
		YAHOO.util.Dom.setStyle(oPrev, "opacity", "1");
	} else if(gCurrentItem >= oLastPage) {
		YAHOO.util.Dom.setStyle(oNext, "opacity", "0.25");
		YAHOO.util.Dom.setStyle(oPrev, "opacity", "1");
	}
}

function XMLFailure(o){
	//alert("The XML file could not be found. Please check your XML filepath. An absolute path is recommended, but not required.");
}

var oXMLCallback = {
	success:  XMLSuccess,
	failure: XMLFailure
};
	
function grabXML(){
	var oRequest = YAHOO.util.Connect.asyncRequest("GET", cXML, oXMLCallback, null);
}

YAHOO.util.Event.onDOMReady(grabXML);

})();
