var PI = Math.PI;

function getRGB(color) {
    var result;

    // Check if we're already dealing with an array of colors
    if ( color && color.constructor == Array && color.length == 3 )
        return color;

    // Look for rgb(num,num,num)
    if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
        return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];

    // Look for rgb(num%,num%,num%)
    if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
        return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];

    // Look for #a0b1c2
    if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
        return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];

    // Look for #fff
    if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
        return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];

    // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
    if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
        return colors['transparent'];

    // Otherwise, we're most likely dealing with a named color
    return colors[$.trim(color).toLowerCase()];
}

(function($) {
    $.fn.removePatternCssClass = function(pattern) {
        if (!pattern) {
            return this;
        }
        
        var rx = new RegExp(pattern);
        
        return this.each(function() {
            var c = this.className.split(/\s+/);
            for(var i = c.length; --i > -1;) { 
                if (rx.test(c[i])) {
                    $(this).removeClass(c[i]);
                }
            }
        });
    };
    
    $.drawRoundedRect = function(ctx, w, h, r, tl, tr, br, bl, x0, y0) {
        ctx.beginPath();
        
        if (tl) {
            ctx.moveTo(x0, r + y0);
            ctx.arc(r + x0, r + y0, r, PI + (PI * 0) / 2, PI + (PI * 1) / 2, 0);
        } else {
            ctx.moveTo(x0, y0);
        }
        
        if (tr) {
            ctx.lineTo(w - r + x0, y0);
            ctx.arc(w - r + x0, r + y0, r, PI + (PI * 1) / 2, PI + (PI * 2) / 2, 0);
        } else {
            ctx.lineTo(w + x0, y0);
        }
        
        if (br) {
            ctx.lineTo(w + x0, h - r + y0);
            ctx.arc(w - r + x0, h - r + y0, r, PI + (PI * 2) / 2, PI + (PI * 3) / 2, 0);
        } else {
            ctx.lineTo(w + x0, h + y0);
        }
        
        if (bl) {        
            ctx.lineTo(r + x0, h + y0);
            ctx.arc(r + x0, h - r + y0, r, PI + (PI * 3) / 2, PI + (PI * 0) / 2, 0);
        } else {
            ctx.lineTo(x0, h + y0);
        }
        
        ctx.closePath();
    }
    
    $.drawRoundedBox = function(ctx, w, h, r, tl, tr, br, bl, x0, y0, bgc, brw, brc) {
        if (bgc) {
            ctx.fillStyle = bgc;
        }
        
        if (brw) {
            ctx.lineWidth = brw;
            ctx.strokeStyle = brc;
        }
        
        $.drawRoundedRect(ctx, w, h, r, tl, tr, br, bl, x0, y0);
        
        if (brw) {
            ctx.stroke();
        }
        
        if (bgc) {
            ctx.fill();
        }
    };
    
    $.drawShadowsBox = function(ctx, w, h, r, tl, tr, br, bl, bgc, brw, brc, sw, sc) {
        if (bgc) {
            ctx.fillStyle = bgc;
        }
        
        if (brw) {
            ctx.lineWidth = brw;
            ctx.strokeStyle = brc;
        }
        
        var rw = w - 2 * sw;
        var rh = h - 2 * sw;
        
        $.drawRoundedRect(ctx, rw, rh, r, tl, tr, br, bl, sw, sw);
        
        if (brw) {
            ctx.stroke();
        }
        
        if (bgc) {
            ctx.fill();
        }
        
        var srgb = getRGB(sc);
        
        for (var i = 0; i < sw; i++) {
            ctx.lineWidth = 1;
            ctx.strokeStyle = "rgba(" + srgb[0] + ", " + srgb[1] + ", " + srgb[2] + ", " + (0.3 * (1 + i) / sw) + ")";
            
            $.drawRoundedRect(ctx, w - 2 * i, h - 2 * i, r + sw - i, tl, tr, br, bl, i, i);
            ctx.stroke();
        }
    };
    
    $.fn.findClass = function(pattern) {
        if (!pattern) {
            return null;
        }
        
        var rx = new RegExp(pattern);
        
        var c = this.attr('className').split(/\s+/);
        for(var i = c.length; --i > -1;) { 
            if (rx.test(c[i])) {
                return c[i];
            }
        }
        
        return null;
    }
    
    $.fn.getCanvasParams = function() {
        var result = {
            isImage: false,
            corners: false,
            bgColor: false,
            borderWidth: false,
            borderColor: false,
            shadowWidth: false,
            shadowColor: false
        };
        
        if (this.hasClass('nocanvas-image') && this.find('img:first').length) {
            result.isImage = true;
        }
        
        if (fc = this.findClass('nocanvas-round')) {
            result.corners = fc.substr(15) || '1111';
        }
        
        if (fc = this.findClass('nocanvas-bg')) {
            var bgname = fc.substr(11);
            
            switch(bgname) {
                case 'self':
                    result.bgColor = 'rgba(0, 0, 0, 0.1)';
                    break;
                    
                case 'blue':
                    result.bgColor = '#0093b9';
                    break;
            }
        }
        
        if (this.hasClass('nocanvas-border')) {
            result.borderWidth = 1;
            result.borderColor = '#b7aea1';
        }
        
        if (this.hasClass('nocanvas-shadow')) {
            result.shadowWidth = 3;
            result.shadowColor = '#b7aea1';
        }
        
        return result;
    }
    
        $.drawTabsBox = function(ctx, w, h, r, tl, tr, br, bl, bgc, brw, brc, sw, sc) {
        if (bgc) {
            ctx.fillStyle = bgc;
        }
        
        if (brw) {
            ctx.lineWidth = brw;
            ctx.strokeStyle = brc;
        }
        
        var rw = w - 2 * sw;
        var rh = h - 2 * sw;
        
        $.drawRoundedRect(ctx, rw, rh, r, tl, tr, br, bl, sw, sw);
        
        if (brw) {
            ctx.stroke();
        }
        
        if (bgc) {
            ctx.fill();
        }
        
        var srgb = getRGB(sc);
        
        for (var i = 0; i < sw; i++) {
            ctx.lineWidth = 1;
            ctx.strokeStyle = "rgba(" + srgb[0] + ", " + srgb[1] + ", " + srgb[2] + ", " + (0.3 * (1 + i) / sw) + ")";
            
            $.drawRoundedRect(ctx, w - 2 * i, h - 2 * i, r + sw - i, tl, tr, br, bl, i, i);
            //ctx.stroke();
        }
        
        ctx.fillStyle = '#d6cebe';
        //ctx.fillStyle = "rgba(0, 0, 0, 0.9)";
        //ctx.strokeStyle = '#d6cebe';
        ctx.beginPath();
        ctx.moveTo((sw + brw), h - (sw + brw));
        ctx.lineTo(w - (sw + brw), h - (sw + brw));
        ctx.lineTo(w - (sw + brw), h);
        ctx.lineTo((sw + brw), h);
        ctx.closePath();
        ctx.fill();
    };
    
    $.drawTabsLink = function(ctx, w, h, r, tl, tr, br, bl, bgc) {
        if (bgc) {
            ctx.fillStyle = bgc;
        }
        
        var rw = w;
        var rh = h - 2 * 16;
        
        $.drawRoundedRect(ctx, rw, rh, r, tl, tr, br, bl, 0, 18);
        
        if (bgc) {
            ctx.fill();
        }
    };
    
    $.fn.applyTabsStyle = function(r) {
        return this.each(function() {
            var params = $(this).getCanvasParams();
            
            if (!params.bgColor && !params.borderWidth) {
                return;
            }
            
            $(this).removePatternCssClass('nocanvas');
            
            $(this).jqcanvas(function (c, w, h) {
                var ctx = c.getContext("2d");
                                
                ctx.clearRect(0, 0, w, h);
                
                var tl = params.corners ? params.corners.charAt(0) == '1' : false;
                var tr = params.corners ? params.corners.charAt(1) == '1' : false;
                var br = params.corners ? params.corners.charAt(2) == '1' : false;
                var bl = params.corners ? params.corners.charAt(3) == '1' : false;
                
                if (params.shadowWidth) {
                    $.drawShadowsBox(ctx, w, h, r, tl, tr, br, bl, params.bgColor, params.borderWidth, params.borderColor, params.shadowWidth, params.shadowColor);
                } else {
                    $.drawRoundedBox(ctx, w, h, r, tl, tr, br, bl, 0, 0, params.bgColor, params.borderWidth, params.borderColor);
                }
            });
            
            var canvas_id = $(this).data("jqcanvas_id");
            $('#'+canvas_id).css({zIndex: -2});
        });
    }
    
    $.fn.applyTabsLinks = function() {
        this.each(function(idx) {
            $this = $(this);            
            var canvas_id = $this.data("jqcanvas_id");
            $('#'+canvas_id).remove();    
            $this.removeData("callback");
            $this.removeData("top");
            $this.removeData("left");
            $this.removeData("width");
            $this.removeData("extraWidth");
            $this.removeData("height");
            $this.removeData("jqcanvas_id");
        });
        
        return this.each(function(idx) {
            $this = $(this);
            $href = $($this.children("a")[0]);
            
            var act = $('#tabs').activeTab();
            
            if (act == idx + 1) {
                $this.jqcanvas(function (c, w, h) {
                    var ctx = c.getContext("2d");
                    ctx.clearRect(0, 0, w, h);
                    $.drawTabsBox(ctx, w, h, 30, 1, 1, 0, 0, 'rgba(0, 0, 0, 0.1)', 1, '#b7aea1', 3, '#b7aea1');
                }, {extraHeight: 4});
            }
            else {
                $this.jqcanvas(function (c, w, h) {
                    var ctx = c.getContext("2d");
                    ctx.clearRect(0, 0, w, h);
                    $.drawTabsLink(ctx, w, h, 12, 1, 1, 1, 1, 'rgba(0, 0, 0, 0.5)');
                });
            }
        });
    }
    
    $.fn.applyCanvasStyle = function(r) {
        return this.each(function() {
            var params = $(this).getCanvasParams();
            
            if (!params.bgColor && !params.borderWidth) {
                return;
            }
            
            $(this).removePatternCssClass('nocanvas');
            
            $this = this;
            
            $(this).jqcanvas(function (c, w, h) {
                var ctx = c.getContext("2d");
                                
                ctx.clearRect(0, 0, w, h);
                
                var tl = params.corners ? params.corners.charAt(0) == '1' : false;
                var tr = params.corners ? params.corners.charAt(1) == '1' : false;
                var br = params.corners ? params.corners.charAt(2) == '1' : false;
                var bl = params.corners ? params.corners.charAt(3) == '1' : false;
                
                if (params.shadowWidth) {
                    $.drawShadowsBox(ctx, w, h, r, tl, tr, br, bl, params.bgColor, params.borderWidth, params.borderColor, params.shadowWidth, params.shadowColor);
                } else {
                    $.drawRoundedBox(ctx, w, h, r, tl, tr, br, bl, 0, 0, params.bgColor, params.borderWidth, params.borderColor);
                }
            //}, {verifySize: false});
            });
        });
    };
})(jQuery)

