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;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/
  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.TargetID = eventTarget;
	this.AbortCallBack();
	this.Init();
	//this.TimerID = window.setTimeout("__noConnection()", 120000);	
	
	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); 
	if (oContainer!=undefined) 
	{ 	
		if 	((responseText.indexOf('</HTML') > -1) || (responseText.indexOf('</html') > -1))
		{
			window.location=window.location;
			return;
		}
		oContainer.innerHTML=JSDecode(responseText); 
	}
	var elem = document.getElementById('__Callback_Wait');	
	elem.style.display='none';
	//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.onload = CreateWaitElement;
window.onscroll = MoveWaitElement;
window.onresize = MoveWaitElement;
var waitElement;
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 CreateWaitElement()
{
	var elem = document.getElementById('__Callback_Wait');	
	if (!elem)
	{		
		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 = "#ffffff";
		elem.style.borderSize = "1px";
		elem.style.backgroundColor = "DimGray";
		elem.style.color = "#ffffff";
		elem.innerHTML = 'Loading ...';
		elem.style.visibility = 'hidden';
		elem.style.display='';		
		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("\/", "/"); 
	return s; 
} 

 // end wait element

