
/* Generic Flash Object: Used to embed flash movies in HTML */
/* ======================================================== */
function FlashObject(instanceName){
	var t = this;
	var instanceName = instanceName || 'flash';
	t.activeX = false;
	t.maxVersion = 10;
	t.ieAutoInstall = true;
	t.userHasFlash = false;

	// This method attempts to find an html element by id or reference.
	// Returns: Element Reference or an array of elements if multiple values are passed in.
	// ====================================================================================
	t.find = function() {
		var elements = new Array();
		for (var i = 0; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') {
				if (document.getElementById){element = document.getElementById(element);}
				else if (document.all){element = document.all[element];}
			}
			if (arguments.length == 1) {return element;}
			elements.push(element);
		}
		return elements;
	}

	// This method determines major version of browser flash player
	// Returns: Boolean.
	// ========================================================================
	t.hasVersion = function(ver){
		t.swf = false;
		if(!ver) ver = 0;
		var nav = navigator;
		if(nav.plugins && nav.plugins.length > 0){
			var mime,type,detail,version;
			mime = nav.mimeTypes;
			type = 'application/x-shockwave-flash';
			if(mime && mime[type] && mime[type].enabledPlugin && mime[type].enabledPlugin.description){
				detail = mime[type].enabledPlugin.description;
				version = detail.substring(detail.indexOf('.')-2, detail.indexOf('.'));
				if(version.charAt(0) == ' ')
					version = version.charAt(1);
				t.swf = (version >= ver) ? true : false;
			}
		}else if(nav.appVersion.indexOf("Mac") == -1 && window.execScript){
			for(var i=ver; i<=t.maxVersion&&i!=1&&t.swf!=true; i++){
				execScript('on error resume next: '+instanceName+'.swf=IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash'+((i==0)?'':'.'+i)+'"))','VBScript');
			}
			t.activeX = true;
		}else{
			t.swf = false;
		}
		t.userHasFlash = t.swf;
		return t.swf;
	}

	// This method assembles a flash plugin object and attaches any params
	// Returns: String. This can be used to write to the page.
	// ========================================================================
	t.getPluginTag = function(swfFile,width,height,bgcolor,ver,altFormat,params){
		var str = '';
		var win = (navigator.appVersion.toLowerCase().indexOf("win")!=-1);
		var ie = (navigator.appName=="Microsoft Internet Explorer");
		if(bgcolor=='transparent'){bgcolor='';params+=",wmode=transparent";}
		if(t.hasVersion(ver) && swfFile || win && ie && swfFile && t.ieAutoInstall){
			var additionalParams = '';
			if(params && params.length>0){
				var pArray = params.split(",");
				for(var i=0; i<pArray.length; i++){
					var ta = pArray[i].substr(0,pArray[i].indexOf('='));
					var v = pArray[i].substr(pArray[i].indexOf('=')+1,pArray[i].length);
					additionalParams += (t.activeX)?'\t<param name="' + ta + '" value="' + v + '" />\n': ' '+ ta + '="' + v + '"';
				}
			}
			if(t.activeX){
				str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+width+'" height="'+height+'">\n';
				str += '\t<param name="movie" value="'+swfFile+'" />\n';
				str += '\t<param name="quality" value="high" />\n';
				str += '\t<param name="menu" value="false" />\n';
				str += '\t<param name="bgcolor" value="'+bgcolor+'" />\n';
				str += additionalParams;
				str += altFormat;
				str += '</object>\n\n';
				return str;
			}else{
				//console.log(additionalParams);
				str = '<embed src="'+swfFile+'" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" menu="false" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" '+additionalParams+'></embed>\n';
				return str;
			}
		}else{
			return altFormat;
		}
	}

	t.fixIEActiveX = function(){
		// Not Needed Currently
		/*
		var n=navigator.userAgent;
		var w=n.indexOf("MSIE");
		if((w>0)&&(parseInt(n.charAt(w+5))>5)){
			var T=["object","embed","applet"];
			for(j=0;j<2;j++){
				var E=document.getElementsByTagName(T[j]);
				for(i=0;i<E.length;i++){
					var P=E[i].parentNode;
					var H=P.innerHTML;
					P.removeChild(E[i]);
					P.innerHTML=H;
				}
			}
		}
		*/
	}


	// This method will write the flash string within an html element or direct.
	// Returns: Element Reference or an array of elements if multiple values are passed in.
	// ====================================================================================
	t.embedMovie = function(swfFile,width,height,bgcolor,ver,altFormat,params,target){
		var params = params || '';
		var target = target || '';
		var flashStr = t.getPluginTag(swfFile,width,height,bgcolor,ver,altFormat,params);
		target = t.find(target);
		if(target){
			target.innerHTML = flashStr;
			if(t.activeX){t.fixIEActiveX();}
			var flashObj = target.getElementsByTagName('object')[0] || target.getElementsByTagName('embed')[0];
			return flashObj;
		}
		else{document.write(flashObj);}
	}
}



