var tmpTPHtml = "";

function FinStats(span){
	if(span!=null && span.length>0){
		var tagElem = document.getElementById(span);
		if(typeof(tagElem)!='undefined' && tagElem!=null && tmpTPHtml.length>0){
			tagElem.innerHTML = tmpTPHtml;
			tmpTPHtml = "";
		}
	}
}

function InitStats(pub) {
	if(ORDVAL) ORDVAL=Math.floor (Math.random()*1000000);
	document.write = function(text) {
		var spanScript = null;
		var rnd=Math.floor (Math.random()*1000000);
		if(pub==null){
			var spanScript = document.createElement('span');
			spanScript.setAttribute('id', '_DWinsideJSTag_'+rnd);
			spanScript.setAttribute('style', 'display:none;');
			document.body.appendChild(spanScript);
		}
		if(typeof(spanScript)!='undefined' && spanScript!=null)
			spanScript.innerHTML = text;
		else
			tmpTPHtml += text;
			
		var tmpTxt = text;
		do
		{
			var scriptsTags = new RegExp("<script", "gi");
			var results = tmpTxt.match(scriptsTags);
			if(results!=null){
				var ini = tmpTxt.toLowerCase().indexOf("<script");
				var fin = tmpTxt.toLowerCase().indexOf("</scri"+"pt>") + 9;
				EvalScript(tmpTxt.substring(ini, fin), rnd);
				tmpTxt = tmpTxt.substring(0 ,ini) + tmpTxt.substring(fin);
			}
		}
		while(results!=null);
	}			
	document.writeln = document.write;
}

function EvalScript(text, rnd){
	var scriptsTags = new RegExp("<script", "gi");
	var results = text.match(scriptsTags);
	if(results!=null) {
		var ini = text.toLowerCase().indexOf("<script");
		var fin = text.toLowerCase().indexOf(">") + 1;
		var iniTag = text.substring(ini, fin);
		var finTag = text.substring(fin);
		var newScript = document.createElement('script');
		newScript.setAttribute('id', '_insideJSTag_'+rnd);
		var lngAttr = new RegExp("language=", "gi");
		var resultsLng = iniTag.match(lngAttr);
		if(resultsLng!=null)
		{
			var lI = iniTag.toLowerCase().indexOf("language=")+9;
			var marker=iniTag.charAt(lI);
			var tmpLng = iniTag.substring(lI);
			if(marker=='\'' || marker=='"') {
				tmpLng = iniTag.substring(lI+1);
				newScript.setAttribute('language', tmpLng.substring(0, tmpLng.indexOf(marker)));
				newScript.setAttribute('type', 'text/javascript');
			}
			else {
				if(tmpLng.toLowerCase().indexOf('javascript')==0) {
					newScript.setAttribute('language', 'JavaScript');
					newScript.setAttribute('type', 'text/javascript');
				}
				else if(tmpLng.toLowerCase().indexOf('vbscript')==0)
					newScript.setAttribute('language', 'VBScript');
			}						
		}
		else {
			newScript.setAttribute('language', 'JavaScript');
			newScript.setAttribute('type', 'text/javascript');
		}
		var srcAttr = new RegExp("src=", "gi");
		var resultsAttr = iniTag.match(srcAttr);
		if(resultsAttr!=null) {
			var sI = iniTag.toLowerCase().indexOf("src=")+4;
			var marker = iniTag.charAt(sI);
			var tmpSrc = iniTag.substring(sI+1);
			var src = tmpSrc.substring(0, tmpSrc.indexOf(marker));
			newScript.setAttribute('src', src);
		}
		else {
			var tmpTxt = finTag;
			var JsTxt = tmpTxt.substring(0, tmpTxt.toLowerCase().lastIndexOf('</scri'+'pt>'));
			newScript.text = JsTxt;
		}
		if(newScript.text.length>0)
			include_txt(newScript.id, newScript.text);
		else if(newScript.src.length>0)
			include_src(newScript.id, newScript.src);
	}
}


function include_src(script_id, script_filename) {
	var html_doc = document.getElementsByTagName('head').item(0);
	if(typeof(html_doc)!='undefined' && html_doc!=null) {
		var js = document.createElement('script');
		js.setAttribute('language', 'javascript');
		js.setAttribute('type', 'text/javascript');
		js.setAttribute('id', '_statTSP_'+ script_id);
		js.setAttribute('src', script_filename);
		var oldScript = document.getElementById('_statTSP_'+ script_id);
		if(typeof(oldScript)!='undefined' && oldScript!=null)
			oldScript.parentNode.removeChild(oldScript);
		html_doc.appendChild(js);
	}
}

function include_txt(script_id, script_text) {
	var html_doc = document.getElementsByTagName('head').item(0);
	if(typeof(html_doc)!='undefined' && html_doc!=null) {
		var js = document.createElement('script');
		js.setAttribute('language', 'javascript');
		js.setAttribute('type', 'text/javascript');
		js.setAttribute('id', '_statTSP_'+ script_id);
		js.text = script_text;
		var oldScript = document.getElementById('_statTSP_'+ script_id);
		if(typeof(oldScript)!='undefined' && oldScript!=null)
			oldScript.parentNode.removeChild(oldScript);
		html_doc.appendChild(js);
	}
}

