function GetEventX(e)
{
  if (!e) {
    var e = window.event;
  }
  
  if (e.pageX) {
    return e.pageX;
  }
  
  return e.clientX+document.body.scrollLeft;
}

function GetEventY(e)
{
  if (!e) {
    var e = window.event;
  }
  
  if (e.pageY) {
    return e.pageY;
  }
  
  return e.clientY;
  
}

function GetOffsetX()
{
  if (window.pageXOffset) {
    return window.pageXOffset;
  } else if (document.documentElement && document.documentElement.scrollLeft) {
    return document.documentElement.scrollLeft;
  } else if (document.body) {
    return document.body.scrollLeft;
  }
}

function GetOffsetY()
{
  if (window.pageYOffset) {
    return window.pageYOffset;
  } else if (document.documentElement && document.documentElement.scrollTop) {
    return document.documentElement.scrollTop;
  } else if (document.body) {
    return document.body.scrollTop;
  }
}

/*
*/
function GetObj(obj_id)
{
  if (document.getElementById) {
    this.obj = document.getElementById(obj_id);
    this.style = document.getElementById(obj_id).style;
  } else if (document.all) {
    this.obj = document.all[obj_id];
    this.style = document.all[obj_id].style;
  } else if (document.layers) {
    this.obj = document.layers[obj_id];
    this.style = document.layers[obj_id];
  }
}

/*
*/
function FindPosX(obj)
{
  var curleft = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curleft+=obj.offsetLeft
      obj=obj.offsetParent;
    }
  } else if (obj.x) {
    curleft+=obj.x;
  }
  return curleft;
}

/*
*/
function FindPosY(obj)
{
  var curtop = 0;
  if (obj.offsetParent)	{
    while (obj.offsetParent) {
      curtop+=obj.offsetTop
      obj = obj.offsetParent;
    }
  } else if (obj.y) {
    curtop += obj.y;
  }
  return curtop;
}

/*
*/
function ShowMenu(mm,sm,ssm) 
{
  /*Load the submit factory to instruct the parent window to show the new menu. */
  parent.submit_factory.location="submit_factory.php?factory_action=show_menu&mm="+mm+"&sm="+sm+"&ssm="+ssm;
}

/*
*/
function strtrim() 
{
  return this.replace(/^\s+/,'').replace(/\s+$/,'');
}

String.prototype.trim=strtrim;

/*
*/
function VerifyForm(f,a)
{
  for (var i=0; i<f.elements.length; i++) {
    /*Form types text, password and file.*/
    if ((f.elements[i].type=="text") || (f.elements[i].type=="password") || (f.elements[i].type=="file")) {
      var v=f.elements[i].value;
      v=v.trim();
      if ((f.elements[i].type=="text") || (f.elements[i].type=="password")) {
        f.elements[i].value=v;
      }
      if ((a[f.elements[i].name]) && (v=='')) {
        return f.elements[i].name;
      }
    } 
  }
  return false;
}

/*
*/
function Initialize()
{
  var statusAnchor=new GetObj("top_left_border");
  if (!statusAnchor) {
    alert("FIXME: Initialize No statusAnchor");
  }
  
  var statusObj=new GetObj("status_message_container");
  if (!statusObj) {
    alert("FIXME: Initialize No statusObj");
  }
 
  statusObj.style.top=(FindPosY(statusAnchor.obj)+44)+"px";
  statusObj.style.visibility="visible";
   
  /*Display the status message text*/
  if (__STATUS_MESSAGE_TEXT__!="") {
    if (__STATUS_MESSAGE_TYPE__=="error") {
      DisplayErrorMessage(__STATUS_MESSAGE_TEXT__)
    } else if (__STATUS_MESSAGE_TYPE__=="info") {
      DisplayInfoMessage(__STATUS_MESSAGE_TEXT__)
    } else if (__STATUS_MESSAGE_TYPE__=="warning") {
      DisplayWarningMessage(__STATUS_MESSAGE_TEXT__)
    } else {
      alert("FIXME: wrong status message type: "+__STATUS_MESSAGE_TYPE__);
    }
  }
}

