Type.registerNamespace('manathanWeb');
manathanWeb.Position = function(x, y) {
    this.x = x;
    this.y = y;
  };
manathanWeb.Position.prototype = {
	toString: function() {
	    return "x: " + this.x + " y: " + this.y;
	}
};
manathanWeb.Position.registerClass('manathanWeb.Position');

manathanWeb.Dimension = function(width, height) {
    this.width = width;
    this.height = height;
  };
manathanWeb.Dimension.prototype = {
	toString: function() {
	    return "width: " + this.width + " height: " + this.height;
	}
};
manathanWeb.Dimension.registerClass('manathanWeb.Dimension');

manathanWeb.Square = function(position, dimension) {
    this.position = position;
    this.dimension = dimension;
  };
manathanWeb.Square.prototype = {
	getPosition: function() {
		return this.position;
	},
	setPosition: function(position) {
		this.position = position;
	},
	setPosition: function(x, y) {
		this.position.x = x;
		this.position.y = y;
	},
	getDimension: function() {
		return this.dimension;
	},
	setDimension: function(dimension) {
		this.dimension = dimension;
	},
	setDimension: function(width, height) {
		this.dimension.width = width;
		this.dimension.height = height;
	},
	isInside: function(position) {
	    return !(position.x < this.position.x ||
	        position.y < this.position.y ||
	        position.x > this.position.x + this.dimension.width ||
	        position.y > this.position.y + this.dimension.height);
	},
	toString: function() {
	    return "Position: " + this.position.toString() + "<br />Dimension: " + this.dimension.toString();
	}
};
manathanWeb.Square.registerClass('manathanWeb.Square');

manathanWeb.Positioning = function() {
    this.pBreak = false;
 };
manathanWeb.Positioning.prototype = {

    setPositionBreak: function(value) {
        this.pBreak = value;
    },

    findPositionX: function(obj)
    {
        var curleft = 0;
        if(obj.offsetParent) {
            while(obj.offsetParent) 
            {
              curleft += obj.offsetLeft;
              obj = obj.offsetParent;
              if (this.pBreak && 
                    (obj.style.position == 'relative' ||
                    obj.style.position == 'absolute'))
                    return curleft;// break; //
            }
            curleft += obj.offsetLeft;
        }
        else if(obj.offsetLeft)
            curleft += obj.offsetLeft;
        return curleft;
    },

    findPositionY: function(obj)
    {
        var curtop = 0;
        if(obj.offsetParent) {
            while(obj.offsetParent)
            {
              curtop += obj.offsetTop;
              obj = obj.offsetParent;
              if (this.pBreak && 
                    (obj.style.position == 'relative' ||
                    obj.style.position == 'absolute'))
                    return curtop;// break; //
            }
            curtop += obj.offsetTop;
        } 
        else if(obj.offsetTop)
            curtop += obj.offsetTop;
        return curtop;
    },
    
    calculateIntersection: function(pos1, pos2) {
        /// returns a position pos1 - pos2
        return new manathanWeb.Position(pos1.x - pos2.x, pos1.y - pos2.y);
    },

    findPositions: function(obj) {
        var pos = new manathanWeb.Position(this.findPositionX(obj), this.findPositionY(obj));
        return pos;
        //var pos = Sys.UI.DomElement.getLocation(obj); //
        //return new manathanWeb.Position(pos.x, pos.y);
    },
    
    getObjectSize: function(obj) {
        if (!obj) throw "Object null or empty";
        var pos = new manathanWeb.Position(this.findPositionX(obj), this.findPositionY(obj));
        var dim = new manathanWeb.Dimension(obj.offsetWidth, obj.offsetHeight);
        return new manathanWeb.Square(pos, dim);
    },
    
    windowSize: function() {
		var myWidth = 0, myHeight = 0;
		if( typeof( window.innerWidth ) == 'number' ) {
			//Non-IE
			myWidth = window.innerWidth;
			myHeight = window.innerHeight;
		} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
			//IE 6+ in 'standards compliant mode'
			myWidth = document.documentElement.clientWidth;
			myHeight = document.documentElement.clientHeight;
		} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
			//IE 4 compatible
			myWidth = document.body.clientWidth;
			myHeight = document.body.clientHeight;
		}
		return new manathanWeb.Dimension(myWidth, myHeight);
    },
    
    scrollPosition: function() {
		var scrOfX = 0, scrOfY = 0;
		if( typeof( window.pageYOffset ) == 'number' ) {
			//Netscape compliant
			scrOfY = window.pageYOffset;
			scrOfX = window.pageXOffset;
		} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
			//DOM compliant
			scrOfY = document.body.scrollTop;
			scrOfX = document.body.scrollLeft;
		} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
			//IE6 standards compliant mode
			scrOfY = document.documentElement.scrollTop;
			scrOfX = document.documentElement.scrollLeft;
		}
		return new manathanWeb.Position(scrOfX, scrOfY);
	},
    
    mouseCoords: function(e){ 
		var posY = (document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop) + e.clientY; 
        var posX = (document.body.scrollLeft ? document.body.scrollLeft : document.documentElement.scrollLeft) + e.clientX; 
        return new manathanWeb.Position(posX, posY);
	},
	
	mouseCoordsMove: function(element, e) {
		var scrollX = document.body.scrollLeft || document.documentElement.scrollLeft;
		var scrollY = document.body.scrollTop || document.documentElement.scrollTop;

		if (e.currentTarget) {
			var pos = this.findPositions(element);
			return new manathanWeb.Position(e.clientX - pos.x + scrollX,
				e.clientY - pos.y + scrollY);
		}
		else
		    return new manathanWeb.Position(e.offsetX, e.offsetY);
	}
};
manathanWeb.Positioning.registerClass('manathanWeb.Positioning');

// Notify ScriptManager that this is the end of the script.
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();