/* Mood Switcher - Changes BG/Music/Cookie		*/
/* ============================================ */
function moodSwitcher(mood){
	var t = this;
	t.currentMood;
	t.defaultMood = mood || 'restore';
	t.moodControls = $('mood-controls');
	t.moodLinkList = $('mood-links');
	t.moodLinks = $('mood-links')?$('mood-links').getElementsByTagName('a'):null;
	t.body = document.getElementsByTagName('body')[0];
	t.mp3;
	t.autoPlay = readCookie("pure-mood-autoplay") || true;


	// Assign Switch Link Behaviour
	t.assignMoodSwitchers = function(){
		if(t.moodLinks){

			var launcherLink = $('launch-player-link');
			launcherLink.onclick = function (){t.launchPlayer(this.href);return false;}

			// Apply behaviour to Customize Mood link
			var dropDownWrapper = $('drop-down-wrapper');
			if (dropDownWrapper){dropDownWrapper.onmouseover = dropDownWrapper.onmouseout = t.toggleMoodLinks;}

			// Apply behavior to parent list

			// Apply behavior to individual links
			for(var i=0; i<t.moodLinks.length; i++){
				t.moodLinks[i].onclick = function(){
					// DO WE WANT THE MUSIC TO AUTO-START ON MOOD CHANGE??
					//eraseCookie("pure-mood-autoplay");
					//t.autoPlay = true;
					t.changeMood(this.innerHTML);
					this.blur();
					return false;
				}
			}
		}
	}


	// Show mood controls
	t.showMoodControls = function(){
		if(t.moodControls){t.moodControls.style.display = 'block';}
	}

	// Toggle Display of Mood Links
	t.toggleMoodLinks = function(){
		if (t.moodLinkList){t.moodLinkList.style.display = (t.moodLinkList.style.display == 'block')?'none':'block';}
	}

	// Reset Links
	t.resetMoodLinks = function(){
		if(t.moodLinks){
			for(var i=0; i<t.moodLinks.length; i++){
				t.moodLinks[i].className = '';
			}
		}
	}

	// Set Current Mood Text
	t.setMoodText = function(mood){
		var mood_label = $('current-mood');
		mood_label.firstChild.nodeValue = mood;
	}

	// Check Cookie to see if popup is open
	t.popOpen = function(){
		return readCookie("pure-popup") || false;
	}

	// Check Cookie to see if popup is closed
	t.popClosed = function(){
		eraseCookie("pure-popup");
	}

	// Stop AutoPlay
	t.stopMusic = function(){
		eraseCookie("pure-mood-autoplay");
		createCookie("pure-mood-autoplay",false,60);
		t.autoPlay = readCookie("pure-mood-autoplay") || false;
	}

	// Enable AutoPlay
	t.playMusic = function(){
		eraseCookie("pure-mood-autoplay");
		createCookie("pure-mood-autoplay",true,60);
		t.autoPlay = readCookie("pure-mood-autoplay") || true;
	}

	// Set Mood Cookie
	t.rememberMood = function(){
		eraseCookie("pure-mood");
		createCookie("pure-mood",t.currentMood,60);
	}


	// Change Mood in Main Window and PopUp if it exists
	t.changeMood = function(mood){
		t.initMood(mood);
		if (window.playerwin && window.playerwin.flashplayer){
			t.playerwin.flashplayer.addVariable("mood",t.currentMood);
			t.playerwin.flashplayer.addVariable("autoPlay",'true');
			t.playerwin.flashplayer.write("music-player");
		}else{
			t.setMusicMood();
		}
	}

	// Close Existing PopUp if it exists
	// Launch PopUp and Disable Main Music
	t.launchPlayer = function(link){
		t.stopMusic();
		t.disableMainMusic();
		if(window.playerwin){
			window.playerwin.close();
			eraseCookie("pure-popup");
		}
		window.playerwin = winOpen(link,'playerwindow',305,202,280,580,'status=0');
		createCookie('pure-popup', true, 60);
		return false;
	}


	// Replace main player with image
	// -> Called when the popup is launched
	t.disableMainMusic = function(){
		t.stopMusic();
		$('music-controller').innerHTML = '<img src="/hyatt/images/pure/music_icon.gif" alt="Music Controller" />';
	}


	// Embed/Refresh main player flash
	// -> Called when the mood is changed
	t.setMusicMood = function(){
		var f = new FlashObject();
		if($('music-controller')){f.embedMovie('/hyatt/pure/_flash/music/mplayer.swf',15,15,'transparent',7,'<img src="/hyatt/images/pure/music_icon.gif" alt="Music Controller" />','flashVars=mp3path=/hyatt/pure/_flash/music/sound/'+t.currentMood+'.mp3&autoplay='+t.autoPlay+'','music-controller');}
	}


	// Initialize Mood on Page Load & Set Cookie
	t.initMood = function(mood){
		t.resetMoodLinks();
		t.setMoodText(mood);
		t.currentMood = mood.toLowerCase();
		t.body.className = t.currentMood;
		var link = $(t.currentMood);
		if (link)link.className = 'current';
		t.rememberMood();
		t.playerwin = window.playerwin || window.child || null;

			t.setMusicMood();

	}


	// Retrieve Cookie Value & Fire Initialize Mood Method
	t.checkMood = function(){
		t.currentMood = readCookie("pure-mood");
		if(t.currentMood){t.initMood(t.currentMood);}
		else{t.initMood(t.defaultMood)}
	}


	// OnLoad Initialization
	t.init = function(){
		t.showMoodControls();
		t.checkMood();
		t.assignMoodSwitchers();
	}

	// Initialize
	t.init();
}




