  function show_dialog(sDialogID,bShow)
  {
    set_visible('divBlocker',bShow);
    set_visible(sDialogID,bShow);
  }
  var aScrollers=Array();
  function initScroller(sElementName,iTime,iStep)
  {
    var objScroller=new Object;

    var objParent=document.getElementById(sElementName);
    objParent.style.overflow='hidden';
    sHTML=objParent.innerHTML;
    var objOffsetParent=objParent;
    objScroller.iLeft=0;
    while(objOffsetParent)
    {
      objScroller.iLeft+=objOffsetParent.offsetLeft;
      objOffsetParent=objOffsetParent.offsetParent;
    }

    objScroller.iHeight=objParent.offsetHeight;
    objScroller.iWidth=objParent.offsetWidth;
    objScroller.iPos=-objScroller.iWidth;
    objScroller.iTime=iTime;
    objScroller.iStep=iStep;
    sClassName=objParent.className;
    objParent.innerHTML="<div id='"+sElementName+"Sub' class='"+sClassName+"' style='position:absolute;left:"+objScroller.iLeft+";clip:rect(0px  0px "+objScroller.iHeight+"px -"+objScroller.iWidth+"px)'>"+sHTML+"</div>";
    aScrollers[sElementName+"Sub"]=objScroller;
    setTimeout("scrollObj('"+sElementName+"Sub');",iTime);
  }
  function scrollObj(sElementName)
  {
    objScroller=aScrollers[sElementName];
    var obj=document.getElementById(sElementName);
    objScroller.iPos=objScroller.iPos+objScroller.iStep;
    if(objScroller.iPos>obj.offsetWidth)
       objScroller.iPos=-objScroller.iWidth;
    var iScrollRight=objScroller.iWidth+objScroller.iPos;
    var sClip="rect(0px "+iScrollRight+"px "+objScroller.iHeight+"px "+objScroller.iPos+"px)";
    obj.style.clip=sClip;
    var iUseLeft=objScroller.iLeft-objScroller.iPos;
    obj.style.left=iUseLeft.toString()+"px";
    setTimeout("scrollObj('"+sElementName+"');",objScroller.iTime);
  }

var ServerConnection=new CServerConnection();

  function GetHttpRequest()
  {
  	if (window.XMLHttpRequest)
	{
	    return new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
	    return new ActiveXObject("Microsoft.XMLHTTP");
	}
  }

function CRequest(sMethod,sURL,eTarget,fResume,fProcess,anyResumeParams)
{
        this.m_fResume=fResume;
        this.m_fProcess=fProcess;
        this.m_eTarget=eTarget;
        this.m_sURL=sURL;
        this.m_sMethod=sMethod;
        this.m_asParameters=Array();
        this.m_asParameterNames=Array();
        this.m_anyParams=anyResumeParams;
		this.m_iNoAttempts=0;

		this.RemoveParameter=mf_RemoveParameter;
        function mf_RemoveParameter(sName)
        {
			var iIndex=this.m_asParameterNames.Find(sName);
			if(iIndex>-1)
			{
                this.m_asParameterNames=this.m_asParameterNames.Remove(iIndex);
                this.m_asParameters=this.m_asParameters.Remove(iIndex);
            }
        }

        this.AddParameter=mf_AddParameter;
        function mf_AddParameter(sName,sValue)
        {
                this.m_asParameterNames[this.m_asParameterNames.length]=sName;
                this.m_asParameters[this.m_asParameters.length]=sValue;
        }
        this.GetParameters=mf_GetParameters;
        function mf_GetParameters(bEscape)
        {
			var sRet="";
			for(i=0;i<this.m_asParameterNames.length;i++)
			{
			    var sVal=this.m_asParameters[i];
			    if(bEscape)
			      sVal=escape(sVal);
                sRet+=this.m_asParameterNames[i]+"="+sVal+"&";
            }
            return sRet;
        }
}


