/* mootools sethtml ie6 support for tables patch */
Element.extend({
	setHTML:function(html){
		var tagName = this.getTag();
		
		if(window.ActiveXObject && tagName.test(/thead|tbody|tr|td/)){
		/*- for mootools v1 if(window.ie &#38;& tagName.test(/thead|tbody|tr|td/)){ */		
			var div = new Element('div'), depth;
			switch (tagName) {
	 	        case 'thead':
		        case 'tbody': div.innerHTML = '<table><tbody>'+html+'</tbody></table>';depth = 2;break;
		        case 'tr': div.innerHTML = '<table><tbody><tr>'+ html+'</tr></tbody></table>';depth = 3;break;
		        case 'td': div.innerHTML = '<table><tbody><tr><td>'+html+'</td></tr></tbody></table>';depth = 4;
	      	}
			$A(this.childNodes).each(
				function(node){this.removeChild(node)}, this);
			for(var i=0; i< depth; i++) div = div.firstChild;
			$A(div.childNodes).each(
				function(node){this.adopt(node)}, this);
		}else{
			this.innerHTML = html;
		}
		return this;
	}
});
/*
check is a point within the bounding box area of any element
usuaally use with mouse x y e.g.
	_x = event.client.x;
	_y = event.client.y;			
	if(! within(button, _x, _y) )
*/
Element.extend({
	within:function(_x, _y){
		var obj = $(this).getCoordinates();	
		if(_x >= obj.left && _x <= (obj.left + obj.width) &&
		_y >= obj.top && _y <= (obj.top + obj.height)	){		
			return true;
		}else{		
			return false;
		}
	}
});

zero =  0.0001; //hmmm dont know what this is about
one = 0.99999; // 1 and 0 cause flicker in opacity

var hoveron;
var hoveroff;

function pageloaded(){
    // get rid of any iframes
	if (top!=self) top.location.replace(location.href);	
	attachrollovers();
	document.onmousedown = hideAllFunction.bindWithEvent(document);
	try{
	Lightbox.init();
	}catch(e){}
}
function pressbutton(element){
	//trace(element+" "+state);
	btn = $(element).getFirst();
	btn.setStyle('background-image', 'url('+btn.src+')'); // set the background to the current image
	btn.setStyle('opacity', zero); // hide the current image
	var fade =  new Fx.Style(btn, 'opacity', {
			duration: 400, transition: Fx.Transitions.sineOut
		});
	
	if(btn.src.indexOf("_off") > 0)	
		btn.src = btn.src.replace(/_off/g,'_on');// replace the current image with the on state
	else
		btn.src = btn.src.replace(/_on/g,'_off');
	
	
	fade.stop();
	fade.start(zero, one); // fade in the new image
}

