/*
 * (c)2006 Jesse Skinner/Dean Edwards/Matthias Miller/John Resig
 * Special thanks to Dan Webb's domready.js Prototype extension
 * and Simon Willison's addLoadEvent
 *
 * For more info, see:
 * http://www.thefutureoftheweb.com/blog/adddomloadevent
 * http://dean.edwards.name/weblog/2006/06/again/
 * http://www.vivabit.com/bollocks/2006/06/21/a-dom-ready-extension-for-prototype
 * http://simon.incutio.com/archive/2004/05/26/addLoadEvent
 *
 *
 * To use: call addDOMLoadEvent one or more times with functions, ie:
 *
 *    function something() {
 *       // do something
 *    }
 *    addDOMLoadEvent(something);
 *
 *    addDOMLoadEvent(function() {
 *        // do other stuff
 *    });
 *
 */
addDOMLoadEvent = (function()
{
	// create event function stack
	var load_events = [], safari_timer, done, exec, script;

	var init = function()
	{
		done = true;

		// kill the timer
		clearInterval(safari_timer);

		// execute each function in the stack in the order they were added
		while (exec = load_events.shift())
			exec();

		if (script) script.onreadystatechange = '';
	}

	return function(func)
	{
		// if the init function was already ran, just run this function now and stop
		if (done) return func();

		if (!load_events[0])
		{
			// for Mozilla/Opera9
			if (document.addEventListener)
				document.addEventListener("DOMContentLoaded", init, false);

			/*@cc_on@*/
			/*@if (@_win32)
			 var proto = "src='javascript:void(0)'";
			 if (location.protocol == "https:") proto = "src=//0";
			 document.write("<scr" + "ipt id=__ie_onload defer " + proto + "><\/scr" + "ipt>");
			 var script = document.getElementById("__ie_onload");
			 script.onreadystatechange = function() {
			 if (this.readyState == "complete") {
			 var ie_timer = setInterval(function() { init() }, 100)
			 //init()
			 }
			 };
			 /*@end@*/

			if (/WebKit/i.test(navigator.userAgent))
			{ // sniff
				safari_timer = setInterval(function()
				{
					if (/loaded|complete/.test(document.readyState))
						init(); // call the onload handler
				}, 10);
			}

			old_onload = window.onload;
			window.onload = function()
			{
				init();
				if (old_onload) old_onload();
			};
		}

		load_events.push(func);
	}
})();

addDOMLoadEvent_OLD = (function()
{
	// create event function stack
	var load_events = [],
			load_timer,
			script,
			done,
			exec,
			old_onload,
			init = function()
			{
				done = true;

				// kill the timer
				clearInterval(load_timer);

				// execute each function in the stack in the order they were added
				while (exec = load_events.shift())
					exec();

				if (script) script.onreadystatechange = '';
			};

	return function(func)
	{
		// if the init function was already ran, just run this function now and stop
		if (done) return func();

		if (!load_events[0])
		{
			// for Mozilla/Opera9
			if (document.addEventListener)
				document.addEventListener("DOMContentLoaded", init, false);

			// for Internet Explorer
			/*@cc_on@*/
			/*@if (@_win32)
			 document.write("<script id=__ie_onload defer src=//0><\/scr" + "ipt>");
			 script = document.getElementById("__ie_onload");
			 script.onreadystatechange = function() {
			 if (this.readyState == "complete")
			 init(); // call the onload handler
			 };
			 /*@end@*/

			// for Safari
			if (/WebKit/i.test(navigator.userAgent))
			{ // sniff
				load_timer = setInterval(function()
				{
					if (/loaded|complete/.test(document.readyState))
						init(); // call the onload handler
				}, 10);
			}

			// for other browsers set the window.onload, but also execute the old window.onload
			old_onload = window.onload;
			window.onload = function()
			{
				init();
				if (old_onload) old_onload();
			};
		}

		load_events.push(func);
	}
})();


/*
 Developed by Robert Nyman, http://www.robertnyman.com
 Code/licensing: http://code.google.com/p/getelementsbyclassname/
 */