__AJAXCboList = new Array();
__PageForm = null;
__bPageIsStored = false;
__bUnloadStoredPage = false;
__bTracing = false;
__doingSubmit = false;
__PreviousPostBack = null;
__TraceWindows = new Array();
__ClockID = 0;
__IsOpera = false;
__IsIE = false;
__IsNS = false;
__IsSF = false;
__ClkEvent = null;
var _showMessage;			//ERIVAS
var _textMessage;			//ERIVAS
var _textMessagePosition;	//ERIVAS
var _waitDiv;				//ERIVAS

// Excluding from post flags
// To be used with the "ExcludeFlags" attribute
excfViewState = 1;
excfFingerprints = 2;
excfUserHidden = 4;
excfAllHidden = excfViewState | excfFingerprints | excfUserHidden;
excfFormElements = 8;
excfAllElements = excfAllHidden | excfFormElements;

//ERIVAS
/*************************************************/
function newSetInterval(func,interval) {
	var fCall = func
 	if (typeof func != "function") 
  		var fCall= new Function(func)

 	var output = new Object
 	output.interval = interval
	output.code = fCall
	output.started = true;
 	output.timerID = window.setInterval(fCall,interval)

	output.stop = function(){
		if(typeof output.timerID != 'undefined')
			window.clearInterval(output.timerID);
	}
	output.start = function(){
		output.stop();
		output.timerID = window.setInterval(fCall,interval);
	}
 	return output
}

function newClearInterval(output) {
 	if (typeof output != 'undefined' && typeof output.timerID != 'undefined')
	{
  		window.clearInterval(output.timerID);
  		output.started = false;
  	}
}
/*************************************************/


function AjaxCallObject()
{
  this.Init();
}

AjaxCallObject.prototype.Init = function()
{
  this.XmlHttp = this.GetHttpObject();
}
 
AjaxCallObject.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;
}

AjaxCallObject.prototype.GetAjaxCallType = function(element)
{
	if (element == null)
		return "none";
		
	var attrib = element.getAttribute("AjaxCall");
	
	if (attrib != null && attrib != '')
	{
		//ERIVAS
		if(element.getAttribute("showLoadingMessage")!=null)
			_showMessage = element.getAttribute("showLoadingMessage");
		else
			_showMessage = 'true';
		if(element.getAttribute("loadingMessage")!=null)
			_textMessage = element.getAttribute("loadingMessage");
		else
			_textMessage = 'Loading ...';
		if(element.getAttribute("loadingMessagePosition")!=null)
			_textMessagePosition = element.getAttribute("loadingMessagePosition");
		else
			_textMessagePosition = 'TR';
		var _oldWaitDiv = _waitDiv;
		if(element.getAttribute("waitDiv")!=null)
			_waitDiv = element.getAttribute("waitDiv");
		else
			_waitDiv = '__AjaxCall_Wait';
		if(_waitDiv!=_oldWaitDiv)
			CreateWaitElement();
			
		return attrib.toLowerCase();
	}
	if (element.parentNode == null || element.parentNode == document.body)
		return "none";
	else
		return this.GetAjaxCallType(element.parentNode);
}

AjaxCallObject.prototype.GetAjaxScopeID = function(element)
{
	if (element == null)
		return null;
		
	var attrib = element.getAttribute("AjaxLocalScope");
	if ( attrib != null && attrib.toLowerCase() == "true" )
		return element.getAttribute("id")

	if (element.parentNode == null || element.parentNode == document.body)
		return null;
	else
		return this.GetAjaxScopeID(element.parentNode);
}

AjaxCallObject.prototype.ExcludeFromPost = function(element, scopeID, flags)
{
	var excludeAttr = element.getAttribute("ExcludeFromPost");
	if (excludeAttr != null && excludeAttr.toLowerCase() == "true")
		return true;

	var name = element.name;

	if (element.type == "hidden")
	{
		if ( name == "__MAGICAJAX_CONFIG" )
			return false;

		if ( excfAllHidden == (flags & excfAllHidden) )
			return true;

		if (name == "__VIEWSTATE")
		{
			return ( excfViewState == (flags & excfViewState) );
		}
		
		var fprintConst = "__CONTROL_FINGERPRINTS_";
		if (name.indexOf(fprintConst) == 0)
		{
			if ( excfFingerprints == (flags & excfFingerprints) )
				return true;
			
			if (scopeID != null)
			{
				fprintElem = document.getElementById(name.substr(fprintConst.length));
				if ( ! this.IsInAjaxScope(fprintElem, scopeID) )
					return true;
			}
		}
		else
		{
			return ( excfUserHidden == (flags & excfUserHidden) );
		}
	}
	else
	{
		if ( excfFormElements == (flags & excfFormElements) )
			return true;

		return ( scopeID != null && !this.IsInAjaxScope(element, scopeID) )
	}	

	return false;
}

AjaxCallObject.prototype.GetExcludeFlags = function(element)
{
	if (element == null)
		return 0;

	var flags = 0;
	var flagsAttr = element.getAttribute("ExcludeFlags");
	if (flagsAttr != null)
		flags = eval(flagsAttr);
	
	if (element.parentNode == null || element.parentNode == document.body)
		return flags;
	else
		return ( flags | this.GetExcludeFlags(element.parentNode) );
}

AjaxCallObject.prototype.IsInAjaxScope = function(element, scopeID)
{
	var attrib = element.getAttribute("AjaxLocalScope");
	if ( attrib != null && attrib.toLowerCase() == "true" && element.getAttribute("id") == scopeID )
		return true;

	if (element.parentNode == null || element.parentNode == document.body)
		return false;
	else
		return this.IsInAjaxScope(element.parentNode, scopeID);
}

