FreeHome = {}

FreeHome.SearchBox = {}
FreeHome.SearchBox.init = function(searchForm) {
	var form = $(searchForm);
	if (!form) return;
	
	var textInputs = form.getElements('input[type=text]');
	textInputs.each(function(input) {
		if (input.disabled) return;
		var alttxt = input.getProperty('alt');
		input.store('initialValue', alttxt); // use alt as default
		input.store('initialState', true);
		input.setProperty('value', alttxt); // make sure search box says start script
		
		input.addEvent('focus', function(event) {
			if (this.retrieve('initialState')) {
				this.setProperty('value', ''); // clear input
				this.store('initialState', false);
			}
		});
		input.addEvent('blur', function(event) {
			if (!this.retrieve('initialState') && !this.getProperty('value')) {
				var val = this.retrieve('initialValue');
				this.setProperty('value', val); // restore initial value
				this.store('initialState', true);
			}
		});
	});
	
	form.addEvent('submit', function(event) {
		textInputs.each(function(input) {
			if (input.retrieve('initialState')) {
				input.setProperty('value', ''); // clear input
				input.store('initialState', false);
			}
		});
	});
}

FreeHome.Hero = {}
FreeHome.Hero.View = new Class({
	
	initialize: function(adCount, interval) {
		this.visibleHero = 1;
		this.skipRotate = true; // let the first one show twice as long as normal
		this.channelListCountVar = adCount;
		this.rotationInterval = interval;
	},

	startAutoRotation: function () {
		this.rotate.periodical(this.rotationInterval * 1000, this);
	},
	
	rotate: function () {
		if (this.skipRotate) {
			// skip one cycle because the user has clicked on a choose button or we are just starting
			this.skipRotate = false;
		} else if (this.visibleHero == this.channelListCountVar) {
			this.jump(1);
		} else {
			this.jump(this.visibleHero+1);
		}
	},
	
	chooseHero: function (num) {
		this.skipRotate = true; // skip next timer rotate
		this.jump(num);
	},
	
	jump: function (num) {
		$('channel-off'+this.visibleHero).style.display ='block';
		$('channel-on'+this.visibleHero).style.display ='none';
		$('channel'+this.visibleHero).style.display ='none';

		$('channel-off'+num).style.display ='none';
		$('channel-on'+num).style.display ='block';
		$('channel'+num).style.display ='block';
		this.visibleHero = num;
	}
});

FreeHome.Hero.initControls = function (view) {
	var buttons = $('hero-paging').getElements('div[id^=channel-off]');
	buttons.each( function(button) {
		var num = button.id.substr(button.id.length-1, 1).toInt();
		button.addEvent('click', function(event) {
			event.stop()
			view.chooseHero(num);
		});
	});
}

FreeHome.Hero.insertSwf = function (channelNum, assetUrl, clickUrl) {
	var writeSwfToPage = function () {
		var obj = new SWFObject(assetUrl, 'heroswf' + channelNum, 660, 260, '9', '#FFFFFF');
		obj.addVariable('clickTag', escape(clickUrl));
		obj.useExpressInstall('/include/misc/flash/expressinstall.swf');
		obj.addParam('wmode', 'transparent');
		obj.write('heroflashdiv' + channelNum);
	}
	if (channelNum == 1) {
		writeSwfToPage.run(); // if first channel, write immediately
	} else {
		window.addEvent('domready', writeSwfToPage); // else, delay til domready
	}
}

