function __noConnection() {
	if (waitElement)		
			waitElement.style.visibility = 'hidden'; 
	//this.AbortCallBack();
	alert('Could not access the remote server.');	
}

function CallBackObject()
{
  this.Init();  
}

CallBackObject.prototype.ClockID = 0;
CallBackObject.prototype.TimerID = 0;
// tamttt:add
CallBackObject.prototype.TargetID = '';
CallBackObject.prototype.ReponseText = '';

CallBackObject.prototype.Init = function()
{
	this.XmlHttp = this.GetHttpObject();
	this.OnComplete = onComplete;
	this.OnError = onError;
	this.OnAbort = onAbort;
}
 
CallBackObject.prototype.GetHttpObject = function()
{ 
  var xmlhttp;  
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}
 
CallBackObject.prototype.DoPostCallBack = function(eventArgument, eventUrl, eventTarget)
{
	var theData = eventArgument; //BuildArgument(eventArgument); 
	var eName = ''; 
	this.AbortCallBack();
	this.Init();
	this.TimerID = window.setTimeout("__noConnection()", 20000);	
	this.TargetID = eventTarget;
	// container for wait element
	waitContainer = eventTarget; 	
	
	//shiftOpacity(this.TargetID, 100);
	fade(this.TargetID, 500);
	
	if( this.XmlHttp )
	{		
		if (waitElement)
		{
			waitElement.style.visibility = 'visible';
			MoveWaitElement();
		}
		if( this.XmlHttp.readyState == 4 || this.XmlHttp.readyState == 0 )
		{
			var oThis = this;
			
			this.XmlHttp.open('POST', eventUrl, true);
			this.XmlHttp.onreadystatechange = function(){ oThis.ReadyStateChange(); };
			this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			this.XmlHttp.send(theData);
		}
	}
}
 
CallBackObject.prototype.DoCallBackStartup = function()
{
	this.DoPostCallBack("__AJAX_CALLBACKSTARTUP","");
}
 
CallBackObject.prototype.AbortCallBack = function()
{
	window.clearTimeout(this.TimerID);
	if( this.XmlHttp )
		this.XmlHttp.abort();
}
 
CallBackObject.prototype.OnLoading = function()
{
  // Loading
}
 
CallBackObject.prototype.OnLoaded = function()
{
  // Loaded
}
 
CallBackObject.prototype.OnInteractive = function()
{
  // Interactive
}
 
CallBackObject.prototype.OnComplete = function(responseText, responseXml)
{
  // Complete
}
 
CallBackObject.prototype.OnAbort = function()
{
  // Abort
}
 
CallBackObject.prototype.OnError = function(status, statusText)
{
  // Error
}
 
CallBackObject.prototype.ReadyStateChange = function()
{
  if( this.XmlHttp.readyState == 1 )
  {
    this.OnLoading();
  }
  else if( this.XmlHttp.readyState == 2 )
  {
    this.OnLoaded();
  }
  else if( this.XmlHttp.readyState == 3 )
  {
    this.OnInteractive();
  }
  else if( this.XmlHttp.readyState == 4 )
  {  
    if( this.XmlHttp.status == 0 )
      this.OnAbort();
    else if( this.XmlHttp.status == 200 && this.XmlHttp.statusText == "OK" )
      this.OnComplete(this.XmlHttp.responseText, this.XmlHttp.responseXML);
    else
      this.OnError(this.XmlHttp.status, this.XmlHttp.statusText, this.XmlHttp.responseText);   
  }
}

CallBackObject.prototype.SetIntervalForCallBack = function(milliSec)
{
	if (this.ClockID)
		this.ClearIntervalForCallBack();
	this.ClockID = window.setInterval("this.DoPostCallBack('__AJAX_CALLBACKTIMER','')", milliSec);
}

CallBackObject.prototype.ClearIntervalForCallBack = function()
{
	window.clearInterval(this.ClockID);
	this.ClockID = 0;
}


