/*

	Class: VIEWZI.shell

	The Viewzi shell class is for client UI rendering and layout,
	plus some helper functions and whatnot.

*/
	VIEWZI.shell.mixready			= 0;
	VIEWZI.shell.viewmixstate		= 0;
	VIEWZI.shell.fluid				= false;
	VIEWZI.shell.staticHeight		= false;
	VIEWZI.shell.mixWidth			= 0;
	VIEWZI.shell.viewtype			= '';
	VIEWZI.shell.pageHasLoaded		= false;
	VIEWZI.shell.favs_timer			= null;
	VIEWZI.shell.hideSwfSearch		= false;
	VIEWZI.shell.resizeEvent		= new YAHOO.util.CustomEvent('resize', VIEWZI.shell);
	VIEWZI.shell.mixToggleEvent		= new YAHOO.util.CustomEvent('mixToggle', VIEWZI.shell);

/*

	Extending the YUI library.

*/

	if (!YAHOO.util.Dom.getAncestorById)
	{
		YAHOO.util.Dom.getAncestorById = function(node, id)
		{
			return YAHOO.util.Dom.getAncestorBy(node, function(e)
			{
				if (e.id === id) { return true; }
				return false;
			});
		};
	}
	
/*

	Everything that needs to happen before we start doing stuff

*/
	VIEWZI.shell.init = function()
	{
		this.viewInput = VIEWZI.util.d("viewziViewinput");
	};

/*

	everything appears to be loaded, lets kick out the jams

*/

	VIEWZI.shell.initInterface = function()
	{
		VIEWZI.shell.createMix();
	};

/*

	the mix is loaded, continue...

*/

	VIEWZI.shell.swfmixinit = function()
	{
		VIEWZI.trace.fire({module:"SHELL",msg:"ViewMix is scriptable. "+VIEWZI.util.getTimer()+"ms"});
		VIEWZI.shell.mixready	= 1;
		if (VIEWZI.initterm !== "" && VIEWZI.initterm) {
			VIEWZI.searchterm = VIEWZI.initterm;
			VIEWZI.initterm = null;
			VIEWZI.shell.updateMix();
		}
	};

/*

	create the viewmix swf in its divs

*/

	VIEWZI.shell.createMix = function()
	{
		if (VIEWZI.initterm !== "" && VIEWZI.initterm) {
			VIEWZI.searchterm = VIEWZI.initterm;
			VIEWZI.initterm = null;
		}

		var favState = (VIEWZI.favState !== "" && VIEWZI.favState !== undefined && VIEWZI.favState !== "false" && VIEWZI.favState !== false && VIEWZI.favState !== 0) ? "viewmixFavState=1&" : "";

		if (!VIEWZI.shell.mixready) {
			VIEWZI.util.d("viewzimixcontent").innerHTML = AC_FL_RunContent(
				"codebase","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0",
				"src", VIEWZI.assetpath+"swf/viewmix_as3_102",
				"movie", VIEWZI.assetpath+"swf/viewmix_as3_102",
				"width", "100%",
				"height", "38",
				"name", "MIX",
				"id", "MIX",
				"quality", "high",
				"menu", "false",
				"allowScriptAccess", "always",
				"flashvars", favState+"gatewayserver="+VIEWZI.AMFSERVER+"&gatewaypath="+VIEWZI.AMFPATH+"&gatewayloc="+VIEWZI.AMFLOC+"&p="+escape(VIEWZI.searchterm)+"&datak="+VIEWZI.datak+"&clientcontext="+VIEWZI.clientcontext,
				"wmode", "opaque"
			);
			VIEWZI.shell.doResize();
		}
	};

