var Polygon = new Class({
	Implements: [Options],

	points: new Array(),
	
	options: {
		points: new Array()
	},
	
	initialize: function(options) {
		this.points = options;
	},	
	
	getPoints: function() {
        return this.points;
    },

    add: function(point) {
    	this.points.push(point);
    },
    
    inBounds: function(ad) {
        var flag = true;
        
        this.points.each(function(point) {
            if (point.x < ad[0] || point.x > ad[1] || point.y < ad[2] || point.y > ad[3]) {
                flag = false;
            }
        });
        
        return flag;
    },

    translate: function(d1, d2) {
    	this.points.each(function(point) {
        	point.x += d1;
        	point.y += d2;
        });
    },

    inBoundsAfterTranslate: function(d, d1, ad)
    {
        var flag = true;
        
        this.points.each(function(point) {
            if (point.x + d < ad[0] || point.x + d > ad[1] || point.y + d1 < ad[2] || point.y + d1 > ad[3]) {
                flag = false;
            }            
        });
        
        return flag;
    },

    reflect: function(d, d1, d2, d3)
    {
        var d6 = Math.atan2(d3, d2);
        
        translate(-1 * d, -1 * d1);
        
        var d7 = 2 * Math.cos(d6) * Math.cos(d6) - 1.0;
        var d8 = 2 * Math.cos(d6) * Math.sin(d6);
        var d9 = d8;
        var d10 = 2 * Math.sin(d6) * Math.sin(d6) - 1.0;
        
        this.points.each(function(point) {
            var d4 = point.x * d7 + point.y * d8;
            var d5 = point.x * d9 + point.y * d10;
            
            point.x = d4;
            point.y = d5;
        });

        translate(d, d1);
    },

    rotate: function(d, d1, d2)
    {
    	this.translate(-1 * d1, -1 * d2);
        
        var d5 = Math.cos(d);
        var d6 = -1 * Math.sin(d);
        var d7 = -1 * d6;
        var d8 = d5;
        
        this.points.each(function(point) {
            var d3 = point.x * d5 + point.y * d6;
            var d4 = point.x * d7 + point.y * d8;
            
            point.x = Math.round(d3);
            point.y = Math.round(d4);
        });

        this.translate(d1, d2);
    }
});
