

var Modal = new Class({
	Implements: [Events, Options],
	options: {
		overlayId: 'modal-overlay',
		modalId: 'modal-window',
		hasClose: true,
		closeClass: 'close',
		closeHtml: '',
		clickToClose: true,
		transitionDuration: 250,
		onShowComplete: Class.empty,
		onHideComplete: Class.empty,
		onUpdateComplate: Class.empty
	},
	initialize: function(options){
		this.setOptions(options);
		
		// create overlay element
		this.overlay = new Element('div').setProperty('id', this.options.overlayId).inject(document.body);
		if(this.options.clickToClose){
			// add a pointer on the overlay if click to close is set
			this.overlay.setStyle('cursor', 'pointer');
		}
		
		// create modal window
		this.modal = new Element('div').setProperty('id', this.options.modalId).injectAfter(this.overlay);
		if(this.options.hasClose){
			// create close button if option set
			this.modalClose = new Element('div').addClass(this.options.closeClass).set('html', this.options.closeHtml).inject(this.modal);
		}
		this.modalContent = new Element('div').addClass('content').inject(this.modal);
		
		// create effects objects
		this.modal.fx = new Fx.Tween(this.modal, {
			property: 'opacity',
			duration: this.options.transitionDuration
		});
		this.overlay.fx = new Fx.Tween(this.overlay, {
			property: 'opacity',
			duration: this.options.transitionDuration
		});
		this.overlay.fx.set(0);
		
		this.isOpen = false;
		
		this.attach();
	},
	attach: function(){
		var self = this;
		
		if(this.options.clickToClose){
			this.overlay.addEvent('click', function(){
				self.hide();
			});
		}
		
		window.addEvent('resize', function(){
			if(self.isOpen){
				self.positionOverlay();
				self.positionModal();
			}
		});
		
		// attach event if option set for close
		if(this.options.hasClose){
			this.modalClose.addEvent('click', function(){
				self.hide();
			});
		}
	},
	show: function(content){
		// modal is not open yet
		if(!this.isOpen){
			this.isOpen = true;
			
			this.modal.fx.set(0);
			this.modal.setStyle('display', 'block');
			// inject content in to modal window
			content.inject(this.modalContent);
			
			// fix for ie6 select boxes showing through and safari 2 flash showing through
			if(Browser.Engine.trident4)
				$$('select').setStyle('visibility', 'hidden');
			else if(Browser.Engine.webkit419)
				$$('embed').setStyle('visibility', 'hidden');
			
			// show/position and fade in overlay
			this.overlay.setStyle('display', 'block');
			this.positionOverlay();
			this.overlay.fx.start(0.6).chain(function(){
				this.positionModal();
				this.modal.fx.start(1).chain(function(){
					this.fireEvent('onShowComplete');
				}.bind(this));
			}.bind(this));
		}
		// modal is already open so we just need to update and reposition
		else{
			this.modal.fx.start(0).chain(function(){
				this.modalContent.empty();
				content.inject(this.modalContent);
				this.positionModal();
				this.modal.fx.start(1).chain(function(){
					this.fireEvent('onShowComplete');
					this.fireEvent('onUpdateComplete');
				}.bind(this));
			}.bind(this));
		}
	},
	hide: function(){
		if(this.isOpen){
			this.isOpen = false;
			this.modal.fx.start(0).chain(function(){
				this.modal.setStyles('display', 'none');
				this.overlay.fx.start(0).chain(function(){
					// fix for ie6 select boxes showing through and safari 2 flash showing through
					if(Browser.Engine.trident4)
						$$('select').setStyle('visibility', 'visible');
					else if(Browser.Engine.webkit419)
						$$('embed').setStyle('visibility', 'visible');
					this.overlay.setStyle('display', 'none');
					this.modalContent.empty();
					this.fireEvent('onHideComplete');
				}.bind(this));
			}.bind(this));
		}
	},
	positionOverlay: function(){
		this.overlay.setStyles({
			'height': window.getScrollHeight(),
			'width': window.getWidth()
		});
	},
	positionModal: function(){
		var modalSize = this.modal.getSize();
		var left = (window.getScrollLeft() + (window.getWidth() - modalSize.x)/2);
		var top = (window.getScrollTop() + (window.getHeight() - modalSize.y)/2);
		if(top < 0)
			top = 0;
		this.modal.setStyles({
			'top': top,
			'left': left
		});
	}
});