/* Flash Navigation Helper - Passes Section		*/
/* ============================================ */

function NavAssist(flash, swf, container, w, h, dfn){

    // Initial Properties
    var t=this;
	var ns6 = ns7 = false;
	t.flashVersion = 8;
    t.section;
    t.subsection;
    t.pageTitle='Hyatt Pure Spa';

    var defaultFileName=dfn||'index';  //put the name of the default document in here. if subsection is blank (in the case of a default document) this value will be assumed.


    // Parse URL & Set Section/SubSection
    t.parseUrl=function(sURL){
        var cvURL = String(sURL);
        t.subsection = cvURL.slice(cvURL.lastIndexOf("/")+1, cvURL.lastIndexOf("."));
        if(t.subsection == ""){
            t.subsection = defaultFileName;
        }
        var truncatedURL = cvURL.slice(0,cvURL.lastIndexOf("/"));
        t.section = cvURL.substring(truncatedURL.lastIndexOf("/")+1,cvURL.lastIndexOf("/"));
    }

	// Updates Window Title - Not in use
	t.setTitle = function(){
		window.title = t.pageTitle;
	}

	// Allows defaultFileName var to be overwriten
    t.resetDefaultFileName=function(fName){
        return(defaultFileName = fName);
    }

	// Pass Section Params to Flash
	t.setParamsString = function(){
		t.sectionParams = 'flashVars=xsection='+t.section+'&xsubsection='+t.subsection+'&xpath=/hyatt/pure/_flash/xml/site_structure.xml';
	}

	// Sniff for NS6 because it can't handle the way we mask the flash
	t.notNetscape6 = function(){
		ns6 = false;
		ns7 = false;
		var exclude=1;
		var agt=navigator.userAgent.toLowerCase();
		if(typeof document.getElementById!="undefined"){
			exclude=0;
			if(agt.indexOf("netscape/6")!=-1||agt.indexOf("netscape6")!=-1){ns6=1;}
			else if(agt.indexOf("netscape/7")!=-1||agt.indexOf("netscape7")!=-1){ns6=1;ns7=1;}
			else if(agt.indexOf("gecko")!=-1){ns6=1;mz7=1;}
		}
		return (ns6)?true:false;
	}

	// Output the Flash Markup with Params
    t.writeFlash=function(flashObject,swfFile,width,height,bgcolor,ver,altFormat,params,target){

		// If the user has Flash, the correct version and isn't using Netscape
        if(flashObject && flashObject.hasVersion(ver) && t.notNetscape6){
			pure.hideAltNav();
			flashObject.embedMovie(swfFile,width,height,bgcolor,ver,altFormat,params,target);
			flash.userHasFlash = true;
		}else{
			// Either this is NS6 or the user does\'t have Flash');
			pure.showAltNav();
			pure.showHTML();
			flash.userHasFlash = false;
		}
    }

	// Initialization
    t.init=function(){
       t.parseUrl(window.location);
	   t.setParamsString();
	   if(!$(container))return false;
       t.writeFlash(flash, swf, w, h, 'transparent', t.flashVersion, $(container).innerHTML, t.sectionParams, container);
       t.setTitle();
   }

   //initialize and fire
   t.init();
}





