// JavaScript Document overlay.js

var overlayHTML, overlayTimer, overlay; //overlayTable commented out
var deleteOverlayTimer = null;
var overlayHTML = null;
var overlayCurrentTab = null;
var overlayPreviousTab = null;
var overlayTimer = null;
var mouseX = null;
var mouseY = null;
var submitWarning = true;
var rowHeightOffset = null;
var rowLeftOffset = null;
var productName = null;
var productYear = null;
var productMake = null;
var productModel = null;
var productType = null;
var productVIN = null;
var pageNameOverlay = null;
var overlayPosTracker = 10000;

function startOverlay(element, event, clickTarget){
	clearDeleteOverlayTimer();
	if(overlayTracker != element.id)deleteOverlay();
	setOverlayTimer(element,event, clickTarget);
}

function resizeComboBlocker() {
	var resize = function() {
		var blocker = gE('oComboBlocker');
		var content = gE('oContent');
		if(blocker && content) {
			blocker.style.width = content.offsetWidth + "px";
			blocker.style.height = content.offsetHeight + "px";
		}
	}
	setTimeout(resize, 200);
}

function showOverlay(target, eventType, mouseX, mouseY, clientWidth, clickTarget) {
	overlay = gE('overlay');

	if(debug && overlay)return false;
	deleteOverlay();
	moreInfo = true;
	overlayTracker = target.id;

	overlay = document.createElement('div');
	overlay.id = 'overlay';
	overlay.setAttribute('for', target.id);
	overlay.style.left = '-1000px';	
	overlay.style.position = 'absolute';
	document.body.appendChild(overlay);

	var comboBlocker = document.createElement('iframe'); //iframe hack
	comboBlocker.src = "javascript:false;";
	comboBlocker.id = "oComboBlocker";
	comboBlocker.className = 'comboBlocker';
	overlay.appendChild(comboBlocker);
	comboBlocker.setAttribute("frameborder", "0");
	comboBlocker.style.height = "300px";

	var overlayContent = document.createElement('div'); //content container
	overlayContent.id = "oContent";
	overlay.appendChild(overlayContent);
	
	if(overlayHTML == null) {
		if (overlayType != 'thumbOver' && overlayType != 'thumbClick') {
			overlayHTML = loadContent('/plugins/pages/inv/components/overlay.jsp?locale=' + locale, true);
		} else {
			overlayHTML = loadContent('/plugins/pages/inv/components/image-overlay.jsp', true);
		}
	}

	overlayContent.innerHTML = overlayHTML;
	resizeComboBlocker();

	var closeImg = gE('close-button');
	if(BrowserDetect.browser == "Explorer" && BrowserDetect.version == "6") { 
		if(locale == "fr_CA")
			closeImg.src = "/plugins/images/inv/default/fermer.png";
		else
			closeImg.src = "/plugins/images/inv/default/close.png";
	}

	var list = gE('inventory-listing');
	var rowPosition = findPos(target);
	var data = [];
	var summary = gE('overlay-summary');
	var video = gE('o-video');

	target.className = (target.getAttribute('previousClass')=="compare-column" )?"compare-column rowHover":"rowHover";

	(window.addEventListener)? overlay.setAttribute('onmouseover', 'clearDeleteOverlayTimer()') : overlay.attachEvent('onmouseover', clearDeleteOverlayTimer);
	(window.addEventListener)? overlay.setAttribute('onmouseout', 'setDeleteOverlayTimer()') : overlay.attachEvent('onmouseout', setDeleteOverlayTimer);

	var rowHeightOffset = (layout=='expanded')?-140:(layout=='gallery')?-160:(layout=='')?-65:-65;

	if(document.documentElement.clientHeight - mouseY < overlay.offsetHeight){
		if(layout=='expanded')rowHeightOffset = rowHeightOffset + 75;
		rowHeightOffset = (rowHeightOffset - overlay.offsetHeight) + (document.documentElement.clientHeight - mouseY);
	}

	overlay.style.top = (rowPosition[1] + rowHeightOffset) + (target.offsetHeight / 2) + 'px';
	var mediaID = target.getAttribute('mid');
	var videoURL = target.getAttribute('vurl');
	
	if (video) {
		
		if(videoURL != null && videoURL != ''){
			
			addAnEvent(video, 'click', function(e){switchOverlayTabs(video, videoURL, 'videoIframe', 1); return false;});
		} else if(mediaID != null && mediaID != ''){
			addAnEvent(video, 'click', function(e){switchOverlayTabs(video, '/plugins/pages/inv/liquidus-video-form.jsp?vidID=' + mediaID + '&dealerId=' + target.getAttribute('dId'), null, 1); return false;});
		}else{
			video.style.display = 'none';
		}
	}
	
try {
	var views = gE('overlay-views');
	var vtd_btn = gE('tab2');

	if(vtd_btn) {
		if(!target.getAttribute('vtd')) vtd_btn.style.display = 'none';
		else vtd_btn.setAttribute('vtd', target.getAttribute('vtd'));
	}
	
	if(d_obj['price'] != true && d_obj['msrp'] == true) {
		target.setAttribute('price', target.getAttribute('msrp'));
	}

	if(d_obj['emi'] == true) toggleMoreInfo(gE('overlay-info').getAttribute('closeInfo'));
	if(d_obj['pc'] != true) hide('overlay-payment');

	if(views) views.setAttribute('a', target.getAttribute('a'));
	
	if(target.getAttribute('price') == null && target.getAttribute('invoice') == null && target.getAttribute('msrp') == null) {
		gE('o-missing-prices').style.display = 'block';
		hide('o-price');
		hide('o-invoice');
		hide('o-msrp');
		hide('overlay-payment');
	}
	
	for(var i = 0; i < columns.length; i++) {
		var name = columns[i];
		var value = target.getAttribute(columns[i]);
		var elem = gE('o-' + name);
		var child = gE('o-' + name + '-c');
		var label = gE('o-' + name + '-label');
		
		if(views) views.setAttribute(name, value);
		if(child == null) child = elem;
	
		if (name != 'img' && name != 'mid') {
			if (elem) {
				if (value != null && value != '') {
					var _sktp = target.getAttribute('st').toLowerCase();
						_sktp = (_sktp == 'pre-owned' || _sktp == 'occasions')? 'used' : _sktp;
						_sktp = (_sktp == 'neufs')? 'new' : _sktp;
					if(d_obj[name] == true) {
						if(name == 'ct' && value != '1') hide(child);
						else if(name == 'od' && target.getAttribute('st') == 'New') hide(elem);
						else if (name == 'st' && value != 'New') {
							hide('o-new');
							child.innerHTML += value;
						} else if(name == 'price' || name == 'msrp' || name == 'invoice') {

							var lbl = (target.getAttribute('sp') != null && name == 'price')? 'special' : name;

							if (label != null) label.innerHTML = labels[lbl][_sktp] + ' :';
							child.innerHTML += value;
						} else {
							if(child.tagName.toLowerCase() != 'img' && name != 'sp' && name != 'ct') child.innerHTML += value;
						}
					} else {
						if(_sktp != 'new') hide('o-new');
						elem.style.display = 'none';
					}
				} else {
					hide(elem); 
				}
			}
		}
	}

} catch (e) {console.log(e);}

var image = gE('o-img');
try{image.onerror = imgErrorHandler(image)}catch(e){};

var img_path = target.getAttribute('img');
var stk_img = target.getAttribute('stk');

if(image != null && img_path != null && img_path != '') {
	image.setAttribute('path', img_path);
	
	var img_re;
	
	if(img_path.indexOf("evox") === -1) {
		img_re = img_path.replace(/_[-0-9]*_/g, "_1_"); // change the image to the first image in the list;
		image.src = img_re;
	} else {
		image.src = img_path;
	}

} else img_path = null;

if(stk_img != null && stk_img != '') image.setAttribute('stk_img', stk_img);
else stk_img = null;

if(img_path != null && img_path.indexOf("?IMG=")!=-1) gE('tab3').style.display = 'inline';

try{
	if(img_path == null && stk_img == null) {
		if(gE('tab3')) gE('tab3').style.display = 'none';
		hide('o-img');
		
		if(gE('o-oem-logo')) gE('o-oem-logo').style.display = 'block';

		var logo = new FlashObject('/plugins/swf/inv/dmi-logo.swf', "o-logo-oem", '120', '90', '#FFFFFF');
			logo.addParam("wmode","opaque");
			logo.addParam("allowScriptAccess","sameDomain");
			logo.addVariable("make", target.getAttribute('mk').toLowerCase());
			logo.addVariable("maxWidth", "110");
			logo.addVariable("maxHeight", "80");
			logo.addVariable("forceSize", "false");
			logo.write("o-oem-logo");
	}
} catch (e) {console.log(e);}

try{
	var pn = gE('o-phone');
	
	if(pn && ph_obj != undefined) {
		if(ph_obj['toll'] != "" && ph_obj['toll']) pn.innerHTML = ph_obj['toll'];
		else {
			var sktp = target.getAttribute('st').toLowerCase();
			pn.innerHTML = (sktp == 'used' || sktp == 'pre-owned' || sktp == 'occasions')? ph_obj['used'] : ph_obj['new'];
		}
	}

	if(gE('o-dealerName')){
		var dname = (target.getAttribute('dname'))? target.getAttribute('dname') : dealerName;
		gE('o-dealerName').innerHTML = dname;
	}
	if(typeof gE('tab1') == 'object' && (overlayType == 'defaultOver' || overlayType == 'defaultClick'))switchOverlayTabs(gE('tab1'));

} catch (e) {console.log(e)}

if(layout=='expanded') {
	if(overlayType != 'defaultClick') rowLeftOffset = ((mouseX - 10) + overlay.offsetWidth >= clientWidth-45)? clientWidth-overlay.offsetWidth-45:mouseX - 10;
	else {

		if(clickTarget != null) {
	
			var x = mouseX - clickTarget.offsetWidth;

			rowLeftOffset = x - (overlay.offsetWidth - 10);
		}
	}
}

if(layout=='gallery' || !layout) {
	if(overlayType != 'defaultClick') {
		if(mouseX > clientWidth / 2) {
			rowLeftOffset = (rowPosition[0] - 25) - overlay.offsetWidth;
		} else {
			rowLeftOffset = (rowPosition[0] - 25) + target.offsetWidth - 35;			
		}
	} else {

		if(clickTarget != null) {
	
			var x = mouseX - clickTarget.offsetWidth;

			rowLeftOffset = x - (overlay.offsetWidth - 10);
		}
	}
}
if(layout=='' || layout =='list')rowLeftOffset = ((mouseX - 10) + overlay.offsetWidth >= clientWidth-45)? clientWidth-overlay.offsetWidth-45:mouseX - 10;

if(!rowLeftOffset){
overlay.style.left = mouseX - 100 + "px";
overlay.style.top = mouseY + "px";
}else{
overlay.style.left = rowLeftOffset + 'px';
}

if(overlayType == 'thumbOver' || overlayType == 'thumbClick' ) {
	if(image != null) {
		image.style.cssFloat = 'none';
		image.style.styleFloat = 'none'; //ie
	}
}
	
try {
// Omniture
productYear = target.getAttribute('y');
productMake = target.getAttribute('mk');
productModel = target.getAttribute('md');
productType = target.getAttribute('st');
productVIN = target.getAttribute('vin');
pageNameOverlay = (pageNameOverlay != null)? pageNameOverlay : s.pageName + " (Overlay)";

s.events="event7";
s.pageName=pageNameOverlay;
s.eVar13=productYear;
s.eVar1=productMake;
s.eVar2=productModel;
s.eVar3=portalPath;
s.eVar12="Show Overlay";
s.eVar14=productType;
s.eVar15=productVIN;
s.t();
} catch (e) {console.log(e);}
}

