// JavaScript Document

/*
How to minify:
1.) http://netspurt.com/  --> Variable names, spaces
2.) http://www.digitaloverload.co.uk/jsmin/	--> Linebreaks & more, but not variable names

Alternativly:
http://dean.edwards.name/packer/
*/

/* Inline help
Default argument values:
arg = arg || 'defaultValue';	//default is assigned on undefined, null and '' (empty string)
arg = (typeof arg == 'undefined') ? 'defaultValue' : arg;	//default is assigned on undefined
*/


//Register mouseMove event listener
document.onmousemove = update;
var mouseX, mouseY;
//saves current mouse position
function update(e)
	{
	if (!e) e = window.event;

	if (e)
		{ 
		if (e.pageX || e.pageY)
			{ // this doesn't work on IE6!! (works on FF,Moz,Opera7)
			mouseX = e.pageX;
			mouseY = e.pageY;
			}
		else if ((e.clientX || e.clientY) && (document.body.scrollLeft || document.body.scrollTop))
			{ // works on IE6,FF,Moz,Opera7
			mouseX = e.clientX + document.body.scrollLeft;
			mouseY = e.clientY + document.body.scrollTop;
			}  
		else if((e.clientX || e.clientY))
			{ // works on IE6,FF,Moz,Opera7
			mouseX = e.clientX + document.documentElement.scrollLeft;
			mouseY = e.clientY + document.documentElement.scrollTop;
			}  
		}

	return true;
	};


/* Set or toggle item visibility by ID
** param elemID: ID of the element to change
** type: New display type. default: toggle
*/
function setVisibility(elemID, type, def)
	{
	//default value if type is not specified
	type = type || 'toggle';
	def = def || 'block';
	
	//find the element
	elem = document.getElementById(elemID);
	if(elem == null)
		return;
		
	//toggle element visibility
	if(type == 'toggle')
		if(elem.style.display == 'none')
			elem.style.display = def;
		else
			elem.style.display = 'none';
	//set element visibility directly
	else
		elem.style.display = type;
	};

/* Change the source of a picture by ID
** Both images must be in the same directory
** param elemID: ID of the element to change
** img1: Filename only of the image that will be set
** img2: If set the function will toggle between img1 and img2
*/
function setImage(elemID, img1, img2)
	{
	//img1 must be set, but can be empty to delete the image
	if(typeof img1 == 'undefined')
		return;
		
	//find the element
	elem = document.getElementById(elemID);
	if(elem == null)
		return;
		
		
	//set image source
	if(typeof img2 == 'undefined')
		elem.src = img1
	//toggle images; default to img1
	else
		{
		//extract name and path of the currently set source
		filename = elem.src.substring(elem.src.lastIndexOf('/') + 1);
		filepath = elem.src.substring(0, elem.src.lastIndexOf('/') + 1);
		
		//set new image
		if(filename == img1)
			elem.src = filepath + img2;
		else
			elem.src = filepath + img1;
		}
	};

/*
** (Un-)Checks all elements of the parent 
*/
function setChecked(elemID, type)
	{
	//default value if type is not specified
	type = (typeof type == 'undefined') ? 'toggle' : type;
	
	//find the element
	elem = document.getElementById(elemID);
	if(elem == null)
		return;
		
	for(var i = 0; i < elem.elements.length; ++i)
		{
		if(elem.elements[i].type != "checkbox")
			continue;
		
		//toggle element cheched status
		if(type == 'toggle')
			{
			if(elem.elements[i].checked)
				elem.elements[i].checked = false;
			else
				elem.elements[i].checked = true;
			}
		//set directly
		else
			{
				elem.elements[i].checked = type;
				colorHover(elem.elements[i].id, '' + elem.elements[i].id + 'div');
			}
		}
	};

/* 
** Hover and select effect for game messages.
*/
function check(ID)
	{
	var elem = document.getElementById(ID);
	if(elem != null)
		{
		if(elem.checked == false)
			elem.checked = true;
		else
			elem.checked = false;
		}
	};
function colorHover(ID, IDdiv)
	{
	var elem1 = document.getElementById(ID);
	var elem2 = document.getElementById(IDdiv);
	if(elem1 != null && elem2 != null)
		{
		if(elem1.checked == false) 
			elem2.className = 'msgNormal';
		else
			elem2.className = 'msgHover';
		}
	};
	