function showdropdown(button, element, optionsObj){	

	var myEffects = new Fx.Styles(element, {
								  duration: 650, 
								  transition: Fx.Transitions.quadOut, 
								  onStart: function(){
									  pressbutton(button); // swap the button image
									  
									  },
								  onComplete: function(){
								  	prepareHeight(button, element, false);
								  }
								});
	_currentheight = $(element).offsetHeight;
	_maxheight = $(element).scrollHeight;
	
	if(_currentheight == 0 ){
		prepareHeight(button, element, true);
		
		if(optionsObj){
			_left = $(button).getLeft() + optionsObj.left ;
			_top = $(button).getTop() + optionsObj.top ;
		}else{
			//_left = $(button).getLeft() + 8 ;
			//_top = $(button).getTop() + 22 ;
			_left = $(button).getLeft() ;
			_top = $(button).getTop() + $(button).scrollHeight ;
		}
		$(element).setStyle('left', _left+"px");
		$(element).setStyle('top', _top+"px");
		
		myEffects.start({
		'height': [0, _maxheight]
		,'opacity': [0, 1]		
		});
		/* hide the box if mouse is clicked outside area */
		/*
		function hideFunction(event){
			_x = event.client.x;
			_y = event.client.y;			
			//if(! within(button, _x, _y) && ! within(element, _x, _y)){
				trace($(button).within(_x, _y));
			(function(){
				if(! $(button).within(_x, _y) && ! $(button).within(_x, _y)){
					
					prepareHeight(button, element, true);
					myEffects.start({
					'height': [_maxheight, 0]
					,'opacity': [1, 0]
					});
					
					nothing = function(){};
					document.onmousedown = nothing.bindWithEvent(document);
					
				}}).delay(200); // have to deplay this a bit so href click dont get captured
			
		};*/
	// hiden function is built-in to pageloaded now
	//	document.onmousedown = hideFunction.bindWithEvent(document);
	}
	/*else if(_currentheight == _maxheight){
		prepareHeight(button, element, true);
		myEffects.start({
		'height': [_maxheight, 0]
		,'opacity': [1, 0]
		});
		
		nothing = function(){};
	//	document.onmousedown = nothing.bindWithEvent(document);
	}else{}*/
}
/* hide all slide dropdown when click on the document */
function hideAllFunction(){
	$$('.slidedropdown').each(function(element){
		//var  = this;
	
		var _currentheight = $(element).offsetHeight;
		var _maxheight = $(element).scrollHeight;
		if(_currentheight > 0){
			//trace("hide "+_currentheight)
			var myEffects = new Fx.Styles(element, {
				duration: 650, 
				transition: Fx.Transitions.quadOut	,
				onStart: function(){
					//pressbutton(button); // swap the button image
					var button = "bt-"+element.id;
					if($(button)){
						pressbutton(button);	
						prepareHeight(button, element, true);					
					}
				}
				});
				myEffects.start({
					'height': [_maxheight, 0]
					,'opacity': [1, 0]
					});				
			}
		});
		
	
}