function repositionOverlay(){
	if(gE('overlay')){
		var overlayTrackerPosition = findPos(gE(overlayTracker)); // absolute position of overlay top part 1
		var overlayTrackerX = overlayTrackerPosition[0];
		var overlayTrackerY = overlayTrackerPosition[1];
		var overlayOffsetLeft = overlay.offsetLeft; //distance from page top to top of overlay
		var overlayOffsetTop = overlay.offsetTop; //distance from page top to top of overlay
		var scrollOffset = document.documentElement.scrollTop; //hidden area above visible area is 0 when not scrolled
		var scrollOffsetLeft = document.documentElement.scrollLeft; //hidden area above visible area is 0 when not scrolled
		var clientWidth = document.documentElement.clientWidth; // visible window height
		var clientHeight = document.documentElement.clientHeight; // visible window height
		var overlayWidth = overlay.offsetWidth; // width of overlay
		var overlayHeight = overlay.offsetHeight; // height of overlay
		if(scrollOffset + clientHeight < overlayHeight + overlayOffsetTop || overlayOffsetTop + overlayHeight < overlayTrackerY){
			var movement = (scrollOffset + clientHeight) - overlayHeight - 10;
			if(overlayPosTracker==null || overlayPosTracker > movement){
			  overlay.style.top = movement + 'px';
			  if(overlayPosTracker > movement)overlayPosTracker = movement;
			}
		}
		if(clientWidth < overlayWidth + overlayOffsetLeft || overlayOffsetLeft + overlayWidth < overlayTrackerX){
			var movement = clientWidth - overlayWidth;
			overlay.style.left = movement - 50 + 'px';
		}
	}
}

