//----------------------------------------------
//Drag v1.1 Source By Bermann
//dobermann75@gmail.com
//----------------------------------------------

//new Drag(ObjectAttributeName , DragElement , DragAreaNode , DragDirection[0 - Both , 1 - Horizontal , 2 - Vertical] , ScalePercentageAttributeName);

function Resize(Name,Direction,Dragelement,Dragarea,ScalePercent)
{
	this.Name = Name;
	this.Dragelement = Dragelement;
	this.Dragarea = Dragarea;
	this.Direction = Direction;
	this.ScalePercent = ScalePercent;
	this.DragMode = false;
	this.Element = null;
	this.Collection = [];
	this.Body = document.documentElement;
	this.Limit = null;
	this.LimitStartX = 0;
	this.LimitEndX = 0;
	this.LimitStartY = 0;
	this.LimitEndY = 0;
	this.ScaleX = 0;
	this.ScaleY = 0;
	this.setX = 0;
	this.setY = 0;
	if (window.attachEvent) {
		this.addEvent = function (Element,Handle,Action) { return Element.attachEvent(Handle,Action); }
	} else if (window.addEventListener) {
		this.addEvent = function (Element,Handle,Action) { return Element.addEventListener(Handle.replace(/^on/i,""),Action,false); }
	}
	this.Run();
}