$(function () {
    if ($.browser.msie && $.browser.version != '8.0') {
        DD_belatedPNG.fix('.wrapper');
        DD_belatedPNG.fix('.home');
        DD_belatedPNG.fix('.png');
    }
        
    $('.equalize').equalHeights(true);
    $(".content h3").applyCanvasStyle(30);
    
    $("#tabs").tabs({
        fxAutoHeight: true,
        tabStruct: "div>div",
        onShow: function() {
            $('ul.tabs-nav li').applyTabsLinks();
        }
    });
    
    $('.cols').applyTabsStyle(30);
    $('ul.tabs-nav li').applyTabsLinks();
    
    $(".nocanvas-navy").each(function(idx) {
        var tr = idx == 0;
        var br = idx != 0;
        var tn = this.tagName.toLowerCase();

        if (tn == 'a') {
            $(this).jqcanvas(function (c, w, h) {
                var ctx = c.getContext("2d");
                ctx.clearRect(0, 0, w, h);
                ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';
                $.drawRoundedRect(ctx, w, h, 25, true, tr, br, true, 0, 0);
                ctx.fill();
            });
        }
        else {
            $(this).jqcanvas(function (c, w, h) {
                var ctx = c.getContext("2d");
                ctx.clearRect(0, 0, w, h);
                ctx.fillStyle = '#0093b9';
                $.drawRoundedRect(ctx, w, h, 25, true, tr, br, true, 0, 0);
                ctx.fill();
            });
        }
        
        $(this).removePatternCssClass('nocanvas');
    });
    
    // Calculator
    if ($('#show-calc')) {
        $('#show-calc').click(function(){
            $('#calc').toggle();
            this.blur();
        });
        
        $('#hide-calc').click(function(){
            $('#calc').hide();
        });
        
        $('#calc').hide();
        
        $('#calc-tool').change(calculate);
        $('#calc-from').change(calculate);
        $('#lift-from').change(calculate);
        $('#calc-to').change(calculate);
        $('#lift-to').change(calculate);
        
        calculate();
    }
});

function calculate() {
    var base  = 4300;
    var floor = 250;
    var tool = parseInt($('#calc-tool').val());
    
    var floor_from = parseInt($('#calc-from').val());
    var floor_to   = parseInt($('#calc-to').val());
    var lift_from  = parseInt($('#lift-from').val());
    var lift_to    = parseInt($('#lift-to').val());
    
    switch (tool) {
        case 1:
            floor = 200;
            break;
        case 2:
            floor = 300;
            break;
        case 3:
            floor = 500;
            break;
        case 4:
            floor = 800;
            break;
    }
    
    if (tool == 1) {
        if (lift_from == 3) {
            floor_from = 0;
        }
        if (lift_to == 3) {
            floor_to = 0;
        }
    }

    var floor_total = floor_from + floor_to;    
    var floor_delta = (floor_total > 4) ? floor_total - 4 : 0;
    
    base += floor_delta * floor;
    
    $('#price').text(base);
}
