

/****************************************************
* Global Vars										*
*													*
*****************************************************/

var browser, directory;
var selectClick = false;
var tdClick = false;
var flashClose = false;

var root = 'http://www.riverdance.com/';
var pImages = [];

String.prototype.endsWith = function(str){ return (this.match(str+"$")==str); }







/****************************************************
* Browser Detection									*
*													*
*****************************************************/

function Detect() {
	
	agent 	= navigator.userAgent.toLowerCase();
						
	// detect OS
	this.isMac		= (agent.indexOf('mac') != -1);
	this.isWin		= (agent.indexOf('win') != -1);
	this.isWin2k	= (this.isWin && (agent.indexOf('nt 5') != -1));
	this.isWinSP2	= (this.isWin && (agent.indexOf('xp') != -1 || agent.indexOf('sv1') != -1));
	this.isOther	= (agent.indexOf('unix') != -1 || agent.indexOf('sunos') != -1 || agent.indexOf('bsd') != -1 || agent.indexOf('x11') != -1 || agent.indexOf('linux') != -1);
	
	// detect browser
	this.isSafari	= (agent.indexOf('safari') != -1);
	this.isSafari2 = (this.isSafari && (parseFloat(agent.substring(agent.indexOf("applewebkit/")+"applewebkit/".length,agent.length).substring(0,agent.substring(agent.indexOf("applewebkit/")+"applewebkit/".length,agent.length).indexOf(' '))) >=  300));
	this.isOpera	= (agent.indexOf('opera') != -1);
	this.isNN		= (agent.indexOf('netscape') != -1);
	this.isFF		= (agent.indexOf('firefox') != -1);	
	this.isFF2		= (agent.indexOf('firefox/2') != -1);
	this.isFF3		= (agent.indexOf('firefox/3') != -1);	
	this.isIE		= (agent.indexOf('msie') != -1);
	this.isIE8		= (agent.indexOf('msie 8.') != -1);
	this.isIE7		= (agent.indexOf('msie 7.') != -1);	
	this.isIE6		= (agent.indexOf('msie 6.') != -1);
	this.isIE5		= (agent.indexOf('msie 5.') != -1);
	this.isIphone	= (agent.indexOf('iphone') != -1);
}

browser = new Detect();





/****************************************************
* Write Out JS Browser Stylesheet					*
*													*
*****************************************************/

function writeJsStyles(w){
	var sSheets = document.getElementsByTagName("link");
	var dir = "";

	if(sSheets[0]){
		if(sSheets[0].href.indexOf("css") != -1){
			dir = sSheets[0].href.substring(0,sSheets[0].href.indexOf("css"));
			if(dir == ''){ dir = './'; }
			directory = dir;
		}
	}
	
	if(w==1){ document.write('<link href="' + dir + 'css/js-dependant.css" rel="stylesheet" type="text/css" media="screen" />'); }
	if(browser.isIE){
		document.write('<link href="' + dir + 'css/old-ie.css" rel="stylesheet" type="text/css" media="screen" />');
		document.write('<script src="' + dir + 'js/iepngfix_tilebg.js" type="text/javascript"></script>');
	}
		
	if(browser.isSafari){
		//document.write('<link href="' + dir + 'css/safari.css" rel="stylesheet" type="text/css" media="screen" />');
	}
	
	if(browser.isIphone){
		//document.write('<link href="' + dir + 'css/iphone.css" rel="stylesheet" type="text/css" media="screen" />');
	}
	
	if(browser.isOpera){
		//document.write('<link href="' + dir + 'css/opera.css" rel="stylesheet" type="text/css" media="screen" />');
	}
	
	if(browser.isFF && !browser.isFF3){
		//document.write('<link href="' + dir + 'css/old-ff.css" rel="stylesheet" type="text/css" media="screen" />');
	}
}





/****************************************************
* Initialise Showing Tour Dates Div					*
*													*
*****************************************************/