/*

	render a mini mix on screen from the data pull

*/

	VIEWZI.shell.createMiniMix = function(mixObj)
	{
		if (VIEWZI.initterm !== "" && VIEWZI.initterm) {
			VIEWZI.searchterm = VIEWZI.initterm;
		}
		
		if (!VIEWZI.shell.mixready) {
			VIEWZI.util.d("viewziMinimix").innerHTML = AC_FL_RunContent(
				"codebase","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0",
				"src", VIEWZI.assetpath + "/swf/mix_proto3",
				"movie", VIEWZI.assetpath + "/swf/mix_proto3",
				"width", "100%",
				"height", "80",
				"name", "MIX",
				"id", "MIX",
				"quality", "high",
				"bgcolor","#39434a",
				"menu", "false",
				"allowScriptAccess", "always",
				"flashvars", "ITEMOFFSET=10&mixstate=VFP&HIDESEARCH=1&VIEWID=" + VIEWZI.initview.id + "&gatewayserver="+VIEWZI.AMFSERVER+"&gatewaypath="+VIEWZI.AMFPATH+"&gatewayloc="+VIEWZI.AMFLOC+"&p="+escape(VIEWZI.searchterm)+"&datak="+VIEWZI.datak+"&clientcontext="+VIEWZI.clientcontext,
				"wmode", "opaque"
			);
		}
	};

	/*

		render a mini mix badge

	*/

		VIEWZI.shell.createBadge = function(mixObj)
		{
			if (VIEWZI.initterm !== "" && VIEWZI.initterm) {
				VIEWZI.searchterm = VIEWZI.initterm;
			}

			if (!VIEWZI.shell.mixready) {
				VIEWZI.util.d("viewzi-active-view").innerHTML = AC_FL_RunContent(
					"codebase","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0",
					"src", VIEWZI.assetpath + "/swf/mix_proto3",
					"movie", VIEWZI.assetpath + "/swf/mix_proto3",
					"width", "93",
					"height", "60",
					"name", "BADGE",
					"id", "BADGE",
					"quality", "high",
					"bgcolor","#2d353a",
					"menu", "false",
					"allowScriptAccess", "always",
					"flashvars", "BG=0x2d353a&mixstate=BADGE&HIDESEARCH=1&VIEWID=" + VIEWZI.initview.id + "&gatewayserver="+VIEWZI.AMFSERVER+"&gatewaypath="+VIEWZI.AMFPATH+"&gatewayloc="+VIEWZI.AMFLOC+"&p="+escape(VIEWZI.searchterm)+"&datak="+VIEWZI.datak+"&clientcontext="+VIEWZI.clientcontext,
					"wmode", "opaque"
				);
			}
		};

/*

	awesome, theres 2 of these functions, and no on documented why. good job.

*/
	
	VIEWZI.shell.createMiniMixNew = function(mixObj)
	{		
		if (VIEWZI.initterm !== "" && VIEWZI.initterm) {
			VIEWZI.searchterm = VIEWZI.initterm;
		}
		
		if (!VIEWZI.shell.mixready) {
			VIEWZI.util.d("viewziMinimix").innerHTML = AC_FL_RunContent(
				"codebase","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0",
				"src", VIEWZI.assetpath + "/swf/mix_proto3",
				"movie", VIEWZI.assetpath + "/swf/mix_proto3",
				"width", "100%",
				"height", "85",
				"name", "MIX",
				"id", "MIX",
				"quality", "high",
				"menu", "false",
				"allowScriptAccess", "always",
				"flashvars", "ITEMOFFSET=10&HIDESEARCH=1&mixstate=VFP&VIEWID=" + VIEWZI.initview.id + "&gatewayserver="+VIEWZI.AMFSERVER+"&gatewaypath="+VIEWZI.AMFPATH+"&gatewayloc="+VIEWZI.AMFLOC+"&p="+escape(VIEWZI.searchterm)+"&datak="+VIEWZI.datak+"&clientcontext="+VIEWZI.clientcontext,
				"wmode", "opaque"
			);
		}
	};

