function PetroToolkit() {
    this.undefined; //dummy var
    this.pX=function(obj) {
        var curleft=0;
        if ( obj.offsetParent ) {
            while(1) { 
                curleft+=obj.offsetLeft;
                if ( !obj.offsetParent ) { break; }
                obj=obj.offsetParent;
            }
        }
        else if ( obj.x ) curleft += obj.x;
        return curleft;
    }
    this.pY=function (obj){
    var curtop=0;
    if(obj.offsetParent)while(1){curtop+=obj.offsetTop;if(!obj.offsetParent){break;}obj=obj.offsetParent;}
    else if(obj.y)curtop+=obj.y;
    return curtop;}
  this.setOpacity=function(value,elemid){
    elem=this.el(elemid);
    if(value==0)elem.style.visibility="hidden";
    else elem.style.visibility="visible";
    if(window.ActiveXObject) elem.style.filter="alpha(opacity="+value*10+")";
    else elem.style.opacity=value/10;
    return true;}
  this.el=function(id){
    if(document.getElementById){return document.getElementById(id);}
    else if(window[id]){return window[id];}
    return null;}
  this.isset=function(varname) {
    return ((typeof(window[varname])==typeof(this.undefined))?false:true);}
  this.var_dump=function(obj) {
   if(typeof obj=="object"){return "Type: "+typeof(obj)+((obj.constructor)?"\nConstructor: "+obj.constructor:"")+"\nValue: "+obj;}
   else{return "Type: "+typeof(obj)+"\nValue: "+obj;}}
}
function Popbox(id,s,time){
  this.toolkit = new PetroToolkit();
  this.box=null;
  this.timeouts=null;
  this.popBox=function(id,s,time){
    if(!this.box){this.box=new Array();}
    if(!this.box[id]){this.box[id]=document.createElement('div');this.box[id].className='statusMsg h4 box-3';}
    this.box[id].innerHTML=s;
    var cItem=this.toolkit.el(id);
    this.box[id].style.position='absolute';
    this.box[id].style.top=(this.toolkit.pY(cItem)+12)+'px';
    this.box[id].style.left=(this.toolkit.pX(cItem))+'px';
    document.body.appendChild(this.box[id]);
    this.clearAfter(id,time);}
  this.clearAfter=function(id,time){
    if(!this.timeouts){this.timeouts=new Array; }
    if(this.timeouts[id]){clearTimeout(this.timeouts[id]);}
    if(time>0){var self=this;this.timeouts[id]=setTimeout(function(){document.body.removeChild(self.box[id]);self.box[id]=null;},time);}
    else{document.body.removeChild(this.box[id]);this.box[id]=null;}}
  this.closeMe=function(id){
    if(this.timeouts[id]){ clearTimeout(this.timeouts[id]);}
    if(this.box[id]){document.body.removeChild(this.box[id]);this.box[id]=null;}}
  this.focus=function(id){
    element = this.box[id];
    cl = this;
    setTimeout( function(){ element.onmouseout = function(){ cl.clearAfter(id,400); } }, 400 );
    this.clearAfter(id,4000);
  };
}

function Itembox(id,s,time){
  this.toolkit = new PetroToolkit();
  this.box=null;
  this.timeouts=null;
  this.popBox=function(id,s,time){
    if(!this.box){this.box=new Array();}
    if(!this.box[id]){this.box[id]=document.createElement('div');this.box[id].className='statusMsg h4 box-3';}
    this.box[id].innerHTML=s;
    var cItem=this.toolkit.el(id);
    this.box[id].style.position='absolute';
    this.box[id].style.top=(this.toolkit.pY(cItem)+12)+'px';
    this.box[id].style.left=(this.toolkit.pX(cItem))+'px';
    document.body.appendChild(this.box[id]);
    this.clearAfter(id,time);}
  this.clearAfter=function(id,time){
    if(!this.timeouts){this.timeouts=new Array; }
    if(this.timeouts[id]){clearTimeout(this.timeouts[id]);}
    if(time>0){var self=this;this.timeouts[id]=setTimeout(function(){document.body.removeChild(self.box[id]);self.box[id]=null;},time);}
    else{document.body.removeChild(this.box[id]);this.box[id]=null;}}
  this.closeMe=function(id){
    if(this.timeouts[id]){ clearTimeout(this.timeouts[id]);}
    if(this.box[id]){document.body.removeChild(this.box[id]);this.box[id]=null;}}
  this.focus=function(id){
    element = this.box[id];
    cl = this;
    setTimeout( function(){ element.onmouseout = function(){ cl.clearAfter(id,200); } }, 400 );
    this.clearAfter(id,4000);
  };
}

