// JavaScript Document

var PerformanceState = { unknown:-1, notActive:0, soldOut:1, freeAdmission:2, available:3, limited:4 };

var debug = '';

function startDebug()
{
	debug = '';
	appendDebug('START');
}

function appendDebug(data)
{
	var date = new Date();
	debug += date.getSeconds() + "." + date.getMilliseconds() + ": " + data + "\n";
}

function displayDebug()
{
	appendDebug('END');
	alert(debug);
}

function jsonAjaxRequest(month, year, node) {
	var url = '/proxy/JsonEnta.ashx';

	if(month < 9){
		var postDate = year+'-0'+(month + 1)+'-01T00:00:00';
	} else {
		var postDate = year+'-'+(month + 1)+'-01T00:00:00';
	}

	if(calType == 'small'){
		var paramsOut = '{"id":1,"method":"GetShowPerformancesByMonth","params":{"culture" : "'+culture+'", "showID" : '+calPlayId+', "month" : "'+postDate+'"}}';

		} else {
		var paramsOut = '{"id":1,"method":"GetPerformances","params":{"culture" : "'+culture+'", "showMonth" : "'+postDate+'"}}';
	}

	var playsArr = new Array();
	var ajax = new Ajax.Request(url, {
		method: 'post',
		postBody: paramsOut,
		asynchronous: false,
		onComplete: function(request){
			playsArr = handleResponse(request);
			displayCalendar(month, year, playsArr, node);
		}
	});
}
var playsArr = new Array();
function handleResponse(request) {
	
	try{
		var data = request.responseText.evalJSON(true);
	} catch(err) {
	}

	if (typeof(data.error) != 'undefined') {
		return false;
	}

	if (typeof(data.result.vJSONreponse.dates) == 'undefined') {
		return false;
	}


	var i=0;
	playsArr = new Array();
	data.result.vJSONreponse.dates.each( function(item) 
	{
		var date = item.date;
		var plays = item.plays; 
		playsArr[date] = plays;
	});
	return playsArr;
}

function scrollPageTop(){
	scroll(0,0);
}

function setToday() {
	var now   = new Date();
	var day   = now.getDate();
	var month = now.getMonth();
	var year  = now.getFullYear();

	this.focusDay = day;

	$('calMonth').selectedIndex = month;

	$('calYear').value = year;
	jsonAjaxRequest(month, year, 1);
}

function isFourDigitYear(year) {
	if (year.length != 4) 
	{
		$('calYear').select();
		$('calYear').focus();
	}
	else 
	{ 
		return true;
	}
}

function selectDate() {
	var year = $('calYear').value;
	if (isFourDigitYear(year)) {
		var day   = 0;
		var month = $('calMonth').selectedIndex;
		jsonAjaxRequest(month, year, 1);
    }
}

