/**
* HS util contains all utility functions for Harlistas community site.
*
**/
HS = {};

//global variables
var navView;
var navId;
var navType;
var navReset = false;
var storedReq = new Array();
var overlayOpen;
var vidOverlay = false;
var landingVideoEl;
var currentView = "landing";


//used to control share overlay close button
//switching view to gallery view in IE6
var hideSocialOverlay = "false";
var hideOverlayFirstRun = "true";


//run on load

YAHOO.util.Event.onDOMReady(function(){
	//attach click listener to view suggestions in submit div
	YAHOO.util.Event.addListener('viewGuidelines','click',function(){
		var bodyContent = YAHOO.util.Dom.get('suggestionContent').innerHTML;
		HD.util.Common.showOverlay(bodyContent,'Suggestions and Guidelines','640px','480px');			 	
		HD.util.Analytics.track("/Experience/Harlistas/Suggestions+and+Guidelines");					
		
		// pause the flash video
		if(landingVideoEl){
			landingVideoEl.sendEvent("PLAY","false");			
		}		
		
		//attach click listener to print link in suggestions overlay. 
		//This should be in the callback for the window or it won't attach the event!
		YAHOO.util.Event.addListener('printGuidelines','click',function(){
			window.print();
		});
		
		//changes style for FFX2
		if(YAHOO.env.ua.gecko < 1.9){
			var wrapper = YAHOO.util.Dom.getElementsByClassName('suggestionsContentWrapper','div','suggestionContent');
			YAHOO.util.Dom.setStyle(wrapper,'overflow-x','auto');
		}
			
		return false;		
	});
	
		
	
	//add required class to body element
	var bodyEl = document.getElementsByTagName('body');
	YAHOO.util.Dom.addClass(bodyEl,'yui-skin-sam');
	
	//attach click event to logo
	YAHOO.util.Event.addListener('landingLink','click',function(){
		window.location.href = '/wcm/Content/Pages/harlistas/harlistas.jsp?locale=en_US';
	});
	
	
	
});

function playerReady(obj){
	var flashObj = document.getElementById(obj['id']);		
	HS.util.vidPlayerReady(flashObj);
}