function hide(e) {
	e = (typeof e == 'string')? gE(e) : e; 
	if(e) e.style.display = 'none';
}

var moreInfo = true;

function toggleMoreInfo(label){
	gE('overlay-more').style.display = (moreInfo)? 'block' :'none';

	var ic = gE('overlay-info');
	var label = (!moreInfo)? ic.getAttribute('getInfo') : ic.getAttribute('closeInfo');

	s.events="event7";
	s.eVar13=productYear;
	s.eVar1=productMake;
	s.eVar2=productModel;
	s.eVar12="Clicked : " + ic.innerHTML;
	s.eVar14=productType;
	s.eVar15=productVIN;
	//s.products=productName;
	s.t();

	ic.innerHTML = label
	ic.setAttribute('title', label);

	moreInfo = !moreInfo;
}

function switchOverlayTabs(target, path, id, dimAmount)
{
	loadVideo=true;
	overlayPreviousTab = overlayCurrentTab;
	if (overlayPreviousTab != null) {
		var prevContent = gE(overlayPreviousTab.getAttribute('contentTab'));
		overlayPreviousTab.className = '';
		prevContent.style.display = 'none';
	}

	overlayCurrentTab = target;
	var content = gE(target.getAttribute('contentTab'));	

	if(content) content.style.display = 'block';
	if (gE('lb-close')) gE('lb-close').style.display = (target.id == 'tab4' || target.id == 'tab2' || target.id == 'o-video')?'inline':'none';
	
	if(target.id == 'tab4')submitWarning = true;
	if(target.id == 'tab8')setTimeout(function(){clearOverlayTimer();},0);
		
	if(dimAmount){ 
		createDim(dimAmount);
	}else{
		if(gE('dim')) document.body.removeChild(gE('dim')); // pageDimState(false); // kill the dim if we don't pass dimAmount
	}
	
	if (path) {
		if (path.indexOf('.swf') != -1 ){ // check if we are loading a swf and if so attach it to the DOM -Aaron
			var swfVars = [];
			if (id != null) {
				if (id == 'slideshow') {
					// swfVars['img'] = gE('o-img').getAttribute('path');
					swfVars['stock-base'] = stkBasePath;
					swfVars['xml-base'] = xmlBasePath;
					swfVars['dealer-base'] = dealerBasePath;
					swfVars['show-stock'] = d_obj['ssp'];
					swfVars['dealerId'] = gE('overlay-views').getAttribute('dId');
					swfVars['evoxId'] = gE('overlay-views').getAttribute('evxId');
					swfVars['exteriorColorCode'] = gE('overlay-views').getAttribute('exClCd');
					swfVars['stock-num'] = gE('overlay-views').getAttribute('sn');
					swfVars['make'] = gE('overlay-views').getAttribute('mk').toLowerCase();
					swfVars['width'] = 595;
					swfVars['height'] = 320;
					swfVars['displayType'] = 'list';
					swfVars['isCompliant'] = isCompliant;
				} else if (id == 'payment') {
					swfVars['basePrice'] = gE('overlay-views').getAttribute('price');
					swfVars['baseInterest'] = p_cfg['iR'];
					swfVars['baseMonths'] = p_cfg['mT'];
					swfVars['percentDown'] = p_cfg['pD'];
					swfVars['disclaimer'] = p_cfg['d'];
					swfVars['locale'] = locale;
					swfVars['width'] = 235;
					swfVars['height'] = 205;
				} else if (id == 'vtd') {
					swfVars['width'] = 600;
					swfVars['height'] = 290;
				}
				attachSWF(path, id, swfVars, content);
			}
		} else {
			if(id != null && gE(id) != null) {
				gE("view7").style.width = "450px";
				gE(id).src = path; // populate iframe if there is an ID passed to a non .swf path
				if(gE('overlay'))setTimeout(repositionOverlay,1000);
			}
			else {
				if(path.indexOf('form.do') != -1) path = path + '&bz=' + Math.floor(Math.random()*Date.UTC());
				loadContent(path, false, content, true, target.id);
			}
		}
	}
	target.className = "selected";
	if(gE('overlay'))setTimeout(repositionOverlay,1000);
	
	// Send Custom Event to Omniture.
	var linkName = (target.innerHTML.toLowerCase().indexOf('<span>') != -1)? target.getElementsByTagName('span')[0].innerHTML : target.innerHTML;
	
	s.events="event7";
	s.eVar13=productYear;
	s.eVar1=productMake;
	s.eVar2=productModel;
	s.eVar12="Clicked Tab: " + linkName;
	s.eVar14=productType;
	s.eVar15=productVIN;
	//s.products=productName;
	s.t();
	resizeComboBlocker();
}

