var DuanWZ={};

//Package DuanWZ.controls
DuanWZ.Controls = {};

DuanWZ.Controls.Overlay = new Class({
	Implements: [Events, Options],
	
	options: {
		styles:{		
			position:'absolute',
			top:0,
			left:0,	
			'z-index':5000,
			'background-color':'#333',
			opacity:0.6
		}
	},
	
	initialize: function(){
		var params = Array.link(arguments, {options: Object.type});
		this.setOptions(params.options || null);
		
		this.maskDiv= new Element("div").inject(document.body);
		this.maskDiv.setStyles(this.options.styles);
		if(Browser.Engine.trident && Browser.Engine.version == "4")//if is IE6, we should create a iframe to mask the selelct.
			this.maskDiv.set('html',  '<iframe style="position:absolute;top:0;left:0;width:100%;height:100%;filter:alpha(opacity=0);"></iframe>')

		//this.maskDiv.oncontextmenu = $lambda(false);		
		var resize = this.maskDiv.retrieve('overlay:resize', this.resize.bindWithEvent(this));		
		window.addEvent("resize", resize);
	},
	
	resize: function(){

		this.maskDiv.setStyles({width:(window.getScrollSize().x),height:(window.getScrollSize().y)});
	},	
	
	show: function(){
		this.maskDiv.setStyle("display","");		
		this.maskDiv.setStyles({width:(window.getScrollSize().x),height:(window.getScrollSize().y)});
	},
	
	hide: function(){		
		this.maskDiv.setStyle("display","none");		
	},
	
	close: function(){
		//解除绑定
		window.removeEvent("resize", this.maskDiv.retrieve('overlay:resize') || $empty);
		this.maskDiv.eliminate('overlay:resize')
		
		this.maskDiv.setStyle("display","none");	
		this.maskDiv.destroy();	
	}
});

DuanWZ.Controls.Window = new Class({
	Implements: [Options],

	options: {
		styles:{
			
			"z-index":5000,
			position : "absolute",
			display:"none"
		}
	},
	initialize: function(){
		var params = Array.link(arguments, {title:String.type,strContent:String.type,elContent:Element.type,options: Object.type});
		this.setOptions(params.options);
		this.title = params.title;
		
		this.content = $pick(params.strContent,params.elContent);
		
		
		
		if(this.options.isModal)this.overlay = new DuanWZ.Controls.Overlay();

	    this.windowDiv =new Element("div",{"class":"window"}).setStyles(this.options.styles).inject(document.body);
		if(Browser.Engine.trident && Browser.Engine.version == "4")//if is IE6, we should create a iframe to mask the selelct.
			this.windowDiv.set('html',  '<iframe style="position:absolute;top:0;left:0;width:100%;height:100%;filter:alpha(opacity=0);z-index:-1;"></iframe>')
	    this.systemBar = new Element("div",{"class":"systembar"}).inject(this.windowDiv);
		this.windowDiv.makeDraggable({"handle":this.systemBar})
	    this.titleBar =  new Element("span",{"class":"titlebar"}).inject(this.systemBar);
	    this.closeButton = new Element("span",{"class":"closebutton"}).inject(this.systemBar);
	    
	    this.closeButton.addEvent("click", this.close.bind(this));
		
	    this.contentDiv=new Element("div",{"class":"content"}).inject(this.windowDiv);		
	},
	
	show : function(){
		var params = Array.link(arguments, {title:String.type,strContent:String.type,elContent:Element.type,options: Object.type});
		this.setOptions(params.options);
		if(params.title)this.title = params.title;		
		var content = $pick(params.strContent,params.elContent);
		if(content)this.content = content;
		
		styles = $merge(this.options.styles,{"display":""});				
		this.windowDiv.setStyles(styles);
	
		this.titleBar.innerHTML = this.title;
	 
		if(typeof this.content == "object")
		   this.contentDiv.appendChild(this.content);
		else if	(typeof this.content == "string")
		   this.contentDiv.innerHTML = this.content;
		
		if(this.options.isCentral)this.setCenter();
		if(this.options.isModal)this.overlay.show();
		

    },
	
	hide: function(){
		if(this.options.isModal)this.overlay.hide();
		this.windowDiv.setStyle("display","none");		
	},
	
	close : function(){
		if(this.options.onClose)this.options.onClose();

		this.windowDiv.destroy();
		if(this.options.isModal)this.overlay.close();
	},
	
	setCenter:function(){		
		var winSize = Window.getSize();
		var winScroll = Window.getScroll();
		var top = winScroll.y + (winSize.y - this.windowDiv.offsetHeight) / 2;	
		top=top * 0.618; //让窗口靠上面一点，看起来舒服点 
	    var left = (winScroll.x + (winSize.x - this.windowDiv.offsetWidth) / 2);
		
		this.windowDiv.setStyle("top",top).setStyle("left",left);
		window.addEvent("resize", this.setCenter.bind(this));
	}
}),

DuanWZ.Controls.Dialog = new Class({
	Extends: DuanWZ.Controls.Window,
	
	initialize: function(){
		var params = Array.link(arguments, {title:String.type,content:String.type,options: Object.type, buttons: Array.type});
		this.parent(params.title,params.content,$merge(params.options,{"isModal":"true","isCentral":"true"})); 
			
		if(params.buttons && params.buttons.length>0)
		{
			var buttonBar =new Element("div",{"class":"buttonbar"}).inject(this.windowDiv);   
			params.buttons.each(function(button){
					var buttonInput = new Element("input",{"type":"button","value":button.text}).inject(buttonBar);
					if(button.handler)
						buttonInput.addEvent("click",button.handler.bind(this))
				}
			)
		}
	}
}),