Resize.prototype =
{
	MoveX : function (Mode,PositionX,PositionX_1,curentSX,curentWidth) {
		if (this.Limit != null) {
			if (this.LimitStartX >= PositionX) { this.Element.style.left = this.LimitStartX + "px"; }
			else if (this.LimitEndX <= (PositionX + this.Element.offsetWidth)) { this.Element.style.left = (this.LimitEndX - this.Element.offsetWidth) + "px"; }
			else { this.Element.style.left = PositionX + "px"; }
			if (this.Element.getAttribute(this.ScalePercent)) {
				var ScalePercent = Number(this.Element.getAttribute(this.ScalePercent));
				this.ScaleX = Math.ceil((this.Element.offsetLeft - this.LimitStartX) * (ScalePercent / (this.LimitEndX - this.LimitStartX - this.Element.offsetWidth)));
			}
		} else {
			this.Element.style.left = PositionX;
			
			if (curentDiv != null)
			{
				if (Mode == 1)
				{
					if (event.clientX < curentSX)
					{
						curentDiv.style.left = event.clientX + document.body.scrollLeft;
						curentDiv.style.width = curentWidth - PositionX_1;
					}
					else
					{
						curentDiv.style.left = curentSX + document.body.scrollLeft;
						curentDiv.style.width = event.clientX + document.body.scrollLeft - curentSX;
					}
				}
				else
				{
					if (PositionX_1 > 0)
					{				
						curentDiv.style.width = PositionX_1;
					}
					else
					{
						curentDiv.style.left = event.clientX + document.body.scrollLeft;
						curentDiv.style.width = Math.abs(PositionX_1);
					}
				}
			}

		}
	},
	MoveY : function (Mode1,PositionY,PositionY_1,curentSY,curentHeight) {
		if (this.Limit != null) {
			if (this.LimitStartY >= PositionY) { this.Element.style.top = this.LimitStartY + "px"; }
			else if (this.LimitEndY <= (PositionY + this.Element.offsetHeight)) { this.Element.style.top = (this.LimitEndY - this.Element.offsetHeight) + "px"; }
			else { this.Element.style.top = PositionY + "px"; }
			if (this.Element.getAttribute(this.ScalePercent)) {
				var ScalePercent = Number(this.Element.getAttribute(this.ScalePercent));
				this.ScaleY = Math.ceil((this.Element.offsetTop - this.LimitStartY) * (ScalePercent / (this.LimitEndY - this.LimitStartY - this.Element.offsetHeight)));
			}
		} else {
			this.Element.style.top = PositionY;
			
			if (curentDiv != null)
			{
				if (Mode1 == 1)
				{
					if (event.clientY + document.body.scrollTop < curentSY)
					{
						curentDiv.style.top = event.clientY + document.body.scrollTop;
						curentDiv.style.height = curentHeight - PositionY_1;
					}
					else
					{
						curentDiv.style.top = curentSY;
						curentDiv.style.height = event.clientY + document.body.scrollTop - curentSY;
					}
				}
				else
				{
					if (PositionY_1 > 0)
					{				
						curentDiv.style.height = PositionY_1;
					}
					else
					{
						curentDiv.style.top = event.clientY + document.body.scrollTop;
						curentDiv.style.height = Math.abs(PositionY_1);
					}
				}
			}
		}
	},
	Run : function () {
		var This = this;
		this.addEvent(this.Body,"onmousedown",function (event) {
			if (event.button == 0 || event.button == 1) {
				This.Element = event.target || event.srcElement;
				This.DragMode = (This.Element.getAttribute(This.Name) == "true") ? true : false;
				if (This.DragMode == true) {
					if (This.Element.getAttribute(This.Dragelement)) { This.Element = eval(This.Element.getAttribute(This.Dragelement)); }
					//addCollection
					for (var i = 0; i < This.Collection.length; i++) { if (This.Element === This.Collection[i]) { break; } }
					if (i == This.Collection.length) {
						This.Element.style.zIndex = This.Collection.length + 1;
						This.Collection.push(This.Element);
						This.Element.style.position = "absolute";
					}
					//addCollection
					//reset z-Index
					var tmpElement = [];
					var tmpzIndex = This.Collection.length - 1;
					for (var i = tmpzIndex; i >= 0; i--) { tmpElement[This.Collection[i].style.zIndex - 1] = This.Collection[i]; }
					for (var i = tmpzIndex; i >= 0; i--) { tmpElement[i].style.zIndex = (tmpElement[i] === This.Element) ? tmpElement.length : tmpzIndex--; }
					//reset z-Index
					if (This.Element.getAttribute(This.Dragarea)) {
						This.Limit = eval(This.Element.getAttribute(This.Dragarea));
						This.LimitStartX += This.Limit.offsetLeft;
						This.LimitEndX += This.LimitStartX + This.Limit.clientWidth;
						This.LimitStartY += This.Limit.offsetTop;
						This.LimitEndY += This.LimitStartY + This.Limit.clientHeight;
					}
					This.setX = event.clientX + document.body.scrollLeft - This.Element.offsetLeft;
					This.setX_1 = curentDiv.offsetLeft;
					This.curentSX = curentDiv.offsetLeft + Number(curentDiv.style.width.substring(0,Number(curentDiv.style.width.indexOf("px"))));
					This.curentWidth = Number(curentDiv.style.width.substring(0,Number(curentDiv.style.width.indexOf("px"))));
					This.setY = event.clientY + document.body.scrollTop - This.Element.offsetTop;
					This.setY_1 = curentDiv.offsetTop;
					This.curentSY = curentDiv.offsetTop + Number(curentDiv.style.height.substring(0,Number(curentDiv.style.height.indexOf("px"))));
					This.curentHeight = Number(curentDiv.style.height.substring(0,Number(curentDiv.style.height.indexOf("px"))));
					if (This.setX_1 > This.Element.offsetLeft)
					{
						This.mode = 1;
					}
					else
					{
						This.mode = 2;
					}
					if (This.setY_1 > This.Element.offsetTop)
					{
						This.mode1 = 1;
					}
					else
					{
						This.mode1 = 2;
					}
				}
			}
		});
		this.addEvent(this.Body,"onmousemove",function (event) {
			if (This.DragMode == true) {
				var PositionX = event.clientX + document.body.scrollLeft - This.setX;
				var PositionX_1 = event.clientX + document.body.scrollLeft - This.setX_1;
				var PositionY = event.clientY + document.body.scrollTop - This.setY;
				var PositionY_1 = event.clientY + document.body.scrollTop - This.setY_1;
				var Mode	= This.mode;
				var Mode1	= This.mode1;
				var curentSX = This.curentSX;
				var curentSY = This.curentSY;
				var curentWidth = This.curentWidth;
				var curentHeight = This.curentHeight;
				switch (This.Direction) {
					case "0" :
//						This.MoveX(PositionX);
//						This.MoveY(PositionY);
						break;
					case "1" :
						This.MoveY(Mode1,PositionY,PositionY_1,curentSY,curentHeight);
						break;
					case "2" :
						This.MoveX(Mode,PositionX,PositionX_1,curentSX,curentWidth);
						break;
//					default :
//						This.MoveX(PositionX);
//						This.MoveY(PositionY);
				}
			}
		});
		this.addEvent(this.Body,"onmouseup",function () {
			This.DragMode = false;
			This.Element = null;
			This.Limit = null;
			this.LimitStartX = 0;
			this.LimitEndX = 0;
			this.LimitStartY = 0;
			this.LimitEndY = 0;
			This.setX = 0;
			This.setY = 0;
		});
	}
}