function CServerConnection()
{
        var m_httpRequest;
        var m_aRequests=Array();
        var m_iIntervalID;
        var c_iTimeout=50000;
        var m_bTimeout=false;

        function mf_newRequest()
        {
            m_httpRequest=GetHttpRequest();
            m_httpRequest.onreadystatechange = mf_processReqChange;
    }

	function mf_Timeout()
	{
		window.clearInterval(m_iIntervalID);
		m_httpRequest.abort();

	}

    function mf_processReqChange()
    {
		window.clearInterval(m_iIntervalID);
        // only if req shows "complete"
        if (m_httpRequest.readyState == 4)
        {
            sm_bScrollMessage=false;
            // only if "OK"
            if (m_httpRequest.status == 200)
            {
                mf_processReqComplete();
            }
            else
            {
				var obj=m_aRequests[0];
				if(obj.m_iNoAttempts<3)
				{
                  alert("There was a problem retrieving the data or it timed out:\n" + m_httpRequest.statusText+"\nTry again...");
                  obj.m_iNoAttempts++;
                  mf_DoRequest();
                }
                else
                {
                   alert("Number of retries exceeded:\n" + m_httpRequest.statusText+"\nAll requests cancelled...");
                   m_aRequests=Array();
                }
            }

        }
        else
        {
			m_iIntervalID=window.setInterval(mf_Timeout,c_iTimeout);
		}
    }

    function mf_processReqComplete()
    {
				var httpRequest=m_httpRequest;
                var objRequest=m_aRequests[0];
                if(m_aRequests.length>1)
                {

                        m_aRequests=m_aRequests.Remove(0);
                        m_iIntervalID=window.setInterval(mf_DoRequest,0);
                }
                else
                {
                  m_aRequests=Array();
                }
                if(objRequest.m_fProcess!=null)
                {
                        objRequest.m_fProcess(m_httpRequest.responseXML.firstChild);
                }
                if(objRequest.m_eTarget!=null)
                {
                		if(objRequest.m_eTarget.className=="Updating")
                    	{
                      		objRequest.m_eTarget.className="Updateable";
                    	}
                        objRequest.m_eTarget.innerHTML=m_httpRequest.responseText;
						mf_EvalScripts(objRequest.m_eTarget);




                }
                if(objRequest.m_fResume!=null)
                {
                        if(objRequest.m_anyResumeParams)
                                objRequest.m_fResume(objRequest.m_anyResumeParams);
                        else
                                objRequest.m_fResume();
                }



    }

    function mf_EvalScripts(eElement)
    {
      var children= eElement.childNodes;
	  var child;
	  var index;
      for (index=0; index<children.length; ++index)
	  {
	    child= children[index];
	    if (child.tagName && "SCRIPT"==child.tagName)
	    {
	      eval( child.innerHTML );
	    }
	    else
	    {
	      mf_EvalScripts(child);
	    }
	  }
    }

    function mf_AddRequest(objRequest)
    {
                m_aRequests[m_aRequests.length]=objRequest;
                if(m_aRequests.length==1)
                  mf_DoRequest();
    }

    function mf_DoRequest()
    {
                window.clearInterval(m_iIntervalID);
                var obj=m_aRequests[0];

                if(!obj.m_sURL)
                {
				  mf_processReqComplete();
                }
                else
                {
                    if(obj.m_eTarget!=null&&obj.m_eTarget.className=="Updateable")
                    {
                      obj.m_eTarget.className="Updating";
                    }
					mf_newRequest();
					sAjaxMethod=obj.m_sMethod;
					m_iIntervalID=window.setInterval(mf_Timeout,c_iTimeout);
					if(sAjaxMethod.toUpperCase()=="GET")
					{
					 var sSep="?";
					 if(obj.m_sURL.indexOf("?"!=-1))
					   sSep="&";
					m_httpRequest.open(sAjaxMethod, obj.m_sURL+sSep+obj.GetParameters(true), true);
					m_httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
					m_httpRequest.send("");
					}
					else
					{
					m_httpRequest.open(sAjaxMethod, m_aRequests[0].m_sURL, true);
					m_httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
					m_httpRequest.send(m_aRequests[0].GetParameters(false));
					}
				}

    }

	this.StartAfterPending=mf_StartAfterPending;
	function mf_StartAfterPending(fResume)
	{
        var objRequest=new CRequest(null,fResume);
        mf_AddRequest(objRequest);
	}

    this.SubmitValue=mf_SubmitValue;
    function mf_SubmitValue(sMethod,sURL,sTarget,sValueName,sValue)
    {
        var eTarget=document.getElementById(sTarget);
		var objRequest=new CRequest(sMethod,sURL,eTarget);
		objRequest.AddParameter(sValueName,sValue);
		mf_AddRequest(objRequest);
    }

    this.SubmitForm=mf_SubmitForm;
    function mf_SubmitForm(sForm,sTarget)
    { 
        var objForm=document.getElementById(sForm);
        var sMethod=objForm.method;
        var eTarget=document.getElementById(sTarget);
		var sURL=objForm.action;
		var objRequest=new CRequest(sMethod,sURL,eTarget);

		mf_ScrapeForm(objForm,objRequest);
		mf_AddRequest(objRequest);
    }
  function mf_ScrapeForm(objForm,objRequest)
  {
	for(var i=0;i<objForm.elements.length;i++)
	{
		if(objForm.elements[i].type=="submit")
		{

		}
		else if(objForm.elements[i].type=="button")
		{

		}
		else if(objForm.elements[i].type=="checkbox")
		{
		  if(objForm.elements[i].checked)
		    objRequest.AddParameter(objForm.elements[i].name,objForm.elements[i].value);
		}
		else if(objForm.elements[i].type=="select-one")
		{
		  objRequest.AddParameter(objForm.elements[i].name,objForm.elements[i].options[objForm.elements[i].selectedIndex].value);
		}
		else if(objForm.elements[i].type=="text")
		{
		  objRequest.AddParameter(objForm.elements[i].name,objForm.elements[i].value);
		}
		else if(objForm.elements[i].type=="textarea")
		{
		  objRequest.AddParameter(objForm.elements[i].name,objForm.elements[i].value);
		}
		else if(objForm.elements[i].type=="hidden")
		{
		  objRequest.AddParameter(objForm.elements[i].name,objForm.elements[i].value);
		}
		else
		{
		  alert(objForm.elements[i].type);
		  objRequest.AddParameter(objForm.elements[i].name,objForm.elements[i].value);

		}

	}
	objRequest.AddParameter(objForm.submittingButton,"true");
  }
}

  function check_entered(sElementName,sMessage)
  {
    if(!sMessage)
      sMessage="You must enter a "+sElementName;
  	var sVal=$(sElementName).value;
  	if(!sVal||sVal=='')
  	{
  	  alert(sMessage);
  	  return false;
    }
    else
      return true;
  }

  function $(sElementName)
  {
    return document.getElementById(sElementName);
  }

  function get_select_value(sID)
  {
    var obj=document.getElementById(sID);
    return obj.options[obj.selectedIndex].value;
  }

  Array.prototype.Remove=function(iIndex)
  {
  		var aRemainingElements=Array();
		for(var i=0;i<this.length;i++)
		{
			if(i!=iIndex)
				aRemainingElements[aRemainingElements.length]=this[i];
		}
		return aRemainingElements;
  }


  function set_visible(sID,bVisible)
  {
  	set_obj_visible($(sID),bVisible) ;
  }

  function set_obj_visible(obj,bVisible)
  {
  	if(bVisible)
  	  obj.style.display='block';
    else
      obj.style.display='none';
  }

  function is_visible(sID)
  {
  	return $(sID).currentStyle.display!='none';
  }

  function toggle_visible(sID)
  {
  	set_visible(sID,!is_visible(sID));
  }
  Array.prototype.Find=function(anyValue)
  {
 		for(var i=0;i<this.length;i++)
		{
			if(anyValue==this[i])
				return i;
		}
		return -1;
  }
  
  function add_other_to_select(sID)
  {
      var oOption = document.createElement("OPTION");          
      oOption.text = $(sID+"_other").value;         
      oOption.selected=true;
      $(sID).options.add(oOption);
       
      $(sID+"_other").value="";      
  }

