/**
 * Javascript misc functions library
 *
 * @package gcms
 * @version 2.0
 * @author Pawel Zmyslowski <hocus@dronet.pl>
 * @copyright 2005 GTK.PL
 */

function getObj(id)
{
  var obj;
/*  if ( document.all )
    obj = eval ('document.all.' + id);
  else
  */
    obj = document.getElementById(id);
  return obj;
}

function setStyle( objId, style )
{ 
  var obj = getObj(objId);
  if ( obj )
    obj.className = style; 
}

function getInnerWidth()
{
  var val;
  if (self.innerWidth) // all except Explorer
    val = self.innerWidth;
  else if (document.documentElement && document.documentElement.clientWidth)
    val = document.documentElement.clientWidth;
  else if (document.body) // other Explorers
    val = document.body.clientWidth;
  return val;
}

function getInnerHeight()
{
  var val;
  if (self.innerHeight) // all except Explorer
    val = self.innerHeight;
  else if (document.documentElement && document.documentElement.clientHeight)
    val = document.documentElement.clientHeight;
  else if (document.body) // other Explorers
    val = document.body.clientHeight;
  return val;
}

function escapeFrames()
{
  if( top.location.href != self.location.href )
    parent.location = self.location.href;
}

function centerDiv(div)
{
  var pageWidth = document.body.offsetWidth ? document.body.offsetWidth : window.innerWidth;
  var pageHeight= document.body.offsetHeight? document.body.offsetHeight : window.innerHeight;
  var obj = getObj(div);
  if ( pageHeight < 600 )
    pageHeight = 600;
  obj.style.left = ((pageWidth - obj.offsetWidth)/2)+'px';
  obj.style.top = ((pageHeight - obj.offsetHeight)/2) + document.body.scrollTop - (obj.offsetHeight/2) +'px';
}

function showAlert(txt, type)
{
  var obj     = getObj('alertDiv'  );
  var screen  = getObj('blockerDiv');
  var abody   = getObj('alertBody' );
  var atitle  = getObj('alertTitle');
  var aheader = getObj('alertHeader');
  obj.alertType = type;

  if ( aheader )
  {
    if ( type == 'info' )
    {
      aheader.className = 'alert_info_header';
      atitle.innerHTML = alertInfoTitleMsg;
    }
    else
    {
      aheader.className = 'alert_warning_header';
      atitle.innerHTML = alertWarningTitleMsg;
    }
  }

  abody.innerHTML = txt;
  obj.style.visibility = 'visible';
  screen.style.visibility = 'visible';
  centerDiv('alertDiv');
  if(dd.elements['alertDiv'])
    dd.elements.splice('alertDiv', 1);
  ADD_DHTML('alertDiv');
}

questionOkCallback     = null;
questionCancelCallback = null;

function showQuestion(txt, onOk, onCancel)
{
  var obj     = getObj('questionDiv' );
  var qbody   = getObj('questionBody');
  var screen  = getObj('blockerDiv');

  qbody.innerHTML = txt;
  obj.style.visibility = 'visible';
  screen.style.visibility = 'visible';
  centerDiv('questionDiv');
  if(dd.elements['questionDiv'])
    dd.elements.splice('questionDiv', 1);
  ADD_DHTML('questionDiv');

  questionOkCallback     = onOk;
  questionCancelCallback = onCancel;
}

function okQuestion()
{
  var obj = getObj('questionDiv');
  var screen = getObj('blockerDiv');
  screen.style.visibility = 'hidden';
  obj.style.visibility = 'hidden';
  if ( questionOkCallback != null )
    questionOkCallback();
}

function cancelQuestion()
{
  var obj = getObj('questionDiv');
  var screen = getObj('blockerDiv');
  screen.style.visibility = 'hidden';
  obj.style.visibility = 'hidden';
  if ( questionCancelCallback != null )
    questionCancelCallback();
}

function hideAlert()
{
  var obj = getObj('alertDiv');
  var screen = getObj('blockerDiv');
  obj.style.visibility = 'hidden';
  screen.style.visibility = 'hidden';

  // callback function - call if exists
  if ( (typeof onHideAlert) == 'function' )
    onHideAlert(obj.alertType);
}

function trimString(sInString) 
{
  sInString = sInString.replace( /^\s+/g, "" );
  return sInString.replace( /\s+$/g, "" );
}

function getXY(oElement) 
{
  var oOrgElm = oElement;
  var iX=0;
  var iY=0;
  var iCount;
  var oElement2;
  var oElementOffset = oElement.offsetParent;

  while(oElement) 
  {
    oElement2 = oElement.parentNode;
    if(oElementOffset == oElement) 
    {
      iX += oElement.offsetLeft;
      iY += oElement.offsetTop;
      // Add for borders
      iY += parseInt2(oElement.style.borderTopWidth);
      iX += parseInt2(oElement.style.borderLeftWidth);
      // Add for scrolling
      iX -= parseInt2(oElement.scrollLeft);
      iY -= parseInt2(oElement.scrollTop);
      // Get the next offsetParent
      oElementOffset = oElementOffset.offsetParent;
    }
    else 
    {
      iX -= parseInt2(oElement.scrollLeft);
      iY -= parseInt2(oElement.scrollTop);
    }

    oElement = oElement2;
  }

  return [iX, iY];
}