AjaxCallObject.prototype.GetTargetElement = function(eventTarget)
{
	var target = document.getElementById(eventTarget);
	if (target != null)
		return target;
		
	var elemUniqueID = eventTarget.split("$").join(":");
	var ids = elemUniqueID.split(":");

	// Checks the unique id and its parents until it finds a target element
	// i.e. for ajaxPanel_grid:row:field it checks
	//   ajaxPanel_grid_row_field
	//   ajaxPanel_grid_row
	//   ajaxPanel_grid
	for (var num=ids.length; num > 0; num--)
	{
		var elemID = "";
		for (var i=0; i < num; i++)
			elemID += (i==0 ? "" : "_") + ids[i];
		
		target = document.getElementById(elemID);
		if (target != null)
			break;
	}
	// If no element found, try last id (fixes .NET 1.1 calendar control bug)
	if (target == null && ids.length > 1)
		target = document.getElementById(ids[ids.length-1]);
	
	return target;
}

AjaxCallObject.prototype.AddEventListener = function(obj, eventName, fn, capture)
{
    if (typeof(capture)=="undefined") capture=false;
    if (obj.addEventListener)
	    obj.addEventListener(eventName, fn, capture);
    else
        obj.attachEvent("on"+eventName, fn);
}

AjaxCallObject.prototype.DispatchEvent = function(obj, eventName)
{
	if (obj.fireEvent)
		obj.fireEvent("on"+eventName);
	else
	{
		var evt = document.createEvent("Events")
		evt.initEvent(eventName, true, true);
		obj.dispatchEvent(evt);
	}
}

AjaxCallObject.prototype.HookAjaxCall = function(bPageIsStored, bUnloadStoredPage, bTracing, pageFormID)
{
	__IsIE = navigator.appName.indexOf("Internet Explorer") != -1;
	__IsNS = navigator.appName.indexOf("Netscape") != -1;
	__IsSF = navigator.appName.indexOf("Safari") != -1;
    __IsOpera = window.opera ? true : false;
    __PageForm = document.getElementById(pageFormID);
    
    if (__PageForm == null) return;

	this.AddEventListener(__PageForm, "submit", this.OnFormSubmit);
	this.AddEventListener(__PageForm, "click", this.OnFormClick, true);

	if (typeof __doPostBack != 'undefined')
	{
		__PreviousPostBack = __doPostBack;
		__doPostBack = this.DoPostBack;
	}
	
	__bPageIsStored = bPageIsStored;
	__bUnloadStoredPage = bUnloadStoredPage;
	__bTracing = bTracing;

	if (typeof(RBS_Controls) != "undefined")
	{
		for (var i=0; i < RBS_Controls.length; i++)
			RBS_Controls_Store[i].setAttribute("ExcludeFromPost", "true");
	}

	if ( !bPageIsStored || !bUnloadStoredPage )
	{
		this.AddEventListener(window, "load", this.OnPageLoad);
		this.AddEventListener(window, "beforeunload", this.OnPageBeforeUnload);
	}

	this.AddEventListener(window, "unload", this.OnPageUnload);
}

AjaxCallObject.prototype.OnFormClick = function(e)
{
	__ClkEvent = e;
}

AjaxCallObject.prototype.OnFormSubmit = function(e)
{
	if (__doingSubmit)
	{
		__doingSubmit = false;
	    if (e.preventDefault)
	        e.preventDefault();
	    e.returnValue=false;
		return false;
	}
    if (typeof(Page_ClientValidate)=="function")
    {
        if (window.event && !__IsOpera)
        {
            if (window.event.returnValue == false)
                return;
        }
        else if (e.getPreventDefault && e.getPreventDefault() == true)
            return;
    }
    
	// Empty the cached html of RenderedByScript controls
	if (typeof(RBS_Controls) != "undefined")
	{
		for (var i=0; i < RBS_Controls.length; i++)
		{
			//ERIVAS
			if(typeof(RBS_Controls_Store[i])!="undefined" && RBS_Controls_Store[i]!=null)
				RBS_Controls_Store[i].value = "";
		}
	}

	var target;
	if ("activeElement"	in document)
	{
		// Internet Explorer and Opera
		target = document.activeElement;
	}
	else
	{
		// Firefox
		target = e ? e.explicitOriginalTarget : null;
	}
    if (target == null || target.name == null || target.name == "")
        return true;

	//ERIVAS por problema con el FIREFOX
	if(target.type == "text")
	{
	    if (e.preventDefault)
	        e.preventDefault();
	    e.returnValue=false;
		return false;
	}
        
	var cbType = AJAXCbo.GetAjaxCallType(target);
	if (cbType != "none")
	{
		__doingSubmit = true;
		AJAXCbo.DispatchEvent(__PageForm, "submit");
		__doingSubmit = false;

		var theData = "";
		//check if target is an input element of type 'image'
		if (target != null && target.type == "image")
		{
			if (e.offsetX)
			{
				// IE
				theData = target.name + ".x=" + (e.offsetX - target.offsetLeft) + "&" + target.name + ".y=" + (e.offsetY - target.offsetTop);
			}
			else
			{
				// Firefox
				theData = target.name + ".x=" + (__ClkEvent.pageX - target.offsetLeft) + "&" + target.name + ".y=" + (__ClkEvent.pageY - target.offsetTop);
			}
		}

	    if (AJAXCbo.DoAjaxCall(target.name, "", cbType, AJAXCbo.GetAjaxScopeID(target), theData))
	    {
	        if (e.preventDefault)
	            e.preventDefault();
	        e.returnValue = false;
			return false;
	    }
	    else
			return true;
	}
	else
	{
		AJAXCbo.ClearTracingWindows();
		return true;
	}
}