function setPreviousYear() {
	var year  = $('calYear').value;
	//var year  = document.calControl.year.value;
	if (isFourDigitYear(year)) {
		var day   = 0;
		var month = $('calMonth').selectedIndex;
		//var month = document.calControl.month.selectedIndex;
		year--;
		//document.calControl.year.value = year;
		$('calYear').value = year;
		jsonAjaxRequest(month, year, 1);
	}
}
function setPreviousMonth() {
	var year  = $('calYear').value;
	//var year  = document.calControl.year.value;
	if (isFourDigitYear(year)) {
		var day   = 0;
		//var month = document.calControl.month.selectedIndex;
		var month = $('calMonth').selectedIndex;
		if (month == 0) {
			month = 11;
		if (year > 1000) {
			year--;
			//document.calControl.year.value = year;
			$('calYear').value = year;
		}
		} else { month--; }
		//document.calControl.month.selectedIndex = month;
		$('calMonth').selectedIndex = month;
		jsonAjaxRequest(month, year, 0);
	}
}
function setNextMonth() {
	var year  = $('calYear').value;
	//var year  = document.calControl.year.value;
	if (isFourDigitYear(year)) {
		var day   = 0;
		//var month = document.calControl.month.selectedIndex;
		var month = $('calMonth').selectedIndex;
		if (month == 11) {
			month = 0;
			year++;
			//document.calControl.year.value = year;
			$('calYear').value = year;
		} else { month++; }
		//document.calControl.month.selectedIndex = month;
		$('calMonth').selectedIndex = month;
		//alert(year+':::'+month);
		jsonAjaxRequest(month, year, 2);
   }
}
function setNextYear() {
	//var year = document.calControl.year.value;
	var year  = $('calYear').value;
	if (isFourDigitYear(year)) {
		var day = 0;
		//var month = document.calControl.month.selectedIndex;
		var month = $('calMonth').selectedIndex;
		year++;
		//document.calControl.year.value = year;
		$('calYear').value = year;
		jsonAjaxRequest(month, year, 1);
	}
}
function createToolTip(element, content){
	
}
var playsTodayLinkContent = new Array();
function displayCalendar(month, year, playsArr, node) {
	month = parseInt(month);
	year = parseInt(year);
	var i = 0;
	var days = getDaysInMonth(month+1,year);
	var firstOfMonth = new Date (year, month, 0);
	var startingPos = firstOfMonth.getDay();
	days += startingPos;
	
	if(calType == 'small'){
		var outPut = '<table class="calender_small" cellspacing="0" cellpadding="0"><tr>';
		//$('showDatesListThisPerformance').innerHTML = '';
	} else {
		var outPut = '<table class="calender" cellspacing="0" cellpadding="0"><tr>';
	}
	for (i = 0; i < startingPos; i++) {
		if ( i%7 == 0 ){
			outPut += '</tr><tr>';
		}
		if(calType == 'small'){
			outPut += '<td> - </td>';
		} else {
			outPut += '<td>&nbsp;</td>';
		}
	}
	var uniqueID = 0;
	
	for (i = startingPos; i < days; i++) {
		var playsToday = '';
		if ( i%7 == 0 ){
			outPut += '</tr><tr>';
		}
		var today = i-startingPos+1;
		if(calType == 'small')
		{
			playsTodayLinkContent[today] = '';
			try{
				if(playsArr[today] && playsArr[today].length != null){
					playsArr[today].each( function(play) 
					{
						
						var showDetails = '<table class="showDatesDetails" cellpadding="0" cellspacing="0" border="0"><tr><td>';
						showDetails += play.play.namedDate;
						showDetails += '</td><td>';
						showDetails += play.play.time;
						showDetails += '</td><td>';
						showDetails += '</td><td class="buyTicet">';
						
						switch(GetTicketState(play.play))
						{
							case PerformanceState.available:
								showDetails += '<a href="javascript:EntaFrame(\''+play.play.order_Url+'\')"><span>K&oslash;b billet</span></a>';
								break;
							case PerformanceState.limited:
								showDetails += '<a href="'+play.play.limitPurchaseLinkUrl+'"><span>K&oslash;b billet</span></a>';
								break;
						}
						showDetails += '</td></tr></table>';
						playsTodayLinkContent[today] += showDetails;
					});
					playsToday = '<div class="dateNumberSmall isPlayToday" onMouseDown="$($(\'showDatesListThisPerformance\').innerHTML = playsTodayLinkContent['+today+'])" style="cursor:pointer">'+today+'</div>';
				} else {
					playsToday = '<div class="dateNumberSmall">'+today+'</div>';
				}
			} catch(err) {
				//alert(err);
			}
			outPut += '<td class="thisMonth">'+playsToday+'</td>';
		}
		else 
		{
			var playsToday = '<table class="cal_date_table" cellpadding="0" cellspacing="0" border="0">';			

			if(playsArr[today] && playsArr[today].length != null)
			{
				playsArr[today].each(function(play) 
				{
						uniqueID++;
						playsToday += GetPlay(play, uniqueID);
					});
				}
				else
				{
					playsToday += GetEmptyDate();
				}

			playsToday += '</table>';
			outPut += '<td class="thisMonth"><div class="dateNumber">'+today+'</div>'+playsToday+'</td>';
		}

	}
	for (i=days; i<42; i++)  {
		if ( i%7 == 0 ){
			outPut += '</tr><tr>';
		}
		if(calType == 'small'){
			outPut += '<td> - </td>';
		} else {
			outPut += '<td>&nbsp;</td>';
		}
	}
	outPut += '</tr></table>';
	var monthName = String($('calMonth').options[$('calMonth').selectedIndex].text);

	$('cal_month').innerHTML = monthName;
	Cufon.replace($('cal_month'));
	
	if(calType == 'small'){
		$('calender_container_small').childNodes[node].innerHTML = outPut;
	} else {
		$('calender_container').childNodes[node].innerHTML = outPut;
		anylinkcssmenu.init("anchorclass");
	}
}

function GetEmptyDate()
{
	return '';
}

function GetPlay(play, uniqueID)
{
	var playData = '';
	var playTitle = GetPlayTitle(play.play.showName);
	
	var timeArray = play.play.perTime.split(',');
	var playTime = GetPlayTime(timeArray);
	var fieldName = GetFieldName(timeArray, uniqueID);

	playData += '<tr class="anchorclass " rel="playTr_'+fieldName+'"><td class="cal_date_time">'+playTime+'<img style="width: 3px; height: 3px;" src="/images/content/blank.png">|</td><td><a class="showThisTime" href="'+play.play.siteCoreUrl+'">'+playTitle+'</a>';
	playData += GetPlayDetail(play, fieldName) + '</td></tr>';
	
	return playData;
}

function GetFieldName(timeArray, uniqueID)
{
	return timeArray[0] + ('0' + timeArray[1]).slice(-2) + ('0' + timeArray[2]).slice(-2) + ('0' + timeArray[3]).slice(-2) + ('0' + timeArray[4]).slice(-2) + '_' + uniqueID
}

function GetPlayTime(timeArray)
{
	var playTime = new Date(timeArray[0],timeArray[1],timeArray[2],timeArray[3], timeArray[4]);
	var playtimeHour = playTime.getHours();
	var playtimeMins = playTime.getMinutes();
	
	return ('0' + playtimeHour).slice(-2) + ':' + ('0' + playtimeMins).slice(-2);
}

function GetPlayDateTime(perTime) {
    var timeArray = perTime.split(',');
    return new Date(timeArray[0], timeArray[1] - 1, timeArray[2], timeArray[3], timeArray[4]);
}