FreeHome.Carousel = new Class({
	Implements: [Options, Events],
	options: {
		slides: [], prefix: [],
		startIndex: 0,
		wrap: false
	},
   initialize: function(options, prefix){
		this.setOptions(options);
		this.prefix = prefix;
		this.addSlides(this.options.slides, $(prefix+'pageLinkPrevious'), $(prefix+'pageLinkNext'));
		if(this.slides.length){this.slideLeft(this.options.startIndex)}
   },
	slides: [], 
	
	addSlides: function(slides, left, right){
		$$(slides).each(function(slide){
				this.slides.include($(slide));
				right.addEvent('click', this.cycleForward.bind(this));
				left.addEvent('click', this.cycleBack.bind(this));
		}, this);
	},
	addSlide: function(slide){
		this.addSlides($splat($(slide)));
	},
	cycleForward: function(){
		if($chk(this.now) && this.now < this.slides.length-1) {this.slideLeft(this.now+1);}
		else if((this.now) && this.options.wrap) this.slideLeft(0);
		else if(!$defined(this.now)) this.slideLeft(this.options.startIndex);
	},
	cycleBack: function(){
		if(this.now > 0) {this.slideRight(this.now-1);}
		else if(this.options.wrap) this.slideRight(this.slides.length-1);
	},
	slideLeft: function(iToShow){
		if(this.fading) return;
		var now = this.now;
		var currentSlide = this.slides[now];
		var slide = this.slides[iToShow];
		var fadeIn = function(s){
			this.fading = true;
			s.get('tween', {duration: 300}).start('margin-left', 0).chain(function(){
				this.fading = false;
				this.fireEvent('onShow', [slide, iToShow]);
			}.bind(this));
		}.bind(this);
		if(slide){
			if($chk(now) && now != iToShow){
				if(now+2 == this.slides.length){$(this.prefix+'pageLinkNext').getElements('img').setProperty('src','/img/homepage/shared/arrow-right-off.gif')}
				else{$(this.prefix+'pageLinkNext').getElements('img').setProperty('src','/img/homepage/shared/arrow-right-dis.gif')}
				this.fading = true;
				currentSlide.get('tween', {duration: 300}).start('margin-left', -660).chain(function(){
					//console.log('first')
					$(this.prefix+'currentpage').innerHTML = now+2;
					$(this.prefix+'pageLinkPrevious').getElements('img').setProperty('src','/img/homepage/shared/arrow-left-on.gif');
					if(now+2 == this.slides.length){$(this.prefix+'pageLinkNext').getElements('img').setProperty('src','/img/homepage/shared/arrow-right-off.gif')}
					else{$(this.prefix+'pageLinkNext').getElements('img').setProperty('src','/img/homepage/shared/arrow-right-on.gif')}
					fadeIn(slide);
					
				}.bind(this));
			}
			else fadeIn(slide);
			this.now = iToShow;
		}
	},
	slideRight: function(iToShow){
		if(this.fading) return;
		var now = this.now;
		var currentSlide = this.slides[now];
		var slide = this.slides[iToShow];
		var fadeIn = function(s){
			this.fading = true;
			s.get('tween', {duration: 300}).start('margin-left', 0).chain(function(){
				this.fading = false;
				this.fireEvent('onShow', [slide, iToShow]);
				if(now == 1){$(this.prefix+'pageLinkPrevious').getElements('img').setProperty('src','/img/homepage/shared/arrow-left-off.gif')}
				else{$(this.prefix+'pageLinkPrevious').getElements('img').setProperty('src','/img/homepage/shared/arrow-left-on.gif');}
				
			}.bind(this));
		}.bind(this);
		if(slide){
			if($chk(now) && now != iToShow){
				this.fading = true;
				currentSlide.get('tween', {duration: 1}).start('margin-left', 0).chain(function(){
					$(this.prefix+'currentpage').innerHTML = now
					$(this.prefix+'pageLinkNext').getElements('img').setProperty('src','/img/homepage/shared/arrow-right-on.gif');
					if(now == 1){$(this.prefix+'pageLinkPrevious').getElements('img').setProperty('src','/img/homepage/shared/arrow-left-off.gif')}
					else{$(this.prefix+'pageLinkPrevious').getElements('img').setProperty('src','/img/homepage/shared/arrow-left-dis.gif');}
					fadeIn(slide);
					
				}.bind(this));
			}
			else fadeIn(slide);
			this.now = iToShow;
		}
	}
});

FreeHome.AllGames = {};
FreeHome.AllGames.SubTabNavigation = new Class({
	initialize: function(selectedId) {
		this.selectedTab = selectedId;
	},

	mouseoverUnderline : function() {
		this.setStyle('text-decoration', 'underline')
	},

	mouseoutNone : function() {
		this.setStyle('text-decoration', 'none')
	},

	addMouseover: function(item) {
		item.addEvent('mouseover', this.mouseoverUnderline)
		item.addEvent('mouseout', this.mouseoutNone)
	},

	removeMouseover: function(item) {
		item.removeEvent('mouseover', this.mouseoverUnderline)
		item.removeEvent('mouseout', this.mouseoutNone)
		item.setStyle('text-decoration', 'none')
	},

//	this sets up the default underline for all selectable tabs
	addMouseOversAll: function (subTabNavigation) {
		var selectables = $$('div.selectable');
		selectables.each(function(item) {subTabNavigation.addMouseover(item)})
	},


	openSubTab: function (newTabId) {
		$(this.selectedTab+'pagination').setStyle('display','none');
		$(this.selectedTab+'scrollWrapper').setStyle('display','none');
		$(this.selectedTab+'allgamesubtab').removeClass('selected');
		$(this.selectedTab+'allgamesubtab').addClass('selectable');
		this.addMouseover($(this.selectedTab+'allgamesubtab'));

		$(newTabId+'scrollWrapper').setStyle('display','block');
		$(newTabId+'pagination').setStyle('display','block');
		$(newTabId+'allgamesubtab').removeClass('selectable');
		$(newTabId+'allgamesubtab').addClass('selected');
		this.removeMouseover($(newTabId+'allgamesubtab'));

		this.selectedTab = newTabId;
		
		new Request({
			method: 'get',
			url: "/home/setKeystone.do?allgamesCategoryId="+newTabId
		}).send();
	}

})

