/************************************************************************************/
/********************* Packages (used to be packages.js) *************************/
var openedArray = new Array();
var toggledArray = new Array();
var openedTrimsArray = new Array();
var toggledTrimsArray = new Array();
var upArrow = '<img src="/MMNA/images/global_assets/fnd_BtnUpArrow.gif" width="21" height="19" alt="" />';
var downArrow = '<img src="/MMNA/images/global_assets/fnd_BtnDownArrow.gif" width="21" height="19" alt="" />';

// Moved here from utils.js to fix local problem
//Prototype function to remove an item from an array
Array.prototype.remove = function (item) {
	try{
	
		if (item != null) {
			itemPos = this.indexOf(item);
			if (itemPos != -1) {
				first = this.slice(0, itemPos);
				second = this.slice(itemPos+1);
				return first.concat(second);
			} else {
				return this;
			}
		} else {
			return null;
		}
	} catch (e){
	}
}

function openClosePackage(parentDiv, openHdrClassName, closeHdrClassName) {
	var contentArea = null;
	var leftContent = null;
	var buttonDiv = getItem(parentDiv.id+'Button');
	
	drawerHeader = $(parentDiv).find("div:first-child");
	dataContainer = $(parentDiv).find(".bobodataContainer").eq(0);
	/*
	if (navigator.appName.search("Microsoft") != -1) {
		drawerHeader = parentDiv.childNodes[0];
		dataContainer = parentDiv.childNodes[1];
	} else {
		//Mozilla 5.0 reads tabs as a text object.
		drawerHeader = dataContainer = null;
		for (i = 0; i < parentDiv.childNodes.length; i++) {
			if ( parentDiv.childNodes[i].nodeName == "DIV" ) {
				if (drawerHeader == null) {
					drawerHeader = parentDiv.childNodes[i];
				} else {
					dataContainer = parentDiv.childNodes[i];
				}
			}
		}
	}
	*/
	
	// thanks, IE9 for being such a pile
	//heightValue = drawerHeader.offsetHeight + dataContainer.offsetHeight + "px";
	//heightValue = String($(drawerHeader).height() + 2*Number($(drawerHeader).css("border-width")) + Number($(drawerHeader).css("padding-top")) + Number($(drawerHeader).css("padding-bottom")) 
		//+ $(dataContainer).height() + 2*Number($(dataContainer).css("border-width")) + Number($(dataContainer).css("padding-top")) + Number($(dataContainer).css("padding-bottom"))) + "px";
	//heightValue = String($("#" + drawerHeader.id).innerHeight() + $("#" + dataContainer.id).innerHeight()) + "px";
	heightValue = drawerHeader.outerHeight() + dataContainer.outerHeight() + "px";
	
	if (parentDiv.style.height != heightValue) {
		//Open drawer
		if (openHdrClassName != "") {
			drawerHeader.className = openHdrClassName;
		}
		parentDiv.style.height = heightValue;
		//parentDiv.style.borderBottom = "1px solid #666666";
		dataContainer.css("visibility", "visible");
		/*
		if (navigator.appName.search("Microsoft") != -1) {
				dataEntry = dataContainer.childNodes[0];
		} else {
			dataEntry = dataContainer.childNodes[1];
		}
		*/
		dataEntry = dataContainer.find("table").eq(0);
		buttonDiv.innerHTML = upArrow;
		if (openedArray.indexOf([parentDiv, openHdrClassName, closeHdrClassName]) == -1) openedArray.push([parentDiv, openHdrClassName, closeHdrClassName]);
	} else {
		//Close Drawer
		if (closeHdrClassName != "") {
			drawerHeader.className = closeHdrClassName;
		}
		//parentDiv.style.height = drawerHeader.offsetHeight + "px";
		//parentDiv.style.height = String($(drawerHeader).height() + 2*Number($(drawerHeader).css("border-width")) + Number($(drawerHeader).css("padding-top")) + Number($(drawerHeader).css("padding-bottom"))) + "px";
		parentDiv.style.height = drawerHeader.outerHeight() + "px";
		dataContainer.css("visibility", "hidden");
		buttonDiv.innerHTML = downArrow;
		openedArray.remove([parentDiv, openHdrClassName, closeHdrClassName]);
	}
	
	//Reset bg size to fix FF bug	
	var drawerDivId;
	if (getItem('allTabContent') != null) 
		drawerDivId = 'allTabContent'; //on the specs.do for all veh
	else
		drawerDivId = parentDiv.parentNode.parentNode.id; //on the trims.do packages tab for all veh. janky reliance on div structure w/ the parentNode lookup
	
	grandParentDiv = parentDiv.parentNode.parentNode.parentNode;
	//grandParentDiv.style.height = parentDiv.parentNode.parentNode.offsetHeight + "px";
}