function GetPlayDetail(play, fieldName)
{
	var playsTodayPopup = '';
	playsTodayPopup += '<div class="popShowName">' + play.play.showName + '</div>';
	playsTodayPopup += '<div class="popShowDetails">';
	playsTodayPopup += play.play.venue;
	
	if (play.play.stageName.length > 0)
		playsTodayPopup += " | " + play.play.stageName;

	playsTodayPopup += "<br />";
	playsTodayPopup += "<br />";
	
	switch(GetTicketState(play.play))
	{
		case PerformanceState.notActive:
			playsTodayPopup += '&nbsp;';
			break;
		case PerformanceState.soldOut:
			playsTodayPopup += '<span class="ticketSoldOut" style="float:right">' + ticketSoldOut + '</span>';
			break;
		case PerformanceState.freeAdmission:
			playsTodayPopup += '<span style="float:right;">' + ticketFreeAdmission + '</span>';
			break;
		case PerformanceState.available:
			playsTodayPopup += '<span class="buyTicet"><a style="float:right" href="javascript:EntaFrame(\''+play.play.order_Url+'\')">' + ticketPurchase + '</a></span>';
			break;
		case PerformanceState.limited:
			playsTodayPopup += '<span class="buyTicet"><a style="float:right" href="'+play.play.limitPurchaseLinkUrl+'">' + ticketPurchase + '</a></span>';
			break;
	}

	playsTodayPopup += '</div>';
	return '<div id="playTr_'+fieldName+'" class="anylinkcsscols">'+playsTodayPopup+'</div>';
}

function GetPlayTitle(showName)
{
	if(showName.length > 13 )
	{
		return showName.substr(0,11)+'...';
	}
	
	return showName;
}
	
function getDaysInMonth(month,year)  {
	var days;
	if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)  days=31;
	else if (month==4 || month==6 || month==9 || month==11) days=30;
	else if (month==2)  {
	if (isLeapYear(year)) { days=29; }
	else { days=28; }
	}
	return (days);
}
function isLeapYear (Year) {
	if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
		return (true);
	} else { 
		return (false);
	}
}
var inSlideAction = false;
function moveSlider(elem, direction)
{
	//startDebug();
	
	if(!inSlideAction){
		inSlideAction = true;
	
		if(calType == 'small'){
			var movePx = 133;
		} else {
			var movePx = 910;
		}
		if(direction == 'last'){
			setNextMonth();
			new Effect.Opacity(elem, { from: 0.99, to: 0.3, duration: 0.7, afterFinish:function(){
					var xMove = -movePx;
					$(elem).removeChild($(elem).childNodes[0]);
					new Effect.Move($(elem).childNodes[0], { x: xMove, y: 0, mode: 'relative'});
					new Effect.Move($(elem).childNodes[1], { x: xMove, y: 0, mode: 'relative', afterFinish:function(){
						addNewChild(elem,'last');
						new Effect.Opacity(elem, { from: 0.3, to: 0.99, duration: 0.7});
						inSlideAction = false;
						}
					});
				}
			});
			
		} else {
			setPreviousMonth();
			new Effect.Opacity(elem, { from: 0.99, to: 0.3, duration: 0.7, afterFinish:function(){
					var xMove = movePx;
					$(elem).removeChild($(elem).childNodes[2]);
					new Effect.Move($(elem).childNodes[0],{ x: xMove, y: 0, mode: 'relative'});
					new Effect.Move($(elem).childNodes[1],{ x: xMove, y: 0, mode: 'relative', afterFinish:function(){
						addNewChild(elem,'first')
						new Effect.Opacity(elem, { from: 0.3, to: 0.99, duration: 0.7});
						inSlideAction = false;
						}
					});
				}
			});
		}
	}
	
	//displayDebug();
}
function addNewChild(elem,pos){
	if(calType == 'small'){
		var movePx = 133;
	} else {
		var movePx = 910;
	}
	var newTd=document.createElement("div");
	newTd.className = 'calBlock';
	newTd.style.position = 'absolute';
	if(pos == 'first'){
		//newTd.innerHTML = '<div class="spanClass">block '+i+'</div>';
		newTd.style.left = '-'+movePx+'px';
		$(elem).insertBefore(newTd,$(elem).firstChild);
	} else {
		//newTd.innerHTML = '<div class="spanClass">block '+i+'</div>';
		newTd.style.left = movePx+'px';
		$(elem).appendChild(newTd);
	}
}

if (typeof dd_domreadycheck=="undefined") //global variable to detect if DOM is ready
	var dd_domreadycheck=false

var anylinkcssmenu={

menusmap: {},
preloadimages: [],
effects: {delayhide: 200, shadow:{enabled:false, opacity:0.3, depth: [5, 5]}, fade:{enabled:true, duration:500}}, //customize menu effects

dimensions: {},

getoffset:function(what, offsettype){
	return (what.offsetParent)? what[offsettype]+this.getoffset(what.offsetParent, offsettype) : what[offsettype]
},

getoffsetof:function(el){
	el._offsets={left:this.getoffset(el, "offsetLeft"), top:this.getoffset(el, "offsetTop"), h: el.offsetHeight}
},

getdimensions:function(menu){
	this.dimensions={anchorw:menu.anchorobj.offsetWidth, anchorh:menu.anchorobj.offsetHeight,
		docwidth:(window.innerWidth ||this.standardbody.clientWidth)-20,
		docheight:(window.innerHeight ||this.standardbody.clientHeight)-15,
		docscrollx:window.pageXOffset || this.standardbody.scrollLeft,
		docscrolly:window.pageYOffset || this.standardbody.scrollTop
	}
	if (!this.dimensions.dropmenuw){
		this.dimensions.dropmenuw=menu.dropmenu.offsetWidth
		this.dimensions.dropmenuh=menu.dropmenu.offsetHeight
	}
},

isContained:function(m, e){
	var e=window.event || e
	var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
	while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
	if (c==m)
		return true
	else
		return false
},

setopacity:function(el, value){
	el.style.opacity=value
	if (typeof el.style.opacity!="string"){ //if it's not a string (ie: number instead), it means property not supported
		el.style.MozOpacity=value
		if (el.filters){
			el.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity="+ value*100 +")"
		}
	}
},

