
function pausecomp(millis) 
{
        var date = new Date();
        var curDate = null;

        do { curDate = new Date(); } 
	while(curDate-date < millis);
}

function CLASS_WINDOW(p_can,p_url)
{
  //Öffentliche Variablen
  this.className = "window";
  this.canvas = document.getElementById(p_can);
  this.alpha = 1.0;
  this.height = 20;
  this.width = 20;
  this.left = 100;
  this.top = 100;
  this.canvas_name = "desk3";
  this.bg_color = "#000000";
  this.content = "";
  this.onshow = "";
  this.onhide = "";
  this.url = p_url;
  this.slot = 0;
  this.fenster_div;
  this.bg_div;
  this.scroll_div;
  this.content_div;
  this.active = true;
  this.scrollable = "false";
  this.cached = "true";
  this.window_id;
  this.noHide="false";
  //Private Variablen

  

  //Öffentliche Methoden
  this.init_from_xml = function(xml){
  var xml = xml.childNodes;
  for(var counter=0;counter<xml.length;counter++) {
  if (xml[counter].firstChild){
    switch(xml[counter].nodeName.toLowerCase()){
      case "alpha":
        this.alpha = xml[counter].firstChild.nodeValue;
        break;    
      case "height":
        this.height = xml[counter].firstChild.nodeValue;
        break;
      case "width":
        this.width = xml[counter].firstChild.nodeValue;
        break;
      case "left":
        this.left = xml[counter].firstChild.nodeValue;
        break;
      case "top":
        this.top = xml[counter].firstChild.nodeValue;
        break;
      case "color":
        this.bg_color = xml[counter].firstChild.nodeValue;
        break;
      case "onshow":
        this.onshow += xml[counter].firstChild.nodeValue;
        break;
      case "onhide":
        this.onhide += xml[counter].firstChild.nodeValue;
        break;
      case "cached":
        this.cached = xml[counter].firstChild.nodeValue;
        break;
      case "canvas":
        this.canvas_name = xml[counter].firstChild.nodeValue;
        this.canvas = document.getElementById(this.canvas_name);
        break;
      case "slot":
        this.slot = xml[counter].firstChild.nodeValue;
        break;
      case "content":
        this.content += xml[counter].firstChild.nodeValue;
        break;
      case "scrollable":
        this.scrollable = xml[counter].firstChild.nodeValue;
        break;
    }  
	}
  }
    this.draw();
  }
  this.textparse = function(text){
    text = text.replace(/#this#./g,"fenster" + this.window_id + ".obj.");
    return text;
  }
  this.draw = function(){
    window_index++;
    this.window_id = window_index;
    
    this.fenster_div = document.createElement("div");
    this.fenster_div.className = "fenster";
    this.fenster_div.id = "fenster" + this.window_id;
    this.fenster_div.style.height = this.height;
    this.fenster_div.style.width = this.width;
    this.fenster_div.style.top = this.top;
    this.fenster_div.style.left = this.left;
    this.fenster_div.obj = this;
    this.bg_div = document.createElement("div");
    this.bg_div.className = "bg";
    this.bg_div.style.backgroundColor= this.bg_color;
    this.bg_div.style.filter="alpha(opacity:" + (this.alpha*100) + ")";
    this.bg_div.style.KHTMLOpacity = this.alpha;
    this.bg_div.style.MozOpacity = this.alpha;
    this.bg_div.style.opacity = this.alpha;


    this.scroll_div = document.createElement("div");
    this.scroll_div.className = "scrollholder";
    this.scroll_div.style.height = this.height-35;
    this.scroll_div.style.width = this.width-15;
    this.scroll_div.id = "scrollholder"+this.window_id;
    
    
    this.content_div = document.createElement("div");
    this.content_div.className = "scroll";
    this.content_div.id = "scroll"+this.window_id;
    this.content_div.innerHTML = this.textparse(this.content); // "<div onclick='fenster" + this.window_id + ".obj.update_scroll();'>refresh</div>" + 
    initLinks(this.content_div);


    this.fenster_div.appendChild(this.bg_div);
    this.scroll_div.appendChild(this.content_div);
    this.fenster_div.appendChild(this.scroll_div);
  	this.canvas.appendChild(this.fenster_div);
      if (this.canvas_name == "desk5"){
        document.getElementById('desk5').style.display='block';
      }
  	if (this.cached == "true"){
      files[this.url] = this;
    } 
  	windows[this.url] = this;
  	Client.windows[this.url] = this;
  	if (this.slot != 0){
  	   if (slots[this.slot] != null){
  	     slots[this.slot].hide();
       }
       slots[this.slot]=this;
    }
    this.show();
  	if (this.scrollable == "true"){
      ScrollLoad("scrollholder"+this.window_id, "scroll"+this.window_id, false);
   }
    //wenn keine Scrollbar angezeigt wird, rechts 15px abstand
    if(this.scroll_div.childNodes.length == 1){
      this.scroll_div.style.width = this.width-30 +"px";
    } else {	
	 if (this.onshow.match(/zoom/gi) != null){
		eval(this.textparse(this.onshow));
	}
	}

  }
  this.toggle_display = function(){
    if (this.active == true){
     this.hide();
    }else{
      if (this.slot != 0){
    	   if (slots[this.slot] != null){
    	     slots[this.slot].hide();
         }
         slots[this.slot]=this;
      }
     this.show();
    }
  }
  this.show = function(){
    	if (this.slot != 0){
  	   if (slots[this.slot] != null){
  	     if (slots[this.slot] != this)
  	     slots[this.slot].hide();
       }
      slots[this.slot]=this;
      }
      this.fenster_div.style.display = "block";
      if (this.canvas_name == "desk5"){
          open_lightbox(this.fenster_div);
      } else{
          variables["last_desk3_deeplink"] = variables["akt_desk3_deeplink"];
      }
      this.active = true;
      if(this.onshow != ""){

        eval(this.textparse(this.onshow));
      }

	  document.title=document.originalTitle;
  }
  this.hide = function(){
     var temp = this.content_div.getElementsByTagName("div");
     
     for(var counter=0;counter<temp.length;counter++) {
        if (temp[counter].id.match(/flash$/gi) != null){
		  temp[counter].innerHTML = "";
        }
     }
     
     this.fenster_div.style.display = "none";
     this.active = false;
     eval(this.onhide);
     slots[this.slot] = null;
  }

  this.scrollTo = function(y){
    if ( dw_slidebar.aniTimer ) clearInterval(dw_slidebar.aniTimer);
    //var bar = dw_slidebar.obj = document.getElementById('drag_bar10');
    var t0 = this.scroll_div;
	var t1 = getElementsByClassName_new("track",t0)[0];   
	if (t1 != undefined) {
		var bar = dw_slidebar.obj = getElementsByClassName_new("drag_bar",t1)[0];    
		// var bar = dw_slidebar.obj =  this.scroll_div.getElementsByClassName("track")[0].getElementsByClassName("drag_bar")[0];
		var offY = y;
		bar.startX = parseInt(bar.style.left); bar.startY = parseInt(bar.style.top);
  
		bar.destX = bar.startX;
		bar.destY = (offY < bar.startY)? offY: offY - bar.offsetHeight;
		bar.destY = Math.min( Math.max(bar.destY, bar.minY), bar.maxY );
  
		bar.distX = bar.destX - bar.startX; 
		bar.distY = bar.destY - bar.startY;
		//dw_slidebar.per = Math.PI/(2 * dw_slidebar.slideDur);
		dw_slidebar.per = Math.PI/2;
		dw_slidebar.slideStart = (new Date()).getTime();
		bar.on_slide_start(bar.startX, bar.startY);
		dw_slidebar.aniTimer = setInterval("dw_slidebar.doSlide2()",10);
	}
  }


  this.update_scroll = function(loader){
  
    if (this.scrollable == "true"){
    var t0 = this.scroll_div;
	var t1 = getElementsByClassName_new("track",t0)[0];   
	
	if (t1 == undefined){
	ScrollLoad("scrollholder"+this.window_id, "scroll"+this.window_id, false);
	}
	
	var t1 = getElementsByClassName_new("track",t0)[0];   
	
	if (t1 != undefined) {
		var bar = getElementsByClassName_new("drag_bar",t1)[0];
		var y = bar.offsetTop + 20;
		//var Faktor =  ((t1.offsetHeight+20)/(document.getElementById("scroll"+this.window_id).offsetHeight-t1.offsetHeight))
		//y = (loader.offsetTop)* Faktor;
		this.scroll_div.style.width = this.width-15 +"px";
		while (this.scroll_div.lastChild.className != "scroll") {
			var temp = this.scroll_div.lastChild;
			this.scroll_div.removeChild(temp);
		}
			ScrollLoad("scrollholder"+this.window_id, "scroll"+this.window_id, false);
			if(this.scroll_div.childNodes.length == 1){
				this.scroll_div.style.width = this.width-30 +"px";
				document.getElementById("scroll"+this.window_id).style.top = "0px";
			}
		this.scrollTo(y);
	
		}
    }
  }
  

  //Private Methoden
  

}
getElementsByClassName_new = function(cl,target) {
    var retnode = [];
    var myclass = new RegExp('\\b'+cl+'\\b');
    var elem = target.getElementsByTagName('*');
    for (var i = 0; i < elem.length; i++) {
    var classes = elem[i].className;
    if (myclass.test(classes)) retnode.push(elem[i]);
    }
    return retnode;
  }; 