var getElementsByClassName = function(className, tag, elm)
{
	if (document.getElementsByClassName)
	{
		getElementsByClassName = function(className, tag, elm)
		{
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
					nodeName = (tag) ? new RegExp("\\b" + tag + "\\b", "i") : null,
					returnElements = [],
					current;
			for (var i = 0, il = elements.length; i < il; i += 1)
			{
				current = elements[i];
				if (!nodeName || nodeName.test(current.nodeName))
				{
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	} else if (document.evaluate)
	{
		getElementsByClassName = function(className, tag, elm)
		{
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
					classesToCheck = "",
					xhtmlNamespace = "http://www.w3.org/1999/xhtml",
					namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace) ? xhtmlNamespace : null,
					returnElements = [],
					elements,
					node;
			for (var j = 0, jl = classes.length; j < jl; j += 1)
			{
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try
			{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e)
			{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext()))
			{
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else
	{
		getElementsByClassName = function(className, tag, elm)
		{
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
					classesToCheck = [],
					elements = (tag === "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag),
					current,
					returnElements = [],
					match;
			for (var k = 0, kl = classes.length; k < kl; k += 1)
			{
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for (var l = 0, ll = elements.length; l < ll; l += 1)
			{
				current = elements[l];
				match = false;
				for (var m = 0, ml = classesToCheck.length; m < ml; m += 1)
				{
					match = classesToCheck[m].test(current.className);
					if (!match)
					{
						break;
					}
				}
				if (match)
				{
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

/****************************
 ** breakout.js
 **
 ** depends on prototype
 ** sundry js in here
 ** Design Kitchen
 ** @author: Matthew Story
 *****************************/
function breakoutsInit()
{
	//alert('BreakoutsInit() running');
	Breakouts = new Array();
	var NewBreakout;
	var breakoutEl;
	var breakoutArgs = new Array();
	breakoutArgs.push({ element: 'breakout1', openElements: ['open1'], closeElements: ['open2', 'open3', 'close1'], highlightedClass: 'openLanguage' });
	breakoutArgs.push({ element: 'breakout2', openElements: ['open2'], closeElements: ['open1', 'open3', 'close2'], highlightedClass: 'openLogin' });
	breakoutArgs.push({ element: 'breakout3', openElements: ['open3'], closeElements: ['open1', 'open2', 'close3', 'timeOpenCancel'], highlightedClass: 'openTime' });
	// per Etool #322
	//breakoutArgs.push({ element: 'breakout4', openElements: ['open4'], closeElements: ['close4'], highlightedClass: 'open' });

	//alert("have breakoutArgs.length as '"+breakoutArgs.length+"'");
	for (var i = 0, l = breakoutArgs.length; i < l; i++)
	{
		var DOMRef = breakoutArgs[i]['element'];
		breakoutEl = document.getElementById(DOMRef);

		if (breakoutEl)
		{ // avoid creating Breakout objs if we're not going to use them
			NewBreakout = new Breakout(breakoutArgs[i]);
			Breakouts.push(NewBreakout);
		}
	}
}

function modifySearchPanel()
{
	this.init = function()
	{
		self.toggleControl = document.getElementById('open4');
		self.cancelControl = getElementsByClassName('cancelModifySearch')[0];
		self.target = document.getElementById('breakout4');
		/* require DOM objects before continuing */
		if (self.toggleControl && self.target && self.cancelControl)
		{
			self.registerEvents();
			self.target.style.display = 'none';
		}
	}
	this.registerEvents = function()
	{
		self.toggleControl.onclick = function()
		{ self.toggleTarget(); }
		self.cancelControl.onclick = function()
		{ self.toggleTarget(); }
	}
	this.toggleTarget = function()
	{
		self.target.style.display = (self.target.style.display === 'none') ? 'block' : 'none';
		self.toggleControl.style.display = (self.toggleControl.style.display === 'none') ? '' : 'none';
	}
	var self = this;
	self.init();
}


/* addDOMLoadEvent fails for IE, fires inits
 too early. Handling IE separately, then */
var isMSIE = /*@cc_on!@*/false;
if (isMSIE)
{
	var customIE_old_onload = window.onload;
	window.onload = function()
	{
		breakoutsInit();
		SearchPanel = new modifySearchPanel();
		if (customIE_old_onload) customIE_old_onload();
	};
}
else
{
	addDOMLoadEvent(breakoutsInit);
	addDOMLoadEvent(function()
	{ SearchPanel = new modifySearchPanel()});
}


/***** Google map control *****/

function initialize()
{
	if (GBrowserIsCompatible())
	{
		var map = new GMap2(document.getElementById("map_canvas"));
		map.setCenter(new GLatLng(38.914344, -95.812025), 4);
		var mapControl = new GLargeMapControl();
		map.addControl(mapControl);
	}
}

/* Create a Tool Tip Object, provides
 an interface to the WZ tool tip library */
function TipHandler(ArgumentsObj)
{
	/* Argument Defaults */
	var NewArguments = {
		DOMObject: false,
		cssClassName: "",
		wzTipArgs: "SHADOW, true, TITLE, 'Some Title', PADDING, 9",
		tipContent: "Some tooltip text"
	};
	/* Replace Default Args with New Args */
	for (var argName in ArgumentsObj)
	{
		NewArguments[argName] = ArgumentsObj[argName];
	}
	/* Set Properties with Latest Arguments */
	this.DOMObject = NewArguments.DOMObject;
	this.cssClassName = NewArguments.cssClassName;
	this.wzTipArgs = NewArguments.wzTipArgs;
	this.tipContent = NewArguments.tipContent;

	/* Set invoke string to pass as argument to WZ tool tip library
	 Tip layout containers and CSS class assignments here */
	this.tipInvoke = "'<div class=toolTip_" + this.cssClassName + ">" + "<div class=inner>" + /* insert content */
	                 this.tipContent + "</div></div>'";
	/* Add WZ tool tip arguments to invoke string */
	if (this.wzTipArgs != "")
	{
		this.tipInvoke = this.tipInvoke + ", " + this.wzTipArgs;
	}

	/* Assign WZ tip handlers to mouse events using invoke string as arguments */
	this.setupEvents = function()
	{
		//Event.observe(self.DOMObject, 'mouseover', function(){ eval("Tip("+self.tipInvoke+")"); return false; }, false);
		//Event.observe(self.DOMObject, 'mouseout', function(){ UnTip(); return false; }, false);
		self.DOMObject.onmouseover = function()
		{
			eval("Tip(" + self.tipInvoke + ")");
			return false;
		};
		self.DOMObject.onmouseout = function()
		{
			UnTip();
			return false;
		};
	}

	var self = this;
	self.setupEvents();

	return false;
}
function VINTipInit(vinDetails)
{

	var tipContent = '<div class="toolTip_tip_vehicleStats"> <div class="inner">' + vinDetails + '</div></div>';

	var tipInvoke = "<div class=toolTip_tip_VIN> <div class=inner>" + tipContent + "</div></div>";

	var tipObjs = new Array();

	if (vinDetails != '')
	{
		Tip(tipInvoke, SHADOW, false, PADDING, 0, BGCOLOR, '', BORDERCOLOR, '#757575', BORDERWIDTH, 0);
	}
	else
	{
		UnTip();
	}
	tipObjs.push(false);
}
//function VINTipInit(control, vinDetails) {

//	var thisTipContent = '<div class="toolTip_tip_vehicleStats"> <div class="inner">' + vinDetails + '</div></div>';
//	var tipObjs = new Array();
//	var newTip = new TipHandler({
//		DOMObject: control,
//		cssClassName: "tip_VIN",
//		wzTipArgs: " SHADOW, false, PADDING, 0, BGCOLOR, '', BORDERCOLOR, '#757575', BORDERWIDTH, 0",
//		tipContent: thisTipContent
//	});
//	tipObjs.push(newTip);
//}
function toolTipsInit()
{
	/* Define Tooltip triggers as CSS selectors to collect layout objects */
	var cssSelectors = new Array('tip_iBidLive', 'tip_publicAuction', 'tip_IPayStatus', 'tip_biddersPermission', 'tip_go2auctions');
	/* Store custom Tooltip controller objects created in this init */
	var tipObjs = new Array();

	/* TipContent object can be asynchronously defined. 
	 If doesn't yet exist, create it */
	if (typeof TipContent_All == 'undefined')
	{
		TipContent_All = new Object();
	}

	/* Loop over each CSS selector as a tooltip type */
	for (i = 0,l = cssSelectors.length; i < l; i++)
	{

		/* Extract CSS class name from selector string */
		var tipCSSClass = cssSelectors[i].replace('\.', '');

		/* Create tip object for each tip trigger returned
		 from the DOM via util function */
		if (triggers = getElementsByClassName(cssSelectors[i]))
		{
			for (m = 0,p = triggers.length; m < p; m++)
			{

				var newTip = new TipHandler({
					DOMObject: triggers[m],
					cssClassName: tipCSSClass,
					wzTipArgs: "SHADOW, false, PADDING, 0, BGCOLOR, '', BORDERCOLOR, '#757575', BORDERWIDTH, 0",
					tipContent: TipContent_All[tipCSSClass]
				});

				/* Add new tip object to collection */
				tipObjs.push(newTip);
			}
		}
	}
}

addDOMLoadEvent(toolTipsInit);


function adjustContainerForWideContent(ArgumentsObj)
{
	/* Argument Defaults */
	var NewArguments = {
		contentEls: ['auctionData', 'testAuction'],
		containerEl: 'sub-full'
	};
	/* Replace Default Args with New Args */
	for (var argName in ArgumentsObj)
	{
		NewArguments[argName] = ArgumentsObj[argName];
	}
	/* Setup refs for DOM objects of each type */
	this.contentEls = new Array();
	/* objects that may be too wide for layout */
	this.containerEl = "";
	if (container = document.getElementById(NewArguments.containerEl))
	{/* container element that needs adjusted width */
		this.containerEl = container;
	}

	this.auxiliaryContainerEl = "";
	if (auxContainer = document.getElementById('fullWidthContent'))
	{/* container element that needs adjusted width */
		this.auxiliaryContainerEl = auxContainer;
	}


	/* Other Properties */
	this.contentWidth = 0;
	this.totalPadding = 40;

	this.handleContentEls = function()
	{
		contents = NewArguments.contentEls;

		for (i = 0,l = contents.length; i < l; i++)
		{
			els = getElementsByClassName(contents[i]);
			if (els.length > 0)
			{
				for (m = 0,n = els.length; m < n; m++)
				{
					self.contentEls.push(els[m]);
				}
			}
		}
	}

	this.identifyWidestContent = function()
	{
		/* Loop over all content elements and capture
		 width of the widest one */
		for (i = 0,l = self.contentEls.length; i < l; i++)
		{
			if (self.contentEls[i].offsetWidth > self.contentWidth)
			{
				self.contentWidth = self.contentEls[i].offsetWidth;
			}
		}
	}

	this.setWidthCompare = function()
	{
		self.containerWidth = self.containerEl.offsetWidth;
		self.contentWidthLargest = self.contentWidth + self.totalPadding;
	}

	this.compareContainerAndContent = function()
	{

		/* Setup comparison */
		self.setWidthCompare();

		/* Increase container width for largest content */
		//alert('adjust for wide table: containerWidth='+self.containerWidth+', self.contentWidthLargest='+self.contentWidthLargest);
		//console.log("adjust for wide table: containerWidth='%s', self.contentWidthLargest='%s'",self.containerWidth,self.contentWidthLargest);

		if (self.contentWidthLargest > self.containerWidth)
		{
			//console.log('doing the adjustment');
			self.setContainerWidth();
		}

	}

	this.setContainerWidth = function()
	{
		self.containerEl.style.width = self.contentWidthLargest + 'px';
		//self.auxiliaryContainerEl.style.margin = '0';
		if (self.auxiliaryContainerEl)
		{
			self.auxiliaryContainerEl.style.width = self.contentWidthLargest - self.totalPadding + 'px';
		}
	}

	var self = this;
	//alert('adjustContainerForWideContent() doing setup...');
	self.handleContentEls();
	self.identifyWidestContent();
	self.compareContainerAndContent();
	return true;
}


/* Custom Lytebox Modification, Use an alternate close button */
addDOMLoadEvent(lyteboxModInit);

function lyteboxModInit()
{
	if (controlClose = document.getElementById('controlClose'))
	{
		controlClose.onclick = function()
		{
			window.parent.myLytebox.end();
			return false;
		};
		controlClose.onmouseover = function()
		{
			this.addClassName('hover');
			return false;
		};
		controlClose.onmouseout = function()
		{
			this.removeClassName('hover');
			return false;
		};
	}

	if (ccApply = document.getElementById('customizeColumnsApply'))
	{
		ccApply.onclick = function()
		{
			window.parent.adjustContainerForWideContent();
			window.parent.myLytebox.end();
			return false;
		}
	}

	if (ccCancel = document.getElementById('customizeColumnsCancel'))
	{
		ccCancel.onclick = function()
		{
			window.parent.myLytebox.end();
			return false;
		}
	}
}

/* Insert <br> in grey button text */
addDOMLoadEvent(buttonTextAddLineBreaks_init);

function buttonTextAddLineBreaks_init()
{
	var addBreaks = new buttonTextAddLineBreaks();
}
function buttonTextAddLineBreaks()
{
	//console.log('running buttonTextAddLineBreaks()...');
	this.elementClassName = 'button-grey-inner';
	//this.elementClassName = 'textWrapTest';
	this.buttonCollection = getElementsByClassName(this.elementClassName);
	this.buttonString = "";
	this.buttonStringArray = new Array();
	this.buttonStringArray_NEW = new Array();
	this.buttonLongestWord = "";
	this.buttonWordArray = new Array();
	this.buttonWordArray_ORIG = new Array();
	//console.log('Have buttonCollection as %o',this.buttonCollection);

	this.longestWord = function()
	{
		var longestWord = '';
		for (var i = 0, j = self.buttonWordArray_ORIG.length; i < j; i++)
		{
			if (self.buttonWordArray_ORIG[i].length > longestWord.length)
			{
				longestWord = self.buttonWordArray_ORIG[i];
			}
		}
		return longestWord;
	}

	this.trimStr = function(str)
	{
		return str.replace(/^\s+/, '').replace(/\s+$/, '');
	}

	this.addBreaks = function()
	{
		var buttonLongestWord = '';
		var buttonString = '';
		var buttonString_NEW = '';

		/* handle each element one-by-one */
		for (var i = 0, j = self.buttonCollection.length; i < j; i++)
		{

			/* extract the original string */
			buttonString = self.trimStr(self.buttonCollection[i].innerHTML);
			//console.log('Starting with buttonString "%s"',buttonString);

			/* remove any <br> or <br/> pre-populated in string */
			buttonString = buttonString.replace(/(<br\s*>|<br\s*\/\s*>)/i, '');

			/* remove any line breaks as well */
			buttonString = buttonString.replace(/\r/, ' ');

			//console.log('After processing, buttonString: "%s"',buttonString);
			//alert('After processing, buttonString: "'+buttonString+'"');

			/* split by spaces, reverse the array for retain grammar
			 when stacking using pop() */
			self.buttonWordArray_ORIG = buttonString.split(' ').reverse();

			/* get a working copy of the original array */
			self.buttonWordArray = self.buttonWordArray_ORIG.slice(0);

			/* do we have words between which to add breaks? */
			if (self.buttonWordArray.length > 1)
			{


				self.buttonStringArray_NEW = self.joinMinorWords();
				//console.log("Words restructured in minor groups: %a",self.buttonStringArray_NEW);

				/* new resultant string, by adding breaks */
				buttonString_NEW = self.buttonStringArray_NEW.join('<br/>');
				//console.log("New string for button: '%s'",buttonString_NEW);

				/* write the new string back into the DOM object */
				self.buttonCollection[i].innerHTML = buttonString_NEW;

				/* clear the restructured Words after we're done with them */
				self.buttonStringArray_NEW = [];
			}
		}
	}

	this.joinMinorWords = function()
	{
		var newWords = '';
		var newWordsStack = new Array();

		//while (self.buttonWordArray.length > 1) {
		for (var i = 0, j = self.buttonWordArray.length; i < j; i++)
		{
			newWords = self.extractNextLargestMinorWords();
			if (newWords === '')
			{
				/* nothing left in the self.buttonWordArray stack */
				break;
			}
			//console.log('Next Largest Minor Words: "%s"',newWords);
			newWordsStack.push(newWords);
		}
		return newWordsStack;
	}

	this.extractNextLargestMinorWords = function()
	{
		var word_new = '';
		var longestWord = self.longestWord();
		//console.log("Found longest word in element as '%s'",longestWord);

		var extracted = '';
		var words_prev = '';
		var words_SUMM = '';

		for (var i = 0, j = self.buttonWordArray.length; i < j; i++)
		{

			/* get the next word */
			word_new = self.buttonWordArray.pop();

			/* remember our previous word */
			words_prev = words_SUMM;

			/* add new word to minor words string, adding a space only if necessary */
			words_SUMM = (words_SUMM === '') ? word_new : words_SUMM + ' ' + word_new;

			//console.log('extractNextLargestMinorWords(): running over buttonWordArray; iteration="%s", word_new="%s", words_prev="%s", words_SUMM="%s", longestWord="%s", extracted="%s"',i,word_new,words_prev,words_SUMM,longestWord,extracted);

			/* are minor words bigger than the longest word? */
			if (words_SUMM.length >= longestWord.length)
			{

				/* we want the last minor words then, or the current word if no prev word */
				//extracted = (words_prev === '') ? word_new : words_prev;
				if (words_prev === '')
				{
					extracted = word_new;
					//console.log('extractNextLargestMinorWords(): word_new is the one we want "%s"',extracted);
				}
				else
				{
					extracted = words_prev;
					//console.log('extractNextLargestMinorWords(): words_prev is the one we want "%s"',extracted);

					// put the new word back since we didn't use it */
					self.buttonWordArray.push(word_new);
				}

				// got the next minor word block, we're done */
				break;

				/* new word was the last in the stack, this is as far as we'll get */
			} else if (self.buttonWordArray.length < 1)
			{

				// we want our cumulative word block including newest word */
				extracted = words_SUMM;
				//console.log('words_SUMM is the one we want "%s"',words_SUMM);

				// got the last minor word block, we're done */
				break;

			}
			else
			{
				//console.log('extractNextLargestMinorWords(): got "%s" but it\'s not as long as "%s" so trying to add the next word...',words_SUMM,longestWord);
			}

		}

		return extracted;
	}

	var self = this;
	self.addBreaks();
}

function toggleSelects(direction)
{
	var allSelects = document.getElementsByTagName('select');
	//console.log('have selects as %o',allSelects);
	for (i = 0,l = allSelects.length; i < l; i++)
	{
		var select = allSelects[i];
		if (direction === "hidden")
		{
			select.style.display = 'none';
		}
		else
		{
			select.style.display = '';
		}
	}
}

var isMSIE6 = function()
{
	/*@cc_on
	 @if (@_jscript_version >= 5.7)
	 return false;
	 @elif (@_jscript_version >= 5)
	 return true;
	 @else
	 return false;
	 @end
	 @*/
	return false;
}

function getScrollXY()
{
	var scrOfX = 0, scrOfY = 0;
	if (typeof( window.pageYOffset ) == 'number')
	{
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if (document.body && ( document.body.scrollLeft || document.body.scrollTop ))
	{
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if (document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ))
	{
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return [ scrOfX, scrOfY ];
}

function getWindowSize()
{
	var myWidth = 0, myHeight = 0;
	if (typeof( window.innerWidth ) == 'number')
	{
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if (document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ))
	{
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if (document.body && ( document.body.clientWidth || document.body.clientHeight ))
	{
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	return [ myWidth, myHeight ];
}

function toggleSelects(direction)
{
	var allSelects = document.getElementsByTagName('select');
	//console.log('have selects as %o',allSelects);
	for (i = 0,l = allSelects.length; i < l; i++)
	{
		var select = allSelects[i];
		if (direction === "hidden")
		{
			select.style.display = 'none';
		}
		else
		{
			select.style.display = '';
		}
	}
}

function reinsert_modal()
{
	var modalContent = document.getElementById('modalPage');
	var bodyInner = document.getElementById('bodyInner');
	if (modalContent && bodyInner)
	{
		var modalWrap = modalContent.parentNode;
		var modalWrapContainer = modalWrap.parentNode;
		bodyInner.appendChild(modalWrap.cloneNode(true));
		modalWrapContainer.removeChild(modalWrap);
	}
}

function position_modal()
{
	var staticPad = 150;
	var modal = document.getElementById('modalWrap');
	var scroll = getScrollXY();
	var scrollY = scroll[1];
	var scrollH = document.body.scrollHeight;
	var windowSize = getWindowSize();
	var heightY = windowSize[1];

	var halfHeight = parseInt(heightY / 2);
	var newTop = scrollY + halfHeight - staticPad + 'px';

	if (modal)
	{
		modal.style.top = newTop;
		if (scrollH > heightY)
		{
			toggle_scroll();
		}
	}

}

function toggle_scroll()
{
	var html = document.getElementsByTagName("html").item(0);
	var layoutWrap = document.getElementById('aspnetForm');
	var scrollW = 17;
	var viewPortW = getWindowSize()[0];
	var widthScrollPercent = Math.round((scrollW / viewPortW * 100) * 100) / 100;
	var widthMinusScrollPercent = Math.round(((viewPortW - scrollW) / viewPortW * 100 + 0.1) * 100) / 100;

	if (html.style.overflow === 'hidden')
	{
		html.style.overflow = '';
		layoutWrap.style.width = '100%';
	}
	else
	{
		html.style.overflow = 'hidden';
		layoutWrap.style.width = widthMinusScrollPercent + '%';
	}
}

function toggle_modal(direction)
{
	var ie6 = isMSIE6();
	//if (ie6) {
	var modalContent = document.getElementById('modalPage');
	var modal = document.getElementById('bodyInner');
	if (modalContent)
	{
		var modalWrap = modalContent.parentNode;
		modalWrap.className = 'modalPageWrap';
		/*
		 if (!(modalWrap.parentNode.id === modal.id)) {
		 reinsert_modal();
		 modalContent = document.getElementById('modalPage');
		 modalWrap = modalContent.parentNode;
		 }
		 */
	}

	if (modalWrap.nodeName === 'DIV')
	{
		if (direction === "on")
		{
			modalWrap.style.display = '';
			//toggleSelects('hidden');
			//position_modal();
		} else if (direction === "off")
		{
			modalWrap.style.display = 'none';
			//toggleSelects();
			//position_modal();
		}
	}
	//}
}

function modal_close_button_init()
{
	if (button = document.getElementById('modalCloseButton'))
	{
		button.onclick = function()
		{ toggle_modal('off'); };
	}
}
function adjustContainerForWideContent_init()
{
	DocumentLayoutWidthAdjuster = new adjustContainerForWideContent();
}

/* deferred init--adjustContainerForWideContent needs to wait
 beyond DOM load, to where browser has stable offsetWidth properties */
var custom_old_onload = window.onload;
window.onload = function()
{
	adjustContainerForWideContent_init();
	if (custom_old_onload) custom_old_onload();
};

/* addDOMLoadEvent fails for IE, fires 
 modal_close_button_init()
 and adjustContainerForWideContent_init()
 too early. Handling IE separately, then */
var isMSIE = /*@cc_on!@*/false;
if (isMSIE)
{
	var customIE_old_onload_2 = window.onload;
	window.onload = function()
	{
		modal_close_button_init();
		if (customIE_old_onload_2) customIE_old_onload_2();
	};
}
else
{
	addDOMLoadEvent(modal_close_button_init);
}