CallBackObject.prototype.SetAttributesOfControl = function(clientID, attributes)
{
	var place = document.getElementById(clientID);
	if (place != null && attributes != "")
	{
		var attribs = attributes.split("|");
		for (var i=0; i < attribs.length; i++)
		{
			var parts = attribs[i].split("=");
			place.setAttribute(parts[0], parts[1])
		}
	}
}

CallBackObject.prototype.AddElementScript = function(parentID, tagName, elementID, html, beforeElemID)
{
	var place = document.getElementById(parentID);
	var child = document.getElementById(elementID);
	if (place != null && child == null)
	{
		child = document.createElement(tagName);
		child.id = elementID;
		var before = (beforeElemID != null) ? document.getElementById(beforeElemID) : null;
		place.insertBefore(child, before);
	}

	this.SetHtmlOfElementScript (html, elementID);
}

CallBackObject.prototype.RemoveElementScript = function(parentID, elementID)
{
	var place = document.getElementById(parentID);
	var child = document.getElementById(elementID);
	if (place != null && child != null)
		place.removeChild(child);
}

CallBackObject.prototype.SetFieldScript = function(fieldName, fieldValue)
{
	document.all.item(fieldName).value = fieldValue;
}

CallBackObject.prototype.SetHtmlOfElementScript = function(html, elementID)
{
	var place = document.getElementById(elementID);
	if (place != null)
		place.innerHTML=html;
}

CallBackObject.prototype.SetHtmlOfPage = function(html)
{
	document.write(html);
	document.close();
}

CallBackObject.prototype.SetVisibilityOfElement = function(elementID, visible)
{
	var place = document.getElementById(elementID);
	if (place != null)
		place.style.display = (visible) ? "" : "none";
}

CallBackObject.prototype.Alert = function(message)
{
	window.alert(message);
}

// It's used by AjaxPanel
CallBackObject.prototype.ExtendedSetHtmlOfElementScript = function(html, elementID)
{
	var store = document.createElement("span");
	store.innerHTML = html;
	var spans = store.getElementsByTagName("span");
	for (var i=0; i < spans.length; i++)
	{
		var elem = spans[i];
		if (elem.getAttribute("name") == "__ajax_rbs")
		{
			var elemOnPage = document.getElementById(elem.id);
			if (elemOnPage != null)
				elem.innerHTML = elemOnPage.innerHTML;
		}
	}

	var place=document.getElementById(elementID);
	if (place != null)
		place.innerHTML = store.innerHTML;
}


function onComplete(responseText, responseXML)
{
   	window.clearTimeout(this.TimerID);
	this.ResponseText = responseText;
	var oContainer=document.getElementById(this.TargetID); 
	//alert('complete: ' + oContainer);
	if (oContainer!=undefined) 
	//alert(oContainer.innnerHTLM);
	{ 	
	    //alert('1 ' + this.status); 
		if 	((responseText.indexOf('</HTML') > -1) || (responseText.indexOf('</html') > -1))
		{
			window.location=window.location;
			return;
		}
		responseText = responseText.replace("&#x27;", "^");
		//alert(responseText);
		oContainer.innerHTML=JSDecode(responseText); 	
		oContainer.innerHTML=responseText; 	
		fade(this.TargetID, 1000);		
				 
	}
	var elem = document.getElementById('__Callback_Wait');	
	if (elem!=null)
	{
		elem.style.display='none';
	}
	//alert('3 ' + this.status); 
	//return true;
}

function onError(status, statusText, responseText)
{
	window.clearTimeout(this.TimerID);
	if (waitElement)		
		waitElement.style.visibility = 'hidden'; 	
	document.body.innerHTML = responseText;	
}

function onAbort()
{
	window.clearTimeout(this.TimerID);
	if (waitElement)		
		waitElement.style.visibility = 'hidden'; 	
}

// wait element 
//window.attachEvent("onload", CreateWaitElement);
//window.attachEvent("onscroll", MoveWaitElement);
//window.attachEvent("onresize", MoveWaitElement);