/*
draw a div box the length of the dropdown box
*/
function prepareHeight(button, element, show){	

	if(! $("dropdownheight") ){
		mydiv = document.createElement('div');
		document.body.appendChild(mydiv);
		mydiv.id = "dropdownheight";
	}else
		mydiv =  $("dropdownheight");
		
	if($("dropdownheight")){	
		if(show){	
			_newtop = ($(button).getTop() + $(element).scrollHeight + 20); //+20
			$("dropdownheight").setStyle('position', "absolute");			
			$("dropdownheight").setStyle('top', _newtop+ "px");
			$("dropdownheight").setStyle("border", "solid 1px black");
		}else{		
			$("dropdownheight").setStyle('top', 0 + "px");
		}
	}
}
function togglediv(button, element, optionsObj){
	//trace(element.addClass('active'); )
	if(! optionsObj){
		optionsObj = new Object();
	}
		if(optionsObj.activeclass)
		activeclass = optionsObj.activeclass;
		else
		activeclass = $(element).className+"_active";
		if(optionsObj.minheight != null)
		_minheight = optionsObj.minheight;
		else
		_minheight = 26;
		if(optionsObj.left && optionsObj.top){
			_left = $(button).getLeft() + optionsObj.left;
			_top = $(button).getTop() + optionsObj.top ;
			$(element).setStyle('left', _left+"px");
			$(element).setStyle('top', _top+"px");
		}
	
	$(element).toggleClass(activeclass);
	
	var myEffects = new Fx.Styles(element, {duration: 650, transition: Fx.Transitions.quadOut, onComplete: function(){ } });
	_currentheight = $(element).offsetHeight;
	_maxheight = $(element).scrollHeight;
	if(_currentheight <  _maxheight)
	myEffects.start({'height': [_currentheight, _maxheight]});	
	else		
	myEffects.start({'height': [_currentheight, _minheight]});
	
}
function displaydiv(button, element, optionsObj){
	//element = $(element);
	if(! optionsObj){
		optionsObj = new Object();
	}
	if(optionsObj.height)
		_height = optionsObj.height;
	else
		_height = $(element).scrollHeight;
	
	var myEffects = new Fx.Styles($(element), {duration: 650, transition: Fx.Transitions.quadOut, onComplete: 
									function(){
											if($(element).offsetHeight < _height){
												$(element).setStyle("display", "none");
											}
										}
								});
	_currentheight = $(element).offsetHeight;	
	if(_currentheight <  _height){
		$(element).setStyle("display", "");
		myEffects.start({'height': [0, _height]});	
	}
	else		
		myEffects.start({'height': [_height, 0]});
}
/*
check is a point within the bounding box area of any element
usuaally use with mouse x y e.g.
	_x = event.client.x;
	_y = event.client.y;			
	if(! within(button, _x, _y) )
*/
function within(element, _x, _y){
	var obj = $(element).getCoordinates();	
	if(_x >= obj.left && _x <= (obj.left + obj.width) &&
	_y >= obj.top && _y <= (obj.top + obj.height)	){		
		return true;
	}else{		
		return false;
	}
}
/* attach fade in, fade out On state image event to main menu rollovers
required mootools.style.js
*/
function attachrollovers(){
	var atags = $$('#menu a')
	
	
	var split_url=document.URL.split('/');	
	var myfolder = split_url[(split_url.length -2 )];
	var mypage = split_url[(split_url.length -1 )];
	
	atags.each(function(element, key){
		var img = element.getFirst();
		element.setStyle('background-image', 'url('+img.src+')'); // set the background image to the current image
		
		
		var imgfader =  new Fx.Style(element.getFirst(), 'opacity', {
			duration: 600, transition: Fx.Transitions.sineOut, onComplete: function(){
				
				
			}
		});
		
		var moviesfader =  new Fx.Style(element.getFirst(), 'opacity', {
			duration: 600, transition: Fx.Transitions.sineOut, onComplete: function(){
				if(element.name == "movies"){
					//togglediv(element, $("moviedropdown"), {minheight:0, left:1, top:26});
				}
			}
		});
		
		var quickfade =  new Fx.Style(element.getFirst(), 'opacity', {
			duration: 10, transition: Fx.Transitions.sineOut,
			onComplete : function(){img.src = img.src.replace(/_off/g,'_on');}	// replace nav image "_off" with "_on" eg 'menu_home_off.gif' 'menu_home_on.gif'
		});
		quickfade.start(one, zero); /* hide the red images onload */
		
		if(! activesection){
			activesection = new Object();
		}
		if(element.href == document.URL ){
			setActiveLink(element);
		}
		if(activesection){
			//var splits =element.href.split('/');				
			//var elementpage = splits[(splits.length -1 )];
			//trace(element.name +":"+activesection);
			if(element.name == activesection)
			setActiveLink(element);		
		}
		
		element.onmouseover = function(){
			imgfader.stop();	
			
			slideoutmenu = function(_name){
					hoveron = true;
					$(_name).setStyle("height", 0+"px");	
					(function(){
						if(hoveron === true){						 
						 _height = $(_name).scrollHeight;	  
						 					 
						  var slide = new Fx.Styles($(_name), {duration: 200, transition: Fx.Transitions.quadOut, onComplete: function(){} });
				  		  slide.start({'height': [0, _height]});
						 
						}
					}).delay(300);
				}
			
			if(element.name == "movies"){						
				_left = $(element).getLeft() + 1;
				_top = $(element).getTop() + 26 ;			
				$("moviedropdown").setStyle('left', _left+"px");
				$("moviedropdown").setStyle('top', _top+"px");
				slideoutmenu("moviedropdown");
			}
			if(element.name == "giftshop"){				
				_left = $(element).getLeft() - 58;
				_top = $(element).getTop() + 26 ;			
				$("giftshopdropdown").setStyle('left', _left+"px");
				$("giftshopdropdown").setStyle('top', _top+"px");
				slideoutmenu("giftshopdropdown");
			}
			imgfader.start(zero, one);
		}
		element.onmouseout = function(){
					
				slideinmenu = function(_name){
					(function(){
						if(hoveron !== true){
						  imgfader.stop();
						  imgfader.start(one, zero);						  
						  var _size = $(_name).getSize();
						  _height =  _size.size.y;						 
						  var slide = new Fx.Styles($(_name), {duration: 200, transition: Fx.Transitions.quadIn, onComplete: function(){} });
				  		  slide.start({'height': [_height, 0]});
						 
						}
					}).delay(200);
				}
					
				if(element.name == "movies"){ // show the movies dropdown menu
					hoveron = false;
					slideinmenu("moviedropdown");					
					$("moviedropdown").onmouseout = function(){						
						hoveron = false;
						slideinmenu("moviedropdown");						
					}
					$("moviedropdown").onmouseover = function(){					
						hoveron = true;
					}
					$$('#moviedropdown li a').each(
						function(e){							
							e.onmouseover = function(){
								hoveron = true;
						}
						
					});					
				}
				else if(element.name == "giftshop"){ // show the movies dropdown menu
					hoveron = false;
					slideinmenu("giftshopdropdown");						
					$("giftshopdropdown").onmouseout = function(){						
						hoveron = false;
						slideinmenu("giftshopdropdown");						
					}
					$("giftshopdropdown").onmouseover = function(){					
						hoveron = true;
					}
					$$('#giftshopdropdown li a').each(
						function(e){							
							e.onmouseover = function(){
								hoveron = true;
						}
						
					});		
				}
				else{
					imgfader.stop();
					imgfader.start(one, zero);	
						
				}
		}
		
	});
}
function setActiveLink(atag){
	var img = atag.getFirst();
	img.src = img.src.replace(/_off/g,'_on');
	atag.setStyle('background-image', 'url('+img.src+')');
}