function clearDeleteOverlayTimer(){clearTimeout(deleteOverlayTimer);}

function setDeleteOverlayTimer(){if(!isDOM('dim')){clearOverlayTimer();deleteOverlayTimer = setTimeout(deleteOverlay,500);}}

function clearOverlayTimer(){clearTimeout(overlayTimer);}

function setOverlayTimer(tableRow, event, clickTarget){
	if(overlayTimer)clearTimeout(overlayTimer);
	overlayTimer = null;
	var eventType = event.type;
	var mouseX = event.clientX;
	var mouseY = event.clientY;
	if(!overlayTracker || overlayTracker != tableRow.id)overlayTimer = setTimeout(function(){showOverlay(tableRow, eventType, mouseX, mouseY, document.documentElement.clientWidth, clickTarget)},500);
}

function deleteOverlay(){
	if(overlayTracker){
		if(debug)return false;
		overlayPosTracker = 10000;
		var overlay = gE('overlay');
		var dim = gE('dim');
		var form = document.forms['quickquote'];
		if(overlay){
			if(form && submitWarning){
				var formElements = document.getElementsByTagName("input");
				for (var i = 0; i < formElements.length; i++) { 
					if(formElements[i].type == 'text' && formElements[i].value != '' && overlayCurrentTab.id == 'tab4')
					{
						var buttons = gE('form_buttons');
						if(!isDOM('_cancel')) buttons.innerHTML = '<input type="button" id="_cancel" name="_cancel" value="cancel" onclick="document.forms[0].reset();deleteOverlay()" />&nbsp;' + buttons.innerHTML;
						if(isDOM('errors'))if(!isDOM('errorsList')) gE('errors').innerHTML += '<ul id="errorsList"></ul>';
									validateForm(form);
						gE('errorsList').innerHTML = '<li class="specialAlert">' + gE('specialAlert').innerHTML + '</li>';
						submitWarning = false;
						return false;
					}
				}
			}
			
			var prev = gE(overlay.getAttribute('for'));
			if(prev) prev.className = prev.getAttribute('previousClass');
			overlay.style.display = 'none';
			document.body.removeChild(overlay);
			overlayTracker = null;
		}
		if(dim) document.body.removeChild(dim);
	}
}

