/*
 * its_utils.js
 *
 */



////////////////////////////////////////////////////////////////////////////////
//
// Set document.domain for allowing inter-frame communication
// in SAP GUI for HTML and with EP
//
// created                      2004-01-12  tj
// relocated webgui -> system   2005-09-01  tj
////////////////////////////////////////////////////////////////////////////////


function its_setdomain ()
{
	if (its_setdomain.domain == null)
	{
    var isNumAddr = its_setdomain.regexp_ipaddr.test( window.location.hostname);
    var sDomain   = null;
    if (!isNumAddr)
    {
      sDomain = window.location.hostname.match( its_setdomain.regexp_server)[ 8];
      if (sDomain != null && sDomain != "") // && document.referrer != "")
          document.domain = its_setdomain.domain = sDomain;
    }  // if (!isNumAddr)
    else
    {
      its_setdomain.domain = document.domain;
    }
	}  // if (serverinfo already set) ... else
  else // if ( document.referrer != null )
  {
    document.domain = its_setdomain.domain;
  }
}
its_setdomain.domain = null;
its_setdomain.regexp_ipaddr = /^\d+\.\d+\.\d+\.\d+/;
its_setdomain.regexp_server = /^(([a-zA-Z0-9-_\.!~\*'\(\)%;&=\+\$,]*)@)?(([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)|(([^:\.]+)(\.([^:]+))*\.?))(:([0-9]*))?$/;
//  						   12                                      34                                56        7  8             9 A
//                              +-------------User Info------------+    +----------IPv4Address---------+  +HostNam++--Domain-+        +-Port-+
//                                                                     +------------------------Host-------------------------------+



////////////////////////////////////////////////////////////////////////////////
//
// Class itsObjCookie
//
//
// Interface:
//    Constructor itsObjCookie ()
//    Methods:    itsObjCookie.IsCookieEnabled ()
//                itsObjCookie.Set ()
//                itsObjCookie.Get ()
//                itsObjCookie.Delete ()
//                itsObjCookie.EvalExpDays ()
//    static      itsCookieIsEnabled ()
//
////////////////////////////////////////////////////////////////////////////////

if (typeof(document.getElementById) == "undefined")
  document.getElementById = document.all;

// Test if cookies are enabled
//  Returns: true, false or "na"
function itsCookieIsEnabled ()
{
  var rc = (navigator.cookieEnabled != null) ? navigator.cookieEnabled : "na";  // not available
  if (rc == "na") {
    if (document.cookie.length > 0) rc = true;
  }
  return rc;
} // itsObjCookieIsEnabled()


////////////////////////////////////////
// Constructor of class itsObjCookie
//
function itsObjCookie ()
{
  this.isCookieEnabled = itsCookieIsEnabled();

  return this;
} // constructor itsObjCookie()

function itsObjCookieEnabled ()
{
  return (this.isCookieEnabled != false);
} // itsObjCookieEnabled()

function itsObjCookieSet ( in_name, in_value, in_expires, in_path, in_domain, in_secure )
{
  if (this.isCookieEnabled != false) {
    in_secure = (in_secure != null) ? in_secure : false;
    document.cookie = in_name + "=" + escape( in_value)
      + ((in_expires  == null) ? "" : ("; expires=" + in_expires.toGMTString()))
      + ((in_path   == null) ? "" : ("; path=" + in_path))
      + ((in_domain == null) ? "" : ("; domain=" + in_domain))
      + ((in_secure == true) ? "; secure" : "");
  } // if (isCookieEnabled)
}

// Get cookie value of
function itsObjCookieGet ( in_name )
{
  function GetValue( in_cookie, in_offset )
  {
    var pos = in_cookie.indexOf (";", in_offset);
    if (pos == -1)
      pos = in_cookie.length;
    return unescape( in_cookie.substring( in_offset, pos));
  }
  var rval    = null;
  if (this.IsCookieEnabled()) {
    var nameeq    = in_name + "=";
    var nameeqlen = in_name.length;
    var cookielen = document.cookie.length;
    var i = 0;
    while (i < cookielen) {
      var j = i + nameeqlen + 1;
      if (document.cookie.substring( i, j) == nameeq) {
        rval = GetValue( document.cookie, j);
        break;
      }
      i = document.cookie.indexOf( " ", i) + 1;
      if (i == 0) break;
    } // while (i)
  } // if (isCookieEnabled)
  return rval;
} // itsObjCookieGet()


function itsObjCookieDelete ( in_name, in_path, in_domain, in_secure )
{
  if (this.IsCookieEnabled()) {
    var exp = new Date();
    exp.setTime( exp.getTime() - 1);
    var cval = this.Get( in_name);
    document.cookie = in_name + "=" + cval + "; expires=" + exp.toGMTString()
      + ((in_path   == null) ? "" : ("; path=" + in_path))
      + ((in_domain == null) ? "" : ("; domain=" + in_domain))
      + ((in_secure == true) ? "; secure" : "");
  } // if (isCookieEnabled)
} // itsObjCookieDelete()



// Evaluate cookie expiration in no. of days in_nodays
//  Returns: Date object or null
function itsObjCookieEvalExpDays ( in_nodays )
{
  var rval = null;
  if (in_nodays != null) {
    var exp = new Date();
    exp.setTime( exp.getTime() + (in_nodays * 24 * 3600 * 1000));
    rval = exp;
  } // if (in_nodays)
  return rval;
} // itsObjCookieEvalExpDays

itsObjCookie.prototype.IsCookieEnabled  = itsObjCookieEnabled;
itsObjCookie.prototype.Set        = itsObjCookieSet;
itsObjCookie.prototype.Get        = itsObjCookieGet;
itsObjCookie.prototype.Delete     = itsObjCookieDelete;
itsObjCookie.prototype.EvalExpDays    = itsObjCookieEvalExpDays;



////////////////////////////////////////////////////////////////////////////////
// Class itsObjCookie END
////////////////////////////////////////////////////////////////////////////////



/********* its_utils.js *********/