/*

	update the view content for the search term

*/

	VIEWZI.shell.createView = function(file, format, title, id, view_system_name, author, override)
	{
		if (VIEWZI.shell.stage == "mix" || !override){
			this.viewInput.value = view_system_name;
			VIEWZI.util.d("viewziSearchForm").action = "view.php";
			VIEWZI.shell.flipurl();
			return;
		}

		VIEWZI.view.viewid = id;

		if (VIEWZI.shell.stage == "view") {
			
			this.viewInput.value = view_system_name;
		}

		VIEWZI.datapull.init();
		VIEWZI.trace.fire({module:"SHELL",msg:"Loading View : "+title});
		if (!author) author = "unknown";

		VIEWZI.shell.viewtype = format;

		if (format == "flash") {
			VIEWZI.shell.fluid = true;
			var fVars	= "gatewayserver="+VIEWZI.AMFSERVER+"&gatewaypath="+VIEWZI.AMFPATH+"&gatewayloc="+VIEWZI.AMFLOC+"&p="+escape(VIEWZI.searchterm)+"&VIEWID="+id+"&datak="+VIEWZI.datak+"&clientcontext="+VIEWZI.clientcontext;
			var swf		= VIEWZI.assetpath+file.substr(0, file.length-4);
			var swfCode	= AC_FL_RunContent(
				"codebase","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0",
				"src", swf,
				"movie", swf,
				"width", "100%",
				"height", "100%",
				"bgcolor", "#000000",
				"name", "VIEW",
				"id", "VIEW",
				"quality", "high",
				"menu", "false",
				"allowScriptAccess", "always",
				"flashvars", fVars,
				"wmode", "opaque");
			VIEWZI.util.d("viewziviewcontent").innerHTML = swfCode;
		} else if (format=="dhtml") {
			VIEWZI.shell.fluid = false;
		}

		//VIEWZI.util.d("viewziViewnamelabel").innerHTML = title;
		if (VIEWZI.clientcontext === 'BROWSER'){
			var m = VIEWZI.util.d("viewziViewmeta");
			if(m){
				if(this.hideAuthor){
					m.innerHTML = title;
				} else {
					m.innerHTML = title + " <em>by</em> "+author;
				}
			}
		}
		VIEWZI.shell.doResize();
	};

/*
	Function: VIEWZI.shell.setViewHeight

		Set the view to be a given, static height versus a fluid height.

		Resizing the view a value lower than the set static height value will cause
		the view to behave as fluid again, until it is resized up to or beyond the
		static value again.

	Parameters:

		heightVal 	- the static height you wish to set the view at

	Returns:

		Null
*/

	VIEWZI.shell.setViewHeight = function(heightVal)
	{
		VIEWZI.shell.fluid			= false;
		VIEWZI.shell.staticHeight	= heightVal;
		YAHOO.util.Dom.setStyle(['VIEW'], 'height', heightVal+"px");
		VIEWZI.shell.doResize();
	};

/*
	Function: VIEWZI.shell.toggleMix

		Toggle the minimix drawer either open or closed based upon its current state.

	Returns:

		Integer		- the viewmix state.
*/

	VIEWZI.shell.toggleMix = function()
	{
		var animrate				= .4;
		var animease				= YAHOO.util.Easing.easeOutStrong;
		VIEWZI.shell.viewmixstate	= !VIEWZI.shell.viewmixstate;

		VIEWZI.messaging.removeAutomsg();
		if (!VIEWZI.shell.viewmixstate) {
			VIEWZI.util.d('viewziMixtoggle').innerHTML ='<img src="'+VIEWZI.assetpath+'images/minimixGrabrOvr-in.gif" alt="Toggle View Mix" id="viewziMixBtn" class="viewziMixToggleImg_open" />';
			viewmixanim = new YAHOO.util.Anim('viewziMinimix', {"margin-top": {to: "-80"}}, animrate-(animrate*.1), animease);
			viewanim	= new YAHOO.util.Anim('VIEW', {"height": {to: VIEWZI.view.getViewportHeight()}}, animrate, animease);
		} else {
			VIEWZI.util.d('viewziMixtoggle').innerHTML='<img src="'+VIEWZI.assetpath+'images/minimixGrabr-in.gif" alt="Toggle View Mix" id="viewziMixBtn" class="viewziMixToggleImg_close" />';
			viewmixanim	= new YAHOO.util.Anim('viewziMinimix', {"margin-top": {to: "0"}}, animrate, animease);
			viewanim	= new YAHOO.util.Anim('VIEW', {"height": {to: VIEWZI.view.getViewportHeight()}}, animrate-(animrate*.1), animease);
		}
		if (VIEWZI.shell.fluid) {
			viewanim.animate();
		} else {
			if (VIEWZI.view.getViewportHeight() >= VIEWZI.shell.staticHeight) {
				viewanim.animate();
			}
		}
		viewmixanim.animate();
		VIEWZI.viewprefs.setViewPref("viewmixstate", (VIEWZI.shell.viewmixstate?"1":"0"));
		VIEWZI.shell.mixToggleEvent.fire();
		return VIEWZI.shell.viewmixstate;
	};