// Replaces normal __doPostBack
AjaxCallObject.prototype.DoPostBack = function(eventTarget, eventArgument)
{
    if (typeof(WebForm_OnSubmit)=="function")
    {
        if (__PageForm.onsubmit && (__PageForm.onsubmit() == false))
            return;
    }

	// Empty the cached html of RenderedByScript controls
	if (typeof(RBS_Controls) != "undefined")
	{
		for (var i=0; i < RBS_Controls.length; i++)
		{
			//ERIVAS
			if(typeof(RBS_Controls_Store[i])!="undefined" && RBS_Controls_Store[i]!=null)
				RBS_Controls_Store[i].value = "";
		}
	}
	
	var target = AJAXCbo.GetTargetElement(eventTarget);
	var cbType = AJAXCbo.GetAjaxCallType(target);
	if (cbType != "none")
	{
		AJAXCbo.DoAjaxCall(eventTarget, eventArgument, cbType, AJAXCbo.GetAjaxScopeID(target));
		
		if (target.tagName == "INPUT" && (target.type == "submit" || target.type == "image"))
		{
			if (window.event)
			{
				window.event.returnValue = false;
			}
			else if (__ClkEvent)
			{
				if (__ClkEvent.preventDefault)
					__ClkEvent.preventDefault();
			}
		}
	}
	else
	{
		if (__PreviousPostBack != null)
		{
			__PreviousPostBack(eventTarget, eventArgument);
		}
	}
}

AjaxCallObject.prototype.OnPageLoad = function()
{
	// Restore the html of RenderedByScript controls
	if (typeof(RBS_Controls) != "undefined")
	{
		for (var i=0; i < RBS_Controls.length; i++)
		{
			var html = RBS_Controls_Store[i].value;
			if (html != "")
			{
				RBS_Controls[i].innerHTML = html.substring(5, html.length);
				RBS_Controls_Store[i].value = "";
			}
		}
	}
}

AjaxCallObject.prototype.OnPageBeforeUnload = function()
{
	// Save the html of RenderedByScript controls, so that it can be restored for the
	// browser's "Back Button"
	if (typeof(RBS_Controls) != "undefined")
	{
		for (var i=0; i < RBS_Controls.length; i++)
		{
			//ERIVAS
			if(typeof(RBS_Controls_Store[i]) != "undefined")
			{	
				if(typeof(RBS_Controls[i])!= "undefined" && RBS_Controls[i]!=null)
				{
					RBS_Controls_Store[i].value = "HTML:" + RBS_Controls[i].innerHTML;
				}
			}
		}
	}
}

AjaxCallObject.prototype.OnPageUnload = function()
{
	//Celis Para el script de Tiempos de Descarga
	if(typeof unld =="function")
		unld();

	AJAXCbo.ClearTracingWindows();

	if ( !__bPageIsStored || !__bUnloadStoredPage )
		return;
	
	if (__PageForm["__AJAX_PAGEKEY"] == null)
		return;

	var thePage = __PageForm.action;
	var index = thePage.indexOf("?");
	if (index != -1)
		thePage = thePage.substring(0, index);

	thePage = thePage + "?__AJAX_PAGEUNLOAD=" + encodeURIComponent(__PageForm["__AJAX_PAGEKEY"].value);

	var oThis = AJAXCbo;
	__AJAXCboList.push(oThis);
	AJAXCbo = new AjaxCallObject();

	if( oThis.XmlHttp )
	{
		oThis.XmlHttp.open('GET', thePage, true);
		oThis.XmlHttp.onreadystatechange = function(){ };
		oThis.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		oThis.XmlHttp.send(null);
	}
}
 
