//*******************************************
//  Copyright Dealer.com Websystems
//  dealerbox.js
//  Dealer.com Unobtrusive Cross-Browser Ninja Popups,
//	Inspired by Thickbox, which in turn inspired by Greybox
//  author: James R. Vivian
//  date: 9.19.2007
//*******************************************
var globalResizeFunction = null;
var DealerBox = function (settings) {

	//constructor
	var that = this;
	var width = 0;
	var height = 0;
	var src = '';
	this.settings = {
		heading : '',
		iframeAdjustWidth : null,
		iframeAdjustHeight : null,
		closeBtn : true,
		closeBtnGfx : null,
		onWindowResize : null,
		onOpenCallback : null,
		onCloseCallback : null,
		loadingGfx : null,
		dBoxCss : null,
		dBoxCssAppend : false,
		ieCurHeight : null,
		ieVar : ''
	}

	//main window construction
	this.open = function(){
		//assign that.settings object
		width = arguments[0];
		height = arguments[1];
		src = arguments[2];
		if(!that.settings.ieVar){setIEVar()};
		initDom();
		//callback function
		/*if(that.settings.onOpenCallback){
			that.settings.onOpenCallback();
		}*/
		var divScreen
	}

	//main window deconstruction
	this.close = function(){
		//release event bindings and body overflow
		document.getElementById('dBoxScreen').onclick = null;
		window.onresize = null;
		//reenable document scrolling
		if(document.body.parentNode.style.overflow == 'hidden'){document.body.parentNode.style.overflow = 'auto';}
		if(document.body.style.overflow == 'hidden'){document.body.style.overflow = 'auto'};
		//tidy DOM
		if(that.settings.ieVar == 'ie6standards' || that.settings.ieVar == 'ie7standard'){document.body.removeChild(document.getElementById('dBox'))};
		document.body.removeChild(document.getElementById('dBoxScreen'));
		//callback function
		/*if(that.settings.onCloseCallback){
			that.settings.onCloseCallback();
		}*/
	}

	//initialize DOM
	var initDom = function() {
		//create and append cross-domain stylesheet
		var head = document.getElementsByTagName('head')[0];
		if(!that.settings.dBoxCssAppend){	//only append stylesheet if it doesn't already exist
			var stylesheet = document.createElement('link');
				stylesheet.rel = 'stylesheet';
				stylesheet.type = 'text/css';
				stylesheet.media = 'all';
				stylesheet.title = 'dBoxCSS';
				stylesheet.href = that.settings.dBoxCss;
			head.appendChild(stylesheet);           //append stylesheet to head
		    that.settings.dBoxCssAppend = true;		//set append stylesheet value to true
		}

		/////////////////////////////////////
		//-generate dealerbox DOM elements-//
		/////////////////////////////////////

		//generate clickToClose layer
		var divScreen = document.createElement('div');
			divScreen.setAttribute('id','dBoxScreen');
			if(isFFMac()){divScreen.setAttribute('class','ffmac')};  //substitute png for opacity in ff on the mac
								//alert(navigator.userAgent);
								//TODO: needs to detect support for position:fixed before an element is added to the DOM
								//TODO: if not possible, detect for browsers and exclude IE7(standards mode) with a check against document.documentElement
								//divScreen.style.top = offsetTop;		//for use when positioned absolutely instead of fixed (IE6/7 I'm looking at you)
		var imgLoading = document.createElement('img');
			imgLoading.setAttribute('id', 'dBoxLoading');
			imgLoading.setAttribute('src', that.settings.loadingGfx);
		divScreen.appendChild(imgLoading);

        globalResizeFunction = function(){that.autoScreen(divScreen)};
		window.onresize = function() {setTimeout("globalResizeFunction();",200)}//that.settings.onWindowResize;

		divScreen.onclick = that.close;
		initDivScreen(divScreen);

		//generate dealerbox frame
		var divDealerBox = document.createElement('div');
			divDealerBox.setAttribute('id','dBox');
			divDealerBox.style.height = height + 'px';
			divDealerBox.style.width = width + 'px';
			divDealerBox.style.marginTop = 0;
			//divDealerBox.style.top = offsetTop;  //enable this line to place dBox with positioning instead of margin, make sure to disable margin positioning in autoCenter()
			//hide dBox until content is loaded
			divDealerBox.style.visibility = 'hidden';

		//generate heading container
		var divDealerBoxHeading = document.createElement('div');
			divDealerBoxHeading.setAttribute('id', 'dBoxHeading');
		divDealerBox.appendChild(divDealerBoxHeading);
		if (that.settings.heading != ''){
			//generate heading
			var h3DealerBoxHeading = document.createElement('h3');
			divDealerBoxHeading.appendChild(h3DealerBoxHeading);
			var h3DealerBoxHeadingContent = document.createTextNode(that.settings.heading);
			h3DealerBoxHeading.appendChild(h3DealerBoxHeadingContent);
		}
		if(that.settings.closeBtn){
			//generate close button, append to heading
			var divDealerBoxClose = document.createElement('div');
				divDealerBoxClose.setAttribute('id', 'dBoxClose');
				divDealerBoxHeading.appendChild(divDealerBoxClose);
			var aDealerBoxClose = document.createElement('a');
				divDealerBoxClose.appendChild(aDealerBoxClose);
			if(that.settings.closeBtnGfx){
				var aDealerBoxCloseContent = document.createElement('img');
					aDealerBoxCloseContent.setAttribute('alt','Close');
					aDealerBoxCloseContent.setAttribute('src',that.settings.closeBtnGfx);
					aDealerBoxCloseContent.style.border = 0;
			} else {
				var aDealerBoxCloseContent = document.createTextNode('Close');
			}
				divDealerBoxClose.firstChild.appendChild(aDealerBoxCloseContent);
				divDealerBoxClose.firstChild.setAttribute('href','javascript:void(0);');
				divDealerBoxClose.firstChild.onclick = that.close;
		}

		//generate dBoxContent
		var divDealerBoxContent = document.createElement('div');
			divDealerBoxContent.setAttribute('id', 'dBoxContent');

		//generate iframe
        var onloadTxt = "document.getElementById('dBox').style.visibility = 'visible';"
        var iframeTxt = '<iframe id="dBoxIFrame" name="dBoxIFrame" scrolling="no" onLoad="'+onloadTxt+'" src="'+src+'" width="'+(width+that.settings.iframeAdjustWidth)+'px" height="'+(height+that.settings.iframeAdjustHeight)+'px">Test</iframe>';
        divDealerBoxContent.innerHTML = iframeTxt;
        divDealerBox.appendChild(divDealerBoxContent);

		/////////////////////////
		//-add elements to DOM-//
		/////////////////////////

		//append click-to-close screen layer to DOM
		document.body.appendChild(divScreen);
		//append dealerbox window to DOM
		divDealerBox.style.overflow = 'hidden';		//apply overflow: hidden to resolve FF/Win vs Flash issue;
		if(that.settings.ieVar == 'ie6standards' || that.settings.ieVar == 'ie7standard') {
			document.body.appendChild(divDealerBox);
		} else {
			divScreen.appendChild(divDealerBox);
		}
		//center dealerbox
		autoCenter(divDealerBox);
	}

	var testOnLoad = function(){
		document.getElementById('dBox').style.visibility = 'visible';
		alert('test onLoad!');
	}

	var autoCenter = function(elem){
		//center dealerbox in window
		elem.style.marginLeft = '-' + parseInt(elem.style.width)/2 + 'px';
		//disable the next line if using offsetTop variable
		elem.style.marginTop = '-' + parseInt(elem.style.height)/2 + 'px';
	}

	var autoPosition = function(elem){
		var yScrolltop;
		if (self.pageYOffset) {
			yScrolltop = self.pageYOffset;
		} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
			yScrolltop = document.documentElement.scrollTop;
		} else if (document.body) {// all other Explorers
			yScrolltop = document.body.scrollTop;
		}
		yScrolltop = yScrolltop + 'px';
		if(elem){
			elem.style.top = yScrolltop;
		} else {
			return yScrolltop;
		}
	}

	this.autoScreen = function(elem) {
        var calcW, calcH;
		/*
		//DOM element detection courtesy of Peter-Paul Koch at Quirksmode.org
		*/
		if (window.innerWidth && window.innerHeight) {
			//alert('NS/FF - window.innerWidth = ' + window.innerWidth + 'px, window.innerHeight = ' + window.innerHeight + 'px');
			calcW = window.innerWidth + 'px';
			calcH = window.innerHeight + 'px';
		} else if (document.documentElement && document.documentElement.clientWidth) {
			//alert('IE6 w/ DOCTYPE, IE7 w/ DOCTYPE'/* - document.documentElement.clientWidth = ' + document.documentElement.clientWidth + 'px, document.documentElement.clientHeight = ' + document.documentElement.clientHeight + 'px'*/);
			calcW = document.documentElement.clientWidth + 'px';
			calcH = document.documentElement.clientHeight + 'px';
			//alert('calcW = ' + calcW + ', calcH = ' + calcW);
		} else if(document.body.clientHeight && document.body.clientWidth) {
			//alert('IE6 Quirks, et al. - document.body.clientHeight = ' + document.body.clientHeight + 'px, document.body.clientWidth = ' + document.body.clientWidth + 'px');
			calcW = document.body.clientWidth + 'px';
			calcH = document.body.clientHeight + 'px';
		} else {
			//alert('find another way to touch window properties/upgrade yo browser');
			return false;
		}
		//set calculate width and height
		if(elem){
			elem.style.width = calcW;
			elem.style.height = calcH;
		} else {
			return false;
		}
	}

	var isFFMac = function() {
		var isFFMac = navigator.userAgent.toLowerCase();
		if (isFFMac.indexOf('mac') != -1 && isFFMac.indexOf('firefox') !=-1 ){
    		return true;
  		}
	}

	var setIEVar = function() {
		var a = that.settings.ieVar;
		var b = that.BrowserDetect.browser;
		var v = that.BrowserDetect.version;
		var de = document.documentElement;
		if(a){
			return false;
		} else if(de && b == 'Explorer' && v >= '7'){
			a = 'ie7standard';
		} else if (de && b == 'Explorer') {
			a = 'ie6standards';
		} else if (b = 'Explorer' && !de){
			a = 'ieQuirks';
		} else {
			a = 'goodBrowser';
		}
		that.settings.ieVar = a;
	}

	var initDivScreen = function(elem){
		switch(that.settings.ieVar){
			case 'ie6standards' :
				document.body.parentNode.style.overflow = 'hidden';
				document.body.style.overflow = 'hidden';
				//autoTop();
			case 'ie7standard' :
				document.body.parentNode.style.overflow = 'hidden';
				document.body.style.overflow = 'hidden';
				//autoTop();
			case 'ieQuirks' :
				document.body.style.overflow = 'hidden';
				//autoTop();
			default:
				that.autoScreen(elem);
				break;
		}
	}

	this.BrowserDetect = {
		init: function () {
			this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
			this.version = this.searchVersion(navigator.userAgent)
				|| this.searchVersion(navigator.appVersion)
				|| "an unknown version";
			this.OS = this.searchString(this.dataOS) || "an unknown OS";
		},
		searchString: function (data) {
			for (var i=0;i<data.length;i++)	{
				var dataString = data[i].string;
				var dataProp = data[i].prop;
				this.versionSearchString = data[i].versionSearch || data[i].identity;
				if (dataString) {
					if (dataString.indexOf(data[i].subString) != -1)
						return data[i].identity;
				}
				else if (dataProp)
					return data[i].identity;
			}
		},
		searchVersion: function (dataString) {
			var index = dataString.indexOf(this.versionSearchString);
			if (index == -1) return;
			return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
		},
		dataBrowser: [
			{ 	string: navigator.userAgent,
				subString: "OmniWeb",
				versionSearch: "OmniWeb/",
				identity: "OmniWeb"
			},
			{
				string: navigator.vendor,
				subString: "Apple",
				identity: "Safari"
			},
			{
				prop: window.opera,
				identity: "Opera"
			},
			{
				string: navigator.vendor,
				subString: "iCab",
				identity: "iCab"
			},
			{
				string: navigator.vendor,
				subString: "KDE",
				identity: "Konqueror"
			},
			{
				string: navigator.userAgent,
				subString: "Firefox",
				identity: "Firefox"
			},
			{
				string: navigator.vendor,
				subString: "Camino",
				identity: "Camino"
			},
			{		// for newer Netscapes (6+)
				string: navigator.userAgent,
				subString: "Netscape",
				identity: "Netscape"
			},
			{
				string: navigator.userAgent,
				subString: "MSIE",
				identity: "Explorer",
				versionSearch: "MSIE"
			},
			{
				string: navigator.userAgent,
				subString: "Gecko",
				identity: "Mozilla",
				versionSearch: "rv"
			},
			{ 		// for older Netscapes (4-)
				string: navigator.userAgent,
				subString: "Mozilla",
				identity: "Netscape",
				versionSearch: "Mozilla"
			}
		],
		dataOS : [
			{
				string: navigator.platform,
				subString: "Win",
				identity: "Windows"
			},
			{
				string: navigator.platform,
				subString: "Mac",
				identity: "Mac"
			},
			{
				string: navigator.platform,
				subString: "Linux",
				identity: "Linux"
			}
		]

	};
	that.BrowserDetect.init();
}

