// JavaScript Document

var resize = {
	
	init: function() {
		
		resize.divs = Core.getElementsByClass('resizeMe');
		
		resize._currentDiv = null;
		resize._currentCorner = null;
		
		resize._startX = 0;
		resize._startY = 0;
		resize._height = 0;
		resize._width = 0;
		resize._top = 0;
		resize._left = 0;
		
		for( var i = 0, ii = resize.divs.length; i<ii; i++ ){
			resize.divs[i]._ref = i;
			resize.divs[i]._tl = null;
			resize.divs[i]._tm = null;
			resize.divs[i]._tr = null;
			resize.divs[i]._br = null;
			resize.divs[i]._bm = null;
			resize.divs[i]._bl = null;
			resize.divs[i]._mr = null;
			resize.divs[i]._ml = null;
			Core.addEventListener(resize.divs[i], 'click', resize.setupCorners);
		}
		
		Core.addEventListener(document, 'click', resize.hideCorners);
		Core.addEventListener(document, 'click', resize.OnMouseUp);
		Core.addEventListener(document, "keydown", resize.esc);
	},
	
	setupCorners: function(event) {
		
		resize._currentDiv = this._ref;
		
		if(this._tl != null && this._tm != null && this._tr != null && this._br != null && this._bm != null && this._bl != null && this._mr != null && this._ml != null) {
			resize.hideCorners();
			this._tl.style.visibility = 'inherit';
			this._tm.style.visibility = 'inherit';
			this._tr.style.visibility = 'inherit';
			this._br.style.visibility = 'inherit';
			this._bm.style.visibility = 'inherit';
			this._bl.style.visibility = 'inherit';
			this._mr.style.visibility = 'inherit';
			this._ml.style.visibility = 'inherit';
		} else {
			resize.hideCorners();
			this._tl = document.createElement('div');
			this._tl.className = 'tl';
			this._tm = document.createElement('div');
			this._tm.className = 'tm';
			this._tr = document.createElement('div');
			this._tr.className = 'tr';
			this._br = document.createElement('div');
			this._br.className = 'br';
			this._bm = document.createElement('div');
			this._bm.className = 'bm';
			this._bl = document.createElement('div');
			this._bl.className = 'bl';
			this._mr = document.createElement('div');
			this._mr.className = 'mr';
			this._ml = document.createElement('div');
			this._ml.className = 'ml';
			
			this.appendChild(this._tl);
			this.appendChild(this._tm);
			this.appendChild(this._tr);
			this.appendChild(this._br);
			this.appendChild(this._bm);
			this.appendChild(this._bl);
			this.appendChild(this._mr);
			this.appendChild(this._ml);
			
			Core.addEventListener(this._tl, "mousedown", resize.OnMouseDown);
			Core.addEventListener(this._tm, "mousedown", resize.OnMouseDown);
			Core.addEventListener(this._tr, "mousedown", resize.OnMouseDown);
			Core.addEventListener(this._br, "mousedown", resize.OnMouseDown);
			Core.addEventListener(this._bm, "mousedown", resize.OnMouseDown);
			Core.addEventListener(this._bl, "mousedown", resize.OnMouseDown);
			Core.addEventListener(this._mr, "mousedown", resize.OnMouseDown);
			Core.addEventListener(this._ml, "mousedown", resize.OnMouseDown);
			
			Core.addEventListener(this._tl, "mouseup", resize.OnMouseUp);
			Core.addEventListener(this._tm, "mouseup", resize.OnMouseUp);
			Core.addEventListener(this._tr, "mouseup", resize.OnMouseUp);
			Core.addEventListener(this._br, "mouseup", resize.OnMouseUp);
			Core.addEventListener(this._bm, "mouseup", resize.OnMouseUp);
			Core.addEventListener(this._bl, "mouseup", resize.OnMouseUp);
			Core.addEventListener(this._mr, "mouseup", resize.OnMouseUp);
			Core.addEventListener(this._ml, "mouseup", resize.OnMouseUp);
		}
		
		Core.preventDefault(event);
		Core.stopPropagation(event);
	},
	
	hideCorners: function() {
		
		for( var i = 0, ii = resize.divs.length; i<ii; i++ ){
			if(resize.divs[i]._tl != null && resize.divs[i]._tm != null && resize.divs[i]._tr != null && resize.divs[i]._br != null && resize.divs[i]._bm != null && resize.divs[i]._bl != null && resize.divs[i]._mr != null && resize.divs[i]._ml != null) {
				resize.divs[i]._tl.style.visibility = 'hidden';
				resize.divs[i]._tm.style.visibility = 'hidden';
				resize.divs[i]._tr.style.visibility = 'hidden';
				resize.divs[i]._br.style.visibility = 'hidden';
				resize.divs[i]._bm.style.visibility = 'hidden';
				resize.divs[i]._bl.style.visibility = 'hidden';
				resize.divs[i]._mr.style.visibility = 'hidden';
				resize.divs[i]._ml.style.visibility = 'hidden';
			}
		}
	},
	
	OnMouseDown: function(event) {
		
		resize._currentCorner = this.className;
		
		resize._startX = event.clientX;
		resize._startY = event.clientY;
		
		resize._top = resize.divs[resize._currentDiv].offsetTop;
		resize._left = resize.divs[resize._currentDiv].offsetLeft;
		resize._width = resize.divs[resize._currentDiv].offsetWidth;
		resize._height = resize.divs[resize._currentDiv].offsetHeight;
		
		Core.addEventListener(document, "mousemove", resize.OnMouseMove);
		Core.preventDefault(event);
		Core.stopPropagation(event);
	},
	
	OnMouseMove: function(event) {
		
		if(resize._currentCorner.indexOf("r") != -1) {
			resize.divs[resize._currentDiv].style.width = (resize._width + event.clientX - resize._startX) + 'px';
		}
		
		if (resize._currentCorner.indexOf("b") != -1) {
			resize.divs[resize._currentDiv].style.height = (resize._height + event.clientY - resize._startY) + "px";
		}
		
		if (resize._currentCorner.indexOf("l") != -1) {
			resize.divs[resize._currentDiv].style.left = Math.min(resize._left + event.clientX - resize._startX, resize._left + resize._width) + "px";
			resize.divs[resize._currentDiv].style.width = (resize._width - event.clientX + resize._startX) + "px";
		}
		
		if (resize._currentCorner.indexOf("t") != -1) {
			resize.divs[resize._currentDiv].style.top = Math.min(resize._top + event.clientY - resize._startY, resize._top + resize._height) + "px";
			resize.divs[resize._currentDiv].style.height = (resize._height - event.clientY + resize._startY) + "px";
		}
		
		Core.preventDefault(event);
		Core.stopPropagation(event);
	},
	
	OnMouseUp: function() {
		resize._currentDiv = null;
		resize._currentCorner = null;
		Core.removeEventListener(document, "mousemove", resize.OnMouseMove);
	},
	
	esc: function(event) {
		var key = event.which || event.keyCode
		if(key == 27) {
			resize.hideCorners();
			resize.OnMouseUp();
		}
	}

};

Core.start(resize);
