// Copyright 1999-2006, e-vita as.
// Revision Date: 2006-01-13

function ikbToggleClass (action,o,c1,c2)
{
    switch (action) {
		case 'toggle':	
                           return ikbToggleClass('check',o,c1) ? ikbToggleClass('remove',o,c1) : ikbToggleClass('add',o,c1);
                  case 'swap':
                           o.className = !ikbToggleClass('check',o,c1)
                                       ? o.className.replace(c2,c1)
                                       : o.className.replace(c1,c2);
                           break;
                  case 'add':
                           if(!ikbToggleClass('check',o,c1)){o.className+=o.className?' '+c1:c1;}
                           break;
                  case 'remove':
                           var rep=o.className.match(' '+c1)?' '+c1:c1;
                           o.className=o.className.replace(rep,'');
                           break;
                  case 'check':
                           return new RegExp('\\b'+c1+'\\b').test(o.className);
                           break;
         }

         return o.className != null ? o.className : "";
}

// Newer browsers use document.getElementById, older IE-versions use document.all
function evitaGetElementById (id)
{
	if (document.getElementById)
		return document.getElementById (id);
	else
		return document.all[id];
}

function evitaInnerText (o)
{
	if (o.innerText) return o.innerText;
	else if (o.textContent) return o.textContent;
	return text = "(evitaInnerText:" + o + ")";
}

function evitaDumpSource(o)
{
  var w = window.open('');
  var d = w.document;
  d.open();
  d.write ('<html><body>');
  d.write ('<h1>Source</h1><xmp><!CDATA[');
  d.write (o.innerHTML);
  d.write (']]></xmp></body></html>');
  d.close();
}

function evitaDumpObject (header,object)
{
  var w = window.open('');
  var d = w.document;
  d.open();
  d.write ('<html><body>');
  d.write ('<h1>' + h + '</h1><xmp>');

  d.writeln ("ID = " + o.id);

  for (i in o)
    d.writeln (i + " = " + o[i] + "; ");

  d.write ('</xmp></body></html>');
  d.close();
}

function evitaTextRepositoryClass ()
{
	var textMap = new Array();
	
	this.setText = function (key, value) 
	{
		textMap[key] = value;
	}
	
	this.getText = function (key)
	{
		var value = textMap[key];
		if (value == null)
			value = "--- missing value for key= '" + key + "' ---";
		return value;
	}
}

var evitaTextRepository = new evitaTextRepositoryClass();

function evitaNvl (value, alternate)
{
	if (value != null)
		return value;
	else
		return alternate;
}

function evitaArrayCopy (value)
{
	var arr;
	if (value == null)
	{
		return value;
	}
	else
	{
		arr = new Array();
		for (o in value)
			arr[o] = value[o];
		return arr;
	}
}

function evitaAssert (bool, message)
{
	if (! bool)
		alert ('evitaAssert', message);
}

function evitaRemoveLeadingWhitespace(str)
{
    while (true)
    {
        if (str.substring(0,1) == ' ')
            str = str.substring(1, str.length);
        else
            break;
    }
    return str;
}

function evitaChkNumeric(obj,minval,maxval,comma,period,hyphen)
{
	// only allow 0-9 be entered, plus any values passed
	var checkOK = "0123456789" + comma + period + hyphen;
	var checkStr = obj.value;
	var allValid = true;
	var decPoints = 0;
	var allNum = "";
	var msg = "";

	for (i = 0;  i < checkStr.length;  i++)
	{
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j))
				break;
		if (j == checkOK.length)
		{
			allValid = false;
			break;
		}
		if (ch != ",")
			allNum += ch;
	}
	if (!allValid)
	{	
		msg = "Please enter only these values \""
		msg = msg + checkOK + "\" in the \"" + obj.name + "\" field."
		return(msg);
	}

	// set the minimum and maximum
	var chkVal = allNum;
	var prsVal = parseInt(allNum);
	if (chkVal != "" && !(prsVal >= minval && prsVal <= maxval))
	{
		msg = "Please enter a value greater than or "
		msg = msg + "equal to \"" + minval + "\" and less than or "
		msg = msg + "equal to \"" + maxval + "\" in the \"" + checkStr.name + "\" field."
		return(msg);
	}
	return(msg);
}

function evitaChkLetter(obj, checkNotOK)
{
	// do not allow any values passed in checkNotOK
	var checkStr = obj.value;
	var allValid = true;
	var decPoints = 0;
	var allNum = "";
	var msg = "";

	for (i = 0;  i < checkStr.length;  i++)
	{
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkNotOK.length;  j++)
        {
			if (ch == checkNotOK.charAt(j))
            {
                allValid = false;
				break;
            }
        }
        if (allValid == false)
            break;
	}
	if (!allValid)
	{	
		msg = "Please do not enter these values \""
		msg = msg + checkNotOK + "\" in the \"" + obj.name + "\" field."
		return(msg);
	}
   
	return(msg);
}

var browserName  = '';
var fullVersion  = 0; 
var majorVersion = 0;

function checkBrowserVersion()
{
  var nVer = navigator.appVersion;
  var nAgt = navigator.userAgent;
  

  // In Internet Explorer, the true version is after "MSIE" in userAgent
  if ((verOffset=nAgt.indexOf("MSIE"))!=-1) 
  {
    browserName  = "Microsoft Internet Explorer";
    fullVersion  = parseFloat(nAgt.substring(verOffset+5));
    majorVersion = parseInt(''+fullVersion);
  }

  // In Opera, the true version is after "Opera" 
  else if ((verOffset=nAgt.indexOf("Opera"))!=-1)
  {
    browserName  = "Microsoft Internet Explorer";
    fullVersion  = parseFloat(nAgt.substring(verOffset+6));
    majorVersion = parseInt(''+fullVersion);
  }

  // In most other browsers, "name/version" is at the end of userAgent 
  else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) 
  {
    browserName  = nAgt.substring(nameOffset,verOffset);
    fullVersion  = parseFloat(nAgt.substring(verOffset+1));
    if (!isNaN(fullVersion)) 
      majorVersion = parseInt(''+fullVersion);
    else 
      {fullVersion  = 0; majorVersion = 0;}
  }

  // Finally, if no name and/or no version detected from userAgent...
  if (browserName.toLowerCase() == browserName.toUpperCase() || fullVersion==0 || majorVersion == 0 )
  {
   browserName  = navigator.appName;
   fullVersion  = parseFloat(nVer);
   majorVersion = parseInt(nVer);
  }

  /*
  document.write('Browser name  = '+browserName+'<br>');
  document.write('Full version  = '+fullVersion+'<br>');
  document.write('Major version = '+majorVersion+'<br>');
  document.write('navigator.appName = '+navigator.appName+'<br>');
  document.write('navigator.userAgent = '+navigator.userAgent+'<br>');
  */
  
}

function returnBrowserName()
{
  return browserName;
}

function returnBrowserVersion()
{
  return fullVersion;
}

function evitaGetElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}