AjaxCallObject.prototype.DoAjaxCall = function(eventTarget, eventArgument, ajaxCallType, ajaxScopeID, additionalData)
{
	//var s='';
	//for(var i in eventArgument)
	//	s+=i+' * ';
	//alert(s);

	//ERIVAS Para evitar que se encolen llamadas por el setInterval
	var timer;
	if( eventTarget.indexOf(':')==-1 && eval("typeof "+eventTarget+"CBTEV") != 'undefined')
	{
		timer = eval(eventTarget+'CBTEV');
		if(timer.started)
			timer.stop();
	}

	var target = this.GetTargetElement(eventTarget);

	//defaults
	if (!ajaxCallType) ajaxCallType = "async";
	
	if (typeof(ajaxScopeID) == "undefined")
		ajaxScopeID = this.GetAjaxScopeID( target );

	var theData = '';
	var theform = __PageForm;
	var thePage = theform.action;
	var eName = '';
	var cbType = AJAXCbo.GetAjaxCallType(theform.elements[eventTarget]);	//ERIVAS

	theData  = '__EVENTTARGET='  + this.EncodePostData(eventTarget.split("$").join(":")) + '&';
	theData += '__EVENTARGUMENT=' + this.EncodePostData(eventArgument) + '&';
	theData += '__AJAXCALL=true&';
  
	if (ajaxScopeID != null)
		theData += '__AJAXSCOPE=' + ajaxScopeID + '&';

	if (typeof(additionalData) != "undefined" && additionalData != "")
		theData += additionalData + "&";	

	var excludeFlags = this.GetExcludeFlags( target );

	var elemCount = theform.elements.length;
	for( var i=0; i<elemCount; i++ )
	{
		curElem = theform.elements[i];
		eName = curElem.name;
		if( eName && eName != '' && curElem.tagName != "EMBED")
		{
			if( eName == '__EVENTTARGET' || eName == '__EVENTARGUMENT' )
			{
				// Do Nothing
			}
			else if ( ! this.ExcludeFromPost(curElem, ajaxScopeID, excludeFlags) )
			{
				if ( __bPageIsStored && eName == '__VIEWSTATE' )
					continue;

				var type = curElem.type;
				var val = curElem.value;

				if ( type == "submit" || type == "button" )
					continue;

				val = this.EncodePostData(val);

				if ( type == "select-multiple" || type == "select-one" )
				{
					var selectLength = curElem.options.length;
					var optNameStr = this.EncodePostData(eName);
					for (var j=0; j < selectLength; j++)
						if (curElem.options[j].selected)
							theData = theData + optNameStr + '=' + this.EncodePostData(curElem.options[j].value) + '&';
				}
				else if ( (type != "checkbox" && type != "radio") || curElem.checked )
				{
					theData = theData + this.EncodePostData(eName) + '=' + val + '&';
				}
			}
		}
	}
  
	if (theData.substr(theData.length-1) == "&")
		theData = theData.substr(0, theData.length-1);
		
	if( this.XmlHttp )
	{	
		//ERIVAS	
		if (waitElement && _showMessage=='true')
		{
			if(_waitDiv=='__AjaxCall_Wait')
				waitElement.innerHTML = _textMessage;
			waitElement.style.visibility = 'visible';
			MoveWaitElement();
		}
		
		var oThis = this;
		__AJAXCboList.push(oThis);
		AJAXCbo = new AjaxCallObject();
		
		if (__bTracing)
		{
			this.CreateTracingWindow();
			this.TraceSentData(theData);		
		}

		if( this.XmlHttp.readyState == 4 || this.XmlHttp.readyState == 0 )
		{
			if ( ! ajaxCallType || ajaxCallType.toLowerCase() != "sync")
			{
				// Asynchronous
				this.XmlHttp.open("POST", thePage, true);
				//ERIVAS
				this.XmlHttp.onreadystatechange = function(){ oThis.ReadyStateChange(timer) };
				this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				this.XmlHttp.send(theData);
			}
			else
			{
				// Synchronous
				// Use a timeout so that the screen refreshes before getting stack waiting the AjaxCall.
				window.setTimeout(
					function()
					{
						oThis.XmlHttp.open("POST", thePage, false);
						oThis.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
						oThis.XmlHttp.send(theData);

						if( oThis.XmlHttp.status == 200 && oThis.XmlHttp.statusText == "OK" )
							oThis.OnComplete(oThis.XmlHttp.responseText, oThis.XmlHttp.responseXML);
						else
							oThis.OnError(oThis.XmlHttp.status, oThis.XmlHttp.statusText, oThis.XmlHttp.responseText);
						//ERIVAS
						if(typeof timer!='undefined') 
							if(timer.started) timer.start();
					}, 1);
			}			
		}
	}
	return true;
}

AjaxCallObject.prototype.OnLoading = function()
{
  // Loading
}

AjaxCallObject.prototype.OnLoaded = function()
{
  // Loaded
}

AjaxCallObject.prototype.OnInteractive = function()
{
  // Interactive
}

AjaxCallObject.prototype.OnComplete = function(responseText, responseXml)
{
	if (__bTracing)
	{
		this.TraceReceivedData(responseText);		
	}
	if (waitElement)		
		waitElement.style.visibility = 'hidden'; 

	// Checking if the data were fully loaded, without being aborted
	var flag = "'AJAX_LOADING_OK';";
	if (responseText.substr(responseText.length - flag.length) != flag)
		return false;

	eval(responseText);
	
	// Remove validators whose controltovalidate have been removed
	if (typeof(Page_Validators)!="undefined")
	{
	    for (i=0; i<Page_Validators.length; i++)
	    {
	        if (Page_Validators[i] && Page_Validators[i].controltovalidate
	            && document.getElementById(Page_Validators[i].controltovalidate)==null)
	        {
	            Page_Validators.splice(i,1);
	            i--;
	        }
	    }
	}
	return true;
}

AjaxCallObject.prototype.OnAbort = function()
{
	if (__bTracing)
	{
		this.WriteTrace("<b>!!! AjaxCall was aborted !!!</b>");
		this.CloseTrace();
	}

	if (waitElement)		
		waitElement.style.visibility = 'hidden'; 	
}

AjaxCallObject.prototype.OnError = function(status, statusText, responseText)
{
	if (status==200)
	{
		// a weird bug of Opera sometimes invokes OnError when there's no error
		this.OnComplete(responseText);
		return;
	}

	if (__bTracing)
	{
		this.WriteTrace("<b>!!! Server reported an Error !!!</b>");
		this.CloseTrace();
	}

	if (waitElement)
		waitElement.style.visibility = 'hidden';

	document.close();	// for IE
	document.write(responseText);
	document.close();	// for Firefox
}

