var TWX_AJAX_XMLHttp = null;
var TWX_AJAX_ServerScript = "";
var TWX_AJAX_CallBack_Begin = "";
var TWX_AJAX_CallBack_End = "";
var TWX_AJAX_CallBack_Redirect = "";
var TWX_AJAX_DivHadler = "";
var TWX_AJAX_DivWindowHadler = "";
var TWX_AJAX_UseXML = false;
var TWX_AJAX_UseWindow = false;

var TWX_AJAX_NoResponseTime = 25000;
var TWX_AJAX_NoResponseTimeHandler = false;

var TWX_AJAX_LastResponseText = "";
var TWX_AJAX_LastResponseStatus = "";

function TWX_GetDivHandler()
{
   if(TWX_AJAX_UseWindow)
      return TWX_AJAX_DivWindowHadler;
    return TWX_AJAX_DivHadler;
}

function TWX_WindowShow()
{    
    _el = document.getElementById(TWX_AJAX_DivWindowHadler);
    if(!_el)
        return;
    
    DOM_SetPosLeft(_el, 0);
    DOM_SetPosTop(_el, 40);
        
    h = _el.offsetHeight;
    w = _el.offsetWidth;
    
    idx = TWX_FlyMenuAdd("right", "center", TWX_AJAX_DivWindowHadler, 40, 0, w, h, 2);       
    TWX_FlyMenus[idx].Set("right", "center", TWX_AJAX_DivWindowHadler, 40, 0, w, h, 2);

    TWX_FlyMenuAdjust(idx);
         
    _el.style.visibility = "visible";              
}
                                   
function TWX_WindowHide()
{    
  _el = document.getElementById(TWX_AJAX_DivWindowHadler);
  if(!_el)
      return;
      
  h = _el.offsetHeight;
  w = _el.offsetWidth;
      
  idx = TWX_FlyMenuAdd("center", "center", TWX_AJAX_DivWindowHadler, 40, 0, w, h, 2);       

  TWX_FlyMenuStop(idx);
  if(_el)
  {
    _el.style.visibility = "hidden";
    _el.innerHTML = "";
  }
}                             

function TWX_AJAX_Create(server_script)
{
  TWX_AJAX_ServerScript = server_script;

  if(window.ActiveXObject)
  {
      try
      {
         TWX_AJAX_XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e) 
      {
         TWX_AJAX_XMLHttp = null;
      }
  }
  else
  {
      try 
      {
         TWX_AJAX_XMLHttp = new XMLHttpRequest();
      }
      catch (e) 
      {
         TWX_AJAX_XMLHttp = null;
      }
  }
  return TWX_AJAX_XMLHttp;
}

function TWX_AJAX_SetCallBacks(callback_begin, callback_end, callback_redirect)
{
   TWX_AJAX_CallBack_Begin = callback_begin;
   TWX_AJAX_CallBack_End = callback_end;
   TWX_AJAX_CallBack_Redirect = callback_redirect;
}

function TWX_AJAX_Process(div_handler, command, a1, a2, a3, a4)
{  
  if(TWX_AJAX_XMLHttp.readyState == 4 || TWX_AJAX_XMLHttp.readyState == 0)
  {
    TWX_AJAX_DivHadler = div_handler;
    
    TWX_AJAX_OnBegin();
    
    var url = TWX_AJAX_ServerScript + "command=" + command + "&a1=" + a1 + "&a2=" + a2 + "&a3=" + a3 + "&a4=" + a4 + "&sid=" + TWX_SID;
    if(TWX_NoCache)
       url += "&no_cache=1";    
    
    TWX_AJAX_XMLHttp.open("GET", url, true);
    if(TWX_NoCache)
    {
       TWX_AJAX_XMLHttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
       TWX_AJAX_XMLHttp.setRequestHeader("Cache-Control", "no-cache");
    }    
    TWX_AJAX_XMLHttp.onreadystatechange = TWX_AJAX_HandleServerResponse;
    TWX_AJAX_XMLHttp.send(null);    
  }
}

function TWX_AJAX_ProcessPost(command, a1, a2, a3, a4)
{     
  if(TWX_AJAX_XMLHttp.readyState == 4 || TWX_AJAX_XMLHttp.readyState == 0)
  {    
    TWX_AJAX_OnBegin();

    var poststr = "command=" + command +
                  "&a1=" + encodeURIComponent(a1) + 
                  "&a2=" + encodeURIComponent(a2) + 
                  "&a3=" + encodeURIComponent(a3) + 
                  "&a4=" + encodeURIComponent(a4) + 
                  "&sid=" + TWX_SID;

    if(TWX_NoCache)
       poststr += "&no_cache=1";    

    TWX_AJAX_XMLHttp.open("POST", TWX_AJAX_ServerScript, true);    
    if(TWX_NoCache)
    {
       TWX_AJAX_XMLHttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
       TWX_AJAX_XMLHttp.setRequestHeader("Cache-Control", "no-cache");
    }
    TWX_AJAX_XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    TWX_AJAX_XMLHttp.setRequestHeader("Content-length", poststr.length);
    TWX_AJAX_XMLHttp.setRequestHeader("Connection", "close");
    TWX_AJAX_XMLHttp.onreadystatechange = TWX_AJAX_HandleServerResponsePost;
    TWX_AJAX_XMLHttp.send(poststr);
  }
}

