// Global Javascript

var no_click = false;

function tableOnClick(url)
{
  if (no_click == true)
  {
    no_click = false;
  }
  else
  {
    this.location = url;
  }
}

function buttonOnClick(url)
{
  no_click = true;
  
  this.location=url;
}

function buttonOnClickAsk(url)
{
  no_click = true;
  if (confirm("Are you sure?"))
  {
    this.location = url;
  }
}

function totalOffsetLeft(item)
{
  var r = 0;
  while (item)
  {
    r += item.offsetLeft;
    item = item.offsetParent
  }
  
  return r;
}

function totalOffsetTop(item)
{
  var r = 0;
  while (item)
  {
    r += item.offsetTop;
    item = item.offsetParent
  }
  
  return r;
}


function setSameLocationAlignLeft(elementSet, elementLoc)
{
  elementSet.style.left = totalOffsetLeft(elementLoc) + elementLoc.offsetWidth - elementSet.offsetWidth;
  elementSet.style.top = totalOffsetTop(elementLoc);
}

function setSameLocationAndSize(elementSet, elementLoc)
{
  elementSet.style.left = totalOffsetLeft(elementLoc);
  elementSet.style.top = totalOffsetTop(elementLoc);
  elementSet.style.width = elementLoc.offsetWidth;
}

function changeParentStyleClass(object, newClassName)
{
  object.parentNode.className = newClassName;
}

function changeStyleClass(object, newClassName)
{
  object.className = newClassName;
}

function changeStyle(object, newClassName)
{
  changeStyleClass(object, newClassName);
}

function popupRightBottom(classname, extravars, width, height)
{
  try
  {
    document.popper.close();
  } catch (error)
  {
  }
  
  var x = screen.width-width-30;
  var y = screen.height-height-100;
  
  var options = "width="+width+",height="+height+",left="+x+",top="+y+",screenx="+x+",screeny="+y;
  
  document.popper = open("./popup.php?class="+classname+"&"+extravars, 'popup', options);
  document.popper.focus();
}

function insertAfter(parent, node, referenceNode)
{
	parent.insertBefore(node, referenceNode.nextSibling);
}

function hover(elem, nextClass)
{
  elem.className = nextClass;
}

function hoverExclude(elem, nextClass, exclClass)
{
  if (elem.className != exclClass)
  {
    elem.className = nextClass;
  }
}

function getStyleClass (className)
{
  var r,s;
  var re = new RegExp("\\." + className + "$", "gi");

  if (document.all)
  {
    for (s = 0; s < document.styleSheets.length; s++)
    {
      for (r = 0; r < document.styleSheets[s].rules.length; r++)
      {
        if (document.styleSheets[s].rules[r].selectorText.search(re) != -1)
        {
          return document.styleSheets[s].rules[r].style;
        }
      }
    }
  }
  else if (document.getElementById)
  {
    for (s = 0; s < document.styleSheets.length; s++)
    {
      for (r = 0; r < document.styleSheets[s].cssRules.length; r++)
      {
        if (document.styleSheets[s].cssRules[r].selectorText.search(re) != -1)
        {
          document.styleSheets[s].cssRules[r].sheetIndex = s;
          document.styleSheets[s].cssRules[r].ruleIndex = s;

          return document.styleSheets[s].cssRules[r].style;
        }
      }
    }
  }
  else if (document.layers)
  {
    return document.classes[className].all;
  }

  return null;
}

/////////////////////////////
// Class : ValueInputTests //
/////////////////////////////
function ValueInputTests() { }

ValueInputTests.prototype.tagNameCheck = function (elem)
{
  return ((elem.tagName == "INPUT") || (elem.tagName == "TEXTAREA"));
}

ValueInputTests.prototype.notEmpty = function (elem)
{
  return (this.tagNameCheck(elem) && (elem.value != "")  ||
         ((elem.tagName == "SELECT") && (elem.selectedIndex != -1)))
}