function attachSWF(path, id, vars, target)
{
	var divID;
	
	if(!target.divID) divID = (id)? id : 'id_' + swfCount++;
	else divID = content.divID;

	var w = (vars['width'])? vars['width'] : '100%';
	var h = (vars['height'])? vars['height'] : '100%'; 
	
	target.innerHTML += '<div id="' + divID + '"></div>';
	var swf = new FlashObject(path, divID, w, h, '#FFFFFF');
		swf.addParam('wmode','opaque');
		swf.addParam('allowScriptAccess', 'always');
		
	for(var prop in vars) swf.addVariable(prop, vars[prop]);

	swf.write(divID);
	if(gE('overlay'))setTimeout(repositionOverlay,1000);
}
var loadVideo=true;
function loadLiquidusVideoForm(theIframe){
  if(loadVideo){
		theIframe.src = '/plugins/pages/inv/liquidus-video.jsp?mediaID=' + gE(overlayTracker).getAttribute('mid');
		loadVideo=null; //to avoid double load 
		var logo = new FlashObject('/plugins/swf/inv/dmi-logo.swf', gE(overlayTracker).getAttribute('mk').toLowerCase() + '-logo', '100%', '100%', '#FFFFFF');
			logo.addParam("wmode","opaque");
			logo.addParam("allowScriptAccess","sameDomain");
			logo.addVariable("make", gE(overlayTracker).getAttribute('mk').toLowerCase());
			logo.addVariable("div", 'sVideoOem-logo');
			logo.addVariable("maxWidth", "150");
			logo.write("sVideoOem-logo");
		gE('sVideoYear').innerHTML = gE(overlayTracker).getAttribute('y') + " ";
		gE('sVideoMake').innerHTML = gE(overlayTracker).getAttribute('mk') + " ";
		gE('sVideoModel').innerHTML = gE(overlayTracker).getAttribute('md');
		gE('sVideoTrim').innerHTML = gE(overlayTracker).getAttribute('tr');
		gE('sVideoMiles').innerHTML = gE(overlayTracker).getAttribute('od');
  }
}


function getOffset( el ) {
    var _x = 0;
    var _y = 0;
    while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
        _x += el.offsetLeft - el.scrollLeft;
        _y += el.offsetTop - el.scrollTop;
        el = el.parentNode;
    }
    return { top: _y, left: _x };
}