var ModalHandler = new Class({
	Implements: [Events, Options],
	options: {
		loginUrl: '/vegas/play/sports/modal/login.jsp',
		sendToAFriendUrl: '/vegas/play/sports/modal/send.jsp',
		newsListUrl: '/vegas/play/sports/modal/news.jsp'
	},
	initialize: function(options){
		this.setOptions(options);
		
		this.modal = new Modal();
		
		this.attach();
	},
	attach: function(){
		// event delegation for opener links
		$(document.body).addEvent('click', function(e){
			var target = $(e.target);
			if(target.get('tag') == 'a'){
				// send to a friend links
				if(target.hasClass('send-to-a-friend')){
					e.preventDefault();
					// use ajax to get the form
					var request = new Request.HTML({
						onComplete: function(responseTree, responseElements, responseHTML, responseJavaScript){
							// show the form
							this.showSendToAFriend(responseHTML);
						}.bind(this)
					});
					request.get(target.get('href'));
				}
				
				// show all news articles link
				else if(target.get('id') == 'show-news-list'){
					e.preventDefault();
					this.showNewsList();
				}
			}
		}.bind(this));
	},
	getLogin: function(){
		// check to see if the user is already logged in before doing anything
		if(!isLoggedIn){
			var request = new Request.HTML({
				onComplete: function(responseTree, responseElements, responseHTML, responseJavaScript){
					// show the form
					this.showLogin(responseHTML);
				}.bind(this)
			});
			request.get(this.options.loginUrl);
			return true;
		}
		else
			return false;
	},
	showLogin: function(html){
		// strip the required html and make an element from it
		var responseText = html.split('<body>')[1].split('</body>')[0];
		var responseElement = new Element('div').set('html', responseText);
		
		// atach a on submit event to the form that
		var self = this;
		responseElement.getElement('form').addEvent('submit', function(e){
			e.stop();
			// submit the form with ajax
			var url = this.action + "?" + this.toQueryString();
			new Request({
				url: url,
				method: 'post',
				onComplete: function(response){
					if(response.contains('modal-login'))
						self.showLogin(response); // User not logged in yet show the form again
					else
						window.location.reload(); // refresh the page
					/*// Use the response length to determine if the user has logged in or not
					if(response.contains('modal-login')){
						// User not logged in yet show the form again
						self.showLogin(response);
					}
					else{
						// refresh the page
						window.location.reload();
						// The user has succesfully logged in. Set the global login flag to true and hide the popup
						isLoggedIn = true;
						self.modal.hide();
					}*/
				}
			}).send();
		});
		
		// show in modal window
		this.modal.show(responseElement.getFirst());
	},
	showSendToAFriend: function(html){
		// strip the required html and make an element from it
		var responseText = html.split('<body>')[1].split('</body>')[0];
		var responseElement = new Element('div').set('html', responseText);
		
		// atach a on submit event to the form that
		var self = this;
		responseElement.getElement('form').addEvent('submit', function(e){
			e.stop();
			// submit the form with ajax
			var url = this.action + "?" + this.toQueryString();
			new Request({
				url: url,
				method: 'post',
				onComplete: function(response){
					// take the response and put back in the page
					self.showSendToAFriend(response);
				}
			}).send();
		});
		
		// show in modal window
		this.modal.show(responseElement.getFirst());
	},
	showNewsList: function(){
		// pull in the news list
		var request = new Request.HTML({
			onComplete: function(responseTree, responseElements, responseHTML, responseJavaScript){
				// show in modal window
				this.modal.show(responseElements[0]);
				// apply scroll bar
				new ScrollBar('news-scroll',{
					trackDimension: 17
				});
			}.bind(this)
		});
		request.get(this.options.newsListUrl);
	}
});


/*
 * This is a patch for Mootools Request.HTML
 *
 * If you use Request.HTML to load some data containing any HTML special chars
 * like &nbsp; or &laquo; it won't work with Webkit based browsers.
 */
