function WebForm_CallbackComplete_SyncFixed() {
  // SyncFix: the original version uses "i" as global thereby resulting in javascript errors when "i" is used elsewhere in consuming pages
  for (var i = 0; i < __pendingCallbacks.length; i++) {
		callbackObject = __pendingCallbacks[ i ];
		if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) {
			// FIX: This statement has been moved below
			//WebForm_ExecuteCallback(callbackObject);
			if (!__pendingCallbacks[ i ].async) {
				 __synchronousCallBackIndex = -1;
			 }
			 __pendingCallbacks[i] = null;

			 var callbackFrameID = "__CALLBACKFRAME" + i;
			 var xmlRequestFrame = document.getElementById(callbackFrameID);
			 if (xmlRequestFrame) {
				 xmlRequestFrame.parentNode.removeChild(xmlRequestFrame);
			 }

			// SyncFix: the following statement has been moved down from above;
			WebForm_ExecuteCallback(callbackObject);
		}
	}
}

/*------------------------------------
	Open new window
------------------------------------*/
var newWindow = '';

function openWin (url_js, name_js, winWidth, winHeight, scrollbar, toolbar, menubar, resizable) {
	var winl = 0, wint = 0;
	if(typeof scrollbar == 'undefined'){scrollbar = 0;}
	if(typeof toolbar == 'undefined'){toolbar = 0;}
	if(typeof menubar == 'undefined'){menubar = 0;}
	if(typeof resizable == 'undefined'){resizable = 1;}
	if(typeof winWidth == 'undefined' || winWidth == -1) winl = 0; else winl = (screen.width - winWidth) / 2;
	if(typeof winHeight == 'undefined' || winHeight == -1) wint = 0; else wint = (screen.height - winHeight) / 2;
	if(name_js == '') name_js = 'newwin';
    
	newWindow=window.open(url_js,name_js,'width=' +winWidth+',height=' +winHeight+',top='+wint+',left='+winl+',toolbar='+toolbar+',location=0,directories=0,status=0,menuBar='+menubar+',scrollBars='+scrollbar+',resizable='+resizable)
}	

/*------------------------------------
	dynamically show / hide HTML elements
------------------------------------*/
function showHideElement(id)
{
	if(document.getElementById(id) != null)
  {
	  if (document.getElementById(id).style.visibility == "hidden")
	  {
		  document.getElementById(id).style.visibility = "visible"; 
		  document.getElementById(id).style.display = "inline";
	  }
	  else
	  {
		  document.getElementById(id).style.visibility = "hidden";		
		  document.getElementById(id).style.display = "none";	
    }
	}	
}

function showHideElementDefined(id,show)
{
	if(document.getElementById(id) != null)
  {
	  if (show)
	  {
		  document.getElementById(id).style.visibility = "visible"; 
		  document.getElementById(id).style.display = "block";
	  }
	  else
	  {
		  document.getElementById(id).style.visibility = "hidden";		
		  document.getElementById(id).style.display = "none";	
    }
	}	
}

function showHideElementBlock(id)
{
	if(document.getElementById(id) != null)
  {
	  if (document.getElementById(id).style.visibility == "hidden")
	  {
		  document.getElementById(id).style.visibility = "visible"; 
		  document.getElementById(id).style.display = "inline-block";
	  }
	  else
	  {
		  document.getElementById(id).style.visibility = "hidden";		
		  document.getElementById(id).style.display = "none";	
    }
	}	
}
/*------------------------------------
	switch tabbed radio button list
------------------------------------*/
function RadioTabList(id, i, className)
{
	j = 0;
	do {
		inp=document.getElementById(id+'_'+j);
		div=document.getElementById(id+'_d'+j);
		if ((inp != null) && (div != null)) {
			if (inp.checked) {
				inp.checked = false;
				div.className=className;
			} else if (i == j) {
				inp.checked = true;
				div.className=className+' active';
			}
		}
		j++;
	} while ((inp != null) && (div != null))
}

function HighlightOn(id)
{
	var item = document.getElementById(id);
	if (item != null) {
		i = item.className.indexOf(' Highlight');
		if (i < 0) {
			item.className += ' Highlight';
		}
	}
}
function HighlightOff(id)
{
	var item = document.getElementById(id);
	if (item != null) {
		i = item.className.indexOf(' Highlight');
		if (i >= 0) {
			item.className = item.className.substring(0,i) + item.className.substr(i + 10);
		}
	}
}

function HighlightAdd(id)
{
	var item = document.getElementById(id);
	if (item != null) {
		i = item.className.indexOf('Highlight');
		if (i < 0) {
			item.className += 'Highlight';
		}
	}
}
function HighlightDel(id)
{
	var item = document.getElementById(id);
	if (item != null) {
		i = item.className.indexOf('Highlight');
		if (i >= 0) {
			item.className = item.className.substring(0,i) + item.className.substr(i + 10);
		}
	}
}

/*------------------------------------
	trim a string
------------------------------------*/
function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

/*------------------------------------
	focus on enter
------------------------------------*/
function FocusOnEnter(event, focusToName)
{
	if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {document.getElementsByName[focusToName].focus();return false;} else return true;
}

/*------------------------------------
	click on enter
------------------------------------*/
function ClickOnEnter(event, doClickOnID)
{

	if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
		document.getElementById(doClickOnID).click();
		return false;
	} 
	return true;
}