AjaxCallObject.prototype.ReadyStateChange = function( timer )
{
  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.OnComplete(this.XmlHttp.responseText, this.XmlHttp.responseXML);
    else
      this.OnError(this.XmlHttp.status, this.XmlHttp.statusText, this.XmlHttp.responseText);   

	// Remove this AJAXCbo from the list
	for (var i=0; i < __AJAXCboList.length; i++)
		if (__AJAXCboList[i] == this)
		{
			__AJAXCboList[i].XmlHttp = null;
			__AJAXCboList.splice(i, 1);
			break;
		}
	//ERIVAS
	if(typeof timer!='undefined') 
		if(timer.started) timer.start();
  }
}

AjaxCallObject.prototype.TraceWindow = null;

AjaxCallObject.prototype.SetIntervalForAjaxCall = function(milliSec)
{
	if (__ClockID != 0)
		this.ClearIntervalForAjaxCall();
	__ClockID = window.setInterval("AJAXCbo.DoAjaxCall('__AJAX_AJAXCALLTIMER','','async')", milliSec);
}

AjaxCallObject.prototype.ClearIntervalForAjaxCall = function()
{
	window.clearInterval(__ClockID);
	__ClockID = 0;
}

AjaxCallObject.prototype.CreateTracingWindow = function()
{
	for (var i=0; i < __TraceWindows.length; i++)
	{
		if (__TraceWindows[i].closed)
		{
			__TraceWindows.splice(i, 1);
			i--;
		}		
	}

	this.TraceWindow = null;
	for (var i=0; i < __TraceWindows.length; i++)
	{
		if (__TraceWindows[i].TraceFinished)
		{
			this.TraceWindow = __TraceWindows[i];
		}		
	}
	
	if (this.TraceWindow == null)
	{
		this.TraceWindow = window.open("","_blank","location=no,resizable=yes,scrollbars=yes");
		__TraceWindows.push(this.TraceWindow);
	}
	this.TraceWindow.TraceFinished = false;
}

AjaxCallObject.prototype.ClearTracingWindows = function()
{
	for (var i=0; i < __TraceWindows.length; i++)
	{
		__TraceWindows[i].close();
		__TraceWindows.splice(i, 1);
		i--;
	}
}

AjaxCallObject.prototype.TraceSentData = function(data)
{
	this.WriteTrace("<b>Ajax Call invoked at " + new Date().toLocaleTimeString() + "<br>");
	if (__bPageIsStored)
		this.WriteTrace("Page Store Mode: Stored (Session or Cache)<br>");
	else
		this.WriteTrace("Page Store Mode: NoStore<br>");
	this.WriteTrace("Form Data sent to server (" + data.length + " characters):<br>");
	this.WriteTrace("------------------------------</b><br>");

	var fields = data.split("&");
	for (var i=0; i < fields.length; i++)
	{
		var parts = fields[i].split("=");
		this.WriteTrace("<b>" + parts[0] + "=</b>");
		this.WriteTrace(this.EncodeTraceData(parts[1]) + "<br>");
	}
		
	this.WriteTrace("<b>------------------------------</b><br>");
	this.WriteTrace("Waiting response from server.....<br>");
}

AjaxCallObject.prototype.TraceReceivedData = function(data)
{
	this.WriteTrace("<b>Server responsed at " + new Date().toLocaleTimeString() + "<br>");
	this.WriteTrace("Javascript code received from server (" + data.length + " characters):<br>");
	this.WriteTrace("------------------------------</b><br>");
	this.WriteTrace(this.EncodeTraceData(data) + "<br>");
	this.WriteTrace("<b>------------------------------</b><br>");
	this.CloseTrace();
}

AjaxCallObject.prototype.WriteTrace = function(text)
{
	this.TraceWindow.document.write(text);
}

AjaxCallObject.prototype.CloseTrace = function()
{
	this.TraceWindow.document.close();
	this.TraceWindow.TraceFinished = true;
}

AjaxCallObject.prototype.EncodeTraceData = function(data)
{
	return data.split("<").join("&lt;").split(" ").join("&nbsp;").split("\n").join("<br>");
}

AjaxCallObject.prototype.EncodePostData = function(data)
{
	return data.split("%").join("%25").split("=").join("%3d").split("&").join("%26").split("+").join("%2b");
}

AjaxCallObject.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])
		}
	}
}

AjaxCallObject.prototype.AddElement = function(parentID, tagName, elementID, html, beforeElemID)
{
	var place = document.getElementById(parentID);
	var child = (elementID != "") ? document.getElementById(elementID) : null;
	if (place != null && child == null)
	{
		child = document.createElement(tagName);
		child.id = elementID;
		var before = (beforeElemID != null) ? document.getElementById(beforeElemID) : null;
		place.insertBefore(child, before);
		child.innerHTML = html;
	}
	else
		this.SetHtmlOfElement(html, elementID);
}

AjaxCallObject.prototype.AddScript = function(scriptText, scriptAttributes)
{
	var scriptHolder = document.createElement('script');
	scriptHolder.text = scriptText;

	if (scriptAttributes != null)
		for (i=0; i < scriptAttributes.length; i+=2)
			scriptHolder.setAttribute(scriptAttributes[i], scriptAttributes[i+1]);

	__PageForm.appendChild(scriptHolder);
}

AjaxCallObject.prototype.AddHiddenField = function(elementName, elementValue)
{
	var hiddenField = document.createElement('input');
	hiddenField.type = "hidden";
	hiddenField.name = elementName;
	hiddenField.id = elementName;
	hiddenField.value = elementValue;
	
	__PageForm.appendChild(hiddenField);
}