Request.HTML.implement({
	processHTML: function(text){
		var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
		text = (match) ? match[1] : text;
		
		var container = new Element('div');
		
		return $try(function(){
			var root = '<root>' + text + '</root>', doc;
			if(Browser.Engine.trident){
				doc = new ActiveXObject('Microsoft.XMLDOM');
				doc.async = false;
				doc.loadXML(root);
			}else{
				doc = new DOMParser().parseFromString(root, 'text/html');
			}
			root = doc.getElementsByTagName('root')[0];
			for(var i = 0, k = root.childNodes.length; i < k; i++){
				var child = Element.clone(root.childNodes[i], true, true);
				if(child) container.grab(child);
			}
			return container;
		}) || container.set('html', text);
	}
});





var futuralight = {
  src: '/swf/FuturaLight.swf'
};
sIFR.activate(futuralight); 
sIFR.replace(futuralight, {
	selector: '#accordion h3.toggler',
	css: [
		'.sIFR-root {color: #d1d3d4; font-size:9px; text-transform:uppercase}',
		'a { color: #d1d3d4; text-decoration:none; text-transform:uppercase }',
		'a:hover { color: #d1d3d4; text-decoration:none; text-transform:uppercase}'
	],
	wmode:'transparent',
	preventWrap: true,
	selectable:false,
	fitExactly:true,
	tuneWidth:10
});
var futura = {
  src: '/swf/Futura.swf'
};
sIFR.activate(futura); 
sIFR.replace(futura, {
	selector: '.featured-sub-nav li',
	css: [
		'.sIFR-root {color: #d1d3d4; font-size:9px; text-transform:uppercase}' ,
		'a { color: #d1d3d4; text-decoration:none; }',
		'a:hover { color: #d1d3d4; text-decoration:none;}'
	],
	wmode:'transparent',
	preventWrap: true,
	fitExactly:true,
	tuneWidth:15,
	offsetTop:(Browser.Engine.trident4?8:5),
	offsetLeft:(Browser.Engine.trident4?10:0)
});

var futuraGradientMask = {
  src: '/swf/FuturaGradientMask.swf'
};
sIFR.activate(futuraGradientMask); 
sIFR.replace(futuraGradientMask, {
	selector: '.gradient-sifr',
	css: [
		'.sIFR-root {color: #d1d3d4; font-size:22px;}',
		'a { color: #d1d3d4; text-decoration:none; }',
		'a:hover { color: #d1d3d4; text-decoration:none;}'
	],
	wmode:'transparent',
	preventWrap:true
});


sIFR.replace(futuraGradientMask, {
	selector: '.gradient-sifr2',
	css: [
		'.sIFR-root {color: #d1d3d4; font-size:18px;}',
		'a { color: #d1d3d4; text-decoration:none; }',
		'a:hover { color: #d1d3d4; text-decoration:none;}'
	],
	wmode:'transparent',
	preventWrap:true,
	fitExactly:true,
	tuneWidth:6
});
function lateSifr() {
sIFR.replace(futura, {
	selector: '#update-bucket .event-title',
	css: [
		'.sIFR-root {color: #d1d3d4; font-size:12px;}'
	],
	wmode:'transparent',
	preventWrap: true,
	fitExactly:true,
	tuneWidth:6
});
}
lateSifr();