var waitElement;
var waitContainer;
function MoveWaitElement()
{	
	if (!waitElement)
		CreateWaitElement();

	var width = document.body.clientWidth;
	//waitElement.style.top = document.body.scrollTop;
	waitElement.style.left = width + document.body.offsetLeft - 
	waitElement.offsetWidth;
}
function CreateWaitElement0()
{    
	var elem = document.getElementById('__Callback_Wait');	
	var container = document.getElementById(waitContainer);
	//alert('wait: ' + container);
	if (!elem)
	{			    
		elem = document.createElement("img");
		elem.id = '__Callback_Wait';		
		//elem.style.position = 'absolute';		
		elem.src='http://localhost/Lairai/DesktopModules/TTT.Gallery/images/loading.gif'; //alt="Add New Page" style="border-width:0px;" /></a>
		elem.border = "0";
		//sp = document.createElement("span")
		   
		elem.style.height = 30;	
		elem.style.backgroundColor = "transparent";		
		elem.style.visibility = 'hidden';
		elem.style.display='';	
		//try 
		//{	
           container.appendChild(elem) ;	
           //alert(container.innerHTML); 
        //} catch (e) 
        //{  
        //    document.body.insertBefore(elem, document.body.lastChild);  
        //}
	}
	    waitElement = elem;	
 }
function CreateWaitElement()
{
	var elem = document.getElementById('__Callback_Wait');	
	//var container = document.getElementById('MovieDetails');	
	var container = document.getElementById(waitContainer);
	if (!elem && container!= null)
	{		
		elem = document.createElement("div");
		elem.id = '__Callback_Wait';		
		elem.style.position = 'absolute';		
		elem.style.height = 17;		
		elem.border = "1px";
		elem.style.paddingLeft = "3px";
		elem.style.paddingRight = "3px";
		elem.style.fontSize = "11px";
		elem.style.borderColor = "#e5e5e5";
		elem.style.borderSize = "1px";
		elem.style.backgroundColor = "DimGray";
		elem.style.color = "#e5e5e5";
		elem.innerHTML = 'Loading ...';
		elem.style.visibility = 'hidden';
		elem.style.display='';	
		//	tamttt change here
		container.appendChild(elem) ;	
		//document.body.insertBefore(elem, document.body.firstChild);
	}
	waitElement = elem;	
 }
 // created by tamttt
 function BuildArgument(fdata, prefix)
{
	var arg = ''; //'<filter>';
	for(var i=0;i<fdata.length;i++)
	{		
		if((fdata[i].n!=undefined) && (fdata[i].c!=undefined))
		{
			var ctlname = prefix+fdata[i].c
			arg +='<ctl'+fdata[i].n+'>';
			arg +=ctlname;
			arg += '</ctl'+fdata[i].n+'>';
			
			arg +='<'+fdata[i].n+'>';
			var ctl=document.getElementById(ctlname);
			if(ctl!=undefined)
			{			
				var type = ctl.type;			
				var val = ctl.value;	
				
				if (type=="textarea")	
				{			
					// Firefox has the bad habit of altering the "\r\n" of a textarea to "\n",		
					// so convert all single "\n" to "\r\n"		
					val = val.split("\r\n").join("\n").split("\n").join("\r\n");		
				}					
				if (type=="checkbox" || type=="radio")
				{
					val = ctl.checked;
				}
				if (type=="select-multiple")			
				{			
					for (var j=0; j < ctl.options.length; j++)		
					if (ctl.options[j].selected)
					{	
						val = ctl.options[j].value;
					}	
				}	
				arg += val;
			}
			arg +='</'+fdata[i].n+'>';			
		}
	} 
	//arg += '</filter>';
	return arg;
}

 
 function JSDecode(s)  
 { 
    //s = s.replace("^", "'")
	s = s.replace('\"', '"'); 
	s = s.replace("\'", "'"); 
	s = s.replace("\/", "/"); 
	return s; 
} 

//// simple fade in/out script get from http://brainerror.net/scripts/javascript/blendtrans/