AjaxCallObject.prototype.RemoveElement = function(parentID, elementID)
{
	var place = document.getElementById(parentID);
	var child = document.getElementById(elementID);
	if (place != null && child != null)
		place.removeChild(child);
}

AjaxCallObject.prototype.SetField = function(fieldName, fieldValue)
{
	var field;
	if (__PageForm)
		field = __PageForm[fieldName];
	else
	{
		//ERIVAS Para solucionar problema de FIREFOX
		if(document.all)
			field = document.all[fieldName];
		else if (document.layers)
			field = document.layers[fieldName];
		else
			field = document.forms[0][fieldName];
	}			

	if (field != null)
		field.value = fieldValue;
}

AjaxCallObject.prototype.AddHeaderElement = function(tagName, innerText, attributes)
{	
	switch (tagName)
	{
		case "link": 
			var link = document.getElementsByTagName("head")[0].appendChild(document.createElement("link"));
			for (i=0; i < attributes.length; i+=2)
				link.setAttribute(attributes[i], attributes[i+1]);
			break;
		case "title":
			if(typeof(document.title)!="undefined" && document.title)
				document.title = innerText;
			break;
		case "style":
			if (document.styleSheets && innerText != null)
			{
				// based on http://www.bobbyvandersluis.com/articles/dynamicCSS.php
				if (document.styleSheets.length == 0)
				{
					//no stylesheets yet, so create empty one
					var head = document.getElementsByTagName("head")[0];
					var style = document.createElement("style");
					style.type = "text/css";
					head.appendChild(style);
				}

				//add style rule to last stylesheet (forces proper cascading)
				var lastStyle = document.styleSheets[document.styleSheets.length - 1];
				var ieNewRule = typeof lastStyle.addRule == "object";
				var ffNewRule = typeof lastStyle.insertRule == "function";
				if (ieNewRule || ffNewRule)
				{
					var splitRules = innerText.split('}');
					for (i=0; i<splitRules.length-1; i++)
					{
						if (ffNewRule)
						{
							//Mozilla
							lastStyle.insertRule(splitRules[i] + "}", lastStyle.cssRules.length);
						}
						else
						{
							//IE
							var splitNameValue = splitRules[i].split('{');
							lastStyle.addRule(splitNameValue[0], splitNameValue[1]);
						}
					}
				}
			}
			break;
	}
}

AjaxCallObject.prototype.SetFieldIfEmpty = function(fieldName, fieldValue)
{
	var field;
	if (__PageForm)
	{
		field = __PageForm[fieldName];
	}
	else
	{
		//ERIVAS Para solucionar problema de FIREFOX
		if(document.all)
			field = document.all[fieldName];
		else if (document.layers)
			field = document.layers[fieldName];
		else
			field = document.forms[0][fieldName];
	}
	if (field != null && field.value == '')
		field.value = fieldValue;
}

AjaxCallObject.prototype.SetHtmlOfElement = function(html, elementID)
{
	var place = document.getElementById(elementID);
	if (place != null)
		place.innerHTML=html;
}

AjaxCallObject.prototype.SetHtmlOfPage = function(html)
{
	document.close();	// for IE
	document.write(html);
	document.close();	// for Firefox
}

AjaxCallObject.prototype.SetVisibilityOfElement = function(elementID, visible)
{
	var place = document.getElementById(elementID);
	if (place != null)
		place.style.display = (visible) ? "" : "none";
}

AjaxCallObject.prototype.Alert = function(message)
{
	window.alert(message);
}

// It's used by AjaxPanel
AjaxCallObject.prototype.ExtendedSetHtmlOfElement = function(html, elementID)
{
	var place=document.getElementById(elementID);
	if (place != null)
	{
		var store = document.createElement(place.tagName);
		store.innerHTML = html;
		var markers = store.getElementsByTagName("span");
		for (var i=markers.length-1; i >= 0; i--)
		{
			var elem = markers[i];
			if (elem.getAttribute("name") == "__ajaxmark")
			{
				var elemOnPage = document.getElementById(elem.id);
				if (elemOnPage != null)
					elem.parentNode.replaceChild(elemOnPage, elem);
			}
		}

		if ("mergeAttributes" in store)
		{
			store.mergeAttributes(place, false);
		}
		else
		{
			for (var i=place.attributes.length-1; i >= 0; i--)
			{
				var attr = place.attributes[i];
				store.setAttribute(attr.name, attr.value);
			}
		}

		if (__IsIE)
			place.parentNode.replaceChild(store, place);
		else if(__IsSF)	//ERIVAS
		{
            //Safari "forgets" ids unless we do it this way
            var placeHolder = document.createTextNode('PLACEHOLDER');
            place.parentNode.insertBefore(placeHolder, place);  // add the placeholder
            place.parentNode.removeChild(place); // now remove the original html
            placeHolder.parentNode.insertBefore(store, placeHolder); // now shove in the new html 
            placeHolder.parentNode.removeChild(placeHolder); // and remove the placeholder
		}
	    else
		{
            //ORIGINAL CODE
            //Netscape/Firefox has a problem using replaceChild when replaced child contains a table
            place.parentNode.insertBefore(store, place);
            place.parentNode.removeChild(place);
		}
		place = null; //cleanup

		//ERIVAS
		var scriptsTags = new RegExp("<script", "gi");
		var results = store.innerHTML.match(scriptsTags);  // || html.match(scriptsTags)
		if(results!=null)
			evalInnerHTML(store);
			
		//Celis Para agregar los handler's del click a las ligas
		if(typeof init =="function")
			init();
	}
}