function parseInt2(sInt) 
{
  var i = parseInt(sInt);
  if(isNaN(i)) return 0;
  else return i;
}

function getFormAsArray(P_form)
{
  var a = new Object(); 
  for ( var i = 0; i < document[P_form].elements.length; i++ )
  {
    switch ( document[P_form].elements[i].nodeName.toLowerCase() )
    {
      case 'input':
        switch ( document[P_form].elements[i].type.toLowerCase() )
	{
	  case 'checkbox':
	    a[document[P_form].elements[i].name] = document[P_form].elements[i].checked?1:0;
	    break;
	  default: 
	    a[document[P_form].elements[i].name] = document[P_form].elements[i].value;
	    break;
	 }
        break;
      default:
        a[document[P_form].elements[i].name] = document[P_form].elements[i].value;
        break;
    }
  }
  return a;
}

function eventBubbleStop(P_event)
{
  P_event.cancelBubble = true;
  if ( !document.all )
    P_event.stopPropagation();
}

function getSelectedRows(P_tableId)
{
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var selectedRows = new Array();
  var contentTable = getObj(P_tableId);
  for ( var i = 0; i < contentTable.rows.length; i++ )
    if ( contentTable.rows[i].selected )
      selectedRows[selectedRows.length] = contentTable.rows[i].id;
  return selectedRows;
}

function selectAll(P_tableId)
{
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var contentTable = getObj(P_tableId);
  for ( var i = 0; i < contentTable.rows.length; i++ )
  {
    var row = contentTable.rows[i];
    if ( row.id != '' && !row.selected )
    {
      row.selected = true;
      row.oldClass = row.className;
      row.className = 'selected';
      var checkImg = getObj('checkbox_' + row.id);
      if ( checkImg )
        checkImg.src = "src/img/check_on.gif";
    }
  }
}

function selectNone(P_tableId)
{
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var contentTable = getObj(P_tableId);
  for ( var i = 0; i < contentTable.rows.length; i++ )
  {
    var row = contentTable.rows[i];
    if ( row.id != '' && row.selected )
    {
      row.selected = false;
      row.className = row.oldClass;
      var checkImg = getObj('checkbox_' + row.id);
      if ( checkImg )
        checkImg.src="src/img/check_off.gif";
    }
  }
}

function invertSelection(P_tableId)
{
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var contentTable = getObj(P_tableId);
  for ( var i = 0; i < contentTable.rows.length; i++ )
  {
    var row = contentTable.rows[i];
    if ( row.id != '' )
    {
      var checkImg = getObj('checkbox_' + row.id);
      if ( row.selected )
      {
	row.selected = false;
	row.className = row.oldClass;
	if ( checkImg )
	  checkImg.src="src/img/check_off.gif";
      }
      else
      {
	row.selected = true;
	row.oldClass = row.className;
	row.className = 'selected';
	if ( checkImg )
	  checkImg.src = "src/img/check_on.gif";
      }
    }
  }
}

function getScreenWidth() 
{
  if (self.screen) 
    return screen.width;
  else 
    if (navigator.javaEnabled && navigator.javaEnabled())
      return java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
    else
      return -1;
}

function getScreenHeight()
{
  if (self.screen) 
    return screen.height;
  else 
    if (navigator.javaEnabled && navigator.javaEnabled())
      return java.awt.Toolkit.getDefaultToolkit().getScreenSize().height;
    else
      return -1;
}

function isValidNumber(numval)
{
  if (numval=="")
    return false;
  var myRegExp = new RegExp("^[/+|/-]?[0-9]*[/.]?[0-9]*$");
  return myRegExp.test(numval);
}

function storeCaret(textEl) 
{
  if (textEl.createTextRange) 
    textEl.caretPos = document.selection.createRange().duplicate();
}


function resizeToInner(x,y)
{
  self.innerWidth = x;
  self.innerHeight = y;
}

/*
function checkRpcError()
{
  if ( result[2] && result[2].length > 0 )
    setStyle('td_' + result[2], 'description_error');
  var field = eval('document.objectForm.' + result[2]);
  if ( result[1] && result[1].length > 0 )             // expected answer
    parent.showAlert(result[1]);
  else if ( result[0] && result[0].length > 0 )        // unexpected answer 
    parent.showAlert('Unexpected answer: ' +  result[0]);
  else                                                 // all is corrupt
    alert(result);
}
*/