var messageTimers=new Array();

function DisplayInfoMessage(message)
{
  DisplayMessage("status_message_icon",5000,'000000',"<img src='../images/icons/status_info.gif' border='0'>");
  DisplayMessage("status_message_text",5000,'ffffff',message);
}

function DisplayWarningMessage(message)
{
  DisplayMessage("status_message_icon",5000,'000000',"<img src='../images/icons/status_warning.gif' border='0'>");
  DisplayMessage("status_message_text",5000,'ffffff',message);
}

function DisplayErrorMessage(message)
{
  DisplayMessage("status_message_icon",5000,'000000',"<img src='../images/icons/status_error.gif' border='0'>");
  DisplayMessage("status_message_text",5000,'ffffff',message);
}

var __PROGRESS_WIDTH__=0;
function DisplayProgressBar(message)
{
  if (messageTimers["status_message_text"]) {
    clearTimeout(messageTimers["status_message_text"]);
    ClearMessage("status_message_text");
  }
  if (messageTimers["status_message_icon"]) {
    clearTimeout(messageTimers["status_message_icon"]);
    ClearMessage("status_message_icon");
  }
  
  var container=new GetObj("status_message_icon");
  container.obj.innerHTML="<img src='../images/icons/status_wait.gif' border='0'>";
  
  
  __PROGRESS_WIDTH__=20;
  messageTimers["status_message_text"]=setTimeout("AdvanceProgressBar('"+message+"')",50);
}

function AdvanceProgressBar(message)
{
  __PROGRESS_WIDTH__+=1;
  if (__PROGRESS_WIDTH__>500) {
    __PROGRESS_WIDTH__=21;
  }
  
  var container=new GetObj("status_message_text");
  var progressTable="<table style='table-layout: fixed;' width='100%' cellspacing='0' cellpadding='0' border='0'><tr><td width='300' align='left'><table width='300' bgcolor='#3cff00' cellspacing='0' cellpadding='0' border='0'><tr><td style='border-top: solid 1px black; border-bottom: solid 1px black; border-left: solid 1px black;  font-weight: bold; font-size: 10pt; padding: 0px 2px 0px 2px;'>"+message+"</td></tr></table></td><td align='left'><table width='"+__PROGRESS_WIDTH__+"' cellspacing='0' cellpadding='0' border='0'><tr><td align='left' style='border-top: solid 1px black; border-bottom: solid 1px black; border-right: solid 1px black; font-weight: bold; font-size: 10pt;' width='"+__PROGRESS_WIDTH__+"' bgcolor='#3cff00'>&nbsp;</td></tr></table></td></tr></table>";
 
  container.obj.innerHTML=progressTable;
  messageTimers["status_message_text"]=setTimeout("AdvanceProgressBar('"+message+"')",50);
}

function DisplayMessage(containerId,timeout,color,message)
{
  var container=new GetObj(containerId);
  
  if (messageTimers[containerId]) {
    clearTimeout(messageTimers[containerId]);
  }
  
  container.obj.innerHTML=message;
  container.style.color=color;

  if (timeout!=0) {
    messageTimers[containerId]=setTimeout("ClearMessage('"+containerId+"')",timeout);
  }
}

function ClearMessage(containerId)
{
  if (messageTimers[containerId]) {
    clearTimeout(messageTimers[containerId]);
    messageTimers[containerId]=null;
  }
   
  var container=new GetObj(containerId);
  if (!container.obj) {
    return;
  }
 
  container.obj.innerHTML="&nbsp;";
}

function SetContextHelp(helpText)
{
  if (messageTimers["context_help_timer"]) {
     clearTimeout(messageTimers["context_help_timer"]);
     messageTimers["context_help_timer"]=null;
  }
      
  messageTimers["context_help_timer"]=setTimeout("ShowContextHelp('"+helpText+"')",1700);
}

