

var MySlider = Class.create();

     
MySlider.prototype = {
  // Constructor
  // Available parameters : className, blurClassName, title, minWidth, minHeight, maxWidth, maxHeight, width, height, top, left, bottom, right, resizable, zIndex, opacity, recenterAuto, wiredDrag
  //                        hideEffect, showEffect, showEffectOptions, hideEffectOptions, effectOptions, url, draggable, closable, minimizable, maximizable, parent, onload
  //                        add all callbacks (if you do not use an observer)
  //                        onDestroy onStartResize onStartMove onResize onMove onEndResize onEndMove onFocus onBlur onBeforeShow onShow onHide onMinimize onMaximize onClose
  
     
  initialize: function() {
    
    var id;
    var optionIndex = 0;
    // For backward compatibility like win= new Window("id", {...}) instead of win = new Window({id: "id", ...})
    if (arguments.length > 0) {
      if (typeof arguments[0] == "string" ) {
        id = arguments[0];
        optionIndex = 1;
      }
      else
        id = arguments[0] ? arguments[0].id : null;
    }
    
    // Generate unique ID if not specified
    if (!id)
      id = "slide_" + new Date().getTime();
    /*    
    if ($(id))
      alert("Window " + id + " is already registered in the DOM! Make sure you use setDestroyOnClose() or destroyOnClose: true in the constructor");
    */
    
    this.options = Object.extend({    
      className:         "mac_os_x",
      blurClassName:     null,
      minWidth:          100, 
      minHeight:         200,
      resizable:         true,
      closable:          true,
      minimizable:       true,
      maximizable:       true,
      draggable:         true,
      userData:          null,
      loading:           false,
      showEffect:        'Appear',
      hideEffect:        'DropOut',
      showEffectOptions: {},
      hideEffectOptions: {},
      effectOptions:     null,
      parent:            document.body,
      title:             "&nbsp;",
      url:               null,
      //onload:            Prototype.emptyFunction,
      width:             650,
      height:            300,
      opacity:           1,
      recenterAuto:      true,
      wiredDrag:         false,
      closeCallback:     null,
      destroyOnClose:    false,
      gridX:             1, 
      gridY:             1      
    }, arguments[optionIndex] || {});
    
    if (this.options.blurClassName)
      this.options.focusClassName = this.options.className;
    
    this.element = this._createWindow(id); 
     
    this.width = this.options.width;
    this.height = this.options.height;
    this.visible = false;
    
    
    if (this.width && this.height) 
      this.setSize(this.options.width, this.options.height);
    this.setTitle(this.options.title)
    //Windows.register(this);
    
  },
 
  showSlide: function() {
    this.visible = true;
    this.element.innerHTML;
    //var newid = this.element.id;
    
    
    
    
    var a = new Element('div', { id:this.element.id, 'class': this.options.className}).update("");
    new Insertion.Before('ws_cover', a);
    $(this.element.id).style.zIndex='1331';
    
    if(this.options.showEffect!=null)
    {
      $(this.element.id).setOpacity(0);                                
      $(this.element.id).show();                                
      $(this.element.id).appear();
    }
    else
    {
      $(this.element.id).show();                                
    }
    
    //alert($(this.element.id +"_table_content").style.height);    
    myh = parseInt($(this.element.id +"_row2").getHeight()+50);
    position_layer2(this.element.id, $(this.element.id +"_row2").getWidth(), myh);
    
    //if(this.options.showEffect) $(this.element.id).appear();
    //else $(this.element.id).show();  
    
    //$(this.element.id).innerHTML = this.element.innerHTML;
    
    //window.onresize = position_layer2(this.element.id, $(this.element.id +"_row2").getWidth(), myh);
  },
  
  show: function() {    
    var trans = new Element('div', { id:'btrans', 'class': 'transparency'}).update("");
    new Insertion.Before('ws_cover', trans);
    $('btrans').style.background = '#abcdef';
    $('btrans').style.display='block';
    $('btrans').setOpacity(0);
    new Effect.Opacity('btrans', {from: 0.0, to: 0.8, duration: 0.4 });
    $('btrans').style.zIndex='1330';
    if(this.options.loading)
    {
      var trans = new Element('div', { id:'bloading', 'class': this.options.className+'_loading'}).update("");
      new Insertion.Before('ws_cover', trans);
      $('bloading').style.display='block'; 
      position_layer2('bloading', 50, 50);
    } 
    
    if(this.options.loading) setTimeout("this.showSlide",1000);
    else this.showSlide(); 
    $('bloading').remove(); 
    
    
  },
  
  setContent: function(id) {
    var tart = '';
    
    tart = $(id)?$(id).innerHTML:id;
    var content ="<div id=\"" + this.element.id + "_content\" class=\"" + this.options.className + "_content\">"+tart+" </div>";
    $(this.element.id +"_table_content").innerHTML = content;
      
    this.content = $(this.element.id + "_content");
  },
  
  setButtons: function(lang, js, bclass, style) {
    var tart = '';
    js = js!=''?js:'';
    bclass = bclass!=''?bclass:'slide';
    //tart = $(id)?$(id).innerHTML:id;
    var buttons = '<div id="' + this.element.id + '_buttons" class="' + bclass + '" '+js+' style="margin-right: 10px; '+style+'">'+lang+' </div>';
    $(this.element.id +"_div_buttons").innerHTML += buttons;
      
    this.buttons = $(this.element.id + "_buttons");
  },
  
  setSize: function(width, height, useEffect) {    
    $(this.element.id).style.width = parseFloat(width)+"px";
    $(this.element.id).style.height = parseFloat(height)+"px";
    if(this.options.minwidth!='') $(this.element.id).style.minwidth = parseFloat(this.options.minwidth)+"px";
    if(this.options.minheight!='') $(this.element.id).style.minheight = parseFloat(this.options.minheight)+"px";
  },
  
  setTitle: function(title){  
    $(this.element.id + "_top").innerHTML = title;
  },
  
  hideEffect: function(effect){
   this.options.hideEffect = effect;
  },
  
  close: function(){
    new Effect.Opacity('btrans', {from: 0.8, to: 0.0, duration: 0.4 });
    if(this.options.hideEffect!=null)
    {
      switch(this.options.hideEffect)
      {
        case 'DropOut':
         Effect.DropOut(this.element.id);
        break;
        
        default:
         $(this.element.id).remove();
      }
    }
    else
    {
      $(this.element.id).remove();
    }
    setTimeout(function(){
     //$(this.element.id).remove();
     $('btrans').remove();
    }, 500); 
  },
  // Creates HTML window code
  _createWindow: function(id) {
    var className = this.options.className;
    var win = document.createElement("div");
    win.setAttribute('id', id);
    win.className = "dialog";

    var content;
    content ="<div id=\"" + id + "_content\" class=\"" +className + "_content\"> </div>";
    buttons = "<div id=\"" + id + "_buttons\" class=\"" +className + "_buttons\"></div>";
    var closeDiv = this.options.closable ? "<div class='"+ className +"_close' id='"+ id +"_close' onclick=''> </div>" : "";
    var minDiv = this.options.minimizable ? "<div class='"+ className + "_minimize' id='"+ id +"_minimize' onclick='Slide.minimize(\""+ id +"\", event)'> </div>" : "";
    var maxDiv = this.options.maximizable ? "<div class='"+ className + "_maximize' id='"+ id +"_maximize' onclick='Slide.maximize(\""+ id +"\", event)'> </div>" : "";
    var seAttributes = this.options.resizable ? "class='" + className + "_sizer' id='" + id + "_sizer'" : "class='"  + className + "_se'";
    var blank = "../themes/default/blank.gif";
    
    //var title = "<div class='"+ className +"_close' id='"+ id +"_title'>"+title!=''?title:'Ablak'+"</div>";
    
    //win.innerHTML = closeDiv + minDiv + maxDiv + "\
    win.innerHTML = "\
      <table id='"+ id +"_row1' class=\"top table_window\">\
        <tr>\
          <td class='"+ className +"_nw'></td>\
          <td class='"+ className +"_n'><div id='"+ id +"_top' class='"+ className +"_title title_window'>"+ this.options.title +"</div></td>\
          <td class='"+ className +"_ne'></td>\
        </tr>\
      </table>\
      <table id='"+ id +"_row2' class=\"mid table_window\">\
        <tr>\
          <td class='"+ className +"_w'></td>\
            <td id='"+ id +"_table_content' class='"+ className +"_content' valign='top'>" + content + "</td>\
          <td class='"+ className +"_e'></td>\
        </tr>\
      </table>\
        <table id='"+ id +"_buttons' class=\"mid table_window\">\
        <tr>\
          <td class='"+ className +"_w'></td>\
            <td id='"+ id +"_table_buttons' class='"+ className +"_buttons' valign='top'><div id='"+ id +"_div_buttons' class='"+ className +"_buttons'>" + buttons + "</div></td>\
            <td class='"+ className +"_e'></td>\
        </tr>\
      </table>\
        <table id='"+ id +"_row3' class=\"bot table_window\">\
        <tr>\
          <td class='"+ className +"_sw'></td>\
            <td class='"+ className +"_s'><div id='"+ id +"_bottom' class='status_bar'><span style='float:left; width:1px; height:1px'></span></div></td>\
            <td " + seAttributes + "></td>\
        </tr>\
      </table>\
    ";
    Element.hide(win);
    this.options.parent.insertBefore(win, this.options.parent.firstChild);
    Event.observe($(id + "_content"), "load", this.options.onload);
    return win;
  }  
}  
  
  