/* Animation and Controller Object - Controls Transitions	*/
/* ======================================================== */
function PureAnimation(){
	var t = this;

	// Resize Mask Over Flash
	t.resizeFlash = function(size){
		var flash = $('flash-container');
		flash.className = size;
		return false;
	}

	// Show Scrollable To Avoid Bugs
	t.showScrollable = function(){
		var scroller = getElementsByClassName('scrollable')[0];
		if(scroller){scroller.className = 'scrollable'; scroller.style.display = 'block';}
		var html_container = $('html-container');
		if(html_container){
			html_container.style.zIndex = '40';
		}
	}

	// Method Called From Flash When Animation Done
	t.showHTML = function(){
		t.resizeFlash('half-width');
		t.showScrollable();
		var content = $('html-container');
		if(content){content.style.display = 'inline';}
		var flashcon = $('flash-container');
		if(flashcon){
			var anchors = flashcon.getElementsByTagName('a');
			if(anchors.length > 0){anchors[0].style.display = 'block';}
		}
	}

	t.showAltNav = function(){
		t.altNav = $('html-navigation');
		t.altNav.style.display = 'block';

		if($('gallery-image-large')){
			setOpacity(t.altNav, 50);
			t.altNav.onmouseover = function(){setOpacity(this, 90);}
			t.altNav.onmouseout = function(){setOpacity(this, 50);}
		}else{
			setOpacity(t.altNav, 80);
			t.altNav.onmouseover = function(){setOpacity(this, 95);}
			t.altNav.onmouseout = function(){setOpacity(this, 80);}
		}
	}

	t.hideAltNav = function(){
		$('html-navigation').style.display = 'none';
	}

	t.clearSearch = function(searchbox){
		if(searchbox){
			if(searchbox.value == 'City, State, Country or Spa Name'){searchbox.value = ''}
		}
	}

	t.assignEvents = function(){
		var searchbox = $('pure-search');
		if(searchbox){searchbox.onfocus = function(){t.clearSearch(this);}}
	}

	t.fadeIn = function(objId,opacity) {
		obj = $(objId);
		if (opacity <= 100) {
			t.setOpacity(obj, opacity);
			opacity += 5;
			window.setTimeout("if(pure){pure.fadeIn('"+objId+"',"+opacity+")}", 30);
		}
	}

	t.fadeOut = function(objId,opacity,interval) {
		obj = $(objId);
		if(opacity >= 0) {
			t.setOpacity(obj, opacity);
			opacity -= 5;
			window.setTimeout("if(pure){pure.fadeOut('"+objId+"',"+opacity+")}", interval);
		}else{

		}
	}

	t.setOpacity = function(obj, opacity) {
		opacity = (opacity == 100)?99.999:opacity;
		// IE/Win
		obj.style.filter = "alpha(opacity:"+opacity+")";
		// Safari<1.2, Konqueror
		obj.style.KHTMLOpacity = opacity/100;
		// Older Mozilla and Firefox
		obj.style.MozOpacity = opacity/100;
		// Safari 1.2, newer Firefox and Mozilla, CSS3
		obj.style.opacity = opacity/100;
	}

	t.fadeHomePage = function(){
		var shadow = $('homepage-shadow-wrapper');
		if(shadow){
			t.fadeOut('homepage-shadow-wrapper',100,120);
			t.fadeOut('seo-copy',100,120);
		}
	}

	t.assignEvents();
}



