/******************************************
 * The Screen Manager class
 ******************************************/

onepica.ScreenManager = Class.create({
	
	hideMenuVar: true,
	timeOutVar: false,
		
    initialize: function() {
		this.cart = null;
		//this.initCart();
		this.initMessage();
		this.initCallouts();
		//this.initWrappers();
		this.initHomepageCharacters();
		this.fixItems();
		this.setMinPageHeight();
    },
    
    setMinPageHeight: function () {
    	var viewportH = document.viewport.getHeight();
		var wrapper = $$('.wrapper-field').first();
		var page = $$('.page').first();
		var footer = $$('.footer').first();
		
		if(wrapper && viewportH > wrapper.getHeight()) {
		    var toAdd = viewportH - wrapper.getHeight();
		    page.setStyle({ height: (page.getHeight()+toAdd)+'px' });
		}
    },

	initMessage: function () {
		this.message = new onepica.Message('message-container');
	},

	/**
	 * Initializes the cart
	 */
	initCart: function () {
		this.cart = new onepica.Cart();
	},
	
	/**
	* Fix the collection images position
	*/
	
	fixItems: function(){
		
	},
	
	/**
	 * Resizes callouts
	 */
	initCallouts: function () {

		if($('calloutWrapper') != null)
			var selectorElement = '#calloutWrapper';
		else if($('calloutWrapperNoBG') != null)
			var selectorElement = '#calloutWrapperNoBG';
		else
			var selectorElement = null;
			
		underLineElem = $("underLineElem");
		
		if(!underLineElem)
		{
			underLineElem = document.createElement('div');
			underLineElem.id = "underLineElem";
			underLineElem.innerHTML = "";
			$$("body")[0].appendChild(underLineElem);
			underLineElem = $("underLineElem");
			underLineElem.hide();
		}
		
		if($$(selectorElement)!=null)
		{
			var counter = findPos($$(selectorElement)[0])[1];
			var extraPadding = 0;
			
			if(selectorElement == "#calloutWrapperNoBG")
			{
				if($$(".form-search")[0] != undefined)
					$$(".form-search")[0].setStyle({'height':"120px"});
			}

			$$(selectorElement+" .outer").each(function(t) {
				if(selectorElement == "#calloutWrapper")
				{
					t.absolutize();
					t.setStyle({'top':(counter-20)+"px",'z-index':2});
					counter += t.getHeight();
				}
			});
			
			$$(selectorElement+" .outer").each(function(t) {
				if(t.select("a").size() > 0 )
				{
					if(t.id!="calloutSocial")
					{						
						t.select("a").each(function(z)
						{
							if(!z.hasClassName("skip"))
							{
								z.observe('mouseover', function(){
									z.addClassName("underLine");
									Cufon.refresh(); 
							});
							
							z.observe('mouseout', function() {
								z.removeClassName("underLine"); 
								Cufon.refresh();
							});	
							}		
						});
					}
					else
					{
						t.select("a").each(function(z)
						{
							if(!z.hasClassName("skip"))
							{
								z.observe('mouseover', function(){
									var width = 30;
									underLineElem.show().setStyle({	"left":(findPos(z)[0]+width)+"px",
																	"top":(findPos(z)[1]+z.getHeight())+"px",
																	"width":(z.getWidth()-width)+"px"});
							});
							
							z.observe('mouseout', function() {
								underLineElem.hide();
							});	
							}
						});
					}
					
				}
					
			});
								
			Cufon.refresh();
			
			var height = counter-findPos($$(selectorElement)[0])[1]-100-extraPadding;
			
			if($$(selectorElement+' .outer')[0].readAttribute('id')=="calloutSocial")
				extraPadding = 51;
				
			if(height > 0)
				$$(selectorElement)[0].setStyle({'margin-top':extraPadding+'px',height:height+"px"});
		
		}	
	},
	
	/**
	 * Resizes all the cloud wrappers.
	 */
	initWrappers: function () {

		$$(".cloudWrapper,.cloudWrapperBlue").each(function(c)
		{
			if(!c.hasClassName("noExpand"))
			{
				var diff = 0;
				var cloudHeight = 150;
				var height  = c.getHeight();

				if(c.hasClassName("smallCloud"))
					cloudHeight = 45;			

				if(height < cloudHeight)
					diff =cloudHeight - height;
				else if(height%cloudHeight!= 0)
					diff = height%cloudHeight;

				if(diff != 0)
				{
					if(('.cloudWrapperTop')!=null &&('.cloudWrapperBottom')!=null)
					{
						c.down(".cloudWrapperTop").insert({after:new Element('div', { 'class': 'cloudSpacer', style: 'height:'+(diff/2)+'px;width:'+c.getWidth()+"px;" })});
						c.down(".cloudWrapperBottom").insert({before:new Element('div', { 'class': 'cloudSpacer', style: 'height:'+(diff/2)+'px;width:'+c.getWidth()+"px;" })});	
					}
				}
			}
		});			
	},
	
	/**
	 * Adds hover listener to the links in the Shop by Character section of the homepage
	 */
	initHomepageCharacters: function() {
		if($$(".home-content").length == 0) return;

		$$(".home-content .main-indent ul div").each(function(link)
		{
			if(link.readAttribute("hoverimage"))
			{
				link.observe("mouseover", this.showHomepageCharacter.bindAsEventListener(this, link.readAttribute("hoverimage"),link));
				link.observe("mouseout", this.showHomepageCharacter.bindAsEventListener(this, false,link));
			}
		}, this);
	},

	showHomepageCharacter: function(evt, hoverSrc,e) {
		imageElm = $('hoverimage');
		arrowElem = $("arrowElem");
		
		if(!arrowElem)
		{
			arrowElem = document.createElement('div');
			arrowElem.id = "arrowElem";
			arrowElem.innerHTML = " > ";
			$$("body")[0].appendChild(arrowElem);
			arrowElem.hide();
		}
		
		if(!imageElm) {
			imageElm = document.createElement('img');
			imageElm.id = "hoverimage";
			homeCharacterBox = $$(".home-content .main-indent");
			homeCharacterBox = homeCharacterBox[0];
			homeCharacterBox.appendChild(imageElm);
		}
		if(hoverSrc == false) {
			imageElm.style.display ="none";
			homeCharacterBox.removeClassName("main-indent-blank");
			arrowElem.hide();
				
		} else {
			arrowElem.show();
			arrowElem.setStyle({"left":(findPos(e)[0]-10)+"px","top":(findPos(e)[1]+2)+"px"});
			imageElm.src = hoverSrc;
			homeCharacterBox.addClassName("main-indent-blank")
			imageElm.style.display = "block";
		}
	},

	/**
	 * Returns the cart object.
	 */
	getCart: function () {
		return this.cart;
	},
	
	/**
	 * Returns the message display object.
	 */
	getMessage: function () {
		return this.message;
	},

	/**
	 * Logs an event described by the input parameters to Google Analytics.
	 *
	 * String   category The general event category (e.g. "Videos").
	 * String   actn The action for the event (e.g. "Play").
	 * String   opt_label An optional descriptor for the event.
	 * Int      opt_value An optional value to be aggregated with
	 */
	trackEvent: function (category, action, label, value) {
		if (typeof(pageTracker) != 'undefined') {
			try {
				var success = pageTracker._trackEvent(category, action, label, value);
				/*
				if (success)
					console.log("Event Logged: " + category + " - " + action + " / " + label);
				else
					console.log("Event logging FAILED");
				*/
			}
			catch (e) {}
		}
	},

	/**
	 * Tracks a page view to Google Analytics.
	 *
	 * String   opt_pageURL Optional parameter to indicate what page URL to track metrics under.
	 *			When using this option, use a beginning slash (/) to indicate the page URL.
	 */
	trackPageview: function (pageUrl) {
		if (typeof pageTracker != 'undefined') {
			var host = window.location.protocol + "//" + window.location.host;
			if (pageUrl && pageUrl.length > host.length && pageUrl.substr(0, host.length) == host) {
				pageUrl = pageUrl.substr(host.length+1);
			}
			try {
				pageTracker._trackPageview(pageUrl);
				//console.log("Page tracked: " + pageUrl);
			}
			catch (e) {}
		}
	}
});