function showSelects(show){
	if($('td-container')){
		var elements = $('td-container').getElements('.styled-select');
		var fx = new Fx.Elements(elements, {
			duration: 150, 
			transition: Fx.Transitions.Cubic.easeOut,
			onComplete:function(){
				if(!show){
					$each(elements, function(el, index){
						el.setStyles({ 'display': 'none' });
					});
				}
			}
		});		
		var ob = {};
		var opac;
		
		if(show){
			opac = 1;
			$each(elements, function(el, index){
				el.setStyles({ 'display': 'block', 'opacity': 0 });
			});
			
		} else {
			elements = $('td-container').getElements('.styled-select .options');
			$each(elements, function(el, index){
				//el.setStyles({ 'opacity': 0 });
			});
			opac = 0;
		}
		
		ob[0] = {'opacity': opac };
		ob[1] = {'opacity': opac };
		fx.start(ob);
	}
}

function initTourDates(){
	if($('td-link') && $('td-container')){
		var elements;
		var height = 179;
		var tdEffect = new Fx.Morph($('td-container'), {
			duration: '500',
			link: 'cancel',
			transition: Fx.Transitions.Cubic.easeOut,
			onComplete: function(){
				if($('td-container').getSize().y > 0){
					$('td-container').setStyle('overflow', 'visible');
					showSelects(true);
				} else {
					initSelects(true);
				}
			}
		});
		
		$('td-link').addEvents({
			'mouseover': function(){
				elements = $('td-container').getElements('.styled-select');
				$each(elements, function(el, index){
					el.setStyles({ 'display': 'none' });
				});
				
				try { getFlashMovie('hFlash').actionFunction('vpause'); }
				catch(err){}

				tdEffect.start({ 'width': 297, 'height': 179 });				
			},
			'click': function(event){
				event = new Event(event).stop();
				$('td-link').blur();
			},
			'mousedown': function(){
				tdClick = true;
			}
		});
		
		$('td-container').addEvent('mousedown', function(){
			tdClick = true;
		});
		
		if($(document.body)){
			$(document.body).addEvent('mousedown', function(){
				if(!tdClick){
					$('td-container').setStyle('overflow', 'hidden');
					showSelects(false);
					if(flashClose){
						tdEffect.set({ 'width': 0, 'height': 0 });						
					} else {
						tdEffect.start.delay(150, tdEffect, { 'width': 0, 'height': 0 });
					}
				}
				
				flashClose = false;
				tdClick = false;
			});
		}
	}		
}


function close_tt(){
	flashClose = true;
}




/****************************************************
* Style Select Form Fields							*
*													*
*****************************************************/