DuanWZ.Controls.Alert = new Class({
	Extends: DuanWZ.Controls.Dialog,
	
	initialize: function(){		
		var params = Array.link(arguments, {title:String.type,content:String.type,onOk:Function.type,options: Object.type, buttons: Array.type});
		this.parent(params.title,params.content,params.options,[{"text":"确定","handler": (function(){if(params.onOk)params.onOk();this.close()}).bind(this)}]); 
	}
}),


DuanWZ.Controls.Confirm = new Class({

	Extends: DuanWZ.Controls.Dialog,
	initialize:function()	{
		var params = Array.link(arguments, {title:String.type,content:String.type,onOk:Function.type,onCancel:Function.type});

		//确定按钮
		var okButton = {"text":"确定","handler": (function(){
				if(params.onOk)params.onOk();
				this.close()}
			).bind(this)
		};
		//取消按钮
		var cancelButton = {"text":"取消","handler": (function(){
				if(params.onCancel)params.onCancel();
				this.close()}
			).bind(this)
		};
		var buttons =[okButton,cancelButton]
		this.parent(params.title,params.content,buttons); 
	}

});

DuanWZ.error = function(content)
{
new DuanWZ.Controls.Alert().show("错误",content);
}
/*
var Tips = new Class({

	Implements: [Events, Options],

	options: {
		onShow: function(tip){
			tip.setStyle('visibility', 'visible');
		},
		onHide: function(tip){
			tip.setStyle('visibility', 'hidden');
		},
		showDelay: 100,
		hideDelay: 100,
		className: null,
		offsets: {x: 16, y: 16},
		fixed: false
	},

	initialize: function(){
		var params = Array.link(arguments, {options: Object.type, elements: $defined});
		this.setOptions(params.options || null);
		
		this.tip = new Element('div').inject(document.body);
		
		if (this.options.className) this.tip.addClass(this.options.className);
		
		var top = new Element('div', {'class': 'tip-top'}).inject(this.tip);
		this.container = new Element('div', {'class': 'tip'}).inject(this.tip);
		var bottom = new Element('div', {'class': 'tip-bottom'}).inject(this.tip);

		this.tip.setStyles({position: 'absolute', top: 0, left: 0, visibility: 'hidden'});
		
		if (params.elements) this.attach(params.elements);
	},
	
	attach: function(elements){
		$$(elements).each(function(element){
			var title = element.retrieve('tip:title', element.get('title'));
			var text = element.retrieve('tip:text', element.get('rel') || element.get('href'));
			var enter = element.retrieve('tip:enter', this.elementEnter.bindWithEvent(this, element));
			var leave = element.retrieve('tip:leave', this.elementLeave.bindWithEvent(this, element));
			element.addEvents({mouseenter: enter, mouseleave: leave});
			if (!this.options.fixed){
				var move = element.retrieve('tip:move', this.elementMove.bindWithEvent(this, element));
				element.addEvent('mousemove', move);
			}
			element.store('tip:native', element.get('title'));
			element.erase('title');
		}, this);
		return this;
	},
	
	detach: function(elements){
		$$(elements).each(function(element){
			element.removeEvent('mouseenter', element.retrieve('tip:enter') || $empty);
			element.removeEvent('mouseleave', element.retrieve('tip:leave') || $empty);
			element.removeEvent('mousemove', element.retrieve('tip:move') || $empty);
			element.eliminate('tip:enter').eliminate('tip:leave').eliminate('tip:move');
			var original = element.retrieve('tip:native');
			if (original) element.set('title', original);
		});
		return this;
	},
	
	elementEnter: function(event, element){
		
		$A(this.container.childNodes).each(Element.dispose);
		
		var title = element.retrieve('tip:title');
		
		if (title){
			this.titleElement = new Element('div', {'class': 'tip-title'}).inject(this.container);
			this.fill(this.titleElement, title);
		}
		
		var text = element.retrieve('tip:text');
		if (text){
			this.textElement = new Element('div', {'class': 'tip-text'}).inject(this.container);
			this.fill(this.textElement, text);
		}
		
		this.timer = $clear(this.timer);
		this.timer = this.show.delay(this.options.showDelay, this);

		this.position((!this.options.fixed) ? event : {page: element.getPosition()});
	},
	
	elementLeave: function(event){
		$clear(this.timer);
		this.timer = this.hide.delay(this.options.hideDelay, this);
	},
	
	elementMove: function(event){
		this.position(event);
	},
	
	position: function(event){
		var size = window.getSize(), scroll = window.getScroll();
		var tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight};
		var props = {x: 'left', y: 'top'};
		for (var z in props){
			var pos = event.page[z] + this.options.offsets[z];
			if ((pos + tip[z] - scroll[z]) > size[z]) pos = event.page[z] - this.options.offsets[z] - tip[z];
			this.tip.setStyle(props[z], pos);
		}
	},
	
	fill: function(element, contents){
		(typeof contents == 'string') ? element.set('html', contents) : element.adopt(contents);
	},

	show: function(){
		this.fireEvent('show', this.tip);
	},

	hide: function(){
		this.fireEvent('hide', this.tip);
	}

});
*/