showmenu:function(menuid){
	var menu=anylinkcssmenu.menusmap[menuid]
	clearTimeout(menu.hidetimer)
	this.getoffsetof(menu.anchorobj)
	this.getdimensions(menu)
	var posx=menu.anchorobj._offsets.left + (menu.orientation=="lr"? this.dimensions.anchorw : 32) //base x pos
	var posy=menu.anchorobj._offsets.top+this.dimensions.anchorh - (menu.orientation=="lr"? this.dimensions.anchorh : 0)//base y pos
	if (posx+this.dimensions.dropmenuw+this.effects.shadow.depth[0]>this.dimensions.docscrollx+this.dimensions.docwidth){ //drop left instead?
		posx=posx-this.dimensions.dropmenuw + (menu.orientation=="lr"? -this.dimensions.anchorw : this.dimensions.anchorw)
	}
	if (posy+this.dimensions.dropmenuh>this.dimensions.docscrolly+this.dimensions.docheight){  //drop up instead?
		posy=Math.max(posy-this.dimensions.dropmenuh - (menu.orientation=="lr"? -this.dimensions.anchorh : this.dimensions.anchorh), this.dimensions.docscrolly) //position above anchor or window's top edge
	}
	if (this.effects.fade.enabled){
		this.setopacity(menu.dropmenu, 0) //set opacity to 0 so menu appears hidden initially
		if (this.effects.shadow.enabled)
			this.setopacity(menu.shadow, 0) //set opacity to 0 so shadow appears hidden initially
	}
	menu.dropmenu.setcss({left:posx+'px', top:posy+'px', visibility:'visible'})
	if (this.effects.shadow.enabled)
		menu.shadow.setcss({left:posx+anylinkcssmenu.effects.shadow.depth[0]+'px', top:posy+anylinkcssmenu.effects.shadow.depth[1]+'px', visibility:'visible'})
	if (this.effects.fade.enabled){
		clearInterval(menu.animatetimer)
		menu.curanimatedegree=0
		menu.starttime=new Date().getTime() //get time just before animation is run
		menu.animatetimer=setInterval(function(){anylinkcssmenu.revealmenu(menuid)}, 20)
	}
},

revealmenu:function(menuid){
	var menu=anylinkcssmenu.menusmap[menuid]
	var elapsed=new Date().getTime()-menu.starttime //get time animation has run
	if (elapsed<this.effects.fade.duration){
		this.setopacity(menu.dropmenu, menu.curanimatedegree)
		if (this.effects.shadow.enabled)
			this.setopacity(menu.shadow, menu.curanimatedegree*this.effects.shadow.opacity)
	}
	else{
		clearInterval(menu.animatetimer)
		this.setopacity(menu.dropmenu, 1)
		menu.dropmenu.style.filter=""
	}
	menu.curanimatedegree=(1-Math.cos((elapsed/this.effects.fade.duration)*Math.PI)) / 2
},

setcss:function(param){
	for (prop in param){
		this.style[prop]=param[prop]
	}
},

setcssclass:function(el, targetclass, action){
	var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig")
	if (action=="check")
		return needle.test(el.className)
	else if (action=="remove")
		el.className=el.className.replace(needle, "")
	else if (action=="add" && !needle.test(el.className))
		el.className+=" "+targetclass
},

hidemenu:function(menuid){
	var menu=anylinkcssmenu.menusmap[menuid]
	clearInterval(menu.animatetimer)
	menu.dropmenu.setcss({visibility:'hidden', left:0, top:0})
	menu.shadow.setcss({visibility:'hidden', left:0, top:0})
},

getElementsByClass:function(targetclass){
	if (document.querySelectorAll)
		return document.querySelectorAll("."+targetclass)
	else{
		var classnameRE=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "i") //regular expression to screen for classname
		var pieces=[]
		var alltags=document.all? document.all : document.getElementsByTagName("*")
		for (var i=0; i<alltags.length; i++){
			if (typeof alltags[i].className=="string" && alltags[i].className.search(classnameRE)!=-1)
				pieces[pieces.length]=alltags[i]
		}
		return pieces
	}
},

addEvent:function(targetarr, functionref, tasktype){
	if (targetarr.length>0){
		var target=targetarr.shift()
		if (target.addEventListener)
			target.addEventListener(tasktype, functionref, false)
		else if (target.attachEvent)
			target.attachEvent('on'+tasktype, function(){return functionref.call(target, window.event)})
		this.addEvent(targetarr, functionref, tasktype)
	}
},