function toggleOpenedPackages(whichArray) {
	toggledArray = new Array();
	for (var i = 0; i < whichArray.length; i++) {
		openArgs = whichArray[i];
		toggledArray.push(openArgs);
		openClosePackage(openArgs[0],openArgs[1],openArgs[2]);
	}
}

/*
function drawLargeImage(callingDiv, imgTag, accText) {
	if (getItem("bigAccImg")) {
		getItem("accContent").removeChild(getItem("bigAccImg"))
	}
	newLayer = document.createElement('DIV');
	newLayer.id = "bigAccImg";
	newLayer.className = "vehBigAccImg";
	callingDiv.parentNode.insertBefore(newLayer, callingDiv);
	tabDiv = getItem("accessoriesTabOn");
	getItem("bigAccImg").innerHTML = imgTag + "<br/><br/>" + accText;
	if ((newLayer.offsetTop + newLayer.offsetHeight) > (callingDiv.parentNode.offsetHeight)) {
		newLayer.style.top = ((callingDiv.parentNode.offsetHeight) - newLayer.offsetHeight + tabDiv.offsetHeight - getItem('accBottom').offsetHeight) + "px";
	}
	
	//If some of the accessory display content drops below the fold bump the layer up so it all displays
	//but keep it within the display area.
	try {
		newLayerPos = getposOffset(newLayer, "top") + newLayer.offsetHeight;
		windowPos = document.body.clientHeight + document.body.scrollTop;
		newTop = (newLayer.offsetTop - (newLayerPos - windowPos));
		var childItr = 0;
		for (i = 0; i < callingDiv.parentNode.childNodes.length; i++) {
			if (callingDiv.parentNode.childNodes[i].className == "vehTabIntroContent") childItr = i;
		}
		minTop =  callingDiv.parentNode.childNodes[childItr].offsetHeight + 20;

		if ( newLayerPos > windowPos ) {
			newLayer.style.top = (newTop > minTop)?newTop:minTop + "px";
		}
	} catch (e) {}
	
}
*/
function drawLargeImage(callingDiv, imgTag, accText) {
	killLargeImage();
	var posLeft;
	var pos = $(callingDiv).position();
	if ($(callingDiv).parent().attr("id") == "accessoriesCol1") {
		posLeft = $(callingDiv).outerWidth();
		newZ = 5;
	} else {
		posLeft = -1*($(callingDiv).outerWidth()+2);
		newZ = 1;
	}
	var newlayer = $("<div></div>").attr( {"id": "bigAccImg", "class": "vehBigAccImg"} ).css( {'top': pos.top, 'left': posLeft} ).html(imgTag + accText).appendTo(callingDiv);

	if ( $(newlayer).outerHeight()+$(newlayer).offset().top > $(window).height() + $(document).scrollTop() ) {
		var newTop = $(window).height() - $(callingDiv).parent().offset().top - $(newlayer).outerHeight() + $(document).scrollTop();
		 $(newlayer).css( {top: newTop} );
	}
	$('#accessoriesCol1').css ("z-index", newZ);
}


function killLargeImage() {
	if ($("#bigAccImg")) {
		$("#bigAccImg").remove();
	}
}


