﻿
// Plugin

/**
* Cornerz 0.6 - Bullet Proof Corners
* Jonah Fox (jonah@parkerfox.co.uk) 2008
* 
* Usage: $('.myclass').curve(options)
* options is a hash with the following parameters. Bracketed is the default
*   radius (10)
*   borderWidth (read from BorderTopWidth or 0)
*   background ("white"). Note that this is not calculated from the HTML as it is expensive
*   borderColor (read from BorderTopColor)
*   corners ("tl br tr bl"). Specify which borders
*   fixIE ("padding") - attmepts to fix IE by incrementing the property by 1 if the outer width/height is odd.

CHANGELIST from  v0.4

0.5 - Now attempts to fix the odd dimension problem in IE 
0.6 - Added semicolons for packing and fixed a problem with odd border width's in IE

*/

; (function($) {

    if ($.browser.msie && document.namespaces["v"] == null) {
        document.namespaces.add("v", "urn:schemas-microsoft-com:vml", "#default#VML");
    }

    $.fn.cornerz = function(options) {

        function canvasCorner(t, l, r, bw, bc, bg) {
            var sa, ea, cw, sx, sy, x, y, p = 1.57, css = "position:absolute;";
            if (t)
            { sa = -p; sy = r; y = 0; css += "top:-" + bw + "px;"; }
            else
            { sa = p; sy = 0; y = r; css += "bottom:-" + bw + "px;"; }
            if (l)
            { ea = p * 2; sx = r; x = 0; css += "left:-" + bw + "px;"; }
            else
            { ea = 0; sx = 0; x = r; css += "right:-" + bw + "px;"; }

            var canvas = $("<canvas width=" + r + "px height=" + r + "px style='" + css + "' ></canvas>");
            var ctx = canvas[0].getContext('2d');
            ctx.beginPath();
            ctx.lineWidth = bw * 2;
            ctx.arc(sx, sy, r, sa, ea, !(t ^ l));
            ctx.strokeStyle = bc;
            ctx.stroke();
            ctx.lineWidth = 0;
            ctx.lineTo(x, y);
            ctx.fillStyle = bg;
            ctx.fill();
            return canvas;
        };

        function canvasCorners(corners, r, bw, bc, bg) {
            var hh = $("<div style='display: inherit' />"); // trying out style='float:left' 
            $.each(corners.split(" "), function() {
                hh.append(canvasCorner(this[0] == "t", this[1] == "l", r, bw, bc, bg));
            });
            return hh;
        };

        function vmlCurve(r, b, c, m, ml, mt, right_fix) {
            var l = m - ml - right_fix;
            var t = m - mt;
            return "<v:arc filled='False' strokeweight='" + b + "px' strokecolor='" + c + "' startangle='0' endangle='361' style=' top:" + t + "px;left: " + l + "px;width:" + r + "px; height:" + r + "px' />";
        }


        function vmlCorners(corners, r, bw, bc, bg, w) {
            var h = "<div style='text-align:left; '>";
            $.each($.trim(corners).split(" "), function() {
                var css, ml = 1, mt = 1, right_fix = 0;
                if (this.charAt(0) == "t") {
                    css = "top:-" + bw + "px;";
                }
                else {
                    css = "bottom:-" + bw + "px;";
                    mt = r + 1;
                }
                if (this.charAt(1) == "l")
                    css += "left:-" + bw + "px;";
                else {
                    css += "right:-" + (bw) + "px; "; // odd width gives wrong margin?
                    ml = r;
                    right_fix = 1;
                }

                h += "<div style='" + css + "; position: absolute; overflow:hidden; width:" + r + "px; height: " + r + "px;'>";
                h += "<v:group  style='width:1000px;height:1000px;position:absolute;' coordsize='1000,1000' >";
                h += vmlCurve(r * 3, r + bw, bg, -r / 2, ml, mt, right_fix);
                if (bw > 0)
                    h += vmlCurve(r * 2 - bw, bw, bc, Math.floor(bw / 2 + 0.5), ml, mt, right_fix);
                h += "</v:group>";
                h += "</div>";
            });
            h += "</div>";

            return h;
        };

        var settings = {
            corners: "tl tr bl br",
            radius: 10,
            background: "white",
            borderWidth: 0,
            fixIE: true
        };
        $.extend(settings, options || {});

        var incrementProperty = function(elem, prop, x) {
            var y = parseInt(elem.css(prop), 10) || 0;
            elem.css(prop, x + y);
        };


        return this.each(function() {

            var $$ = $(this);
            var r = settings.radius * 1.0;
            var bw = (settings.borderWidth || parseInt($$.css("borderTopWidth"), 10) || 0) * 1.0;
            var bg = settings.background;
            var bc = settings.borderColor;
            bc = bc || (bw > 0 ? $$.css("borderTopColor") : bg);

            var cs = settings.corners;

            if ($.browser.msie) {//need to use innerHTML rather than jQuery
                h = vmlCorners(cs, r, bw, bc, bg, $(this).width());
                this.insertAdjacentHTML('beforeEnd', h);

            }
            else  //canvasCorners returns a DOM element
                $$.append(canvasCorners(cs, r, bw, bc, bg));


            if (this.style.position != "absolute")
                this.style.position = "relative";

            this.style.zoom = 1; // give it a layout in IE

            if ($.browser.msie && settings.fixIE) {
                var ow = $$.outerWidth();
                var oh = $$.outerHeight();

                if (ow % 2 == 1) {
                    incrementProperty($$, "padding-right", 1);
                    incrementProperty($$, "margin-right", 1);
                }

                if (oh % 2 == 1) {
                    incrementProperty($$, "padding-bottom", 1);
                    incrementProperty($$, "margin-bottom", 1);
                }
            }

        }

    );

    };
})(jQuery);


// My Scripts

$(document).ready(function() {

    $('#header ul li:last-child a').addClass('last');
    $('#footer ul li:last-child').addClass('last');
    $('#box-nav li a').cornerz({ radius: 10, corners: "tl", borderWidth: 0, background: "#113069" }).cornerz({ radius: 10, corners: "tr", borderWidth: 0, background: "#113069" });
    $('#header>ul>li>a').cornerz({ radius: 10, corners: "tl", borderWidth: 0, background: "#fff" }).cornerz({ radius: 10, corners: "tr", borderWidth: 0, background: "#fff" });

    //drop-down menus

    $("#header>ul>li").hover(function() {
        $(this).parent("ul").addClass("hover");
        $(this).addClass("hover");
        $(this).children("ul").animate({ opacity: "show" }, "fast");
        $(this).children('a').css('background-color', '#7aa602');
    },

	function() {
	    $(this).parent("ul").removeClass("hover");
	    $(this).removeClass("hover");
	    $(this).children("ul").hide();
	    $(this).children('a').css('background-color', '');
	});

    //disclaimer link
    $("a.external-link").click(function openLink(evt) {
        url = evt.target.href;

        if (url.toString().toLowerCase().indexOf(".gov") <= 0) {
            //"You are opening a non-NREPP website. Proceed?"
            var sMsg = "You are leaving the NREPP website. This external link provides additional information that is consistent with the intended purpose of federal site. SAMHSA cannot attest to the accuracy of a non-federal site. Linking to a non-federal site does not constitute an endorsement by SAMHSA or any of its employees of the sponsors or the information and products presented on the site. You will be subject to the destination site's privacy policy when you follow the link.";

            if (confirm(sMsg)) {
                window.open(url, 'newwin');
            }
        }
        else
        { window.open(url, 'newwin'); }

        return false;
    });
});

