/* huom! tässä on kci-form edittiin liittyviä
 * erikoistapauksia!!!
 */
 

/* 
 * ext form v 0.2
 * form laajennukset
 * @authors: Jussi Löf
 *
 */
   
function selectExt(tag)
{
  this.tag = tag;
  this.executeJS = function()
  {
    eval(this.tag[this.tag.selectedIndex].value);
  }
  this.loadURL = function()
  {
    window.location.replace(this.tag[this.tag.selectedIndex].value);
  }
}

/*
 * ext table v 0.0
 * table elemntti laajennukset
 * @authors: Jussi Löf
 */
 
function tableExt(tag)
{
  this.tag = tag;
  this.swzDisplay = swzDisplay;
}

function tdExt(tag)
{
  this.tag = tag;
  /* DOM super hover - unrolled */
  if (this.tag.className && this.tag.className.match('dyn'))
  {
    this.tag.onmouseover = function (evt) { hoverIn(this.parentNode) }
    this.tag.onmouseout = function (evt) { hoverOut(this.parentNode) }
    
    /* app specifig extension: */
    if (this.tag.className == 'dynForm')
      this.tag.onmousedown = function (evt)
      {
        set(this.parentNode);
        if (document.lastSet == this.parentNode)
        {
          editField.setVisibility(0);
          unset(document.lastSet);
          document.lastSet = null;
        }
        else
        {      
          if (document.lastSet)
            unset(document.lastSet);
          document.lastSet = this.parentNode;
        
          setupEventObject(evt);
          document.forms['editField']['field_id'].value = this.parentNode.id;

          var scY = document.body.scrollTop | window.scrollY;
          
          editField.setPosition(window.event.x-30,scY + window.event.y-10);
          editField.setVisibility(1);
        }
      }
      
  }
}

/* ----------------------------------------------- generic DOM funk ------------------------------------------------------ */

function set(obj)
{
  if (obj.className && obj.className.match('dyn') && !obj.classNameUnToggled)
  {

    if (obj.classNameOrig)
    {
      obj.classNameUnToggled = obj.classNameOrig;
      obj.className = obj.classNameOrig + '_toggle';
      obj.classNameOrig = null;
    }
    else
    {
      obj.classNameUnToggled = obj.className;
      obj.className = obj.className + '_toggle';
    }
  } 
  if (obj.childNodes)
    for (var i=0; i < obj.childNodes.length; i++)
      set(obj.childNodes[i]);
}

function unset(obj)
{
  if (obj.className && obj.className.match('dyn') && obj.classNameUnToggled)
  {
    obj.className = obj.classNameUnToggled;
    obj.classNameUnToggled = null;
    obj.classNameOrig = null;
    document.lastToggled = null;
  }
  if (obj.childNodes)
    for (var i=0; i < obj.childNodes.length; i++)
      unset(obj.childNodes[i]);
}

function hoverIn(obj)
{
  if (obj.className && obj.className.match('dyn') && !obj.classNameOrig)
  {
          obj.classNameOrig = obj.className; 
          obj.className = obj.className + "_hover";
  }
  if (obj.childNodes)
    for (var i=0; i < obj.childNodes.length; i++)
      hoverIn(obj.childNodes[i]);
}

function hoverOut(obj)
{
  if (obj.className && obj.classNameOrig)
  {
      obj.className = obj.classNameOrig;
      obj.classNameOrig = null;
  }
  if (obj.childNodes)
    for (var i=0; i < obj.childNodes.length; i++)
      hoverOut(obj.childNodes[i]);
}

function swzDisplay(id)
{
  if (id)
    var obj = document.getElementById(id);
  else if (this.tag)
    var obj = this.tag;
    
  if (obj.style.display == "block")
    obj.style.display = "none";
  else
    obj.style.display = "block";
}

function setDisplay(b,id)
{
  if (id)
    var obj = document.getElementById(id);
  else if (this.tag)
    var obj = this.tag;

  if (b)
    obj.style.display = "block";
  else
    obj.style.display = "none";
}

function getDisplay(id)
{
  if (id)
    var obj = document.getElementById(id);
  else if (this.tag)
    var obj = this.tag;
  
  if (obj.style.display == "none")
    return 0;
  else
    return 1;
}

/* ----------------------------------------------- generic DOM funk ------------------------------------------------------ */

/* ------------------------------------------ universaali extension loader ----------------------------------------------- */
var toFlush = new Array();

function extendNodes(parent)
{
  if (parent && parent.childNodes)
  {
    r = new RegExp("[^a-z]","ig");
    for(var i = 0; i < parent.childNodes.length; i++)
    {
      child = parent.childNodes[i];
      if (!r.test(child.nodeName)) {
        if (obj = (eval("window." + child.nodeName.toLowerCase() + "Ext"))) {
          toFlush[toFlush.length] = child;  //talleta pino ie:n roskankerääjälle
          child.ext = new obj(child);
	    }
      }
      extendNodes(child);
    }
  }
}


/* ---------------------------- IE BUG FIX ------------------------------------------------ */
/* yritys korjata Internet Explorerin rikkinäinen roskankerääjä
 * olioiden tuhoaminen auttaa vapauttamaan noin 2/3 IE:n hukkaamasta muistista
 */
var killed = 0;
function destroyExt()
{
    for(var i = 0; i < toFlush.length; i++)
    {
      //tuhoa event-funktiot
      if (toFlush[i].onmouseover)
        toFlush[i].onmouseover = null;
      if (toFlush[i].onmouseout)
        toFlush[i].onmouseout = null;
      if (toFlush[i].onmousedown)
        toFlush[i].onmousedown = null;
      if (toFlush[i].onmouseup)
        toFlush[i].onmouseup = null;
              
      // tuhoa ext
      toFlush[i].ext = null;
      killed ++;
    }
}

window.onunload = function ()
{
  destroyExt();       //auttaa vapauttamaan noin 2/3 IE:n hukkaamasta muistista
}
/* --------------------------- IE BUG FIX ------------------------------------------------ */


window.onload = function ()
{
  extendNodes(document.body);
  if (document.layers)
    extendNS4(document);
}

function extendNS4(parent)
{
  alert(parent.layers.length);
  alert(parent.links.length)
  alert(parent.images.length)
}

/* ------------------------------------------ universaali extension loader ----------------------------------------------- */