//ERIVAS Para guardar después del # en el QS, los parámetros que generarían
//la página vista
AjaxCallObject.prototype.SetAjaxUrl = function (value)
{
	if(value!=null && value.length>0)
	{
		if(typeof(encodeURIComponent)!="undefined")
			value=encodeURIComponent(value);
		else
			value=escape(value);

		var url = eval("window.location.href");
		var url_elements = url.split("#");
		var path = url_elements[0] + "#" + value;
		window.location.href = path;
	}
}

//ERIVAS Para evaluar Scripts en el innerHTML
function evalInnerHTML(node) 
{
	var newNode = node.cloneNode(false);
	if (node.hasChildNodes()) 
	{
		var children = node.childNodes;
		for (var i = 0; i < children.length; i++) 
		{
			var child = children[i];
			if (child.tagName == 'SCRIPT')
			{
				var newScript = document.createElement('script');
				var lang = child.getAttribute('language')
				if(typeof(lang)!='undefined' && lang!=null)
					newScript.setAttribute('language', lang);
				else {
					newScript.setAttribute('language', 'JavaScript');
					newScript.setAttribute('type', 'text/javascript');
				}
				newScript.setAttribute('id', child.getAttribute('id'));
				if(child.getAttribute('src') && child.getAttribute('src').length>0)
					newScript.setAttribute('src', child.getAttribute('src'));
				else
					newScript.text = child.text;

				if (__IsIE)
					newNode.appendChild(newScript);
				else if(document.body)	//en Firefox no evalua el script con el appendChild
					document.body.appendChild(newScript);
				else
					eval(newScript.text);
			}
			else if(child.hasChildNodes())
				evalInnerHTML(child);
		}
	}
}


var AJAXCbo = new AjaxCallObject();

// wait element 
CreateWaitElement();
if (window.addEventListener) {
	window.addEventListener('scroll', MoveWaitElement, false);
	window.addEventListener('resize', MoveWaitElement, false);
}
else if (window.attachEvent) {
	window.attachEvent('onscroll', MoveWaitElement);
	window.attachEvent('onresize', MoveWaitElement);
}
var waitElement;
var scrollX, scrollY = -1;
var posAnterior = '';	//ERIVAS
var divAnterior = '';	//ERIVAS

function MoveWaitElement() {
	var scrollYT, scrollXT;
	if (!waitElement)
		CreateWaitElement();
	if (typeof(window.pageYOffset) == "number") { 
		scrollYT = window.pageYOffset;
		scrollXT = window.pageXOffset; 
	} 
	else if (document.body && document.documentElement && document.documentElement.scrollTop) { 
		scrollYT = document.documentElement.scrollTop; 
		scrollXT = document.body.scrollLeft;
	}
	else if (document.body && typeof(document.body.scrollTop) == "number") { 
		scrollYT = document.body.scrollTop; 
		scrollXT = document.body.scrollLeft; 
	} 
	//ERIVAS
	if (scrollX != scrollXT || scrollY != scrollYT || (posAnterior!='' && posAnterior!=_textMessagePosition) || (divAnterior!='' && divAnterior!=_waitDiv) ) {
		var width = document.body.clientWidth;
		var height = document.body.clientHeight;
		var waitWidth = waitElement.style.width;
		var waitHeight = waitElement.style.height;
		scrollX = scrollXT;
		scrollY = scrollYT;
		posAnterior = _textMessagePosition;
		divAnterior = _waitDiv;
		if(_textMessagePosition=='TR')
		{
			waitElement.style.top = scrollYT + "px";
			waitElement.style.right = -scrollXT +  "px";
		}
		else if(_textMessagePosition=='TL')
		{
			waitElement.style.top = scrollYT + "px";
			waitElement.style.left = scrollXT +  "px";
		}
		else if(_textMessagePosition=='BR')
		{
			waitElement.style.top = scrollYT + (height - waitHeight)  + "px";
			waitElement.style.right = -scrollXT +  "px";
		}
		else if(_textMessagePosition=='BL')
		{
			waitElement.style.top = scrollYT + (height - waitHeight) + "px";
			waitElement.style.left = scrollXT +  "px";
		}
		else if(_textMessagePosition=='CC')
		{
			waitElement.style.left = scrollXT + (width/2) +  "px";
			waitElement.style.top = scrollYT + (height/2) + "px";
		}
		else if(_textMessagePosition=='NS')
		{
		}
	}
}

function CreateWaitElement() {
    var elem = document.getElementById(_waitDiv);		//ERIVAS
    if (!elem) {
        elem = document.createElement("div");
        elem.id = _waitDiv;								//ERIVAS
        elem.style.position = 'absolute';
        elem.style.height = "17px";
        elem.style.paddingLeft = "3px";
        elem.style.paddingRight = "3px";
        elem.style.fontSize = "11px";
        elem.style.fontFamily = 'Arial, Verdana, Tahoma';
        elem.style.border = "#000000 1px solid";
        elem.style.backgroundColor = "DimGray";
        elem.style.color = "#ffffff";
        elem.innerHTML = _textMessage;					//ERIVAS
        elem.style.visibility = 'hidden';
        document.body.insertBefore(elem, document.body.firstChild);
    }
    waitElement = elem;
}
// end wait element