function showHideDetails(detailDiv, viewBtn) {
	curDetDiv = getItem(detailDiv);
	curBtnDiv = getItem(viewBtn);
	if (curDetDiv.style.visibility != 'visible') {
		//Show Detail
		if (openedTrimsArray.indexOf([detailDiv, viewBtn]) != -1) openedTrimsArray.push([detailDiv, viewBtn]);
		curDetDiv.style.visibility = "visible";
		curDetDiv.style.position = "relative";
		curBtnDiv.style.position = "absolute";
		curBtnDiv.style.visibility = "hidden";		
		parentDiv = curDetDiv.parentNode;
		//IE Completely sucks
		if (navigator.userAgent.indexOf("MSIE") != -1) {
			for (var itr = 0; itr < parentDiv.parentNode.childNodes.length; itr++) {
				try {
					if (parentDiv.parentNode.childNodes[itr].offsetTop > parentDiv.parentNode.childNodes[itr].childNodes[0].offsetTop ) {
						//IE Bug, the style value has to change or it doesn't refresh
						parentDiv.parentNode.childNodes[itr].childNodes[0].style.top = 1 + "px";
						parentDiv.parentNode.childNodes[itr].childNodes[0].style.top = 0 + "px";
					}
				} catch (e) {  }
			}
		} else {
			parentDiv.style.height = (curDetDiv.offsetTop + curDetDiv.offsetHeight - parentDiv.offsetTop) + "px";
		}
	} else {
		openedTrimsArray.remove([detailDiv, viewBtn]);
		curDetDiv.style.visibility = "hidden";
		curDetDiv.style.position = "absolute";
		curBtnDiv.style.position = "relative";
		curBtnDiv.style.visibility = "visible";		
		parentDiv = curDetDiv.parentNode;
		//IE Completely sucks
		if (navigator.userAgent.indexOf("MSIE") != -1 ){
			for (var itr = 1; itr < parentDiv.parentNode.childNodes.length; itr++) {
				try {
					//if (parentDiv.parentNode.childNodes[itr].offsetTop < parentDiv.parentNode.childNodes[itr].childNodes[0].offsetTop ) {
							parentDiv.parentNode.childNodes[itr].childNodes[0].style.top = 1 + "px";
							parentDiv.parentNode.childNodes[itr].childNodes[0].style.top = 0 + "px";
					//}
				} catch (e) {}
			}
		} else {
			parentDiv.style.height = (curDetDiv.offsetTop - parentDiv.offsetTop) + "px";
		}
		
	}
		selectTab("trims", "undefined", true);
}


function toggleOpenedTrims(whichArray) {
	toggledTrimsArray = new Array();
	for (var i = 0; i < whichArray.length; i++) {
		openArgs = whichArray[i];
		toggledTrimsArray.push(openArgs);
		showHideDetails(openArgs[0],openArgs[1]);
	}
}


function resetTrimHeight(detailDiv) {
	try {
		detailDiv = getItem(detailDiv);
		parentDiv = detailDiv.parentNode;
		heightVal = parentDiv.offsetHeight - detailDiv.offsetHeight;
		parentDiv.style.height = heightVal + "px";
	} catch (e) {
		try {
			setTimeout(detailDiv.id, 100);
		} catch (e) { return false; }
	}
}

/************************************************************************************/
/********************* Specifications (used to be specs.js) *************************/
var DRAWER_PARENT_SUFFIX = "Drawer";
var DRAWER_HEADER_SUFFIX = DRAWER_PARENT_SUFFIX + "Header";
var DRAWER_CONTAINER_SUFFIX = DRAWER_PARENT_SUFFIX + "Container";
var STYLE_OPEN = "headerActive";
var STYLE_CLOSE = "headerEnabled";

var list = null; // will hold reference to select item
var specs = null;
var specRefs = null;

function specItem(id, dispText, pos) {
	var self = this;
	
	this.id = id;
	this.headerRef = null;
	this.displayText = dispText;
	this.cardinality = pos;
	this.isOpen = false;
	this.toggle = function() {
		openClosePackage(document.getElementById((self.id + DRAWER_HEADER_SUFFIX)).parentNode, STYLE_OPEN , STYLE_CLOSE);
	};
}

function extractId(substrate) {
	var id = "";
	
	var pos = substrate.indexOf(DRAWER_HEADER_SUFFIX);
	if(pos != -1) {
		id = substrate.substring(0, pos);
	}
	
	return id;
}

