// Source by Andris Zach 09.06.2006
// andris.z@metaleks.lv 
function findPosX( obj ){
 var curleft = 0;
 if (obj.offsetParent) {
  while (obj.offsetParent)  {
   curleft += obj.offsetLeft
   obj = obj.offsetParent;
  }
 }
 else if (obj.x)
  curleft += obj.x;
 return curleft;
}

function findPosY( obj ){
 var curtop = 0;
 if (obj.offsetParent) {
  while (obj.offsetParent)  {
   curtop += obj.offsetTop
   obj = obj.offsetParent;
  }
 }
 else if (obj.y)
  curtop += obj.y;
 return curtop;
}

function pos( obj ){
  return { 'left':findPosX( obj ), 'top':findPosY( obj ) }
}

function mkE( par ){  
 if( ! par.tag && ! par.text ) return false;
 if( par.tag ){ 
  var elm = document.createElement( par.tag );  
  // set attribute
  if( par.attr ){
    for( key in par.attr ){
      elm.setAttribute( key, par.attr[ key ] );
    }
  }
  // append childs
  if( par.els && par.els.push ){
    for( ii = 0; ii < par.els.length; ii++ ){
     elm.appendChild( par.els[ ii ] );
    }
  }
  if( par.els && ! par.els.push ){
    elm.appendChild( par.els );
  }
  // set properties
  if( par.prop && ! par.prop.push ){
    obj_to_obj( { 'obj1':elm, 'obj2':par.prop } );
  }
  if( par.prop && par.prop.push ){
    for( var ii = 0; ii < par.prop.length; ii++ ){
      obj_to_obj( { 'obj1':elm, 'obj2':par.prop[ ii ] } );
    }
  } 
  if( par.text ) elm.appendChild( document.createTextNode( par.text ) );
  elm.Append = elm_append_;
  elm.Remove = elm_remove_;
  elm.Clear = elm_clear_;
  return elm;
 }
 if( par.text ){
  elm = document.createTextNode( par.text );
  elm.Append = elm_append_;
  elm.Remove = elm_remove_;
  elm.Clear = elm_clear_;
  return elm;
 }   
}

function mkE_( par ){  
 if( ! par.tag && ! par.text ) return false;
 if( par.tag ){ 
  var elm = document.createElementNS( 'http://www.w3.org/2000/svg', par.tag );  
  // set attribute
  if( par.attr ){
    for( key in par.attr ){
      elm.setAttribute( key, par.attr[ key ] );
    }
  }
  // append childs
  if( par.els && par.els.push ){
    for( ii = 0; ii < par.els.length; ii++ ){
     elm.appendChild( par.els[ ii ] );
    }
  }
  if( par.els && ! par.els.push ){
    elm.appendChild( par.els );
  }
  // set properties
  if( par.prop && ! par.prop.push ){
    obj_to_obj( { 'obj1':elm, 'obj2':par.prop } );
  }
  if( par.prop && par.prop.push ){
    for( var ii = 0; ii < par.prop.length; ii++ ){
      obj_to_obj( { 'obj1':elm, 'obj2':par.prop[ ii ] } );
    }
  } 
  if( par.text ) elm.appendChild( document.createTextNode( par.text ) );
  elm.Append=elm_append_;
  return elm;
 }
 if( par.text ) return document.createTextNode( par.text ); 
}

function elm_append_( e ){
  if( !e ){
    document.body.appendChild( this );    
  } else {
    e.appendChild( this );    
  }
  return this;
}
function elm_remove_(){
  rm( { 'node':this } );
  return this;
}
function elm_clear_(){
  cn( { 'node':this } );
  return this;
}
/*
PAR
  tag  - new element tag
  text - creat text node
  els - append child in to tag
  attr - set attribute for return node
  prop - set propertirs for return node
  
                    <andris 09.06.2006>                   
*/
function cn( par ){  
  if( ! par.node ) return false;
  var ch;
  while( ch = par.node.firstChild ){
    par.node.removeChild( ch );
  }
}
/*
  node
                    <andris 09.06.2006>  
*/
function rm( par ){
  if( ! par.node ) return false;  
  if( par.node.parentNode ){
    par.node.parentNode.removeChild( par.node );
  } else {
    if( par.error ) alert( 'This element don\'t exist parent node!' );
  } 
}
/*
  node
                    <andris 09.06.2006>  
*/

function mLoad( par ){
  if( par.node ) var e = par.node;
  if( par.id ) var e = el( par.id ); 
  if ( ! e ) return false;
  var img = new Image();
  if( ! par.type ) img.src = '/js_sys/hourglas.gif';
  if( par.type == 1 ) img.src = '/js_sys/hourglas.gif';
  if( par.type == 2 ) img.src = '/js_sys/process.gif';  
  if( par.type == 3 ) img.src = '/js_sys/pb.gif';
  if( par.type == 4 ) img.src = '/js_sys/pb2.gif';
  cn( { 'node':e } );
  e.appendChild( img );
}
/*  
  node
  id
  type [ 1, 2, 3, 4 ]

                    <andris 09.06.2006>  
*/

function display( par ){
  if( par.node ) var e = par.node;
  if( par.id ) var e = el( par.id );
  if( ! e ) return false;
  if( ! par.value ){
    if( e.onDisplay ) e.onDisplay();
    e.style.display = '';    
  } else {
    if( par.value && e.onHide ) e.onHide();
    e.style.display = par.value;
  }
}
/*
  node
  id
  type [ 'none', 'block', 'incline' ]
                    <andris 19.06.2006>
*/
//------------------------------------------------------------------------------
      function obj_to_obj( par ){
        if( ! par.obj1 ) return false;
        if( ! par.obj2 ) return false;       
        for( var key in par.obj2 ){                                                  
          if( typeof( par.obj2[ key ] ) != 'object' ){
            par.obj1[ key ] = par.obj2[ key ];
          } else {
            if( ! par.obj1[ key ] ) par.obj1[ key ] = Object();                                    
            obj_to_obj( { 'obj1':par.obj1[ key ], 'obj2':par.obj2[ key ] } );
          }
        }
        return true;  
      }
/*
  obj1 - objekts, kuram tiks pievienots 2 objekts.
  obj2 - objekts, kuru pievieno.
  
                    <andris 03.07.2006>  
*/