/*

	mouseover for open/close minimix buttons

*/

	VIEWZI.shell.highlightMixButton = function(stateVal)
	{
		YAHOO.util.Dom.setStyle(['viewziMixBtn'], 'opacity', (stateVal) ? .9999 : .5);
	};

/*

	flip to a url based upon search param

*/

	VIEWZI.shell.flipurl = function(view)
	{
		VIEWZI.searchterm = (VIEWZI.util.d('viewziViewsearchinput').value !== "") ? encodeURIComponent(VIEWZI.util.d('viewziViewsearchinput').value.replace(/\\/g, ' ')) : "viewzi";
		if (view && view!="") {
			VIEWZI.util.d("viewziViewinput").value=view;
		}
		if (VIEWZI.util.d("viewziViewinput").value !== "") {
			document.location = VIEWZI.searchurl +"/" + VIEWZI.util.d("viewziViewinput").value +"/" + VIEWZI.searchterm;
		} else if(VIEWZI.defaultview && VIEWZI.defaultview.length > 0){
			document.location = VIEWZI.searchurl + '/' + VIEWZI.defaultview + '/' + VIEWZI.searchterm;
		} else {
			document.location = VIEWZI.searchurl +"/power_grid/" + VIEWZI.searchterm;
		}
		return false;
	};

