/* Makes an AJAX call via GET
 * request: the GET request
 * callback: a string, name of function that is to be called. The function will be called with one parameter, the response of the GET request.
 * hideLoading: if not passed or false, a 'loading' message will be shown
 * Note: response will be escape()'d
*/
function ajax(request, callback, hide_loading){
	
	if(!hide_loading)
		showLoading();
	
	//we need to add a timestamp to the end of the request, to prevent IE caching.
	//first we need to find out if there is a question mark or not in the request param
	if(request.indexOf('?') == -1)
		request+="?ts="+new Date().getTime();
	else
		request+="&ts="+new Date().getTime();
	
	var xmlHttp;
	try{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e){
		// Internet Explorer
		try{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e){
			try{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e){
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	xmlHttp.onreadystatechange=function(){
		if(xmlHttp.readyState==4){
			hideLoading();
			eval(callback+"('"+escape(xmlHttp.responseText)+"')");
		}
	}
	xmlHttp.open("GET", request);
	xmlHttp.send(null);
}

function preloadImages() {
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function go2(a){
	window.location=a;
}

function showBox(a){
	if(navigator.appName=="Microsoft Internet Explorer")
		a.style.display='block';
	else
		a.style.display='table';
}

function hideBox(a){
	a.style.display='none';
}

function isOpen(a){
	if(document.getElementById(a).style.display=="block" || document.getElementById(a).style.display=="table")
		return true;
	else
		return false;
}

function openPopup(a){
	hideErrors();
	fadeon('popupbg',.4,150);
	showBox(document.getElementById('popupBox'));
	document.getElementById('popupContent').innerHTML=document.getElementById(a).innerHTML;
}

function closePopup(){
	//if popup2 is open, don't hide bg.
	if(!isOpen('popupBox2'))
		fadeoff('popupbg',0,150);
	hideBox(document.getElementById('popupBox'));
	document.getElementById('popupContent').innerHTML="";
}

function openPopup2(a){
	fadeon('popupbg',.4,150);
	showBox(document.getElementById('popupBox2'));
	document.getElementById('popupContent2').innerHTML=document.getElementById(a).innerHTML;
}

function closePopup2(){
	//if popup1 is open, don't hide bg.
	if(!isOpen('popupBox'))
		fadeoff('popupbg',0,150);
	hideBox(document.getElementById('popupBox2'));
	document.getElementById('popupContent2').innerHTML="";
}

function showErrors(a){
	fadeon('popupbg',.4,150);
	showBox(document.getElementById('errorMsgBox'));
	document.getElementById('errorMsgBoxContent').innerHTML=a;
}

function hideErrors(){
	//if popup1 or popup2 is open, don't hide bg.
	if(!isOpen('popupBox')&&!isOpen('popupBox2'))
		fadeoff('popupbg',0,150);
	hideBox(document.getElementById('errorMsgBox'));
}

function showNotice(a){
	fadeon('popupbg',.4,150);
	showBox(document.getElementById('noticeMsgBox'));
	document.getElementById('noticeMsgBoxContent').innerHTML=a;
}

function hideNotice(){
	//if popup1 or popup2 is open, don't hide bg.
	if(!isOpen('popupBox')&&!isOpen('popupBox2'))
		fadeoff('popupbg',0,150);
	hideBox(document.getElementById('noticeMsgBox'));
}

function showLoading(){
	fadeon('popupbg',.4,150);
	showBox(document.getElementById('loading'));
}

function hideLoading(){
	if(!isOpen('popupBox')&&!isOpen('popupBox2'))
		fadeoff('popupbg',0,150);
	hideBox(document.getElementById('loading'));
}

//---fading---//

var  default_time = 180.0; //default time to fade

// FadeStates: -2 Transparent, 2 Opaque, -1 Opaque to Transparent, 1 Transparent to Opaque

//start & finish opacities: 0 to 1
function fadeon(eid,finish,time){
	var element = document.getElementById(eid);
	if(element==null)
		return;
	if(!finish)
		finish=1;
	element.Finish=finish;
	if(!time)
		time=default_time;
	element.TimeToFade=time;
	
	if(element.style.display=="none"||element.style.display==""||element.style.display==null){
		element.style.display="block";
		element.style.opacity=0;
		element.style.filter="alpha(opacity=0)";
		element.FadeState=1;
		element.FadeTimeLeft=element.TimeToFade;
		element.Start=element.style.opacity;
		setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 15);
	} else if(element.FadeState==-1){
		element.FadeState=1;
		element.FadeTimeLeft=element.TimeToFade-element.FadeTimeLeft;
	} else if(element.FadeState==-2) {
		element.FadeState=1;
		element.FadeTimeLeft=element.TimeToFade;
		element.Start=element.style.opacity;
		setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 15);
	}
}

function fadeoff(eid,finish,time){		
	var element = document.getElementById(eid);
	if(element==null)
		return;
	if(!finish)
		finish=0;
	element.Finish=finish;
	if(!time)
		time=default_time;
	element.TimeToFade=time;
	
	if(element.FadeState==1){
		element.FadeState=-1;
		element.FadeTimeLeft=element.TimeToFade-element.FadeTimeLeft;
		element.Finish=0;
	} else if(element.FadeState==2) {
		element.FadeState=-1;
		element.FadeTimeLeft=element.TimeToFade;
		element.Start=element.style.opacity;
		setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 15);
	}
}

function animateFade(lastTick, eid, callback) {
		
	if(!callback)
		callback=0;
		
	var curTick = new Date().getTime();
	var elapsedTicks = curTick - lastTick;
 
	var element = document.getElementById(eid);
		 
	if(element.FadeTimeLeft <= elapsedTicks){
		// we're finished!
		element.style.opacity=element.Finish;
		element.style.filter='alpha(opacity='+element.Finish*100+')';
		element.FadeState = element.FadeState == 1 ? 2 : -2;
		if(element.style.opacity==0)
			element.style.display="none";
  	  	else
  	  		if(element.style.removeAttribute)
  	  			if(element.opacity==1)
  	  				element.style.removeAttribute('filter');
  	  	if(callback)
  	  		eval(unescape(callback));
  	  	  	  		
  	  	return;
  	}
  	
  	element.FadeTimeLeft -= elapsedTicks;
  	var newOpVal = (element.FadeTimeLeft/element.TimeToFade);
  	
  	if(element.Start>0)
  		newOpVal = newOpVal * element.Start;
  	
  	if(element.FadeState == 1)
  		newOpVal = 1 - newOpVal;
  	
  	if(element.Finish>0)
  		newOpVal=newOpVal*element.Finish;
  	
  	element.style.opacity = newOpVal;
  	element.style.filter = 'alpha(opacity='+(newOpVal*100)+')';
 
  	setTimeout("animateFade("+curTick+", '"+eid+"', '"+callback+"')", 15);
}

// starts a fade, or reverses direction if already fading.
// only eid is required
// callback is function to call back when fade is complete
function fade(eid,time,callback){
		
	var element = document.getElementById(eid);
	if(element==null)
		return;
	if(!time)
		time=default_time;
	element.TimeToFade=time;
	if(!callback)
		callback=0;
		
	//determine what direction we're fading
	if(element.style.display=="none"){
		//we're fading transparent to opaque
		element.style.display="block";
		element.style.opacity=0;
		element.style.filter="alpha(opacity=0)";
		element.FadeState=1;
		element.FadeTimeLeft=element.TimeToFade;
		element.Start=element.style.opacity;
		element.Finish=1;
		setTimeout("animateFade("+new Date().getTime()+", '"+eid+"', '"+escape(callback)+"')", 15);
	} else if(element.FadeState==-1){
		//we're fading transparent to opaque
		element.FadeState=1;
		element.FadeTimeLeft=element.TimeToFade-element.FadeTimeLeft;
		element.Finish=1;
	} else if(element.FadeState==1){
		//we're fading opaque to transparent
		element.FadeState=-1;
		element.FadeTimeLeft=element.TimeToFade-element.FadeTimeLeft;
		element.Finish=0;
	} else if(element.FadeState==-2) {
		//we're fading transparent to opaque
		element.FadeState=1;
		element.FadeTimeLeft=element.TimeToFade;
		element.Start=element.style.opacity;
		element.Finish=1;
		setTimeout("animateFade("+new Date().getTime()+", '"+eid+"', '"+escape(callback)+"')", 15);
	} else {
		//we're fading opaque to transparent
		element.FadeState=-1;
		element.FadeTimeLeft=element.TimeToFade;
		element.Start=element.style.opacity;
		element.Finish=0;
		setTimeout("animateFade("+new Date().getTime()+", '"+eid+"', '"+escape(callback)+"')", 15);
	}
}