FreeHome.MyGames = {};
FreeHome.MyGames.SubTabNavigation = new Class({

	initialize: function(prefixMyFavorites, prefixGameTickets) {
		this.prefixMyFavorites = prefixMyFavorites;
		this.prefixGameTickets = prefixGameTickets;
	},

	openKeystonesMyGamesPremiumTab: function() {
		$(this.prefixMyFavorites+'pagination').setStyle('display','none');
		$(this.prefixMyFavorites+'scrollWrapper').setStyle('display','none');
		$(this.prefixMyFavorites+'tab').addClass('selectable');
		$(this.prefixMyFavorites+'tab').removeClass('selected');
		$(this.prefixGameTickets).setStyle('display','inline');
		$('clicked'+this.prefixGameTickets).setStyle('display','inline');
		$(this.prefixGameTickets+'tab').setStyle('display','none');		
		$(this.prefixMyFavorites+'link').setStyle('display','none');
		$(this.prefixGameTickets+'link').setStyle('display','inline');
		
		new Request({
			method: 'get',
			url: "/home/setKeystone.do?mygamesSubtabId=premium"
		}).send();
	},

	openKeystonesMyGamesGamesTab: function() {
		$(this.prefixMyFavorites+'tab').removeClass('selectable');
		$(this.prefixMyFavorites+'tab').addClass('selected');
		$(this.prefixMyFavorites+'pagination').setStyle('display','block');
		$(this.prefixMyFavorites+'scrollWrapper').setStyle('display','block');
		$(this.prefixGameTickets).setStyle('display','none');
		$('clicked'+this.prefixGameTickets).setStyle('display','none');
		$(this.prefixGameTickets+'tab').setStyle('display','inline');
		$(this.prefixGameTickets+'link').setStyle('display','none');
		$(this.prefixMyFavorites+'link').setStyle('display','inline');
		
		new Request({
			method: 'get',
			url: "/home/setKeystone.do?mygamesSubtabId=games"
		}).send();
	}
})

FreeHome.MyGames.initSubTagNavigation = function (prefixMyFavorites, prefixGameTickets) {
	FreeHome.MyGames.navigation = new FreeHome.MyGames.SubTabNavigation(prefixMyFavorites, prefixGameTickets);
	
	$(prefixMyFavorites + 'tab').addEvent('click', function() {
		FreeHome.MyGames.navigation.openKeystonesMyGamesGamesTab();
	});
	
	var ticketTab = $(prefixGameTickets + 'tab');
	if (!ticketTab) return; // game tickets may be turned off
	ticketTab.addEvent('click', function() {
		FreeHome.MyGames.navigation.openKeystonesMyGamesPremiumTab();
	});	
}