//function opacity(id, opacStart, opacEnd, millisec) {
//	//speed for each frame
//	var speed = Math.round(millisec / 100);
//	var timer = 0;

//	//determine the direction for the blending, if start and end are the same nothing happens
//	if(opacStart > opacEnd) {
//		for(i = opacStart; i >= opacEnd; i--) {
//			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
//			timer++;
//		}
//	} else if(opacStart < opacEnd) {
//		for(i = opacStart; i <= opacEnd; i++)
//			{
//			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
//			timer++;
//		}
//	}
//}

////change the opacity for different browsers
//function changeOpac(opacity, id) {
//	var object = document.getElementById(id).style; 
//	object.opacity = (opacity / 100);
//	object.MozOpacity = (opacity / 100);
//	object.KhtmlOpacity = (opacity / 100);
//	object.filter = "alpha(opacity=" + opacity + ")";
//}

//function shiftOpacity(id, millisec) {
//	//if an element is invisible, make it visible, else make it ivisible
//	if(document.getElementById(id).style.opacity == 0) {
//		opacity(id, 0, 100, millisec);
//	} else {
//		opacity(id, 100, 0, millisec);
//	}
//}

//function blendimage(divid, imageid, imagefile, millisec) {
//	var speed = Math.round(millisec / 100);
//	var timer = 0;
//	
//	//set the current image as background
//	document.getElementById(divid).style.backgroundImage = "url(" + document.getElementById(imageid).src + ")";
//	
//	//make image transparent
//	changeOpac(0, imageid);
//	
//	//make new image
//	document.getElementById(imageid).src = imagefile;

//	//fade in image
//	for(i = 0; i <= 100; i++) {
//		setTimeout("changeOpac(" + i + ",'" + imageid + "')",(timer * speed));
//		timer++;
//	}
//}

//function currentOpac(id, opacEnd, millisec) {
//	//standard opacity is 100
//	var currentOpac = 100;
//	
//	//if the element has an opacity set, get it
//	if(document.getElementById(id).style.opacity < 100) {
//		currentOpac = document.getElementById(id).style.opacity * 100;
//	}

//	//call for the function that changes the opacity
//	opacity(id, currentOpac, opacEnd, millisec)
//}

//http://www.switchonthecode.com/tutorials/javascript-tutorial-simple-fade-animation

//var TimeToFade = 1000.0;
var TimeToFade = 0;

function fade(eid, duration)
{
  TimeToFade = duration;
  var element = document.getElementById(eid);
  if(element == null)
    return;
    
   
  if(element.FadeState == null)
  {
    if(element.style.opacity == null || element.style.opacity == '' 
       || element.style.opacity == '1')
      element.FadeState = 2;
    else
      element.FadeState = -2;
  }
    
  if(element.FadeState == 1 || element.FadeState == -1)
  {
    element.FadeState = element.FadeState == 1 ? -1 : 1;
    element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft;
  }
  else
  {
    element.FadeState = element.FadeState == 2 ? -1 : 1;
    element.FadeTimeLeft = TimeToFade;
    setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 33);
  }  
}

function animateFade(lastTick, eid)
{  
  var curTick = new Date().getTime();
  var elapsedTicks = curTick - lastTick;
  
  var element = document.getElementById(eid);
 
  if(element.FadeTimeLeft <= elapsedTicks)
  {
    element.style.opacity = element.FadeState == 1 ? '1' : '0';
    element.style.filter = 'alpha(opacity = ' + (element.FadeState == 1 ? '100' : '0') + ')';
    element.FadeState = element.FadeState == 1 ? 2 : -2;
    return;
  }
 
  element.FadeTimeLeft -= elapsedTicks;
  var newOpVal = element.FadeTimeLeft/TimeToFade;
  if(element.FadeState == 1)
    newOpVal = 1 - newOpVal;

  element.style.opacity = newOpVal;
  element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
  
  setTimeout("animateFade(" + curTick + ",'" + eid + "')", 33);
}