ValueInputTests.prototype.date = function (elem)
{
  return this.tagNameCheck(elem) && (/^(((0{0,1}[1-9])|([12][0-9])|(3[01]))-((0{0,1}[1-9])|(1[0-2]))-(((19)|(20))([0-9][0-9])))|(00-00-0000)$/.test(elem.value));
}

ValueInputTests.prototype.number = function (elem)
{
  return this.tagNameCheck(elem) && (/^[0-9]{1,}$/.test(elem.value));
}

ValueInputTests.prototype.decimalNumber = function (elem)
{
  return this.tagNameCheck(elem) && (/^[0-9]{1,}([,\.][0-9]{1,}){0,1}$/.test(elem.value));
}

ValueInputTests.prototype.url = function (elem)
{
  return this.tagNameCheck(elem) && (/^(ftp:\/\/|http:\/\/){0,1}([a-zA-Z0-9_-]+)(\.([a-zA-Z0-9_-]+)){1,}(\/.*){0,1}$/.test(elem.value));
}

ValueInputTests.prototype.email = function (elem)
{
  return this.tagNameCheck(elem) && (/^([a-zA-Z0-9_][-\.]{0,1})+@([a-zA-Z0-9_][-\.]{0,1})+\.[a-zA-Z0-9]{2,3}$/.test(elem.value));
}

ValueInputTests.prototype.postalCode = function (elem)
{
  return this.tagNameCheck(elem) && (/^[0-9]{4}[ ]{0,1}[a-zA-Z]{2}$/.test(elem.value));
}

ValueInputTests.prototype.telephoneNumber = function (elem)
{
  return this.tagNameCheck(elem) && (/^([0-9]{10,10}|[0-9]{3}-[0-9]{7}|[0-9]{2}-[0-9]{8}|[0-9]{4}-[0-9]{6})$/.test(elem.value));
}

////////////////////////////////
// END value input test class //
////////////////////////////////

function createTwoDimensionalArray(nrOfFirstDimension, nrOfSecondDimension)
{
  var theArray = new Array(nrOfFirstDimension);
  
  for (var x = 0; x < nrOfFirstDimension; x++)
  {
    theArray[x] = new Array(nrOfSecondDimension);
  }
  
  return theArray;
}

function dump(arr, level)
{
  var dumped_text = "";
  var level_padding = "";
  
  if (!level)
  {
    level = 0;
  }
  
  if (typeof(arr) == 'object')
  {
    //The padding given at the beginning of the line.
    for(var j = 0; j < level + 1; j++)
    {
      level_padding += "  ";
    }

    if (isArray(arr))
    {
      dumped_text += "Array\n" + ((level != 0) ? level_padding : "") + "(\n";
    }
    else
    {
      dumped_text += "Object\n" + level_padding + "(\n";
    }
    
    
    if (isArray(arr))
    {
      for (var x = 0; x < arr.length; x++)
      {
        dumped_text += level_padding;
        dumped_text += "  [" + x + "] => " + dump(arr[x], level + 1) + "\n";
      }
    }
    else
    {
      for(var item in arr)
      {
        var value = arr[item];
        dumped_text += level_padding;
     
        if(typeof(value) == 'object')
        {
          if (isArray(value) || isArray(item))
          {
            dumped_text += "  ["+elem_array_nr+"] => ";
          }
          else
          {
            dumped_text += "'" + item + "' ...\n";
          }
          
          dumped_text += dump(value, level+1);
        }
        else
        {
          if (isArray(arr))
          {
            dumped_text += "  ["+item+"] => " + value + "\n";
          }
          else
          {
            dumped_text += "'" + item + "' => " + value + "\n";
          }
        }

        if (isArray(arr))
        {
          elem_array_nr++;
        }
      }
    }
    dumped_text += ((level != 0) ? level_padding : "") + ")";
  }
  else
  {
    //Stings/Chars/Numbers etc.
    if (arr != undefined)
    {
      dumped_text = arr + " ("+typeof(arr)+")";
    }
  }
  
  return dumped_text;
}

function isArray(obj)
{
  return (obj.constructor.toString().indexOf("Array") != -1);
}