var shops={
	init:function() {
		$(document.body).addClass("js")
		if ($("gallery_scroller")) this.setupGallery();
		
		$$("#enter_keyword input").addEvent("focus",function(event) {
			if (this.value=="KEYWORD") this.value="";
		}).addEvent("blur",function(event) {
			if (this.value=="") this.value="KEYWORD";
		})
		
		$$(".more-in-store-btn").addEvent('click',function(event) {
			var self=event.target
			$$(".item").each(function(item) {
				 item.removeClass("on").erase("style");
			})
			var item=$(self).getParent(".item").toggleClass("on")
			new Fx.Morph(item).start({
				"background-position":[[-1000,0],[-5,0]]
			})
			var top=($$("#results .item").indexOf(item)*item.getCoordinates().height)+55;
			var bottom=$("results").getCoordinates().bottom
			if (top+880>bottom) top=bottom-767;
			$("more_in_store").setStyles({"display":"block"}).tween("top",top).empty().grab(new Element("div",{"class":"loader"}))
			
			new Request({
				url:"/vegas/play/shopping/includes/more-in-store.jsp",
				method:"get",
				onComplete:function(rt) {
					$("more_in_store").empty().grab(new Element("div",{html:rt}).setStyle("opacity",0).tween("opacity",1))
				}
			}).send("storeId="+self.get("id"))
		})
		
		
		
		$$(".more-in-store-btn2").addEvent('click',function(event) {
			var self=event.target
			if (self.hasClass("showing")) return;
			self.addClass("showing");
			new Fx.Morph(self.getParent()).start({
				"background-position":[[-400,0],[-4,0]],
				"padding-top":20,
				"padding-bottom":20,
				"height":45
			}).chain(function() {
				$$("#more_in_store").setStyles({"width":0,"display":"block","left":664}).tween("width",240)
			})
		})
		
		
		$$("#more_in_store").addEvent("click",function(event) {
			if ($(event.target).hasClass("close-btn")) {
				event.stop();
				$$(".item.on").removeClass("on");
				if (!$("mis_btn")) $("more_in_store").empty().setStyles({"display":"none"});
				else {
					$("more_in_store").setStyles({"display":"none"});
					$("mis_btn").erase("style").getElement("img").removeClass("showing")
					
					//this causes a repaint it IE6/7, only way to fix disappearing button.
					if (Browser.Engine.trident) setTimeout(function(){$("mis_btn").setStyle("opacity",1)},1)
				}
			}
		})
	},
	setupGallery:function() {
		var length=$("gallery_scroller").getElements("img").length;
		$("gallery_scroller").setStyle("width",390*length)
		this.tween=new Fx.Tween($("gallery_scroller"));
		
		$$("#gallery_indicators a").addEvent("click",function(event) {
			event.stop();
			var self=event.target;
			if (self.hasClass("on")) return;
			var target=0;
			$$("#gallery_indicators a").each(function(item,index) {
				if (item==self) target=index;
			})
			
			$$("#gallery_indicators a.on").removeClass("on")
			self.addClass("on");
			
			$$("#gallery_scroller img")[target].setStyle("opacity",0);
			(function() {$$("#gallery_scroller img")[target].tween("opacity",1)}).delay(200);
			
			this.tween.start("left",(target*-375))
			
		}.bind(this))
	},
	toggleAccordion:function(id) {
	$$("#accordion .toggler").each(function(item,index) {
		if (item.get("id")==id) {
			shops.accordion.display(index);
		}
	})
		
	}
}
window.addEvent("domready",shops.init.bind(shops))
//shops.init()

window.addEvent("domready",function() {
var id=0;
if ($("accordion") && $("box")) {
if (location.hash.indexOf("event-id")) {
	var hash=location.hash.replace("#e","");
	$$("#accordion .toggler").each(function(item,index) {
		if (item.get("name")==hash) id=index;
	})
}
shops.accordion=new Accordion($('accordion'), 'h3.toggler', 'div.acc-cnt', {
	opacity: false,
	display:id||0,
	alwaysHide:true,
	onActive: function(toggler, element){			
		toggler.setStyle('background-image', 'url(/images/play/shopping/bgAccHdrActive.jpg)');
		toggler.addClass("on");
		element.removeClass("off")
		//element.getElement(".gradient-sifr:not(.sIFR-replaced)")
		sIFR.replace(futuraGradientMask, {
			selector: '.gradient-sifr',
			css: ['.sIFR-root {color: #d1d3d4; font-size:22px;}',
		'a { color: #d1d3d4; text-decoration:none; }',
		'a:hover { color: #d1d3d4; text-decoration:none;}'],
			wmode:'transparent',
			preventWrap:true
		});
	},
	onBackground: function(toggler, element){	
		toggler.setStyle('background-image', 'url(/images/play/shopping/bgAccHdr.jpg)');
		toggler.removeClass("on")
		element.addClass("off")
	}
});
}
if ($("box")) {
shops.slide=new noobSlide({
	box: $('box'),
	items: $$('#box>div'),
	size: 167,
	addButtons: {
		previous: $$('#ss_special_offers img.arrowLeft'),
		next: $$('#ss_special_offers img.arrowRight')
	}
})
}


$$("#twelve").addEvent("click",function(event) {
	event.stop();
	$(document.body).grab(
		new Element("div",{"id":"overlay_holder",styles:{height:$(document.body).getSize().y,width:$(document.body).getSize().x}}).grab(
			new Element("div",{"id":"overlay"}).setStyle("opacity",0.5).addEvent("click",function(event) {
				$("overlay_holder").destroy();
				if (Browser.Engine.trident4) $(document.body).setStyle("overflow","auto")
			})
		).grab(
			new Element("iframe",{"id":"overlay_iframe","class":"loading","src":"/vegas/play/shopping/tandc.jsp","frameborder":"0","allowtransperancy":true,"bgcolor":"#000000"}).addEvent("load",function(){$("overlay_iframe").removeClass("loading")})
		)
	)
	if (Browser.Engine.trident4) $(document.body).setStyle("overflow","hidden").scrollTo(0,0);
})




var addthis_pub="vegasshopping";
var addthis_offset_top = (Browser.Engine.trident?-13:182);

	$$("#accordion .share-this").each(function(item) {
		SHARETHIS.addEntry({
				title:item.getProperty("title"),
				url:item.getProperty("href"),
				content:item.getNext(".share-this-description").get('text')
			},{
				button:false,
				embeds:true
		}).attachButton(item)
		item.removeEvents().addEvent("click",function(event) {event.stop()})
	})
})




















