domready:function(functionref){ //based on code from the jQuery library
	if (dd_domreadycheck){
		functionref()
		return
	}
	// Mozilla, Opera and webkit nightlies currently support this event
	if (document.addEventListener) {
		// Use the handy event callback
		document.addEventListener("DOMContentLoaded", function(){
			document.removeEventListener("DOMContentLoaded", arguments.callee, false )
			functionref();
			dd_domreadycheck=true
		}, false )
	}
	else if (document.attachEvent){
		// If IE and not an iframe
		// continually check to see if the document is ready
		if ( document.documentElement.doScroll && window == window.top) (function(){
			if (dd_domreadycheck) return
			try{
				// If IE is used, use the trick by Diego Perini
				// http://javascript.nwbox.com/IEContentLoaded/
				document.documentElement.doScroll("left")
			}catch(error){
				setTimeout( arguments.callee, 0)
				return;
			}
			//and execute any waiting functions
			functionref();
			dd_domreadycheck=true
		})();
	}
	if (document.attachEvent && parent.length>0) //account for page being in IFRAME, in which above doesn't fire in IE
		this.addEvent(window, function(){functionref()}, "load");
},

addState:function(anchorobj, state){
	if (anchorobj.getAttribute('data-image')){
		var imgobj=(anchorobj.tagName=="IMG")? anchorobj : anchorobj.getElementsByTagName('img')[0]
		if (imgobj){
			imgobj.src=(state=="add")? anchorobj.getAttribute('data-overimage') : anchorobj.getAttribute('data-image')
		}
	}
	else
		anylinkcssmenu.setcssclass(anchorobj, "selectedanchor", state)
},


setupmenu:function(targetclass, anchorobj, pos)
{
	this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body;
	var relattr=anchorobj.getAttribute("rel");
	var dropmenuid=relattr.replace(/\[(\w+)\]/, '');
	var menu=this.menusmap[targetclass+pos]={
		id: targetclass+pos,
		anchorobj: anchorobj,	
		dropmenu: document.getElementById(dropmenuid),
		revealtype: (relattr.length!=dropmenuid.length && RegExp.$1=="click")? "click" : "mouseover",
		orientation: anchorobj.getAttribute("rev")=="lr"? "lr" : "ud",
		shadow: document.createElement("div")
	}
	menu.anchorobj._internalID=targetclass+pos;
	menu.anchorobj._isanchor=true;
	menu.dropmenu._internalID=targetclass+pos;
	menu.shadow._internalID=targetclass+pos;
	menu.shadow.className="anylinkshadow";
	document.body.appendChild(menu.dropmenu); //move drop down div to end of page
	document.body.appendChild(menu.shadow);
	
	
	menu.dropmenu.setcss=this.setcss;
	menu.shadow.setcss=this.setcss;
	//causes huge performance problems on IE
	//menu.shadow.setcss({width: menu.dropmenu.offsetWidth+"px", height:menu.dropmenu.offsetHeight+"px"});
	this.setopacity(menu.shadow, this.effects.shadow.opacity);
	
	this.addEvent([menu.anchorobj, menu.dropmenu, menu.shadow], function(e){ //MOUSEOVER event for anchor, dropmenu, shadow
		var menu=anylinkcssmenu.menusmap[this._internalID]
		if (this._isanchor && menu.revealtype=="mouseover" && !anylinkcssmenu.isContained(this, e)){ //event for anchor
			anylinkcssmenu.showmenu(menu.id)
			anylinkcssmenu.addState(this, "add")
		}
		else if (typeof this._isanchor=="undefined"){ //event for drop down menu and shadow
			clearTimeout(menu.hidetimer)
		}
	}, "mouseover");
	
	this.addEvent([menu.anchorobj, menu.dropmenu, menu.shadow], function(e){ //MOUSEOUT event for anchor, dropmenu, shadow
		if (!anylinkcssmenu.isContained(this, e)){
			var menu=anylinkcssmenu.menusmap[this._internalID];
			menu.hidetimer=setTimeout(function(){
				anylinkcssmenu.addState(menu.anchorobj, "remove");
				anylinkcssmenu.hidemenu(menu.id);
			}, anylinkcssmenu.effects.delayhide);
		}
	}, "mouseout");
	
	this.addEvent([menu.anchorobj, menu.dropmenu], function(e){ //CLICK event for anchor, dropmenu
		var menu=anylinkcssmenu.menusmap[this._internalID];
		if ( this._isanchor && menu.revealtype=="click"){
			if (menu.dropmenu.style.visibility=="visible")
				anylinkcssmenu.hidemenu(menu.id);
			else{
				anylinkcssmenu.addState(this, "add");
				anylinkcssmenu.showmenu(menu.id);
			}
			if (e.preventDefault)
				e.preventDefault();
			return false;
		}
		else
			menu.hidetimer=setTimeout(function(){anylinkcssmenu.hidemenu(menu.id)}, anylinkcssmenu.effects.delayhide);
	}, "click");
},

init:function(targetclass){
	this.domready(function(){anylinkcssmenu.trueinit(targetclass)})
},

