var OwnWindoo = new Class({

	Implements: [Events, Options],

	options: {
		    fxDuration: 1000,
			maxOpacity: 1,
			timeIn: 1000,
			timeOut: 5000,
			width:'300px',
			height:'400px',
			ownPosition:false,
			fixed:true,
			offsets: {'x': 16, 'y': 16},
			modal:false,
			draggMe:false,
			resizeMe:false,
			resizeLimit:{y: [300, 600],x:[300,500]},
			effecting:false,
			stayalive:true,
			transitionEffect: Fx.Transitions.Elastic.easeOut,
			startFrom: {'x': 0, 'y': 0},
			moveTo: {'x': 100, 'y': 100},
			title:'',
			text:'',
			imageClose:'images/windoo/close.gif',
			imageResize:'images/windoo/resize.gif',
			ajaxfile:'tooltext.php',
			ajaxoption:'',
			className: 'myHtmlAreaWin',
			onAjaxComplete: Class.empty


    },

	initialize: function(element, options){
	    this.setOptions(options);

		this.element = $(element);

		this.document = (element.length) ? element[0].ownerDocument : document;

		this.WindooMain = new Element('div').setProperties({'id':this.element.id+'_main','class':this.options.className+'-WinMain'}).setStyles({'position': 'absolute','top': '0px','left': '0px','width': this.options.width +'px','height': this.options.height+'px','visibility':'hidden'}).inject(document.body);
        if(this.options.modal==true){
			if(Browser.Engine.trident) {
				this.iframeBG= new Element("iframe").setProperties({'id':this.element.id+'_iframeBg','class':this.options.className+'-DivBg'}).setStyles({'height':Window.getScrollHeight()+'px','opacity':0.1}).inject(this.WindooMain,'before');
			}
			this.divBG= new Element('div').setProperties({'id':this.element.id+'_divBg','class':this.options.className+'-DivBg'}).setStyles({'height':Window.getScrollHeight()+'px','opacity':0.7}).inject(this.WindooMain,'before');
		}
  	    if(this.options.stayalive){
		 var WindooCloseImg='<div id="'+this.element.id+'_close" class="'+this.options.className+'-WinClose">X</div>';
		}else{
		WindooCloseImg='';
		}

		if(this.options.resizeMe){
		 var WindooResizeImg='<div id="'+this.element.id+'_resize" class="'+this.options.className+'-WinResize">&nbsp;</div>';
		}else{
		WindooResizeImg='';
		}
        var WindooHead ='<div id="'+this.element.id+'_dragToolArea'+'" class="'+this.options.className+'-WinDragToolArea'+'"><div class="'+this.options.className+'-WinheadLeft"></div><div id="'+this.element.id+'_dragTool" class="'+this.options.className+'-WinDragTool">'+this.options.title+'</div><div class="'+this.options.className+'-WinheadRight">'+WindooCloseImg+'</div></div>';
  	    var WindooBody='<div id="'+this.element.id+'_toolBody" class="'+this.options.className+'-WinBody'+'"><div id="'+this.element.id+'_ajaxcontent'+'" class="'+this.options.className+'-WinContent'+'"></div></div>';
  		var WindooFooter ='<div class="'+this.options.className+'-WinBotLeft"></div><div id="'+this.element.id+'_bot" class="'+this.options.className+'-WinImgBotLeft">&nbsp;</div><div class="'+this.options.className+'-WinImgBotRight">&nbsp;</div>'+WindooResizeImg+'<div class="'+this.options.className+'-WinBotRight"></div>';

  		this.WindooMain.set('html',WindooHead+WindooBody+WindooFooter);

	    if(this.options.resizeMe){
		  $(this.element.id+'_main').makeResizable({handle: $(this.element.id+'_resize'),limit:this.options.resizeLimit,
		        onDrag:function(){
		  		$(this.element.id+'_toolBody').setStyles({'height':($(this.element.id+'_main').getCoordinates().height-($(this.element.id+'_bot').getCoordinates().height*2))+'px'});
                }.bind(this)});
		}

		if(this.options.draggMe){
	     $(this.element.id+'_main').makeDraggable({handle: $(this.element.id+'_dragTool')});
		}

        if(this.options.stayalive){
			$(this.element.id+'_close').addEvent('click',function(){
			this.end();
			}.bind(this));
		}
		if(!this.options.stayalive && this.options.effecting==false){
            var end = this.endAlive.bind(this);
		    this.element.addEvent('mouseleave', end);
		}

         this.myEffect = new Fx.Morph(this.WindooMain, {duration: 700, transition: this.options.transitionEffect});
         this.myBodyEffect = new Fx.Morph($(this.element.id+'_toolBody'), {duration: 700, transition: this.options.transitionEffect});


        $(this.element.id+'_toolBody').setStyles({'height':(this.options.height-($(this.element.id+'_bot').getCoordinates().height*2))+'px','width':'100%'});



	 if (this.options.initialize) this.options.initialize.call(this);
	},
    end: function(event){

		$clear(this.timer);
		this.timer = this.disappear.delay(this.options.timeIn, this);


	},
	endAlive: function(event){

		$clear(this.timer);
		this.timer = this.disappear.delay(this.options.fxDuration, this);


	},
    position: function(element){
		var pos = element.getPosition();
		this.WindooMain.setStyles({
			'left': pos.x + this.options.offsets.x,
			'top': pos.y + this.options.offsets.y
		});
	},
	ownposition: function(){

		this.WindooMain.setStyles({
			'position':'absolute',
			'left': this.options.offsets.x,
			'top':  this.options.offsets.y
		});
	},
    getEffect: function(){

	this.WindooMain.setStyles({'width':0,'height':0});
 	$(this.element.id+'_toolBody').setStyles({'height':0});

     var newleft='';
     if((this.options.width+this.options.moveTo.x) > Window.getWidth()){
     newleft=(Window.getWidth()-this.options.width-20);
     }else{
     newleft=this.options.moveTo.x;
     }
     this.myEffect.start({
	    	'top':[this.options.startFrom.y,this.options.moveTo.y],
   		   	'left':[newleft,newleft]

	  }).chain(function(){
		    this.myEffect.start({
		        'opacity':[0,1],
				'width':[0,this.options.width],
				'height':($(this.element.id+'_dragToolArea').getCoordinates().height*2)
		    });

	 }.bind(this)).chain(function(){

		     this.myEffect.start({
				'height':[($(this.element.id+'_dragToolArea').getCoordinates().height*2),this.options.height]
		    });
             this.myBodyEffect.start({
				'height':[0,(this.options.height-($(this.element.id+'_bot').getCoordinates().height*2))]
              });
      }.bind(this)).chain(function(){
               this.show();
	          if(!this.options.stayalive){
   	              	  this.endAlive(this);
		       }
	  }.bind(this));

    },

	show: function(){

		if(this.options.takeajax){
			this.ajaxload();
		}else{
		$(this.element.id+'_ajaxcontent').set('html', this.options.text);
		}

        if(!this.options.effecting){
			this.appear();


		}
	},

	appear: function(){

	  this.WindooMain.setStyle('visibility','visible');
	},



    ajaxload: function(){

	 	new Request.HTML({url:this.options.ajaxfile, method:'post',data:this.options.ajaxoption,update:$(this.element.id+'_ajaxcontent'),evalScripts:true,
			onFailure:function(){},
			onComplete:function(){
			this.fireEvent('onAjaxComplete',this.options.onAjaxComplete);

			}.bind(this)}).send();
		return this;
		 },


    showMe:function(){

        if(!this.options.effecting){


   			if (!this.options.fixed && !this.options.ownPosition) {
			    this.position(this.element);
   			}
	   		if(!this.options.fixed && this.options.ownPosition){
	   		 	this.ownposition();
	   		}
	    	if(this.options.fixed && !this.options.ownPosition){
	    	   this.position(this.element);
	    	}

           this.show();
     }

        if(this.options.effecting){
        this.timer = $clear(this.timer);
        this.timer = this.getEffect.delay(this.options.timeIn, this);
        }
    },
	disappear: function(){

       if(this.options.modal==true){
                $(this.element.id+'_divBg').destroy();
					if(Browser.Engine.trident) {
						$(this.element.id+'_iframeBg').destroy();
					}
           }
       $(this.element.id+'_main').destroy();

	}

});