var SelectBox = new Class({

	Implements: [Events, Options],

	options: {		
		maxHeight: 300,
		zIndex: 0
	},

	initialize: function(select, options){
		this.setOptions(options);
		this.select = select;
		this.parent = this.select.getParent();
		this.optionsList = this.select.getElements('option');
		if(this.optionsList.length <= 0 || isNaN(this.optionsList.length)){ return; }
		var float, css, tAlign;
		selectClick = true;
		
		if(browser.isIE){ this.selectWidth = 2; }
		else { this.selectWidth = 3; }
		
		if(this.select.style['float'] && this.parent.style['text-align']){
			float = this.select.style['float'];
			tAlign = this.parent.style['text-align'];
		} else if(this.select.currentStyle){
			float = this.select.currentStyle['styleFloat'];
			tAlign =  this.parent.currentStyle['textAlign'];
		} else if(document.defaultView && document.defaultView.getComputedStyle){
			css = getComputedStyle(this.select,'');
			float = css.getPropertyValue('float');
			tAlign = css.getPropertyValue('text-align');
		} else {
			float = 'left';
			tAlign = 'left';
		}
		
		if(!float || float == 'none'){
			if(tAlign == 'right'){ float = 'right'; }
			else { float = 'left'; }
		}
		
		if(!this.select.getAttribute('orig-position')){
			this.select.setAttribute('orig-position', this.select.getStyle('position'));
			this.select.setAttribute('orig-top', this.select.getStyle('top'));
		}
		
		this.holder = new Element('div', {
			'class': 'styled-select',
			'styles': {
				'width': 240,
				'height': 21,
				'top': this.select.getAttribute('orig-top'),
				'left': this.select.getStyle('left'),
				'right': this.select.getStyle('right'),
				'bottom': this.select.getStyle('bottom'),
				'float': float,
				'position': this.select.getAttribute('orig-position'),
				'margin': this.select.getStyle('margin'),
				'padding': '0'			
			}
		}).inject(this.select, 'before');
		
		this.select.setStyles({'position':'absolute', 'top':-1000000});
		
		this.container = new Element('div', {
			'class': 'container',
			'styles': {
				'z-index': this.options.zIndex
			}
		}).inject(this.holder);
		
		this.selected = new Element('div', {'class': 'selected' }).inject(this.container);
		this.selected.setStyles({'height': this.holder.getSize().y - 2, 'line-height': this.holder.getSize().y - 2});
		
		this.arrow = new Element('div', {'class': 'arrow' }).inject(this.container);
		this.arrow.setStyles({'height': this.holder.getSize().y - 3});
		
		var top_size = this.holder.getSize().y;
		if(browser.isIE){ top_size -= 2; }
		
		this.optionsHolder = new Element('div', {
			'class': 'options',
			'styles': {
				'width': this.holder.getSize().x - 2,
				'top': top_size,
				'opacity': 0
			}
		}).inject(this.container);
		this.optionsContent = new Element('div', {'class': 'content'}).inject(this.optionsHolder);
		
		this.ul = new Element('ul', {'styles': {'margin': '0'}}).inject(this.optionsContent);
		var li;
		
		if(!this.select.disabled){		
			this.selected.addEvents({
				'click': function(){ this.closeAll(); this.optionsHolder.setStyle('opacity',1); selectClick=true; }.bind(this),
				'mouseenter': function(){ this.arrow.setStyle('background-image', this.arrow.getStyle('background-image').replace(/1.gif/, '2.gif')); }.bind(this),
				'mouseleave': function(){ this.arrow.setStyle('background-image', this.arrow.getStyle('background-image').replace(/2.gif/, '1.gif')); }.bind(this)
			});
			
			this.arrow.addEvents({
				'click': function(){ this.closeAll(); this.optionsHolder.setStyle('opacity',1); selectClick=true; }.bind(this),
				'mouseenter': function(){ this.arrow.setStyle('background-image', this.arrow.getStyle('background-image').replace(/1.gif/, '2.gif')); }.bind(this),
				'mouseleave': function(){ this.arrow.setStyle('background-image', this.arrow.getStyle('background-image').replace(/2.gif/, '1.gif')); }.bind(this)
			});
		}
		
		$each(this.optionsList, function(option, index){
			if(option.text){
				if(index === 0){ this.selected.innerHTML = option.text; }
				if(option.selected){ this.selected.innerHTML = option.text; }
				
				li = new Element('li', {
					'html': option.text,
					'styles': {
						'background': 'none',
						'padding': '1px 3px'
					},
					'events': {
						'click': function(){ this.choose(index, option.text); selectClick=true; }.bind(this)
					}
				}).inject(this.ul);
			}
		}.bind(this));
		
		this.lis = this.ul.getElements('li');
		$each(this.lis, function(li, index){
			li.addEvent('mouseenter', function(){ this.highlight(li); }.bind(this));
		}.bind(this));
		
		if(this.optionsHolder.getSize().y > this.options.maxHeight){
			this.optionsHolder.setStyle('height', this.options.maxHeight);
			this.optionsContent.setStyle('height', this.options.maxHeight);
			//this.scrollBar = new ScrollBar(this.optionsHolder, this.optionsContent, {isDD:true});
		}
		
		if(this.select.disabled){
			this.disabledLayer = new Element('div', {
				'class': 'disabled-layer',
				'styles': {
					'width': this.holder.getSize().x,
					'height': this.holder.getSize().y
				}
			}).inject(this.container);
			this.holder.addClass('disabled-select');
		}		
		
		this.clear = new Element('div', {
			'styles': {
				'clear':'both',
				'width': '100%',
				'height': '0',
				'line-height': '0',
				'font-size': '0px'
			}
		}).inject(this.parent);
	},
	
	choose: function(index,text){
		if(text){ this.selected.innerHTML = text; }
		this.select.options[index].selected = 'selected';
		this.select.selectedIndex = index;
		this.optionsHolder.setStyle('opacity',0);
		if(this.select.getAttribute('onchange')){
			if(this.select.fireEvent){
				this.select.onchange();
			}
			
			if(document.createEvent){
				var evt = document.createEvent('HTMLEvents');
				if(evt.initEvent){ evt.initEvent('change', true, true); }
				if(this.select.dispatchEvent){ this.select.dispatchEvent(evt); }
			}
		}
	},
	
	highlight: function(li){
		$each(this.lis, function(li, index){
			li.setStyles({'background':'none', 'color':'#000'});
		}.bind(this));
		
		li.setStyles({'background':'#B6E1F2', 'color':'#000'});
	},
	
	closeAll: function(){
		if(document.body){
			this.dds = document.body.getElements('.styled-select .options');
			this.dds.each(function(dd, index){
				dd.setStyle('opacity',0);
			});
		}
	}
});