function Menu(){
  this.toolkit = new PetroToolkit();
  this.menus = null;
  this.timeouts=new Array();
  this.timeouts['show']=null;
  this.timeouts['hide']=null;
  this.curOpen=false;
  this.popMenu=function(id,elems){
    if(!this.menus){this.menus=new Array();}
    if(!this.menus[id]){this.menus[id]=new Array();this.menus[id]['el']=document.createElement('div');this.menus[id]['el'].className='statusMsg h4 dropmenu';}
    this.menus[id]['con']=elems;
    var str = "";
    for (i=0; i<elems.length; i++){
      str += '<a href="'+elems[i][1]+'" onmouseover="smenu.mouseover(\''+id+'\')" onmouseout="smenu.mouseout(\''+id+'\')"';
      if(elems[i][2]) str += ' onclick="'+elems[i][2]+'"';
      str += '>'+elems[i][0]+'</a>';
    }
    var cItem=this.toolkit.el(id);
    this.menus[id]['el'].style.position='absolute';
    this.menus[id]['el'].style.display='none';
    this.menus[id]['el'].innerHTML=str;
    this.menus[id]['vis']=false;
    this.menus[id]['app']=false;
  };
  this.mouseover=function(id){
    // cancel mouseoute menu close and item open delay
    clearTimeout(this.timeouts['hide']);
    this.timeouts['hide'] = null;
    clearTimeout(this.timeouts['show']);
    // run expand timer
    var self=this;
    this.timeouts['show']=setTimeout(function(){self.expand(id);},400);
  };
  this.mouseout=function(id){var self=this;this.timeouts['hide']=setTimeout(function(){self.collapse(id);},500);};
  this.onclick=function(n_id){
    // don't go anywhere if item has no link defined
    return Boolean(this.menus[id]['con'][0][1]);
  };
// --------------------------------------------------------------------------------
  this.collapse=function(id) {
    // cancel item open delay
    clearTimeout(this.timeouts['show']);
    if(this.menus[id]['vis']){this.menus[id]['el'].style.display='none';}
    this.menus[id]['vis']=false;
    if(!id){this.curOpen=false;}
  };

// --------------------------------------------------------------------------------
  this.expand=function(id) {
    // expand only when mouse is over some menu item
    if(this.timeouts['hide']){return;}
    // close previously opened items
    if(this.curOpen && this.curOpen!=id){this.collapse(this.curOpen);}
    this.curOpen = id;
    var cItem = this.toolkit.el(id);
    this.menus[id]['el'].style.top=(this.toolkit.pY(cItem)+13)+'px';
    this.menus[id]['el'].style.left=(this.toolkit.pX(cItem))+'px';
//    document.body.appendChild(this.menus[id]['el']);
    this.menus[id]['el'].style.display='block';
    if(!this.menus[id]['app']){document.body.appendChild(this.menus[id]['el']);this.menus[id]['app']=true;}
    this.menus[id]['vis']=true;
  };
}

function DebattEditTimer () 
{
    this.timers   = null;
    this.timeouts = null;
    this.loadTime = null;
    this.initTimer = function( id, stime, etime ) {
        if (!this.timers)       { this.timers = new Array(); }
        if (!this.timeouts)     { this.timeouts=new Array; }
        if (!this.timeouts[id]) { this.timeouts[id]=new Array; }
        this.timeouts[id]['stime'] = parseInt(stime);
        this.timeouts[id]['etime'] = parseInt(etime);
        this.timeouts[id]['internaltime']=null;
        this.update(id);
    }
    this.update = function( id ) {
        if(this.loadTime!=null){
            if(this.timeouts[id]['internaltime']==null)this.timeouts[id]['internaltime']=parseInt(this.loadTime);
            this.timeouts[id]['timeleft']=parseInt((this.timeouts[id]['etime']-this.timeouts[id]['internaltime'])/60);
            this.timeouts[id]['internaltime']++;
            var elem = document.getElementById('editTimer'+id);
            if ( elem ) {
                if(this.timeouts[id]['timeleft'] > 0){
                    elem.innerHTML='<br /><br /><a href="editmsg.php?ItemID='+id+'">Rediger innlegg</a> '+this.timeouts[id]['timeleft']+' minutter gjenst&aring;r...';
                } else {
                    elem.style.display='none';
                    return;
                }
            }
            this.timeouts[id]['timeout']=setTimeout('editTimer.update('+id+')',1000);
        }
    }
}

var statusMsg=new Popbox();
var lastItembox=new Itembox();
var ptk=new PetroToolkit();
var smenu=new Menu();
var editTimer = new DebattEditTimer();