/* Photo Gallery Controller - For Gallery Page				*/
/* ======================================================== */
var PureGallery = function(){

	if(!$('gallery') || !GALLERY_DATA){return false;}

	// Init Properties
	var t = this;
	t.gal = $('gallery');
	t.data = GALLERY_DATA;


	t.imgID =  'gallery-image-large';
	t.curNum = 0;
	t.galThumbs = t.gal.getElementsByTagName('a');

	// Show Large Image
	t.swapLarge = function(link){
		var img = link.getElementsByTagName('img')[0];
		var file = t.isolateImgFile(img);
		var large = $(t.imgID);
		if(large){
			var oldsrc = large.src.toString();
			var oldfile = t.isolateImgFile(large);
			newsrc = oldsrc.replace(oldfile, file);
			large.src = newsrc;

			t.curNum = link.pos;
			t.updateHotSpot();

			// This was causing issues in IE with
			// certain shades of black. So bye-bye fade!
			// -------------------------------------------
			//t.setOpacity(large, 0);
			//large.style.visibility = "visible";
			//t.fadeIn(t.imgID,0);

			t.clearCurrent();
			link.className = 'current';
			link.blur();
		}

	}

	t.updateHotSpot = function(){
		var spa_link = t.data[t.curNum].url;
		var image = $('gallery-image-large');
		image.onclick = function(){window.location = spa_link;}
	}


	// Clear Selected Image
	t.clearCurrent = function(){
		for(var i=0; i<t.galThumbs.length; i++){
			t.galThumbs[i].className = '';
		}
	}

	// URL String Helper - Returns Image File
	t.isolateImgFile = function(imgObj){
		var tempsrc = imgObj.src.toString();
		var pos = tempsrc.lastIndexOf('/');
		pos = pos+1;
		var file = tempsrc.slice(pos, tempsrc.length);
		return file;
	}


	//document.write("<style type='text/css'>#photo-image {visibility:hidden;}</style>");

	t.fadeIn = function(objId,opacity) {
		obj = $(objId);
		if (opacity <= 100) {
			t.setOpacity(obj, opacity);
			opacity += 10;
			window.setTimeout("if(photos){photos.fadeIn('"+objId+"',"+opacity+")}", 30);
		}
	}

	t.setOpacity = function(obj, opacity) {
		opacity = (opacity == 100)?99.999:opacity;
		// IE/Win
		obj.style.filter = "alpha(opacity:"+opacity+")";
		// Safari<1.2, Konqueror
		obj.style.KHTMLOpacity = opacity/100;
		// Older Mozilla and Firefox
		obj.style.MozOpacity = opacity/100;
		// Safari 1.2, newer Firefox and Mozilla, CSS3
		obj.style.opacity = opacity/100;
	}


	// Attach Behaviour to links
	t.assignEvents = function(){
		for(var i=0; i<t.galThumbs.length; i++){
			t.galThumbs[i].pos = i+1;
			t.galThumbs[i].onclick = function(){t.swapLarge(this);return false;}
		}

		// Hide Default Non-Flash Image
		var defaultImg = $('flash-container').getElementsByTagName('img')[0];
		if(defaultImg){defaultImg.style.display= 'none';}

		// If no flash, fix z-index for gallery image
		if(!flash.userHasFlash){$('gallery-image-large').style.zIndex = 30;}
		
		t.galThumbs[0].className = 'current';
		t.swapLarge(t.galThumbs[0]);

		t.updateHotSpot();
	}

	// Initialize the gallery object
	t.init = function(){
		t.assignEvents();
	}

	t.init();

}




/* Changes Container Layout for Alt Styles 		*/
/* ============================================ */
function setLayout(type){
	var container = $('container');
	if(container){container.className = type;}
}



/* CORE INITIALIZATION FUNCTION 				*/
/* ============================================ */
function initPure(){
	pure = new PureAnimation();
	flash = new FlashObject();
	if(corporate){
		mood = new moodSwitcher('restore');
		nav = new NavAssist(flash, '/hyatt/pure/_flash/movies/nav.swf', 'flash-container', 948, 519, 'index');
		photos = new PureGallery();
		if (document.getElementById('loading-screen'))
			document.getElementById('loading-screen').style.display = "none";
	}else{
		// Wait 5 seconds and then fade shadow and SEO copy
		window.setTimeout("if(pure){pure.fadeHomePage();}", 22000);


	}
}


window.onload = function(){initPure();}
//onloadHandlers[onloadHandlers.length] = function(){initPure();}