function showsessions(obj){
	
	//trace(obj.name);
	var tables = $$('table.sessions')
	tables.each(function(element, key){
		//trace(element.getStyle('display'));
		var display = element.getStyle('display');
		if(display != "none"){
			element.setStyle('display', 'none');			
		}
		
	});
	
	var lis = $$('#sessiontab li')
	lis.each(function(element, key){
		element.removeClass("on");		
		
	});
	if($("session_"+obj.name)){
		$("session_"+obj.name).setStyle('display', '');
		$("session_"+obj.name).setStyle('opacity', zero); // hide the on state
		var fade =  new Fx.Style($("session_"+obj.name), 'opacity', {
			duration: 500, transition: Fx.Transitions.quadIn
		});
		fade.start(zero, one);
	}
	
	$(obj).getParent().addClass("on");
}

function showsessionstable(obj, myhtml, gold){
	
	var tables = $$('table.sessions')
	tables.each(function(element, key){
		//trace(element.getStyle('display'));
		var display = element.getStyle('display');
		if(display != "none"){
			element.setStyle('display', 'none');			
		}
		
	});
	if(obj){
		//$(obj).getFirst().setOpacity(zero);
		var lis = $$('#sessiontab li')
		lis.each(function(element, key){
			element.removeClass("on");		
			src = $(element).getFirst().getFirst().src;
			//$(element).getFirst().getFirst().setOpacity(zero);
			$(element).getFirst().getFirst().src = src.replace(/_on/g,'_off');
		});
		$(obj).getParent().addClass("on");
		src = $(obj).getFirst().src;
		$(obj).getFirst().src = src.replace(/_off/g,'_on');
		//$(obj).getFirst().setOpacity(one);
	}
	$('ajaxloader').setStyle('display', 'none');
	
	writeto = $('session_current').getFirst();
	if(myhtml != ""){
		writeto.setHTML(myhtml);		
		//$('session_current').setStyle('display', '');
	}
	else{
		writeto.setHTML("<tr><td colspan=2 style='text-align:center; padding-top:20px'>Sorry, the session times for this day are not available yet.</td></tr>");
	}
	
	
	
	var mytable = $("session_current");	
	mytable.setStyle('display', '');
	mytable.setStyle('opacity', zero); // hide the on state
	var fade =  new Fx.Style(mytable, 'opacity', {
		duration: 500, transition: Fx.Transitions.quadIn
	});
	
	
	fade.start(zero, one);
	//$('session_current').setHTML("<tr><td>phil dude</td></tr>");
	//$('session_current').setStyle('display', '');
	//trace($('session_current').innerHTML);
	
}
var current_day;
var goldlock;
function getsessiontable(obj, cinemaid, day, gold){
	if(day !== false)
	current_day = day;
	else
	day = current_day;
	
	if(goldlock)
		gold = true;
	
	if($('bt-viewgold')){
		img = $('bt-viewgold').getFirst();	
		if(gold)
		img.src = img.src.replace(/gold/g,'standard');
		else
		img.src = img.src.replace(/standard/g,'gold');
	}
	
	
	_height = $("session_current").offsetHeight;
	$("session_current").setStyle('display', 'none');		
	// display the loading image and center the text
	div = $("session_current").getParent();
	div2 = div.getParent();
	if(gold){
		goldlock = true;
		$("session_current").addClass("gold");		
		div.addClass("gold");
		div2.addClass("goldlounge");
		$('ajaxloader').addClass("gold");
	}
	else{
		//goldlock = false;
		$("session_current").removeClass("gold");
		div.removeClass("gold");
		div2.removeClass("goldlounge");
		$('ajaxloader').removeClass("gold");
	}
	if(_height < 150)
	_height = 150;
	$('ajaxloader').setStyle('padding-top', (Math.round(_height / 2) + 30) +"px");
	$('ajaxloader').setStyle('padding-bottom', (Math.round(_height / 2) - 45) +"px");
	$('ajaxloader').setStyle('display', '');
	
	if(! gold)
	gold = false;	
	
	
	
	var url ="../includes/sessiontable.asp?cinema_id="+cinemaid+"&daysoffset="+day+"&goldsessions="+gold
	// timeout object
	//trace(url);
	timeout = function(){
		this.start = function(){
			showsessionstable(this.obj, this.responseText, this.gold);
		}
	}
	//trace(url);
	var myAjax = new Ajax(url, {
						  method: 'get',
						  onComplete: function(responseText, responseXML){
						  	//showsessionstable(obj, responseText, gold);
							timed = new timeout();
							timed.obj = obj;
							timed.responseText = responseText;
							timed.gold = gold;
							wait = setTimeout("timed.start();", 250); // slow down the loading 
						  	}
						  
						  });
	myAjax.request();
	
}
function showgoldtable(obj, state){
	$$('.goldtabs li img').each(function(element, i){
									$(element).getParent().getParent().removeClass("on");
									$(element).src = $(element).src.replace(/-on/g,'-off');
									//trace();
								});
	$$('div.statetable').each(function(element, i){
								   element.setStyle('display', 'none');
								   });
	$('gold'+state).setOpacity(zero);
	$('gold'+state).setStyle('display', '');
	
	$(obj).getParent().addClass("on");
	
	$(obj).getFirst().src = $(obj).getFirst().src.replace(/-off/g,'-on');
	var fade =  new Fx.Style($('gold'+state), 'opacity', {
			duration: 500, transition: Fx.Transitions.quadIn
		});
	fade.start(zero, one);
}
function swapimg(element, target){	
	var img = $(target);
	oldsrc = img.src;
	newsrc = element.src;
	$(target).getParent().setStyle("background-color", "white");

	var fadein =  new Fx.Style(img, 'opacity', {
			duration: 400, transition: Fx.Transitions.sineIn
		});
	var fadeout =  new Fx.Style(img, 'opacity', {
			duration: 400, transition: Fx.Transitions.sineOut,
			onComplete: function(){img.src = newsrc; fadein.start(zero, one);}								
		});
	(function(){
	fadein.stop();
	fadeout.stop();
	fadeout.start(one, zero)
			  }).delay(200);
	
	

}
function swapgoldbutton(obj){
	img = $(obj).getFirst();
	if(img.src.indexOf('gold') !== -1){
		img.src = img.src.replace(/gold/g,'standard');
	}else{
		img.src = img.src.replace(/standard/g,'gold');
	}
}
function getgoldsessiontable(cinema_id, obj){
	
	//swapgoldbutton(this); return false;
	img = $(obj).getFirst();
	if(img.src.indexOf('gold') !== -1){
		//img.src = img.src.replace(/gold/g,'standard');
		getsessiontable(false, cinema_id, current_day, true); 
	}else{
		//img.src = img.src.replace(/standard/g,'gold');
		goldlock = false;
		getsessiontable(false, cinema_id, current_day, false); 
	}
}