trueinit:function(targetclass){
	var anchors=this.getElementsByClass(targetclass);
	var preloadimages=this.preloadimages;
	
	for (var i=0; i<anchors.length; i++){
		if (anchors[i].getAttribute('data-image')){ //preload anchor image?
			preloadimages[preloadimages.length]=new Image();
			preloadimages[preloadimages.length-1].src=anchors[i].getAttribute('data-image');
		}
		if (anchors[i].getAttribute('data-overimage')){ //preload anchor image?
			preloadimages[preloadimages.length]=new Image();
			preloadimages[preloadimages.length-1].src=anchors[i].getAttribute('data-overimage');
		}
		this.setupmenu(targetclass, anchors[i], i);
	}
}

}
function jsonAjaxGetAllPlayDates(showID, amount) {
	var url = '/proxy/JsonEnta.ashx';
	var paramsOut = '{"id":1,"method":"GetShowPerformances","params":{"culture" : "'+culture+'", "showID" : "'+showID+'"}}';
	
	var playsArr = new Array();
	var ajax = new Ajax.Request(url, {
		method: 'post',
		postBody: paramsOut,
		asynchronous: false,
		onComplete: function(request){
			//playsArr = handleResponse(request);
			try{
				var data = request.responseText.evalJSON(true);
			} catch(err) {
				//alert(err);
			}
		
			//console.log(data.vJSONreponse);
			//return false;
		
			if (typeof(data.error) != 'undefined') {
				//alert (data.error.msg);
				return false;
			}
		
			if (typeof(data.result.vJSONreponse.dates) == 'undefined') {
				//alert('queue false');
				return false;
			}
		
		
			var i=0;
			playsArr = new Array();
			//console.log(data.result.vJSONreponse);
			$('showDatesListThisPerformance').innerHTML = '';
			var i=0;
			data.result.vJSONreponse.dates.each( function(item) 
			{
				var date = item.date;
				var plays = item.plays; 
				playsArr[date] = plays;
				item.plays.each( function(play){
					if(i<amount || amount == 0){
						var showDetails = '<table class="showDatesDetails" cellpadding="0" cellspacing="0" border="0"><tr><td>';
						showDetails += play.play.namedDate;
						showDetails += '</td><td>';
						showDetails += play.play.time;
						showDetails += '</td><td>';
						showDetails += '';
						showDetails += '</td>';
						
						switch(GetTicketState(play.play))
						{
							case PerformanceState.notActive:
								showDetails += '<td>&nbsp;</td>';
								break;
							case PerformanceState.soldOut:
								showDetails += '<td class="ticketSoldOut">' + ticketSoldOut + '</td>';
								break;
							case PerformanceState.freeAdmission:
								showDetails += '<td>' + ticketFreeAdmission + '</td>';
								break;
							case PerformanceState.available:
								showDetails += '<td class="buyTicet"><a href="javascript:EntaFrame(\''+play.play.order_Url+'\')"><span>' + ticketPurchase + '</span></a></td>';
								break;
							case PerformanceState.limited:
								showDetails += '<td class="buyTicet"><a href="'+play.play.limitPurchaseLinkUrl+'"><span>' + ticketPurchase + '</span></a></td>';
								break;
						}
						
						showDetails += '</tr></table>';
						$('showDatesListThisPerformance').innerHTML += showDetails;
					}
					i++;
				});
				
			});
		}
	});
}

function GetTicketState(play)
{
    if (!play.isActive) return PerformanceState.notActive;

    if (!IsPlayDateStillValid(play.perTime)) return PerformanceState.notActive;;

	if (!play.limitPurchaseLink)
	{
		if (play.soldOut) return PerformanceState.soldOut;
	
		if (play.freeAdmission) return PerformanceState.freeAdmission;
		
		return PerformanceState.available;
	}
	else {
		return PerformanceState.limited;
	}

	return PerformanceState.unknown;
}

function IsPlayDateStillValid(perTime) {
    var playDate = GetPlayDateTime(perTime);
    var now = new Date();
    return ((playDate - now) > 0);
}