HS.util = {
		
		/**
		 * initGallery sets page up for the gallery view
		 */
		viewGallery : function(){
			
			detailView = false;
			currentView = "gallery";
	
			YAHOO.util.Dom.setStyle('hdNavigation','display','none');
			YAHOO.util.Dom.setStyle('designDetail','display','none');
			
			//add single classes for gallery view
			YAHOO.util.Dom.addClass('hdCanvas', "hdGalleryBackground");
			
			//add classes for gallery and remove detail classes
			YAHOO.util.Dom.replaceClass('ugcHeader','headerDetail','headerGallery');
			YAHOO.util.Dom.replaceClass('ugcContainer','containerDetail','containerGallery');
			YAHOO.util.Dom.replaceClass('ugcContent','contentDetail','contentGallery');
			YAHOO.util.Dom.replaceClass('ugcFooter','footerDetail','footerGallery');
			
			//move submit div to the right area for the appropriate section of the site by changing class
			YAHOO.util.Dom.replaceClass('submitDiv','submitDetail','submitGallery');
		
			// reposition the STAF widget on the story gallery
			YAHOO.util.Dom.setStyle("sendFriendDiv", "width", "126px");
			YAHOO.util.Dom.setStyle("sendFriendDiv", "top", "58px");
			YAHOO.util.Dom.setStyle("sendFriendDiv", "left", "171px");
			// if IE 6
			if(YAHOO.env.ua.ie == 6){
				YAHOO.util.Dom.setStyle("sendFriendDiv", "top", "-68px");
				YAHOO.util.Dom.setStyle("sendFriendDiv", "left", "-155px");
			}
			
			// reposition the harlistas landing link
			//YAHOO.util.Dom.setStyle('landinglink', 'top','15px');
		},
		
		/**
		 * initDetail sets page up for the gallery view
		 */
		viewDetail : function(){
			
			detailView = true;
			currentView = "detail";
			
			// used to control share overlay close button
			// switching view to gallery view in IE6
			hideOverlayFirstRun = "true";
			
			YAHOO.util.Dom.setStyle('hdNavigation','display','block');
			YAHOO.util.Dom.setStyle('designDetail','display','block');
			
			//remove single classes for detail view
			YAHOO.util.Dom.removeClass('hdCanvas', "hdGalleryBackground");
			
			//add classes for gallery and remove detail classes
			YAHOO.util.Dom.replaceClass('ugcHeader','headerGallery','headerDetail');
			YAHOO.util.Dom.replaceClass('ugcContainer','containerGallery','containerDetail');
			YAHOO.util.Dom.replaceClass('ugcContent','contentGallery','contentDetail');
			YAHOO.util.Dom.replaceClass('ugcFooter','footerGallery','footerDetail');
			
			YAHOO.util.Dom.addClass('miniGalleryDivWrapper','submitActive');
			
			//move submit div to the right area for the appropriate section of the site by changing class
			YAHOO.util.Dom.replaceClass('submitDiv','submitGallery','submitDetail');

			// reposition the STAF widget on the story gallery
			YAHOO.util.Dom.setStyle("sendFriendDiv", "width", "206px");
			YAHOO.util.Dom.setStyle("sendFriendDiv", "top", "-4px");
			YAHOO.util.Dom.setStyle("sendFriendDiv", "left", "6px");
			
			
			
			// reposition the harlistas landing link
			//YAHOO.util.Dom.setStyle('landinglink', 'top','-113px');
		},
		
		/**
		 * loadMedia requests media manually using DAO object. Used when loading from nav history or deeplink.
		 * @param {String} type of event, sent by event if subscribing this function as a callback
		 * @param {Array} args sent if callback from the fire method
		 * @param {Object} arbitrary object passed by subscriber method when this is designated as a callback
		 * @param {String} required reqId of media to load
		 * @param {String} required reqType of media to load
		 * @param {Boolean} optional boolean to clear this as listener to mediaLoaded custom event.
		 */
		
		loadMedia : function (type,args,obj,reqId,reqType){
			var clearEvent = false;
			
			
			
			if(obj){
				reqId = obj[0];
				reqType = obj[1];
				clearEvent = true;
			}
			
			YAHOO.util.Dom.addClass('galleryDiv','hdHidden');
			HS.util.viewDetail();
			detailWidget.notifyObservers('navDetail',{
				mediaId: reqId,
				contentType: reqType
			});
			
			
			if(clearEvent){
				mediaLoaded.unsubscribe(HS.util.loadMedia);
			}
		},
		
		/**
		 * navigate controls display of modules based on the current state in the URL
		 * it also runs a deeplink function if all deeplink params are present
		 * @param {String} view to load
		 * @param {String} id of media
		 * @param {String} type of media
		 */
		navigate : function(view,type,id){

			// used to prevent navigate back in IE6 
			// when share panel closes			
			if(hideSocialOverlay == "false"){
				if(view == 'gallery'){
					if(UGCplayer && UGCplayer.sendEvent){
						//stop any video playing
						UGCplayer.sendEvent("STOP");
					}
					HS.util.viewGallery();
					widgetView.showDiv.call(widgetView, "galleryDiv", "Posts");					
				}
				else if(view == 'detail'){
					HS.util.loadMedia(false,false,false,id,type);
				}
				else if(view == 'deepLink'){
					initialView = false;
					isDeepLink = true;
					obj = [id,type];
					mediaLoaded.subscribe(HS.util.loadMedia,obj);
				}
				else {
					return false;
				}
				return true;
			}// end if
			
			hideSocialOverlay = "false";
			return true;
		},
		
		
		/**
		 * parseNav splits out nav string for legibility by nav functions
		 * @param params is nav string to return as array
		 */
		
		parseNav : function(params){

			if(params){
				var paramsArray = params.split('/');
				return paramsArray;
			}
			else {return null;}
		},
		
		/**
		 * viewNav returns the current nav params as an array
		 */
		
		viewNav : function(){
			var currentNav = HS.util.parseNav(YAHOO.util.History.getCurrentState('loc'));
			return currentNav;
		},
		/**
		 * initNav initializes the navigation history manager
		 */
		initNav : function(){		
			
			bookmarkState = YAHOO.util.History.getBookmarkedState('loc');
			
			var bkArray = HS.util.parseNav(bookmarkState);
			
			//test bkArray
			if(bkArray === null ){
				bkArray = ['gallery','init','0'];
			}
			else if(bkArray[0] == 'detail'){
				bkArray[0] = 'deepLink';
			}
			else{
				bkArray = ['gallery','init','0'];
			}
			
			initState = bkArray[0] + '/' + bkArray[1] + '/' + bkArray[2];
			
			YAHOO.util.History.register('loc',initState,function(view){
				//console.log('--state change, view = ',view);
				if(overlayOpen){ 
					return false;
				}
				else {
					//console.log('overlay closed');
					var viewArr = HS.util.parseNav(view);
					HS.util.navigate(viewArr[0],viewArr[1],viewArr[2]);
				}
				return true;
			});
			
			try{
			//init the storage objects for history
			YAHOO.util.History.initialize("yui-history-field","yui-history-iframe");
			}
			catch(e){
				alert('YUI History Manager failed to initialize.');
			}
			
			HS.util.navigate(bkArray[0],bkArray[1],bkArray[2]);			

		},
		
		/**
		 * callback function responds to video player SWF ready state, returns auto play and fires hitbox based on player location / type
		 */
		vidPlayerReady: function(element){					
			
			if(element.id == 'Harlistas'){				
				element.addModelListener("STATE", "HS.util.videoHitBox");
				element.sendEvent("PLAY","false");
				landingVideoEl = element;
				vidOverlay = false;					
			}
			else if (element){							
				UGCplayer = element;
				element.addModelListener("STATE", "UGCvideoHitBox");				
				element.sendEvent("PLAY","true");				
			}			

		},
		
		/**
		 * videoHitBox calls hbPageview as a callback to the JW listener above
		 */
		videoHitBox : function(obj){				
			if("PLAYING" == obj.newstate){					
				HD.util.Analytics.track("/Experience/Harlistas/Video+Play/Landing+Page");				
			}
		},
		
		showSelectBoxes : function(){
			var selectElements = YAHOO.util.Dom.getElementsBy(function(){return true;}, 'select');		
			for(var x=0; x<selectElements.length; x++){			
				YAHOO.util.Dom.setStyle(selectElements[x], 'visibility', 'visible');			
			}				
		},
		
		hideSelectBoxes : function() {
			var selectElements = YAHOO.util.Dom.getElementsBy(function(){return true;}, 'select');
			var overlaySel = YAHOO.util.Dom.getElementsBy(function(){return true;}, 'select','submissionContent');
			for(var x=0; x<selectElements.length; x++){			
				if(selectElements[x] != overlaySel[0]){
					YAHOO.util.Dom.setStyle(selectElements[x], 'visibility', 'hidden');
				}				
			}			
		}
		
};