/* display google map */

function displayGoogleMap(address, targetdiv){
	var points = new Array();
	var geocoder = null;
	var map = null;
	var centered = null;
	var zoom = 15;
	if( GBrowserIsCompatible() )
	{
		//trace(address+":"+ targetdiv);
		map = new GMap2( document.getElementById( targetdiv ) );
		map.addControl(new GSmallMapControl());
		geocoder = new GClientGeocoder();
		 var icon = new GIcon();
    	icon.image = "../images/skin/housemap.png";
    	icon.shadow = "../images/skin/shadow-housemap.png";
    	icon.iconSize = new GSize(13.0, 13.0);
    	icon.shadowSize = new GSize(20.0, 13.0);
    	icon.iconAnchor = new GPoint(6.0, 6.0);
    	icon.infoWindowAnchor = new GPoint(6.0, 6.0);        
    	//map.addOverlay(new GMarker(point, icon));

	}
	if( geocoder ){
		geocoder.getLatLng( address, function( point )	{
				if (point) {	
			//	trace(point);
					map.setCenter(point, zoom);					
					var marker = new GMarker(point, icon);
					map.addOverlay(marker);
				}
			} );
	}else{
	//	trace("geo code failed");
	}

}
function reorder(theorder){
	var split_url=document.URL.split('/');		
	var pageandquery = split_url[(split_url.length -1 )];
	if(pageandquery.indexOf("?") > 0){
		split_pages=pageandquery.split('?');	
		page = split_pages[(split_pages.length -2 )];
	}else
		page = pageandquery;
	//trace(page+":"+pageandquery+ " : "+pageandquery.indexOf("?"));
	window.location = page+"?orderby="+theorder.value
}
function slideDot(element, infobox, _left){
	element.setStyle('display', '');
	infobox.setStyle('opacity', zero);
	var fadein =  new Fx.Style(infobox, 'opacity', {
			duration: 1500, transition: Fx.Transitions.quadOut
		});
	var slide = new Fx.Styles(element, {duration: 1650, transition: Fx.Transitions.bounceOut, 
							  onComplete: function(){
											infobox.setStyle('display', '');																	   
											infobox.setStyle('left', (_left - 4)+"px");
											fadein.start(zero, one);
											}
				});
	slide.start({'left': [0, _left]});
}



/*****************************************************************/
/**** trace window *****/
/*****************************************************************/
var tracecount = 0;
var opener = new Object();
function trace(msg, options){
	if(! options)
	options = new Object();
	tracecount++;
	if(options){
		width = options.width ? options.width:300;
		height = options.height ? options.height:300;
		scrollbars = options.scrollbars ? options.scrollbars:1;
		resizable = options.resizable ? options.resizable:1;
		windowname = options.windowname ? options.windowname:'tracewindow';
	}
	if(! opener.document){
		opener = window.open('', windowname,'toolbar=0,scrollbars='+scrollbars+',location=0,statusbar=0,menubar=0,resizable='+resizable+',width='+width+',height='+height);
		opener.document.write('<body style="background:#ffffcc"><div id="trace" style="font:10px arial;">output</div></body>');
		opener.document.close();
		opener.onunload = function(){
			opener = new Object();
		}
	}
	opener.document.getElementById('trace').innerHTML = opener.document.getElementById('trace').innerHTML +"\n<br/>"+tracecount+":"+msg;
}