/* show hide divs */
function PopupDiv(srcObj, divID) 
{
  var el = document.getElementById(divID);
  el.style.visibility = 'visible';
}
function HideDiv(srcObj, divID) 
{
  var el = document.getElementById(divID);
  el.style.visibility = 'hidden';
}
/* show hide divs compatibility with old version */
function displayDiv(divID) 
{
  var el = document.getElementById(divID);
  el.style.visibility = 'visible';
}
function hideDiv(divID) 
{
  var el = document.getElementById(divID);
  el.style.visibility = 'hidden';
}
/* secure version for IE */
function HideDivSecure(e, mainID, controlID) {
  var element;

  // ie on window.event, mozilla on e
  if (window.event) {
    element = window.event.srcElement;
  } else if (e) {
    element = e.originalTarget;
  }

  if (element.id == mainID) {
    var el = document.getElementById(controlID);
    el.style.visibility = 'hidden';
  }
}

function RegionChangedCallback(returnValue, context)
{
  if (returnValue.indexOf('<TargetID>') >= 0)
  {
    var TargetID = returnValue.substring(10, returnValue.indexOf('</TargetID>'));
    var TargetInnerHtml = returnValue.substring(returnValue.indexOf('</TargetID>')+11);
    document.getElementById(TargetID).innerHTML = TargetInnerHtml;
  }
}


/* Ajax */
var AjaxPending, AjaxSel, AjaxPendingImg, AjaxTimeoutText, AjaxTimeoutTime;
var AjaxTimeoutTimeDefault = 15000,
	AjaxTimerID = 0;
	
function AjaxInit(ControlID, ChangedParamName, ChangedValue, AjaxTarget)
{
	if (AjaxPending) return;
	AjaxSel = '<ChangedParam ControlID="' + ControlID + '" Name="' + ChangedParamName + '" Value="' + ChangedValue + '" />';
	AjaxPendingImg = document.getElementById('AjaxPendingImg'+AjaxTarget);
	if (AjaxPendingImg != undefined) AjaxPendingImg.style.visibility='visible';
	AjaxTimeoutText = document.getElementById('AjaxTimeoutText'+AjaxTarget);
  if (AjaxTimeoutText != undefined) {
		AjaxTimeoutTime = AjaxTimeoutTimeDefault;
		AjaxTimeoutText.style.visibility = 'hidden';
		AjaxTimeoutText.className = 'SkipLink';
		AjaxTimerID = window.setTimeout("AjaxTimeoutReceived('timeout')", AjaxTimeoutTime);
	}
	AjaxPending = true;
}

function AjaxReceiver(returnValue, context) {
	if (!AjaxPending) return;
	if (AjaxTimerID != 0) {
		window.clearTimeout(AjaxTimerID);
		AjaxTimerID = 0;
	}

	var p = returnValue.indexOf('<Target');
	while (p >= 0){
		i = returnValue.indexOf('ID="', p + 8);
		j = returnValue.indexOf('"', i + 5);
		var TargetID = returnValue.substring(i + 4, j);
		b = returnValue.indexOf('>', j + 1);
		e = returnValue.indexOf('</Target>', b);
		var TargetInnerHtml = returnValue.substring(b + 1, e);
    var item = document.getElementById(TargetID);
    if (item != null) {
      if ((item.nodeName.toLowerCase()) == 'select') {
        // ie option bug
        if (item.outerHTML) {
          var begin = item.outerHTML.match(/(<select .*?>)/i);
          var end   = item.outerHTML.match(/(<\/select>)/i);
          if (begin && end) {
            var s = begin[1] + TargetInnerHtml + end[1];
            item.outerHTML = s;
          }
        }	else {
          item.innerHTML = TargetInnerHtml;
        }
      } else {
        item.innerHTML = TargetInnerHtml;
      }
    }
    // check if a JavaScript should be called
    p = returnValue.indexOf('<CallJavaScript', e + 8);
    if (p >= 0) {
    	x = returnValue.indexOf('<', e + 8);
    	if (x == p) // it is true
    	{
    		b = returnValue.indexOf('>', e + 8 + 15);
    		e = returnValue.indexOf('</CallJavaScript>', b);
    		var CallScript = eval(returnValue.substring(b + 1, e));
    		if (typeof CallScript == "function") CallScript();
    		p = returnValue.indexOf('<Target', e + 15);
    	}
    	else {
    		p = returnValue.indexOf('<Target', e + 8);
    	}
    }
    else {
  		p = returnValue.indexOf('<Target', e + 8);
		}
	}
  AjaxPending = false;
  if (AjaxPendingImg != undefined) AjaxPendingImg.style.visibility = 'hidden';
  if (typeof StatsTrackManual != "undefined") StatsTrackManual();
}

function AjaxTimeoutReceived(context)
{
	if (context == 'timeout') {
		if (AjaxPending) {
			// do as if received an empty result
			AjaxReceiver('', 'context');
			AjaxTimeoutText.style.visibility = 'visible';
			AjaxTimeoutText.className = '';
		} else {
			AjaxTimeoutTime = AjaxDefaultTimeout;
		}
	}
}

function AjaxRetry()
{
	AjaxTimeoutTime = 2 * AjaxTimeoutTime;
	AjaxCallback(null, null, null);
}