function getFooter() {
	var url = '/proxy/JsonEnta.ashx';
	
	var paramsOut = {"showMonth" : "2010-06-01"};
	//var paramsOut = '{"id":1,"method":"GetUpcomingPerformances","params":{"showMonth" : "'+postDate+'"}}';
	
	var paramsOut = '{"id":1,"method":"GetUpcomingPerformances","params":{"culture" : "'+culture+'"}}';
	//var paramsOut = '{"id":1,"method":"GetPerformances","params":{"showMonth" : "2010-06-01"}}';
	//var paramsOut  = '{"showMonth" : "2010-06-01"}';
	
	//parameters: {"id":1,method:"GetPerformances",params:paramsOut},
	var playsArr = new Array();
	var ajax = new Ajax.Request(url, {
		method: 'post',
		postBody: paramsOut,
		asynchronous: false,
		onComplete: function(request){
			//alert('here');
			try{
				var data = request.responseText.evalJSON(true);
			} catch(err) {
				//alert(err);
			}
		
			if (typeof(data.error) != 'undefined') {
				//alert (data.error.msg);
				return false;
			}
		
			if (typeof(data.result.vJSONreponse) == 'undefined') {
				//alert('queue false');
				return false;
			}

			var i=0;
			var showDetails = '<table class="showDatesDetails" cellpadding="0" cellspacing="0" border="0" style="width:auto;">';
			data.result.vJSONreponse.each( function(item) 
			{
				//alert(item.showName);
				showDetails += '<tr><td style="width:200px;"><b>';
				showDetails += '<a href="'+item.siteCoreUrl+'">'+item.showName+'</a>';
				showDetails += '</b></td><td style="width:15px;">| </td><td style="width:200px;">';
				showDetails += item.namedDate;
				showDetails += '</td><td style="width:15px;">| </td><td style="width:100px;">';
				showDetails += item.time;
				showDetails += '</td></tr>';
				
			});
			showDetails += '</td></tr></table>';
			$('footerListPerformance').innerHTML += showDetails;	
		}
	});

	$$('.module_headerText').each(function(elem){
		
		if(performanceType){
			
			if(performanceType == 'Ballet'){
				/*
				elem.style.fontWeight = 'normal';
				elem.style.textTransform = 'none';
				elem.style.fontStyle = 'italic';
				*/
				Cufon.replace(elem, {
					fontFamily: 'Ballet'
				});

			}
			if(performanceType == 'Opera'){
				//elem.style.fontWeight = 'normal';
				elem.style.textTransform = 'uppercase';
				//elem.style.fontStyle = 'normal';
				Cufon.replace(elem, {
					fontFamily: 'Koncert'
				});
			}
			if(performanceType == 'Skuespil'){
				/*
				elem.style.fontWeight = 'bold';
				elem.style.textTransform = 'none';
				elem.style.fontStyle = 'normal';
				*/
				Cufon.replace(elem, {
					fontFamily: 'Skuespil'
				});
			}
			if(performanceType == 'Koncerter'){
				//alert(performanceType);
				/*
				elem.style.fontWeight = 'normal';
				elem.style.textTransform = 'none';
				elem.style.fontStyle = 'normal';
				*/
				Cufon.replace(elem, {
					fontFamily: 'Koncert'
				});
			}
		}
		
		//Cufon.replace(elem);
		//elem.style.paddingTop = '10px';
		//elem.style.height = '40px';
		//if (navigator.userAgent.indexOf("Firefox")!=-1){
			elem.style.paddingTop = '10px';
			elem.style.height = '40px';
			//alert(elem.style.height);
		//}
	});
	/*
	$$('.textPerformanceBold').each(function(elem){
		Cufon.replace(elem);
	});
	$$('.footerSubHeader').each(function(elem){
		Cufon.replace(elem);
	});
	*/
	
}
function EntaFrame(url)
{
	var width = ',width=1000';
	if (screen.width<1024)
	{
		width = '';
	}
	
	var height = ',height=' + (screen.height - 150);
	
	window.open(url, '_blank', 'toolbar=no,scrollbars=yes,location=yes,resizable=yes,menubar=no,directories=no,top=50' + width + height );
}

function dktIFrame(url)
{
	var locationArr = document.URL.split('#');
	var location = locationArr[0];
	var iframe='</iframe><iframe id="EntaFrame" name="EntaFrame" onload="scrollPageTop();" src="'+url+'" width="100%" height="2000" frameborder="0" style="background-color:#000;"></iframe>';
	if($('showContainer')) $('showContainer').style.display = 'none';
	if($('siteCoreFooter')) $('siteCoreFooter').style.display = 'none';
	if($('calender')) $('calender').style.display = 'none';
	if($('hdrForestilling')) $('hdrForestilling').style.display = 'none';
	if($('EntaConnect')){
		$('EntaConnect').innerHTML = iframe;
		$('ctl3').innerHTML += '<div style="position:relative;float:right;top:10px;height:25px;width:25px;z-index:60;margin-bottom:-25px;"><a class="bottomNavClose2" href="'+location+'">&nbsp;</a></div>';
	}
	if($('pushContentDown')) $('pushContentDown').style.height = '117px';
	scroll(0,0);
}

function setIframeHeight(id, h) {
    if ( document.getElementById ) {
        var theIframe = document.getElementById(id);
        if (theIframe) {
            dw_Viewport.getWinHeight();
            theIframe.style.height = Math.round( h * dw_Viewport.height ) + "px";
            theIframe.style.marginTop = Math.round( (dw_Viewport.height - 
                parseInt(theIframe.style.height) )/2 ) + "px";
        }
    }
}