var myDealerBox = null;

var iLand = {
	params : {},

	load : function() {
		this.parseQueryString();
		var vin = this.params['vin'];
		if( vin != null ) {
			myDealerBox = new DealerBox();
			myDealerBox.settings = {
				iframeAdjustWidth : 0,
				iframeAdjustHeight : -28,
				dBoxCss: '$domain/toolkit/js/dealerbox.css',
				closeBtn : true,
				closeBtnGfx : '$domain/toolkit/vcl/img/gm-btn-close2.gif',
				loadingGfx : '$domain/toolkit/images/loadingAnimation.gif',
				heading : ''
			}
			myDealerBox.open(608, 486, '$domain/toolkit/views/iland/landing?vin='+vin+'&accountId=$accountId');
		}
	},

	parseQueryString : function() {
		var query = location.href;
		var keyValues = query.substring(query.indexOf("?")+1).split("&");
		var ln = keyValues.length;
		for( var i=ln; i>0; i-- ){
			tmp = keyValues[ln-i];
			this.params[ tmp.substring(0,tmp.indexOf("=")) ] = tmp.substring(tmp.indexOf("=")+1);
		}
	}
};

if(window.onload != null) {
    var onLoadBase = window.onload;
    window.onload = function() {iLand.load();onLoadBase();}
} else {
    window.onload = function() {iLand.load()};
}