JKow.namespace(["WTK"]);

JKow.WTK.Window = function(){
	this.style = {
		width : '325px',
		position: 'absolute',
		'top' : '300px',
		'left' : '300px',
		'text-align': 'left'
	}
	this.cssClass = 'wtk-window';
	this.element = null;
	this.parent = null;
	this._visible = false;

	/***********************************************
	 * states:
	 **********************************************/
	this.states = {
		'input' : { 
			'mouse' : JKow.Input.Mouse.states.OUT, 
			'mousepos' : {
				x : 0,
				y : 0
			},
			'mousemovestartpos' : {
				x : 0,
				y : 0
			}
		}
	};

	this.setVisible = function(visible){
		if (typeof visible == "undefined" || visible == null){ 
			this._visible = false; 
		} else {
			this._visible = visible;
		}

		if (this._visible){
			JKow.Util.setStyle(this.element, 'display', 'inline');
		} else {
			JKow.Util.setStyle(this.element, 'display', 'none');	
		}
		return this._visible;
	}
	this.draw = function(){
		var sender = this;	

		this.ondraw(sender);
	}
	this.setParent = function(parent){
		if (parent != null){ this.parent = parent; }
		if (this.parent != null && this.element != null){ this.parent.appendChild(this.element); }
	}
	this._initHandlers = function(){
		var sender = this;
		/* mouse down handler */
		JKow.DOM.Event.addEventHandler(
			sender.element, 
			'mousedown',
			function(event) { 
				if (sender.states.input.mouse & JKow.Input.Mouse.states.UP){
					sender.states.input.mouse ^= JKow.Input.Mouse.states.UP; 
				}
				sender.states.input.mouse |= JKow.Input.Mouse.states.DOWN; 
				sender.onmousedown(sender);
			}
		);
		/* mouse up handler */
		JKow.DOM.Event.addEventHandler(
			sender.element, 
			'mouseup',
			function() { 
				if (sender.states.input.mouse & JKow.Input.Mouse.states.DOWN){
					sender.states.input.mouse ^= JKow.Input.Mouse.states.DOWN; 
				}
				sender.states.input.mouse |= JKow.Input.Mouse.states.UP; 
				sender.onmousedown(sender);
			}
		);
		/* mouse over handler */
		JKow.DOM.Event.addEventHandler(
			sender.element, 
			'mouseover',
			function() { 
				if (sender.states.input.mouse & JKow.Input.Mouse.states.OUT){
					sender.states.input.mouse ^= JKow.Input.Mouse.states.OUT; 
				}
				sender.states.input.mouse |= JKow.Input.Mouse.states.OVER; 
				sender.onmousedown(sender);
			}
		);
		/* mouse out handler */
		JKow.DOM.Event.addEventHandler(
			sender.element, 
			'mouseout',
			function() { 
				if (sender.states.input.mouse & JKow.Input.Mouse.states.OVER){
					sender.states.input.mouse ^= JKow.Input.Mouse.states.OVER; 
				}
				sender.states.input.mouse |= JKow.Input.Mouse.states.OUT; 
				sender.onmousedown(sender);
			}
		);
		var _fonmousemoveinit = function(sender) {
			JKow.DOM.Event.addEventHandler(
				document.getElementsByTagName('body')[0], 
				'mousemove',
				function(_event) { 
					var _xy = JKow.Input.Mouse.getMousePosition(_event);
					sender.states.input.mousepos.x = parseInt(_xy.x);
					sender.states.input.mousepos.y = parseInt(_xy.y);
					if (sender.states.input.mouse & JKow.Input.Mouse.states.DOWN){
						var _r = parseInt(sender.element.style.left) - (parseInt(sender.states.input.mousemovestartpos.x) - (parseInt(_xy.x)));
						JKow.Util.setStyle(
							sender.element, 
							'left', 
							_r.toString() + 'px'
						);
						_r = parseInt(sender.element.style.top) - (parseInt(sender.states.input.mousemovestartpos.y) - (parseInt(_xy.y)));
						JKow.Util.setStyle(
							sender.element, 
							'top', 
							_r.toString() + 'px'
						);
					}
					/* save start position for mouse movement */
					sender.states.input.mousemovestartpos.x = parseInt(_xy.x);
					sender.states.input.mousemovestartpos.y = parseInt(_xy.y);
					//sender.onmousemove(sender);
				}
			);
		}
		JKow.DOM.Event.addEventHandler(
			window,
			'load',
			function() { _fonmousemoveinit(sender) ; }
		);
	}
	this._init = function(){
		/* set up window */
		var el = document.createElement('div');
		this.element = el; 
		this.element.className = this.cssClass;
		for (var k in this.style){ this.element.style[k] = this.style[k]; }
		this._initHandlers();
		this.setVisible(false);
	}
	this.ondraw = function(sender){ /* override */ }
	this.onmouseover = function(sender){ /* override */ }
	this.onmousedown = function(sender){ /* override */ }
	this.onmouseout = function(sender){ /* override */ }
	this.onmouseup = function(sender){ /* override */ }
	this.onmousemove = function(sender) { /* override */ }
}