window.addEvent('domready',function() {


	var modal = new Modal();
	$(document.body).addEvent("click",function(event) {
		if ($(event.target).hasClass("add-favorites-button")==false) return;
		var e=event
		event.stop();
		var target = $(event.target);
		if(!isLoggedIn){// user is not logged in yet so do it
			new Request({
				url:'/vegas/features/summer/login.jsp',
				method: 'get',
				onComplete: function(text) {
					showLogin(text,target,e)
				}
			}).send();
		}else{
			var form = target.getParent('#login-form-er');
			form.set('send', {
				url: "/vegas/myvegas-user-profile", 
				method: 'post',
				onComplete: function(response){
					var element = new Element('a',{
						"class":"vegas-favorites-saved",
						"href":"/vegas/my-vegas/index.jsp",
						"html":"saved to my vegas favorites"
					})
					var id=target.get("id")
					element.clone().replaces(target)
					if ($(id)) element.clone().replaces($(id))
				}
			});
			form.send();
		}
	});
	
	
	function showLogin(text,target,event){
		// test response for login window
		if(text.contains('login-form-window')){
			// strip the html we need from the response
			var responseText = text.split('<body>')[1].split('</body>')[0];
			var responseElement = new Element('div',{html:responseText});
			var form = responseElement.getElement('form');
			if(form != null){
				form.addEvent('submit', function(e){
					e.stop();
					if ($("email") && $("password")) {
						if ($("email").get("value")=="") $("email").setStyle("border","1px solid red");
						else $("email").erase("style")
						if ($("password").get("value")=="") $("password").setStyle("border","1px solid red");
						else $("password").erase("style")
						if ($("email").get("value")=="" || $("password").get("value")=="") return
					}
					this.addClass("working")
					this.set('send', {
						url: "/vegas/myvegas-user-profile", 
						method: 'post',
						onComplete: function(text) {
							showLogin(text,target,event)
						}
					});
					this.send();					
				});
			}
			modal.show(responseElement);
		}
		// if the response does not contain the login form login must have been sucessfull
		else{
			// refresh the page because if we don't causes weird issues --> (new) try to add favorite first
			if (target) {
				isLoggedIn=true;
				modal.hide()
				new Request({
					url:"/vegas/myvegas-user-profile",
					method:"post",
					onComplete:function() {
						var element = new Element('a',{
							"class":"vegas-favorites-saved",
							"href":"/vegas/my-vegas/index.jsp",
							"html":"saved to my vegas favorites"
						})
						var id=target.get("id")
						element.clone().replaces(target)
						if ($(id)) element.clone().replaces($(id))	
					}
				}).send(target.getParent("form").toQueryString())
			}
		}
		
	}
									})