function TWX_AJAX_NoResponse()
{
   if(TWX_AJAX_NoResponseTimeHandler)
   {
      TWX_AJAX_LastResponseStatus = "*";      
      TWX_AJAX_OnEnd();
      TWX_AJAX_LastResponseStatus = "";
   }
}

function TWX_AJAX_OnEnd()
{
    TWX_AJAX_XMLHttp.abort();
    if(TWX_AJAX_CallBack_End != "")
       eval(TWX_AJAX_CallBack_End);
}

function TWX_AJAX_OnBegin()
{
    TWX_AJAX_NoResponseTimeHandler = true;
    TWX_AJAX_LastResponseStatus = "";
    setTimeout('TWX_AJAX_NoResponse()', TWX_AJAX_NoResponseTime);       
    
    if(TWX_AJAX_CallBack_Begin != "")
       eval(TWX_AJAX_CallBack_Begin);
}

function TWX_AJAX_OnRedirect(arg)
{
    if(TWX_AJAX_CallBack_Redirect != "")
       eval(TWX_AJAX_CallBack_Redirect + "('" + arg + "')");
}

function TWX_AJAX_HandleServerResponsePost() 
{ 
  TWX_AJAX_NoResponseTimeHandler = false;
  
  if (TWX_AJAX_XMLHttp.readyState == 4) 
  {
    if (TWX_AJAX_XMLHttp.status == 200) 
    {
        TWX_AJAX_LastResponseText = TWX_AJAX_XMLHttp.responseText;
        TWX_AJAX_OnEnd();
        return;
     }     
     TWX_AJAX_OnEnd();   
  }     
}

function TWX_AJAX_SetDivHandler()
{
   index = TWX_AJAX_LastResponseText.indexOf("<twx.ckedit>");
   if(index >= 0)
   {
       document.getElementById(TWX_GetDivHandler()).innerHTML = TWX_AJAX_LastResponseText.substr(index + 13, TWX_AJAX_LastResponseText.length - 1);
       TWX_CreateEditor("TWX_CKEditor", TWX_AJAX_LastResponseText.substr(0, index));
       return;
   }

  if(TWX_AJAX_LastResponseText.indexOf("<twx.window>") == 0)
  {             
     document.getElementById(TWX_AJAX_DivWindowHadler).innerHTML = TWX_AJAX_LastResponseText.substr(13, TWX_AJAX_LastResponseText.length - 1);
     TWX_WindowShow();
  }
  else
  {
     TWX_WindowHide();
     document.getElementById(TWX_GetDivHandler()).innerHTML = TWX_AJAX_LastResponseText;
  }   
}

function TWX_AJAX_HandleServerResponse() 
{ 
  TWX_AJAX_NoResponseTimeHandler = false;

  if (TWX_AJAX_XMLHttp.readyState == 4) 
  {
    if (TWX_AJAX_XMLHttp.status == 200) 
    {
        TWX_AJAX_LastResponseText = TWX_AJAX_XMLHttp.responseText;
      
        if(TWX_AJAX_UseXML)
        {
            xmlResponse = TWX_AJAX_XMLHttp.responseXML;
            if(xmlResponse.documentElement && xmlDocumentElement && xmlDocumentElement.firstChild)
            {
               xmlDocumentElement = xmlResponse.documentElement;
               data = xmlDocumentElement.firstChild.nodeValue;
    
               document.getElementById(TWX_GetDivHandler()).innerHTML = data;
               
               TWX_AJAX_OnEnd();
               return;                        
            }
        }
        else
        { 
    
           if(TWX_AJAX_LastResponseText.length > 0)
           {       
             if(TWX_AJAX_LastResponseText[0] == "@")
             {             
                TWX_AJAX_OnRedirect(TWX_AJAX_LastResponseText);
             }
             else
             {                       
                if(TWX_AJAX_LastResponseText.indexOf("<copy>") < 0 && TWX_AJAX_LastResponseText.indexOf("<message>") < 0 && TWX_AJAX_XMLHttp.responseText.indexOf("<url>") < 0 && TWX_AJAX_LastResponseText.indexOf("<twx.window>") < 0)
                   document.getElementById(TWX_GetDivHandler()).innerHTML = TWX_AJAX_XMLHttp.responseText;            
                
                index = TWX_AJAX_LastResponseText.indexOf("<twx.ckedit>");
                if(index >= 0)
                {
                    document.getElementById(TWX_GetDivHandler()).innerHTML = TWX_AJAX_LastResponseText.substr(index + 13, TWX_AJAX_LastResponseText.length - 1);
                    TWX_CreateEditor("TWX_CKEditor", TWX_AJAX_LastResponseText.substr(0, index));
                }
                                 
                if(TWX_AJAX_LastResponseText.indexOf("<twx.window>") == 0)
                {             
                   document.getElementById(TWX_GetDivHandler()).innerHTML = TWX_AJAX_LastResponseText.substr(13, TWX_AJAX_LastResponseText.length - 1);
                   TWX_WindowShow();
                }
                else
                   TWX_WindowHide();
                   
                TWX_AJAX_OnEnd();
                return;
             }
           }
           else
           {
              document.getElementById(TWX_GetDivHandler()).innerHTML = "";
              TWX_AJAX_OnEnd();
              return;
           }
        }        
     } 
     TWX_AJAX_OnEnd();
  }
}