function drawerToggler(id, closeOthers) {
	
	// *** Omniture firing ***
	// MVT 09/07/10 - SPECIFICATIONS dropdown and section toggle.
	// Note: logic must be updated for new vehicle.
	//9/9/2011 - No longer needs to be updated for new vehicle.  It is dynamic.

	var specPageName="mc:vehicle:"+modelNameNoSp+modelYear+":learn:specs:"+id;
	var specNoPageName = "mc:vehicle:learn:specs:"+id;
	bubbleSequentialEvent(" var variables = [ {name: 'pageName', value: '"+specPageName+"'}, {name: 'channel', value: 'vehicle'}, {name: 'server', value: 'Mitsubishi Cars'}, {name: 'eVar1', value: '"+modelYear+"'}, {name: 'eVar2', value: '"+modelName+"'}, {name: 'eVar12', value: '"+specNoPageName+"'}, {name: 'eVar32', value: ''}, {name: 'prop1', value: '"+modelYear+"'}, {name: 'prop2', value: '"+modelName+"'}, {name: 'prop14', value: ''}, {name: 'prop19', value: '"+specNoPageName+"'}, {name: 'prop20', value: 'learn'}, {name: 'prop21', value: 'specs'}, {name: 'events', value: 'event17'} ]");

	//call the toggle function for the specItem:
	//alert(id);
	specRefs[id].toggle();
	//set the isOpen property to the inverse of what it was previously:
	specRefs[id].isOpen = specRefs[id].isOpen ? false : true;
	
	if(closeOthers) {
		//in this case we assume that we want to move the relative screen position towards the drawer:
		//close any other drawer which is open
		for(var i=0; i < specs.length; i++) {
			//can exclude the current one:
			if(i != specRefs[id].cardinality) {
				if(specs[i].isOpen) { 
					//alert(id);
					specs[i].toggle();
					specs[i].isOpen = false;
				};
			}
		}
		
		window.location = "#" + id;
	}
	
}

function buildSelectList() {
	//get reference to the empty select element:
	list = document.getElementById("featuresSpecsList");
	
	//loop through
	myString = "";
	for(var i=0; i < specs.length; i++) {
		var specRef = specs[i];
		//build the option:
		var temp = new Option(specRef.displayText, specRef.id, false, false);
		//list.options[list.options.length] = temp;
		myString += "<option value='" + specRef.id + "'>" + specRef.displayText + "</option>";
		//alert(myString);
	}
	
	//Fix to display accented characters in the drop down.  Excapes are not rendered when passed to a javascript constructor
	if (navigator.userAgent.indexOf("Firefox") == -1) {
		getItem("featuresSpecsList").outerHTML = '<select id="featuresSpecsList" onchange="drawerToggler(this.options[selectedIndex].value, true);">' + myString + '</select>';
	} else {
		getItem("featuresSpecsList").innerHTML = myString;
	}

	//open the the first drawer, as a matter of course:
	drawerToggler(specs[0].id, true);
	
	//omniture-specific variable setting; variable is defined in utils.js
	pageLoadTabSelect = true;
}
			
function showHideFields() {
	var elemRef = getItem('featuresSpecsList');
	if(elemRef) {
		if(elemRef.style.visibility != "hidden") {
			elemRef.style.visibility = "hidden";
		}
		else {
			elemRef.style.visibility = "visible";
		}
	}
}

function omnitureDownloadWarrantyManual(pageType){
    
	var s=s_gi(omnitureVehicleSuite);
	 s.linkTrackVars="channel,server,eVar1,eVar2,eVar12,eVar32,prop1,prop2,prop14,prop19,prop20,prop21,events";
	 s.linkTrackEvents="event17";
	 s.pageName="mc:vehicle:"+modelNameNoSp+modelYear+":learn:"+pageType+":download:details";
	 s.channel="vehicle";
	 s.server="Mitsubishi Cars";
	 s.prop1=modelYear;
	 s.prop2=modelName;
	 s.prop14=modelYear+"_pass_car_and_suv_warranty_booklet.pdf";
	 s.prop19="mc:vehicle:learn:"+pageType+":download:details";
	 s.prop20="learn";
	 s.prop21=pageType;
	 s.eVar1=modelYear;
	 s.eVar2=modelName;
	 s.eVar12="mc:vehicle:learn:"+pageType+":download:details";
	 s.eVar32=modelYear+"_pass_car_and_suv_warranty_booklet.pdf";
	 s.events="event17";
	 return true;
	 //s.tl(true,'d','Download Warranty Details');
}