function ClearContextHelp()
{
  if (messageTimers["context_help_timer"]) {
     clearTimeout(messageTimers["context_help_timer"]);
     messageTimers["context_help_timer"]=null;
  }
  
  var contextHelp=new GetObj("context_help");
  contextHelp.style.visibility="hidden";
  contextHelp.style.top="0px";
  contextHelp.style.left="0px";
}

function GetWindowInnerHeight()
{
  if (document.body.offsetHeight) {
    return document.body.offsetHeight;
  } 
  
  return window.innerHeight;
}

function GetWindowInnerWidth()
{
  if (document.body.offsetWidth) {
    return document.body.offsetWidth;
  } 
  
  return window.innerWidth;
}

function ShowContextHelp(helpText)
{
  if (messageTimers["context_help_timer"]) {
     clearTimeout(messageTimers["context_help_timer"]);
     messageTimers["context_help_timer"]=null;
  }
  var contextHelpText=new GetObj("context_help_text");
  contextHelpText.obj.innerHTML=helpText;
  var contextHelp=new GetObj("context_help");
  var contextHelpX=__MOUSE_MOVE_EVENT_X__;
  var contextHelpY=__MOUSE_MOVE_EVENT_Y__;
  
  /*We need to decide whether or not to display the context help text to the left
  of the cursor or to the right (top/bottom). This depends on the cursor position 
  and the width (height) of the help text*/
  var midScreenX=(GetWindowInnerWidth()>>1);
  var contextWidth=contextHelpText.obj.offsetWidth;
  var contextHeight=contextHelpText.obj.offsetHeight;
   
  if (contextHelpX>midScreenX) {
    /*On the right side of the screen*/
    if ((contextHelpX-contextWidth-5)>0) {
      contextHelp.style.left=(contextHelpX-contextWidth-5)+"px";
    } else {
      contextHelp.style.left="2px";
    }
  } else {
    /*On the left side of the screen*/
    if ((contextHelpX+contextWidth)<GetWindowInnerWidth()) {
      contextHelp.style.left=(contextHelpX-5)+"px";
    } else {
      contextHelp.style.left=(GetWindowInnerWidth()-contextWidth)+"px";
    }
  }
  
  /*Only if the context help doesnt fit on the screen, we put it above the pointer
  otherwise below*/
  if ((contextHelpY+contextHeight*6)>GetWindowInnerHeight()) {
    /*Above the pointer*/
    contextHelp.style.top=(contextHelpY-contextHeight-12)+"px";
  } else {
    /*Below the pointer*/
    contextHelp.style.top=(contextHelpY+10)+"px";
  }

  contextHelp.style.visibility="visible";
}

/*Global x and y for the mouse move event*/
var __MOUSE_MOVE_EVENT_X__=0;
var __MOUSE_MOVE_EVENT_Y__=0;

function MouseMoveEvent(e)
{
  __MOUSE_MOVE_EVENT_X__=GetEventX(e);
  __MOUSE_MOVE_EVENT_Y__=GetEventY(e);
}

/*Capture the mouse move event*/
document.onmousemove=MouseMoveEvent;


function ExecuteListAction(action,parameters,tkey)
{
  if (window.__CURRENT_PAGE__) {
    parent.submit_factory.location="submit_factory.php?factory_action=execute_list_action&action="+action+"&parameters="+parameters+"&tkey="+tkey+"&current_page="+__CURRENT_PAGE__;
  } else {
    parent.submit_factory.location="submit_factory.php?factory_action=execute_list_action&action="+action+"&parameters="+parameters+"&tkey="+tkey;
  }
  return;
}

function ExecuteSelectAction()
{
  var select=new GetObj("select_action");
  if (select.obj.selectedIndex==0) {
    DisplayWarningMessage("Please select your action first");
    return;
  }
  
  parent.submit_factory.location="submit_factory.php?factory_action=execute_select_action&select_action="+select.obj.options[select.obj.selectedIndex].value;
}


