function __noConnection() {
	if (waitElement)		
			waitElement.style.visibility = 'hidden'; 
	//AJAXCbo.AbortCallBack();
	alert('Could not access the remote server.');	
}

function CallBackObject()
{
  this.Init();
}

CallBackObject.prototype.Init = function()
{
  this.XmlHttp = this.GetHttpObject();
}
 
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(eventTarget, eventArgument)
{
  var theData = '';
  var theform = document.forms[0];
  var thePage = window.location.pathname + window.location.search;
  var eName = '';
 
  theData  = '__AJAX_EVENTTARGET='  + escape(eventTarget.split("$").join(":")) + '&';
  theData += '__AJAX_EVENTARGUMENT=' + escape(eventArgument).split("+").join("%2B") + '&';
  //theData += '__VIEWSTATE='    + escape(theform.__VIEWSTATE.value).replace(new RegExp('\\+', 'g'), '%2b') + '&';
	
  for( var i=0; i<theform.elements.length; i++ )
  {
    eName = theform.elements[i].name;
    if( eName && eName != '')
    {
		if( eName == '__EVENTTARGET' || eName == '__EVENTARGUMENT' || eName == '__VIEWSTATE' )
		{
			// Do Nothing
		}
		else
		{
			var type = theform.elements[i].type;
			var val = theform.elements[i].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");
			}
			
			val = escape(val).split("+").join("%2B");
			
			if ( type == "select-multiple" )
			{
				for (var j=0; j < theform.elements[i].options.length; j++)
					if (theform.elements[i].options[j].selected)
						theData = theData + escape(eName.split("$").join(":")) + '=' + escape(theform.elements[i].options[j].value).split("+").join("%2B") + '&';
			}
			else if ( (type != "checkbox" && type != "radio") || theform.elements[i].checked )
			{
				theData = theData + escape(eName.split("$").join(":")) + '=' + val;
				if( i != theform.elements.length - 1 )
					theData = theData + '&';
			}
		}
    }
  }
  
	this.AbortCallBack();
	this.Init();
	this.TimerID = window.setTimeout("__noConnection()", 20000);	
	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', thePage, 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()
{
	AJAXCbo.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.ClockID = 0;
CallBackObject.prototype.TimerID = 0;

CallBackObject.prototype.SetIntervalForCallBack = function(milliSec)
{
	if (this.ClockID)
		this.ClearIntervalForCallBack();
	this.ClockID = window.setInterval("AJAXCbo.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;
}


var AJAXCbo = new CallBackObject();
AJAXCbo.OnComplete = AJAXCbo_Complete;
AJAXCbo.OnError = AJAXCbo_Error;
AJAXCbo.OnAbort = AJAXCbo_Abort;

function AJAXCbo_Complete(responseText, responseXML)
{
	window.clearTimeout(AJAXCbo.TimerID);
	//alert(responseText);

	// Checking if the data were fully loaded, without being aborted
	var flag = "'AJAX_LOADING_OK';\r\n";
	if (responseText.substring(responseText.length - flag.length, responseText.length) != flag)
		return false;

	eval(responseText);

	if (waitElement)		
		waitElement.style.visibility = 'hidden'; 
	
	return true;
}

function AJAXCbo_Error(status, statusText, responseText)
{
	window.clearTimeout(AJAXCbo.TimerID);
	if (waitElement)		
		waitElement.style.visibility = 'hidden'; 	
	document.body.innerHTML = responseText;	
}

function AJAXCbo_Abort()
{
	window.clearTimeout(AJAXCbo.TimerID);
	if (waitElement)		
		waitElement.style.visibility = 'hidden'; 	
}

// wait element 
window.attachEvent("onload", CreateWaitElement);
window.attachEvent("onscroll", MoveWaitElement);
window.attachEvent("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 = 'yükleniyor ...';
		elem.style.visibility = 'hidden';		
		document.body.insertBefore(elem, document.body.firstChild);		
	}
	waitElement = elem;	
 }
 // end wait element