function IncludeJavaScript(jsFile)
{
  document.write('<script type="text/javascript" src="'
    + jsFile + '"></scr' + 'ipt>'); 
}
function ucfirst (str) {
    var out = str.charAt(0).toUpperCase();
    return out + str.substr(1);
}
function showFrontCalSmall(day){
//new Effect.Opacity('calFade', { from: 1, to: 0.3, duration: 0.7, afterFinish:showFrontCalSmallAction(day)});
	//day++;
	var url = '/proxy/JsonEnta.ashx';
	var playsToday = '';
	var todayDay = '';
	var todayDate = '';
	var paramsOut = '{"id":1,"method":"GetAllPerformancesByDay","params":{"culture" : "'+culture+'", "dayOffset" : "'+day+'"}}';
	var playsArr = new Array();
	var ajax = new Ajax.Request(url, {
		method: 'post',
		postBody: paramsOut,
		asynchronous: false,
		onComplete: function(request){
			
				try{
					try{
					var data = request.responseText.evalJSON(true);
				} catch(err) 
				{}
			
				if (typeof(data.error) != 'undefined') {
					return false;
				}
			
				if (typeof(data.result.vJSONreponse.dates) == 'undefined') {
					return false;
				}
			
			
				var i=0;
				playsArr = new Array();
				data.result.vJSONreponse.dates.each( function(item) 
				{
					var date = item.date;
					todayDay = ucfirst(item.dayName);
					todayDate = item.dateAndMonth;
					var plays = item.plays; 
					playsArr[0] = plays;
				});
				
				if (day == 0)
				{
					todayDay = todayLabel;
				}
				
				var uniqueID = 0;
				var playsTodayDay = '<div class="frontCalDay">'+todayDay+'</div>';
				var playsTodayDate = '<div class="dateType">'+todayDate+'</div>';
				playsToday += '<table class="cal_date_table" cellpadding="0" cellspacing="0" border="0">'
					+'<tr><td colspan="2">'+playsTodayDay+playsTodayDate+'</td></tr>';
					
					playsArr[0].each( function(play) 
					{
						uniqueID++;
						playsToday += GetPlay(play, uniqueID);
					});
				playsToday += '</table>';
				
			} 
			catch(err){}
			
			var outPut = '<div class="moduleSub_container" id="calFade">'
				+'<table class="frontCalTable" cellpadding="0" cellspacing="0" border="0" style="width:186px"><tr>'
		        +'<td onclick="showFrontCalSmall('+(day-1)+')">'
			    +'     <img class="imgPushDown" width="22" alt="&lt;" src="/images/template/frontCal_move_left.png">'
		        +' </td>';
			outPut += '<td style="width:142px" class="calFrontCenterCol"><div>'+playsToday+'</div></td>'
				+'<td onclick="showFrontCalSmall('+(day+1)+')">'
			    +'    <img class="imgPushDown" width="22" alt="&gt;" src="/images/template/frontCal_move_right.png">'
		        +'</td>'
				+'</tr></table><div><img src="/images/template/frontCalbottom.png" /></div><div id="showAllCalenderLabel"><a href="/Forestillinger/Kalender.aspx">'+showAllCalenderLabel+'</a></div>';
			$('frontCalSmall').innerHTML = outPut;
			
			anylinkcssmenu.init("anchorclass");
			new Effect.Opacity('calFade', { from: 0.3, to: 0.99, duration: 0.7});
		}
	});
}
function medvirkendeScroll(direction){
	//alert(direction);
	if(!inSlideAction)
	{	
		inSlideAction = true;
		if(direction == 'right'){
			var xMove = -910;
		} else {
			var xMove = 910;
		}
		var elem = 'medvirkendeGalleryInnerArea';
		var widthOfMed = medvirkendeItems*182;
		
		new Effect.Opacity(elem, { from: 0.99, to: 0.3, duration: 0.4, afterFinish:function(){
			
				new Effect.Move($(elem), { x: xMove, y: 0, mode: 'relative', afterFinish:function(){
						new Effect.Opacity(elem, {from: 0.3, to: 0.99, duration: 0.4});
						
						//Display navigate left
						if(parseInt($(elem).style.left) < 0)
						{
							if ($('medvirkendeMoveLeft').style.display != 'block')
							{
								$('medvirkendeMoveLeft').style.display = 'block';
								new Effect.Opacity('medvirkendeMoveLeft', {from: 0.1, to: 0.99, duration: 0.1});
							}
						} 
						else 
						{
							new Effect.Opacity('medvirkendeMoveLeft', {from: 0.99, to: 0, duration: 0.1});
							$('medvirkendeMoveLeft').style.display = 'none';
						}						
						
						//Display navigate right
						var remainingWidth = parseInt($(elem).style.left) + widthOfMed;
						if (remainingWidth > 910)
						{
							if ($('medvirkendeMoveRight').style.display != 'block')
							{
								$('medvirkendeMoveRight').style.display = 'block';
								new Effect.Opacity('medvirkendeMoveRight', {from: 0.1, to: 0.99, duration: 0.1});
							}
						}
						else
						{
							new Effect.Opacity('medvirkendeMoveRight', {from: 0.99, to: 0, duration: 0.1});
							$('medvirkendeMoveRight').style.display = 'none';
						}
						
						inSlideAction = false;
					}
				});
			}
		});
	}
}

function changeMonth(year, month) {
    $('calYear').value = year;
    $('calMonth').selectedIndex = month - 1;
    selectDate();
	hideMonthList();
}

function hideMonthList()
{
	$('monthListContainer').style.display = 'none';
}

function showMonthList()
{
	if ($('monthListContainer').style.display == 'none'){
		$('monthListContainer').style.display = 'block';
	}
	else {
		//hideMonthList();
	}
}

Event.observe(window, 'load', function() {
	if($('medvirkendeMoveLeft')) $('medvirkendeMoveLeft').style.display = 'none';
	$$('.textPerformanceBoldCufon').each(function(elem){
		Cufon.replace(elem, {
			hover: true
		});
		//Cufon.replace(elem);
	});
	$$('.footerSubHeader').each(function(elem){
		Cufon.replace(elem);
	});
	if($('calender')) {
		Cufon.replace($('cal_month'));
		var i=0;
		$$('.cal_sm_heading').each(function(elem){
			if(i==0) Cufon.replace(elem);
			i++;
		});
	}
	if($('medvirkendeMoveRight')){
		if(medvirkendeItems < 6){
			$('medvirkendeMoveRight').style.display = 'none';
		}
	}
	// JavaScript Document
	if(!$('EntaConnect') && $('showContainer')){
		var nEntaDiv = new Element('div',{
						'id': 'EntaConnect'
					});
		$('showContainer').parentNode.insertBefore(nEntaDiv,$('showContainer'));
	}
});