FreeHome.Keystone = {};
FreeHome.Keystone.SubTabNavigation = new Class({

	initialize: function(containerItem, keystonetabs) {
	    this.keystone = containerItem.getElements('div.tabcontent');
		this.tabItem = keystonetabs.getElements('li');
		var keystonetabs = keystonetabs.getElements('li');
		keystonetabs.each(this.addToggle, this);
		this.loadScrn = new FreeHome.Keystone.InfoScreen('keystoneloading');
		this.errorScrn = new FreeHome.Keystone.InfoScreen('keystoneerror');
		this.loadingTabs = new Hash({});
		this.loadCallbacks = new Hash({});
	},
	
	addToggle: function(item){
		item.addEvent('click', function(){
			this.toggle(item.getProperty('name'));
		}.bind(this));
	  },

	toggle: function(el) {
		var lazyLoad = false;
		this.errorScrn.turnOff();
		if ($(el).hasClass('lazyload')) {
			lazyLoad = true;
		}
		else if (this.loadScrn.isOn()) {
			this.loadScrn.turnOff();
		}
		
		this.lastSelected = el;
		
		this.setTabs(el, lazyLoad);
		
		if (lazyLoad) {
			this.startLoad(el);
		}
		else {
			new Request({
				method: 'get',
				url: "/home/setKeystone.do?tabId="+el
			}).send();
			this.runLoadCallbacks(el);
		}
	},
	
	setTabs: function(el, lazyLoad) {
		for(var i=0;i<this.keystone.length;i++){
			if(this.keystone[i].id != el){
				this.keystone[i].setStyle('display', 'none');
				this.tabItem[i].removeClass('active');
			}
			else {
				if (!lazyLoad) this.keystone[i].setStyle('display', 'block');
				this.tabItem[i].addClass('active');
			}
		}
	},
	
	startLoad: function(el) {
		if (this.loadingTabs.get(el)) return; // don't initiate the load of the same tab twice
		this.loadScrn.turnOn();
		this.loadingTabs.set(el, true);
		$(el).set('load', {
			evalScripts: true,
			onSuccess: function() {
				if (this.lastSelected == el) {
					this.loadScrn.turnOff();
					this.setTabs(el, false);
				} 
				this.loadingTabs.set(el, false);
				this.runLoadCallbacks(el);
				$(el).removeClass('lazyload')
			}.bind(this),
			onFailure: function () {
				if (this.lastSelected == el) {
					this.loadScrn.turnOff();
					this.errorScrn.turnOn();
				}
				this.loadingTabs.set(el, false);
			}.bind(this)
		});
		$(el).load('/home/loadTab.do?tab=' + el);
	},
	
	runLoadCallbacks: function (el) {
		var callbacks = this.loadCallbacks.get(el);
		if (callbacks) {
			callbacks.each(function (callback) {
				callback.run();
			});
			callbacks.empty();
		}
	},
	
	addLoadCallback: function (el, func) {
		var callbacks = this.loadCallbacks.get(el);
		if (!callbacks) {
			callbacks = new Array();
			this.loadCallbacks.set(el, callbacks);
		}
		callbacks.push(func);
	}
});

FreeHome.Keystone.initSubTabNavigation = function (container, keystonetabs) {
	FreeHome.Keystone.navigation = new FreeHome.Keystone.SubTabNavigation($(container), $(keystonetabs));
}

FreeHome.Keystone.initFavoritesToggle = function (link) {
	$(link).addEvent('click', function (event) {
		event.stop();
		FreeHome.Keystone.navigation.addLoadCallback('keystonemygames', function() {
			FreeHome.MyGames.navigation.openKeystonesMyGamesGamesTab();
		});
		FreeHome.Keystone.navigation.toggle('keystonemygames');
	});
}

FreeHome.Keystone.InfoScreen = new Class({
	initialize: function(screen) {
	    this.screen = $(screen);
		this.on = false;
	},
	
	isOn: function() {
		return this.on;
	},
	
	turnOn: function() {
		if (!this.screen) return;
		this.screen.setStyle('display', 'block');
		this.on = true;
	},
	
	turnOff: function() {
		if (!this.screen) return;
		this.screen.setStyle('display', 'none');
		this.on = false;
	}
});

FreeHome.News = {}
FreeHome.initNewsTicker = function(slideWrap, slideLeft, slideRight) {
	var slideItems = slideWrap.getElements('div.slideItems');
	var imageRight = slideRight.getElements('img');
	var imageLeft = slideLeft.getElements('img');
	slideItems.each(function(el, index){
		if(index > 0){
			el.setStyle('opacity', 0)
		}
	})

	var count = 0;
	var slideCount = slideItems.length - 1;

	slideRight.addEvent('click', function(){
		var move = new Fx.Morph(slideItems[count], {duration: 1000});
		var last = new Fx.Morph(slideItems[count+1], {duration: 1000});
		if(count < slideCount){
			move.start({'margin-left': -570, 'opacity': 0});
			last.start({'opacity': 1});
			count++;
		}
		imageLeft.setProperty('src', '/img/homepage/shared/community-arrow-l.gif');
		if(count == slideItems.length-1){
			imageRight.setProperty('src', '/img/homepage/shared/community-arrow-r-off.gif');
		}
	});

	slideLeft.addEvent('click', function(){
		var move = new Fx.Morph(slideItems[count-1], {duration: 1000});
		var last = new Fx.Morph(slideItems[count], {duration: 1000});
		if(count > 0){
			move.start({'margin-left': 0, 'opacity': 1});
			last.start({'opacity': 0});
			count--;
		}
		imageRight.setProperty('src', '/img/homepage/shared/community-arrow-r.gif');
		if(count == 0){
			imageLeft.setProperty('src', '/img/homepage/shared/community-arrow-l-off.gif');
		}
		else{
			imageLeft.setProperty('src', '/img/homepage/shared/community-arrow-l.gif');
		}
		this.setStyle('cursor', 'pointer')
	});	
}