/*
** Returns the subdomain of a url
*/
function subDomain(url)
	{
 
	// IF THERE, REMOVE WHITE SPACE FROM BOTH ENDS
	url = url.replace(new RegExp(/^\s+/),""); // START
	url = url.replace(new RegExp(/\s+$/),""); // END
	 
	// IF FOUND, CONVERT BACK SLASHES TO FORWARD SLASHES
	url = url.replace(new RegExp(/\\/g),"/");
	 
	// IF THERE, REMOVES 'http://', 'https://' or 'ftp://' FROM THE START
	url = url.replace(new RegExp(/^http\:\/\/|^https\:\/\/|^ftp\:\/\//i),"");
	 
	// IF THERE, REMOVES 'www.' FROM THE START OF THE STRING
	url = url.replace(new RegExp(/^www\./i),"");
	 
	// REMOVE COMPLETE STRING FROM FIRST FORWARD SLASH ON
	url = url.replace(new RegExp(/\/(.*)/),"");
	 
	// REMOVES '.??.??' OR '.???.??' OR '??.???' FROM END - e.g. '.CO.UK', '.COM.AU'
	if (url.match(new RegExp(/\.[a-z]{2,3}\.[a-z]{2}$/i)))
		{
		url = url.replace(new RegExp(/\.[a-z]{2,3}\.[a-z]{2,3}$/i),"");
		} 
	// REMOVES '.??' or '.???' or '.????' FROM END - e.g. '.US', '.COM', '.INFO'
	else if (url.match(new RegExp(/\.[a-z]{2,4}$/i)))
		{
		url = url.replace(new RegExp(/\.[a-z]{2,4}$/i),"");
		}
	 
	// CHECK TO SEE IF THERE IS A DOT '.' LEFT IN THE STRING
	//var subDomain = (url.match(new RegExp(/\./g))) ? true : false;
	 
	var parts = url.split('.');
	//if length > 1
	//[0] = first subdomain e.g. X in http://www.X.test.another.domain.co.uk
	//else no subdomain
	//[length-2] = subdomain
	
	if(parts.length > 1)
		return parts[0];
	else
		return 'baseDomain';
	 
	}
function fileReport(type, formName, defaultText)
	{
	//formName must be set, but can be empty to delete the image
	if(typeof formName == 'undefined' || typeof type == 'undefined')
		return;
		
	//find the form
	f = document.getElementById(formName);
	if(f == null)
		return;
		
	//add debug data
	if(typeof debugData == 'undefined')
		debugData = '';
	var el = document.createElement("input");
		el.type = "hidden";
		el.name = "debugData";
		el.value = debugData;
		f.appendChild(el);
		
	//add this page
	el = document.createElement("input");
		el.type = "hidden";
		el.name = "lastPage";
		el.value = window.location;
		f.appendChild(el);
		
	//add report type
	el = document.createElement("input");
		el.type = "hidden";
		el.name = "type";
		el.value = type;
		f.appendChild(el);
	
	//add target user
	targetUser = window.location.hostname;
	el = document.createElement("input");
		el.type = "hidden";
		el.name = "targetUser";
		el.value = subDomain(targetUser);
		f.appendChild(el);
		
	//add default data
	if(typeof defaultText != 'undefined')
		{
		el = document.createElement("input");
			el.type = "hidden";
			el.name = "data";
			el.value = defaultText;
			f.appendChild(el);
		}
		
	//submit form
	f.submit();
	}
function debugReport(debugData)
	{
	
	popup = window.open('','bugreport','height=300,width=275, toolbar=no,directories=no,status=no,menubar=no, scrollbars=yes,resizable=yes');
	doc = '	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\
					<html><head><title>Bug report</title></head>\
					<body>\
						<form action="/reportbug" method="post"><div>\
							<textarea name="usercomment" cols="30" rows="15">'+
								'What happened:\n...\n\n'+
								'What I did:\n...\n\n'+
								'I have screenshots here:\n(if applicable)\n\n'+
								'Comment:\n...'+
							'</textarea><br>\
							<input type="hidden" name="action" value="reportbug">\
							<input type="hidden" name="debugdata" value="' + debugData + '">\
							<input type="submit" name="submit" value="Submit bug report">\
						</div></form>\
					</body></html';
	popup.document.write(doc);
	if (window.focus) {popup.focus()}
	
	};
/* 
** Hover and select effect for game messages.
*/
function check(ID)
	{
	var elem = document.getElementById(ID);
	if(elem != null)
		{
		if(elem.checked == false)
			elem.checked = true;
		else
			elem.checked = false;
		}
	}
function colorHover(ID, IDdiv)
	{
	var elem1 = document.getElementById(ID);
	var elem2 = document.getElementById(IDdiv);
	if(elem1 != null && elem2 != null)
		{
		if(elem1.checked == false) 
			elem2.className = 'msgNormal';
		}
	}
	
/* 
** Surrounds selected text in textarea t with text1 and text2.
*/
function surroundText(text1, text2, t)
{
	var textarea = null;
	//find the element
	textarea = document.getElementsByName(t)[0];
	if(textarea == null)
		return;
		
	// Can a text range be created?
	if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange)
	{
		var caretPos = textarea.caretPos, temp_length = caretPos.text.length;

		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text1 + caretPos.text + text2 + ' ' : text1 + caretPos.text + text2;

		if (temp_length == 0)
		{
			caretPos.moveStart("character", -text2.length);
			caretPos.moveEnd("character", -text2.length);
			caretPos.select();
		}
		else
			textarea.focus(caretPos);
	}
	// Mozilla text range wrap.
	else if ( typeof(textarea.selectionStart) != "undefined")
	{
		var begin = textarea.value.substr(0, textarea.selectionStart);
		var selection = textarea.value.substr(textarea.selectionStart, textarea.selectionEnd - textarea.selectionStart);
		var end = textarea.value.substr(textarea.selectionEnd);
		var newCursorPos = textarea.selectionStart;
		var scrollPos = textarea.scrollTop;

		textarea.value = begin + text1 + selection + text2 + end;

		if (textarea.setSelectionRange)
		{
			if (selection.length == 0)
				textarea.setSelectionRange(newCursorPos + text1.length, newCursorPos + text1.length);
			else
				textarea.setSelectionRange(newCursorPos, newCursorPos + text1.length + selection.length + text2.length);
			textarea.focus();
		}
		textarea.scrollTop = scrollPos;
	}
	// Just put them on the end, then.
	else
	{
		textarea.value += text1 + text2;
		textarea.focus(textarea.value.length - 1);
	}
};

/*
** Image hover effect
*/
var ad1 = new Image();
var ad2 = new Image();
ad1.src="images/registerad2.jpg";
ad2.src="images/registerad1.jpg";
function yellowbutton()
{
document.images.add.src=ad1.src;
}
function bluebutton()
{
document.images.add.src=ad2.src;
}

/*
** Scrolling Mainpage Effect
*/
var bgPos = 0; 
var scrollDelay = 30;
function Scroller()
{
   var img = document.getElementById("scrollimg");
   if (img) 
   { 
       img.style.backgroundPosition = bgPos + 'px'; 
       bgPos == 1366? bgPos = 0 : bgPos = bgPos - 1; 
       setTimeout("Scroller()", scrollDelay); 
   } 
}

/*
if (document.addEventListener)
 document.addEventListener('DOMContentLoaded', Scroller, false)
else
 window.onload = Scroller;
 */

/*
** Status Messages
*/
if (document.addEventListener)
  document.addEventListener('DOMContentLoaded', pageEnhancements, false)
else
  window.onload = pageEnhancements;

if (XMLHttpRequest == undefined)
{
  var XMLHttpRequest = function(){return new ActiveXObject("Msxml2.XMLHTTP")};
}

var
  STAHINT = 'Enter your new status message (max 70 characters):',
  STATITLE = 'Click to change your status message',
  STANOTSET = '(No status message, click to set)';

var sta, staInput, staEditing, staEmpty, staTimer;

var ua = navigator.userAgent;
var IE6 = ua.match(/MSIE 6/i) && !ua.match(/MSIE 7/i) && !ua.match(/MSIE 8/i);

function pageEnhancements()
{
  Scroller();
	
  sta = document.getElementById('editstatus');
  if (!sta) return;
  var text = sta.innerHTML;
  var div = document.createElement('div');
  div.className = 'statusmessage';
  div.innerHTML = text;
  sta.innerHTML = '';
  sta.className = '';
  if (IE6) sta.style.height = '0';
  sta.appendChild(div);
  div.onclick = staClick;
  staInit();
}

function staClick()
{
  if (!staEditing)
  {
    var text = staEmpty ? '' : sta.childNodes[0].innerHTML;
    text = text.replace(/&lt;/g, '<');
    text = text.replace(/&gt;/g, '>');
    text = text.replace(/&amp;/g, '&');
    if (!staInput)
    {
      var div = document.createElement('div');
      div.className = 'statusmessage';
      if (IE6) div.style.position = 'absolute';
      div.style.width = '494px';
      div.style.borderRightWidth = '1px';
      div.style.paddingBottom = '10px';

      hint = document.createElement('div');
      hint.innerHTML = STAHINT;
      hint.style.fontSize = '80%';
      hint.style.padding = '3px';
      div.appendChild(hint);
      
      staInput = document.createElement('input');
      staInput.type = 'text';
      staInput.size = '80';
      staInput.maxLength = '70';
      staInput.style.width = '434px';
      staInput.onblur = function(){staTimer = setTimeout('staCancel()', 1000);}
      staInput.onfocus = function(){clearTimeout(staTimer);}
      staInput.onkeydown = function(e)
      {
        e = window.event;
        var key = e.keyCode;
        if (key==27) staCancel();
        if (key==13) staDone();
      };
      div.appendChild(staInput);

      var inp = document.createElement('input');
      inp.type = 'submit';
      inp.value = 'OK';
      inp.style.width = '50px';
      inp.onclick = staDone;
      div.appendChild(inp);

      sta.appendChild(div);
    }
    sta.childNodes[1].style.display = 'block';
    sta.childNodes[0].style.display = 'none';
    staInput.value = text;
    staInput.focus();
    staInput.select();
    staEditing = true;
  }
}

function staInit()
{
  var div = sta.childNodes[0];
  staEmpty = ((div.innerHTML == '') || (div.innerHTML == STANOTSET));
  if (staEmpty)
  {
    div.innerHTML = STANOTSET;
    div.style.color = '#88B';
    div.style.fontSize = '9px';
  }
  div.style.display = 'block';
  div.style.cursor = 'pointer';
  div.title = STATITLE;
  staEditing = false;
}

function staCancel()
{
  if (!staEditing) return;
  sta.childNodes[1].style.display = 'none';
  staInit();
}

function staDone()
{
  if (!staEditing) return;
  sta.childNodes[0].style.color = '';
  sta.childNodes[0].style.fontSize = '';
  var text = staInput.value;
  text = text.replace(/&/g, '&amp;');
  text = text.replace(/</g, '&lt;');
  text = text.replace(/>/g, '&gt;');
  sta.childNodes[0].innerHTML = text;
	
	var xhr = null;
	if (window.XMLHttpRequest)
	  xhr=new XMLHttpRequest();
	else // Internet Explorer 5/6
	  xhr=new ActiveXObject("Microsoft.XMLHTTP");

	xhr.open('POST', 'updatestatus');
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.send('sta='+encodeURIComponent(staInput.value)+'&action=updatestatus');
  staCancel();
}


/*
** Limit for text input and text area
*/
function limitText(textID, maxChars)
{
	var textarea = null;
	//find the element
	textarea = document.getElementsByName(textID)[0];
	if(textarea == null)
		return;
		
	if(textarea.value.length > maxChars)
		{
			textarea.value = textarea.value.substr(0, maxChars);
			return false;
		}
};

/*
** Gets the timezone offset
*/
function detectTimezone(elemID)
	{
	var elem = document.getElementById(elemID);
	if(elem == null)
		return;
		
	var rightNow = new Date();
	var jan1 = new Date(rightNow.getFullYear(),
			0, 1, 0, 0, 0, 0);
	var temp = jan1.toGMTString();
	var jan2 = new Date(temp.substring(0,
			temp.lastIndexOf(" ")-1));
	var offset = (jan1 - jan2) / (1000 * 60 * 60);
	

	//create string
	var strOffset = '';
	if(offset < 0)
		strOffset += '-';
	else
		strOffset += '+';
		
	if(Math.abs(offset) < 10)
		strOffset += '0';
	strOffset += Math.floor(Math.abs(offset));
	strOffset += ":";
	
	var minuteOffset = Math.floor((offset - Math.floor(offset)) * 60);
	strOffset += minuteOffset==0?'00':minuteOffset;
	
	//set option
	elem.options[0] = new Option("Detected: GMT " + strOffset, offset, true, true);
	}
	
// shows the av_hoverbox popup	
function showPopup(caption, description)
	{
	var av_hoverbox = document.getElementById('av_hoverbox'); if(av_hoverbox == null) return;
	
	var av_hoverbox_caption = document.getElementById('av_hoverbox_caption'); if(av_hoverbox_caption == null) return;
	var av_hoverbox_description = document.getElementById('av_hoverbox_description'); if(av_hoverbox_description == null) return;
	
	av_hoverbox_caption.innerHTML = caption;
	av_hoverbox_description.innerHTML = description;
	
	av_hoverbox.style.visibility='Visible';
	};
// hides the av_hoverbox popup	
function hidePopUp()
	{
	var av_hoverbox = document.getElementById('av_hoverbox');
	if(av_hoverbox == null) return;
	
	av_hoverbox.style.visibility='Hidden';
	};
// moves the av_hoverbox popup to mouse cursor
function movePopup(e)
	{
	var av_hoverbox = document.getElementById('av_hoverbox');
	if(av_hoverbox == null) return;
	
	
	av_hoverbox.style.top = (mouseY + 5) + 'px';//window.event.pageY + 5;//event.clientY + document.body.scrollTop + 5;
	av_hoverbox.style.left = (mouseX + 15) + 'px';//window.event.pageX + 15;//event.clientX + document.body.scrollLeft + 5;
	};
	
	
function checkJS(elemID)
	{
	var elem = document.getElementById(elemID);
	if(elem == null)
		return;
	
	elem.value = '1';
	};
	
var checking = false;
var theEmail = null;
function startCheck(email)
	{
	theEmail = email;
	setTimeout('startCheckReally()',5000);
	
	//find the div
	//elem = document.getElementById('emailstatus');
	//if(elem == null) return;
	
	//set message	
	//elem.innerHTML='Checking email, please wait...';
	};
function startCheckReally()
	{ 
	//find the div
	elem = document.getElementById('emailstatus');
	if(elem == null) return;
	
	//set message	
	elem.innerHTML='Check started, just a few more seconds...';
	checking = true;
	
	//dispatch request
	var xhr = null;
	if (window.XMLHttpRequest)
	  xhr=new XMLHttpRequest();
	else // Internet Explorer 5/6
	  xhr=new ActiveXObject("Microsoft.XMLHTTP");

	xhr.open('POST', '/ajax/checkEmail.php');
	xhr.onreadystatechange = function(e)
		{
		if (xhr.readyState==4 && xhr.status == 200)
			{
			parseReply(xhr.responseText)
			}
		};
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.send('email='+encodeURIComponent(theEmail));
	
	};
function parseReply(txt)
	{
	//find the div
	elem = document.getElementById('emailstatus');
	if(elem == null) return;
	
	var type=txt.substr(0, 1);
	var msg=txt.substring(1);
	
	if(type == '1')
		{
		elem.innerHTML = 'Success! Registration successful.';
		document.getElementById('emailstatusdiv').setAttribute("class", "confirm");
		document.getElementById('emailstatusimg').setAttribute("src", "/images/tp_ok.png");
		
		}
	else
		{
		elem.innerHTML = 'Error! Your email could not be sent.';
		elem.setAttribute("class", "checkError");
		document.getElementById('reregister').value = "An error occured while sending the email to your address. Please check, that your email is correct or choose another address.";
		document.reregisterForm.submit();
		}
	};
function inputSelectAll(e)
	{
	if(!e || e == undefined) return;
	
	e.focus();
	e.select();
	};
	
//Buubles -->
function getElementsByClassName(classname, node)
	{
	if(!node) 
		node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
		if(re.test(els[i].className))
			a.push(els[i]);
	return a;
	}
function getPosition(elementID)
	{
	var elem=document.getElementById(elementID);
	
	position = new Object();
	position.x = -1;
	position.y = -1;
	position.width = 0;
	position.height = 0;
	
	//element not found
	if(!elem || elem == undefined) return position;

	var tagname="",x = 0,y = 0,h = 0,w = 0;
	
	h = elem.offsetHeight;
	w = elem.offsetWidth;

	//add positions of elements and parents, until the element is <body>	
	while ((typeof(elem)=="object")&&(typeof(elem.tagName)!="undefined"))
	{
		y+=elem.offsetTop;
		x+=elem.offsetLeft;
		tagname=elem.tagName.toUpperCase();

		if (tagname=="BODY")
			elem=0;

		//get Position of parents
		if (typeof(elem)=="object")
			if (typeof(elem.offsetParent)=="object")
				elem=elem.offsetParent;
	}
	
	position.x = x;
	position.y = y;
	position.width = w;
	position.height = h;
	
	return position;
	};
	
function bubbleShow(posElemID, bubbleID, txtID, txtData)
	{
		//alert(posElemID + "-" + bubbleID + "-" + txtID + "-" + txtData);
	var pos, posElem, bubble, txt;
	
	posElem=document.getElementById(posElemID);
	bubble=document.getElementById(bubbleID);
	txt=document.getElementById(txtID);
	
	//error
	if(!posElem || posElem == undefined || !bubble || bubble == undefined || !txt || txt == undefined)	return;
	
	//if it is visible right now, hide it. AKA VISIBILITY TOGGLE
	if(bubble.style.display == "block")
		{
		bubble.style.display = "none";
		return;
		}
	
	//set text
	txt.innerHTML = txtData;

	//get & set position	
	pos = getPosition(posElemID);
	//alert(pos.x + ", " + pos.y + " - " + pos.width + "x" + pos.height);
	bubble.style.left = (pos.x + pos.width/2.0) + "px";
	bubble.style.top = (pos.y + pos.height) + "px";
	bubble.style.display = "block";
	};
function bubbleHide(bubbleID)
	{
	var bubble = document.getElementById(bubbleID);
	
	if(!bubble || bubble == undefined)
		return;
		
	bubble.style.display = "none";
	};
	
function bubbleStart()
	{
	//find dragons
	dragonmenu = document.getElementById("thedragonmenu");
	dragons = getElementsByClassName("dragonmenuimage", dragonmenu);
	availableDragons = [];
	minHeight = 0;
	allRequiredDragonsVisible = true;
	
	//get visible dragons
	for(i = 0; i < dragons.length; ++i)
		{
		pos = getPosition(dragons[i].getAttribute("id"));
		if(minHeight == 0 || minHeight == pos.y)
			{
			minHeight = pos.y;
			availableDragons.push(dragons[i].getAttribute("id"));
			//alert(pos.x + ", " + pos.y + " - " + pos.width + "x" + pos.height);
			}
		else
			{
			//not visible
			for(j = 0; j < bubbleData.length; ++j)
				if(bubbleData[j]["dragon"] >= availableDragons.length)
					{
					//at least one required dragon is not visible :(
					allRequiredDragonsVisible = false;
					break;
					}
			
			//all dragons left will be not visible as well
			break;
			}
		}
	
	//some dragons are hidden, and hidden dragons can't speak
	if(!allRequiredDragonsVisible)
		return;
	
	//start interval handler
	setInterval('bubbleInterval(100)', 100);

	//add all bubble events
	/*
	for(i = 0; i < bubbleData.length; ++i)
		{
		bubbleID = "0";
		setTimeout("bubbleShow('"+availableDragons[bubbleData[i]["dragon"]]+"', 'thought_bubble_"+bubbleID+"', 'bubbleData_"+bubbleID+"', '" + bubbleData[i]["txt"] + "')" , bubbleData[i]["time"]);
		setTimeout("bubbleHide('"+bubbleID+"')" , bubbleData[i]["time"] + bubbleData[i]["duration"]);
		}
	*/
	};

//interval handler
var timeTotal = 0;
function bubbleInterval(time)
	{
	timeTotal += time;
	bubbleID = "0";
	
	for(i = 0; i < bubbleData.length; ++i)
		{
		if(bubbleData[i]["status"] == 0 && timeTotal >= bubbleData[i]["time"])	//start 0 -> 1
			{
			bubbleData[i]["status"]++;
			bubbleShow(availableDragons[bubbleData[i]["dragon"]], "thought_bubble_"+bubbleID, "bubbleData_"+bubbleID, bubbleData[i]["txt"]);
			}
		else if(bubbleData[i]["status"] == 1 && timeTotal >= bubbleData[i]["time"] + bubbleData[i]["duration"])	//done and hide 1 -> 2
			{
			bubbleData[i]["status"]++;
			bubbleHide("thought_bubble_"+bubbleID)
			}
		
		//setTimeout("bubbleShow('"+availableDragons[bubbleData[i]["dragon"]]+"', 'thought_bubble_"+bubbleID+"', 'bubbleData_"+bubbleID+"', '" + bubbleData[i]["txt"] + "')" , bubbleData[i]["time"]);
		//setTimeout("bubbleHide('"+bubbleID+"')" , bubbleData[i]["time"] + bubbleData[i]["duration"]);
		}
	};
//<-- Bubbles