/*

	manually set the search term, this if for new swfs with the search input embedded in the swf
	
*/

	VIEWZI.shell.setSearchTerm = function(term)
	{
		VIEWZI.searchterm = (VIEWZI.util.d('viewziViewsearchinput').value !== "") ? encodeURIComponent(VIEWZI.util.d('viewziViewsearchinput').value.replace(/#|\\/g, ' ').replace(/\//g, '&#47;').replace(/^\s\s*/, '').replace(/\s\s*$/, '').replace(/\s\s+/g, ' ')) : "viewzi";
		if (view && view!="") {
			VIEWZI.util.d("viewziViewinput").value=view;
		}
		if (VIEWZI.util.d("viewziViewinput").value !== "") {
			document.location = VIEWZI.searchurl +"/" + VIEWZI.util.d("viewziViewinput").value +"/" + VIEWZI.searchterm;
		} else {
			document.location = VIEWZI.searchurl +"/" + VIEWZI.searchterm;
		}
		return false;
	};

/*

	manually set the search term, this if for new swfs with the search input embedded in the swf
	
*/

	VIEWZI.shell.setSearchTerm = function(term)
	{
		VIEWZI.searchterm =  term;
		VIEWZI.util.d('viewziViewsearchinput').value = term;
		return true;
	};

/*

	resize all the stuff to pixels heights depending on stage

*/

	VIEWZI.shell.doResize = function()
	{
		if (!VIEWZI.shell.pageHasLoaded) { return; }

		var wWidth 			= 	YAHOO.util.Dom.getViewportWidth();
		var wHeight			= 	YAHOO.util.Dom.getViewportHeight();

		switch(VIEWZI.shell.stage)
		{
			case "init":
				break;
				

			case "mix":
				if (VIEWZI.util.d("MIX") !== null) {
					var headerH	= YAHOO.util.Dom.getRegion('viewzi-header').bottom-YAHOO.util.Dom.getRegion('viewzi-header').top || 0;
					var footerH = YAHOO.util.Dom.getRegion('viewziFooter').bottom-YAHOO.util.Dom.getRegion('viewziFooter').top || 0;
					var adjustment = (headerH + footerH > 0 ? 15 : 0);
					

					if (VIEWZI.clientcontext === 'BROWSER')
					{
						YAHOO.util.Dom.setStyle('MIX', 'height', Math.floor(wHeight - (footerH) - (headerH) - adjustment) + 'px');
					} else if (VIEWZI.clientcontext === 'MEDIALIFE') {
						YAHOO.util.Dom.setStyle('MIX', 'height', Math.floor(wHeight - 16) + 'px');
					}
				}
				if (VIEWZI.shell.mixready) {
					VIEWZI.util.d("MIX").onResize();
				}
				break;
				
			case "view":
				var v = VIEWZI.util.d("VIEW");
				
				if (v && VIEWZI.shell.fluid) {
					YAHOO.util.Dom.setStyle(v, 'height', VIEWZI.view.getViewportHeight() +"px");
				}

				if (v && !VIEWZI.shell.fluid) {
					if (VIEWZI.shell.staticHeight && VIEWZI.view.getViewportHeight() <= VIEWZI.shell.staticHeight) {
						 YAHOO.util.Dom.setStyle(v, 'height', VIEWZI.shell.staticHeight+"px");
					} else {
						YAHOO.util.Dom.setStyle(v, 'height', VIEWZI.view.getViewportHeight()+"px");
					}
				}

				if (VIEWZI.util.d("viewziAutoMsg")) {
					var targetX	= YAHOO.util.Dom.getViewportWidth()/2 - parseInt(YAHOO.util.Dom.getStyle(['viewziAutoMsg'], 'width'),10)/2;
					YAHOO.util.Dom.setStyle(['viewziAutoMsg'], 'left', targetX+"px");
				}

				if (VIEWZI.util.d("viewziDialogMsg")) {
					var targetX	= YAHOO.util.Dom.getViewportWidth()/2 - parseInt(YAHOO.util.Dom.getStyle(['viewziDialogMsg'], 'width'), 10)/2;
					var targetY	= YAHOO.util.Dom.getViewportHeight()/2 - parseInt(YAHOO.util.Dom.getStyle(['viewziDialogMsg'], 'height'), 10)/2;
					YAHOO.util.Dom.setStyle(['viewziDialogMsg'], 'left', targetX+"px");
					YAHOO.util.Dom.setStyle(['viewziDialogMsg'], 'top', targetY+"px");
				}

				if (VIEWZI.util.d("viewziErrorMsg")) {
					var targetX	= YAHOO.util.Dom.getViewportWidth()/2 - parseInt(YAHOO.util.Dom.getStyle(['viewziErrorMsg'], 'width'), 10)/2;
					var targetY	= YAHOO.util.Dom.getViewportHeight()/2 - parseInt(YAHOO.util.Dom.getStyle(['viewziErrorMsg'], 'height'), 10)/2;
					YAHOO.util.Dom.setStyle(['viewziErrorMsg'], 'left', targetX+"px");
					YAHOO.util.Dom.setStyle(['viewziErrorMsg'], 'top', targetY+"px");
				}

				if (typeof VIEWZI.view.onResize == "function") VIEWZI.view.onResize(VIEWZI.view.getWidth(), VIEWZI.view.getHeight());

				var stageW			= YAHOO.util.Dom.getViewportWidth();
				YAHOO.util.Dom.setStyle('viewziMiniview', 'margin-left', Math.floor(stageW/2 - VIEWZI.shell.mixWidth/2)+"px");

				break;
		}
		VIEWZI.shell.resizeEvent.fire();
	};


/*

	Show view info menu

*/

	YAHOO.util.Event.onDOMReady(function(){
	
	/*user info*/
	YAHOO.util.Event.addListener('viewzi-name', 'mouseover', function(e)
	{
		YAHOO.util.Dom.setStyle('viewzi-name-menu', 'display', 'block');

	});
	
	YAHOO.util.Event.addListener('viewzi-name', 'mouseout', function(e)
	{
		YAHOO.util.Dom.setStyle('viewzi-name-menu', 'display', 'none');
	});
	
	YAHOO.util.Event.addListener('viewzi-name-menu', 'mouseover', function(e)
	{
		YAHOO.util.Dom.setStyle('viewzi-name-menu', 'display', 'block');
		YAHOO.util.Dom.addClass('viewzi-name', 'modal_open');
	});
	
	YAHOO.util.Event.addListener('viewzi-name-menu', 'mouseout', function(e)
	{
		YAHOO.util.Dom.setStyle('viewzi-name-menu', 'display', 'none');
		YAHOO.util.Dom.removeClass('viewzi-name', 'modal_open');
	});
	
	/*dim logo in search input on focus*/
	YAHOO.util.Event.addListener('viewziViewsearchinput', 'focus', function(e)
	{
		YAHOO.util.Dom.addClass('viewziViewsearchinput','search-input-clicked');
	});
	
	YAHOO.util.Event.addListener('viewziViewsearchinput', 'blur', function(e)
	{
		YAHOO.util.Dom.removeClass('viewziViewsearchinput','search-input-clicked');
	});
	
});

/*

	badge was clicked

*/

	VIEWZI.shell.onBadgeClick = function(){
		VIEWZI.feedback.showInfoModal();
	};
	
	
/*

	Close favs widget.

*/

	VIEWZI.shell.closeFavs = function()
	{
		clearTimeout(VIEWZI.shell.favs_timer);

		/* Hide favs widget. */
		YAHOO.util.Dom.setStyle('favs_widget', 'display', 'none');
	};

/*

	Time favs widget.

*/

	VIEWZI.shell.timeFavs = function()
	{
		VIEWZI.shell.favs_timer = setTimeout(VIEWZI.shell.closeFavs, 2000);
	};

/*

	Open favs widget.

*/

	VIEWZI.shell.openFavs = function()
	{
		clearTimeout(VIEWZI.shell.favs_timer);

		if (YAHOO.util.Dom.getStyle('favs_widget', 'display') === 'none')
		{
			var new_x = YAHOO.util.Dom.getX('favs_toggle_arrow') - 218;
			var new_y = YAHOO.util.Dom.getY('favs_toggle_arrow') + 43;

			YAHOO.util.Dom.setStyle('favs_widget', 'display', 'block');

			YAHOO.util.Dom.setX('favs_widget', new_x);
			YAHOO.util.Dom.setY('favs_widget', new_y);

			VIEWZI.shell.timeFavs();
		}
		else
		{
			VIEWZI.shell.closeFavs();
		}
	};

/*

	Favs widget.

*/

	VIEWZI.shell.favsTimerStop = function()
	{
		clearTimeout(VIEWZI.shell.favs_timer);
	};

/*

	more descriptive commenting would help would be rad

*/

	VIEWZI.shell.favsTimerStart = function()
	{
		VIEWZI.shell.timeFavs();
	};

/*

	Kill dynamic layers.

*/

	VIEWZI.shell.killDynamicLayers = function(e)
	{
		/* Origin of the click. */
		var origin = YAHOO.util.Event.getTarget(e);

		/* If rating widget is visible, hide it! */
		if (YAHOO.util.Dom.getStyle('rating_widget', 'display') === 'block')
		{
			/* Is its ancestor the rating widget? */
			var ancestor_rating = YAHOO.util.Dom.getAncestorById(origin, 'rating_widget');

			/* If not the trigger or element itself, close it. */
			if (origin.id !== 'shell_button_rate' && !ancestor_rating)
			{
				VIEWZI.feedback.closeWidget();
				clearTimeout(VIEWZI.feedback.widget_timer);
			}
		}

		/* If favs widget is visible, hide it! */
		if (YAHOO.util.Dom.getStyle('favs_widget', 'display') === 'block')
		{
			/* Is its ancestor the rating widget? */
			var ancestor_favs = YAHOO.util.Dom.getAncestorById(origin, 'favs_widget');

			/* If not the trigger or element itself, close it. */
			if (origin.id !== 'favs_toggle_arrow' && !ancestor_favs)
			{
				YAHOO.util.Dom.setStyle('favs_widget', 'display', 'none');
			}
		}
	};

/*

	show or hide a menu div depending on passed state param

*/
	VIEWZI.shell.toggleMenu = function(menuID, state)
	{
		YAHOO.util.Dom.setStyle(menuID, 'left', (state) ? 'auto' : '-99999px');
	};

/*

	escape key handler function

*/

	VIEWZI.shell.escapeKeyHandler = function()
	{
		/* If rating favs is visible, hide it! */
		if (YAHOO.util.Dom.getStyle('favs_widget', 'display') === 'block')
		{
			VIEWZI.shell.closeFavs();
		}

		/* If rating widget is visible, hide it! */
		if (YAHOO.util.Dom.getStyle('rating_widget', 'display') === 'block')
		{
			VIEWZI.feedback.closeWidget();
		}

		/* If modal window is visible. */
		if (YAHOO.util.Dom.getStyle('modal_window', 'display') === 'block')
		{
			VIEWZI.feedback.noContent();
			VIEWZI.feedback.clearTabs();
			VIEWZI.feedback.closeModal();
		}
	};

/*

	the doc was clicked, lets do some stuff

*/

	VIEWZI.shell.docClickHandler = function(e)
	{
		/* Origin of the click. */
		var origin = YAHOO.util.Event.getTarget(e);

		/* If rating widget is visible, hide it! */
		if (YAHOO.util.Dom.getStyle('rating_widget', 'display') === 'block')
		{
			/* Is its ancestor the rating widget? */
			var ancestor_rating = YAHOO.util.Dom.getAncestorById(origin, 'rating_widget');

			/* If not the trigger or element itself, close it. */
			if (origin.id !== 'shell_button_rate' && !ancestor_rating)
			{
				VIEWZI.feedback.closeWidget();
				clearTimeout(VIEWZI.feedback.widget_timer);
			}
		}

		/* If favs widget is visible, hide it! */
		if (YAHOO.util.Dom.getStyle('favs_widget', 'display') === 'block')
		{
			/* Is its ancestor the rating widget? */
			var ancestor_favs = YAHOO.util.Dom.getAncestorById(origin, 'favs_widget');

			/* If not the trigger or element itself, close it. */
			if (origin.id !== 'favs_toggle_arrow' && !ancestor_favs)
			{
				YAHOO.util.Dom.setStyle('favs_widget', 'display', 'none');
			}
		}
	};
	
/*
	Return a VFP parameter
*/
	VIEWZI.shell.getVfpParam = function(paramName)
	{
		if(VIEWZI.VFP_PARAMS && typeof VIEWZI.VFP_PARAMS[paramName] != 'undefined'){
			return VIEWZI.VFP_PARAMS[paramName];
		}
		return null;
	};

/*
	If <body> is clicked, kill dynamic layers.

*/

	YAHOO.util.Event.onDOMReady(function()
	{
		var esc_key = new YAHOO.util.KeyListener(document, {keys: 27}, VIEWZI.shell.escapeKeyHandler);
		esc_key.enable();
		YAHOO.util.Event.on(document, 'click', VIEWZI.shell.docClickHandler);
	});

/*
	Close the temporary view mix feedback bar

*/

	VIEWZI.shell.closeViewmixFeedbackBar = function ()
	{

		var animrate				= .2;
		var animease				= YAHOO.util.Easing.easeOutStrong;
		VIEWZI.headerHeight -= 34;
		var d = document.getElementById('viewmix-feedback');
		d.parentNode.removeChild(d);
		VIEWZI.shell.doResize();
		VIEWZI.shell.createCookie('hideFeedbackBar',true,14);
	};

/*

	sloppy code ... leave comments for visual seperation and consistency

*/

	VIEWZI.shell.handleViewziFeedbackHappened = function()
	{
		var span = document.getElementById('viewmix-feedback');
		span.innerHTML = '<div style="text-align:center;"><b>Thank You!</b></div>';
		setTimeout(function(){VIEWZI.shell.closeViewmixFeedbackBar();}, 5000);
	};

/*

	sloppy code ... leave comments for visual seperation and consistency

*/

	VIEWZI.shell.createCookie = function(name,value,days)
	{
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	};

/*

	sloppy code ... leave comments for visual seperation and consistency

*/

	VIEWZI.shell.readCookie = function(name)
	{
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	};
