Raphael.fn.polygon = function (params, points) {
    var el = document.createElementNS(this.svgns, "polygon");
    el.setAttribute("points", points);
    if (this.canvas) {
        this.canvas.appendChild(el);
    }                    
    var p = new this.raphael.Element(el, this);
    p.type = "polygon";
    if (params) {
        !params.gradient && (params.fill = params.fill || "none");
        params.stroke = params.stroke || "#000";
    } else {
        params = {fill: "none", stroke: "#000"};
    }
    this.raphael.setFillAndStroke(p, params);
    return p;
};

Raphael.fn.regularPolygon = function (x, y, radius, sides, params) {
    var angle = 360;
    var edgeLength = 2 * radius * Math.sin(Math.PI / sides);
    
    x += edgeLength / 2;
    y += radius * Math.cos(Math.PI / sides);
    
    var points = [x + ',' + y];
    for(side = 1; side < sides; side++) {
        angle -= 360 / sides;
        rads = angle * (Math.PI / 180);
        x = x + edgeLength * Math.cos(rads);
        y = y + edgeLength * Math.sin(rads);
        points.push(x + ',' + y);
    }
    return this.polygon(params, points.join(' '));
}