function initSelects(ref){
	var selects, sel, dds;
	if(document.body){
		selects = document.body.getElements('select');
		if(selects.length > 0){
			dds = document.body.getElements('.styled-select');
			for(var i=dds.length-1; i >= 0; i--){
				dds[i].dispose();
			}
			
			selects.each(function(select, index){
				sel = new SelectBox(select, {zIndex: selects.length-index});
			});
			
			if(!ref){
				$(document.body).addEvent('click', function(){
					if(selectClick){ selectClick = false; }
					else {
						dds = document.body.getElements('.styled-select .options');
						dds.each(function(dd, index){
							dd.setStyle('opacity',0);
						});
					}
				});
			}
		}
	}
}





/****************************************************
* Toggle RSS Feeds									*
*													*
*****************************************************/

function toggleRSS(){
	if($('rss-feed') && $('news')){
		var lis = $('rss-feed').getElements('li');
		if($('rss-feed').get('view')){
			if($('rss-feed').get('view').toInt() == lis.length-1){
				$('rss-feed').set('view', 0);
			} else {
				$('rss-feed').set('view', $('rss-feed').get('view').toInt() + 1);
			}
		} else { $('rss-feed').set('view', 1); }
		
		var rssEffect = new Fx.Morph($('news'), {duration: '500'});
		if(lis.length > 1){
			rssEffect.start({
				'opacity': 0
			}).chain(function(){
				$each(lis, function(li, index){
					li.removeClass('active');
				});
				
				lis[$('rss-feed').get('view').toInt()].addClass('active');
				
				this.start({
					'opacity': 1
				});
			});
		}
	}
}





/****************************************************
* Init Rollovers for Other Nav links not Tours and	*
* tickets											*
*													*
*****************************************************/

function initHomeNavRollovers(){
	if($('home-nav')){
		var imgs = $('home-nav').getElements('img');
		$each(imgs, function(img, index){
			if(index > 0){
				img.addEvents({
					'mouseover': function(){
						if(browser.isIE5 || browser.isIE6){
							img.style.filter = img.currentStyle.filter.replace(/.png/, '_r.png');
						} else {
							img.src = img.src.replace(/.png/, '_r.png');
						}
					},
					
					'mouseout': function(){
						if(browser.isIE5 || browser.isIE6){
							img.style.filter = img.currentStyle.filter.replace(/_r.png/, '.png');
						} else {
							img.src = img.src.replace(/_r.png/, '.png');
						}					
					}
				});
			}
		});		
	}
}




/****************************************************
* Initialise Secondary Play Button over Flash		*
*													*
*****************************************************/

function getFlashMovie(movieName){
	var isIE = navigator.appName.indexOf("Microsoft") != -1;
	return (isIE) ? window[movieName] : document[movieName];
}

function initSecPlayButton(){
	if($('vid-button')){
		$('vid-button').addEvents({
			'click': function(){
				try {
					getFlashMovie('hFlash').actionFunction('vclick');
				} catch(err){}
			},
			'mouseover': function(){
      			try {
					getFlashMovie('hFlash').actionFunction('vrollover');
				} catch(err){}
    		},
			'mouseout': function(){
      			try {
					getFlashMovie('hFlash').actionFunction('vrollout');
				} catch(err){}
    		}					
		});
	}
}




/****************************************************
* On Page Load Functions							*
*													*
*****************************************************/

function init(){
	initTourDates();
	initSelects();
	initHomeNavRollovers();
	initSecPlayButton();
	toggleRSS.periodical(5000);
}




/****************************************************
* On Page UnLoad Functions							*
*													*
*****************************************************/

function memoryClean(e){
}





writeJsStyles(1);
window.addEvent('domready', function() { init(); });
window.addEvent('unload', function() { memoryClean(); });