﻿/*  ------------------------------------------------------------------

MG common JS library. Used on every page. 
Must be placed as the last .js file in master page, so that OOB JS functions
can be overridden in this file if needed.

Dependencies:
- jQuery
- OOB core.js

------------------------------------------------------------------ */


/*
Override for OOB ProcessDefaultOnLoad in init.js.
Function call to ProcessImn causes "Name ActiveX control" issue in IE7,
so it is commented out.
*/
function ProcessDefaultOnLoad(onLoadFunctionNames) {
    ProcessPNGImages();
    UpdateAccessibilityUI();
    //ProcessImn();
    for (var i = 0; i < onLoadFunctionNames.length; i++) {
        var expr = "if(typeof(" + onLoadFunctionNames[i] + ")=='function'){" + onLoadFunctionNames[i] + "();}";
        eval(expr);
    }
    if (typeof (_spUseDefaultFocus) != "undefined")
        DefaultFocus();
}





/* Closes layers in case the iframed page is browsed by admin */
function CloseModal(obj) {
    obj.parent.tb_remove(); return false;
}




/*JQUERY PLUGINS*/


/*
* jNice
* version: 1.0 (11.26.08)
* by Sean Mooney (sean@whitespace-creative.com) 
* Examples at: http://www.whitespace-creative.com/jquery/jnice/
* Dual licensed under the MIT and GPL licenses:
*   http://www.opensource.org/licenses/mit-license.php
*   http://www.gnu.org/licenses/gpl.html
*
* To Use: place in the head 
*  <link href="inc/style/jNice.css" rel="stylesheet" type="text/css" />
*  <script type="text/javascript" src="inc/js/jquery.jNice.js"></script>
*
* And apply the jNice class to the form you want to style
*
* To Do: Add textareas, Add File upload
*
******************************************** */
(function($) {
    $.fn.jNice = function(options) {
        var self = this;
        var safari = $.browser.safari; /* We need to check for safari to fix the input:text problem */
        /* Apply document listener */
        $(document).mousedown(checkExternalClick);
        /* each form */
        return this.each(function() {

            $('input:text:visible, input:password', this).each(TextAdd);
            $('textarea', this).each(TextAreaAdd);
            /* If this is safari we need to add an extra class */
            if (safari) { $('.jNiceInputWrapper').each(function() { $(this).addClass('jNiceSafari').find('input').css('width', $(this).width() + 11); }); }
            $('input:checkbox', this).each(CheckAdd);
            $('input:radio', this).each(RadioAdd);
            $('select', this).each(function(index) { SelectAdd(this, index); });
            /* Add a new handler for the reset action */
            $(this).bind('reset', function() { var action = function() { Reset(this); }; window.setTimeout(action, 10); });
            $('.jNiceHidden').css({ opacity: 0 });
        });
    }; /* End the Plugin */

    var Reset = function(form) {
        var sel;
        $('.jNiceSelectWrapper select', form).each(function() { sel = (this.selectedIndex < 0) ? 0 : this.selectedIndex; $('ul', $(this).parent()).each(function() { $('a:eq(' + sel + ')', this).click(); }); });
        $('a.jNiceCheckbox, a.jNiceRadio', form).removeClass('jNiceChecked');
        $('input:checkbox, input:radio', form).each(function() { if (this.checked) { $('a', $(this).parent()).addClass('jNiceChecked'); } });
    };

    var RadioAdd = function() {
        var $input = $(this).addClass('jNiceHidden').wrap('<span class="jRadioWrapper jNiceWrapper"></span>')
        var $wrapper = $input.parent();
        var $a = $('<span class="jNiceRadio"></span>');
        $wrapper.prepend($a);
        /* Click Handler */
        $a.click(function() {
            var $input = $(this).addClass('jNiceChecked').siblings('input').attr('checked', true);

            /* uncheck all others of same name */
            $('input:radio[name="' + $input.attr('name') + '"]').not($input).each(function() {
                $(this).attr('checked', false).siblings('.jNiceRadio').removeClass('jNiceChecked');
            });

            if (window.opera)
                document.body.style += ""; // Force Opera redraw.
        })

        $input.click(function() {
            if (this.checked) {
                var $input = $(this).siblings('.jNiceRadio').addClass('jNiceChecked').end();
                /* uncheck all others of same name */
                $('input:radio[name="' + $input.attr('name') + '"]').not($input).each(function() {
                    $(this).attr('checked', false).siblings('.jNiceRadio').removeClass('jNiceChecked');
                });

            }
        }).focus(function() { $a.addClass('jNiceFocus'); }).blur(function() { $a.removeClass('jNiceFocus'); });

        /* set the default state */
        if (this.checked) { $a.addClass('jNiceChecked'); }
    };

    var CheckAdd = function() {
        var $input = $(this).addClass('jNiceHidden').wrap('<span class="jNiceWrapper"></span>');
        var $wrapper = $input.parent().append('<span class="jNiceCheckbox"></span>');
        var $chkboxParentSpan = $wrapper.parent();
        /* Click Handler */
        var $a = $wrapper.find('.jNiceCheckbox').click(function() {
            var $a = $(this);
            var input = $a.siblings('input')[0];
            if (input.checked === true) {
                input.checked = false;
                $a.removeClass('jNiceChecked');
            }
            else {
                input.checked = true;
                $a.addClass('jNiceChecked');
            }

            return false;
        });
        $input.click(function() {
            if (this.checked) { $a.addClass('jNiceChecked'); }
            else { $a.removeClass('jNiceChecked'); }
        }).focus(function() { $a.addClass('jNiceFocus'); }).blur(function() { $a.removeClass('jNiceFocus'); });

        /* set the default state */
        if (this.checked) { $('.jNiceCheckbox', $wrapper).addClass('jNiceChecked'); }
    };

    var TextAdd = function() {
        var $input = $(this).addClass('jNiceInput').wrap('<div class="jNiceInputWrapper"><div class="jNiceInputInner"></div></div>');
        var $wrapper = $input.parents('.jNiceInputWrapper');
        $input.focus(function() {
            $wrapper.addClass('jNiceInputWrapper_hover');
        }).blur(function() {
            $wrapper.removeClass('jNiceInputWrapper_hover');
        });
    };

    var TextAreaAdd = function() {
        var $textarea = $(this).addClass('jNiceTextArea').wrap('<div class="jNiceTextAreaWrapper"><div class="jNiceTextAreaInner"></div></div>');
        $(this).parents('.jNiceTextAreaWrapper').css({ width: $(this).attr("cols") * 10.5 + 'px' });

        var $wrapper = $textarea.parents('.jNiceTextAreaWrapper').children(".jNiceTextAreaInner").before("<div class='jNiceTextAreaTop'>&nbsp;</div>").after("<div class='jNiceTextAreaBottom'>&nbsp;</div>");
        var $wrapper = $textarea.parents('.jNiceTextAreaWrapper');
        $textarea.focus(function() {
            $wrapper.addClass('jNiceTextAreaWrapper_hover');
        }).blur(function() {
            $wrapper.removeClass('jNiceTextAreaWrapper_hover');
        });
    };

    var ButtonAdd = function() {
        var value = $(this).attr('value');
        $(this).replaceWith('<button id="' + this.id + '" name="' + this.name + '" type="' + this.type + '" class="' + this.className + '" value="' + value + '"><span><span>' + value + '</span></span>');
    };

    /* Hide all open selects */
    var SelectHide = function() {
        $('.jNiceSelectWrapper ul:visible').hide();
    };

    /* Check for an external click */
    var checkExternalClick = function(event) {
        if ($(event.target).parents('.jNiceSelectWrapper').length === 0) { SelectHide(); }
    };

    var SelectAdd = function(element, index) {
        var $select = $(element);
        index = index || $select.css('zIndex') * 1;
        index = (index) ? index : 0;
        /* First thing we do is Wrap it */
        $select.wrap($('<div class="jNiceWrapper"></div>').css({ zIndex: 100 - index }));


        var width = ($select.width() !== 0) ? $select.width() + 10 : parseInt($select.css("width").split('px')[0]) + 10;


        $select.addClass('jNiceHidden').addClass('hide').after('<div class="jNiceSelectWrapper"><div><span class="jNiceSelectText"></span><span class="jNiceSelectOpen"></span></div><ul></ul></div>');



        var $wrapper = $(element).siblings('.jNiceSelectWrapper').css({ width: width + 'px' });

        var openerWidth = ($('.jNiceSelectOpen', $wrapper).width() !== 0) ? $('.jNiceSelectOpen', $wrapper).width() : 21;


        $('.jNiceSelectText, .jNiceSelectWrapper ul', $wrapper).width(width - openerWidth);
        $($wrapper).parent(".jNiceWrapper").width(width + 5); ;

        /* IF IE 6 */
        if ($.browser.msie && jQuery.browser.version < 7) {
            $select.after($('<iframe src="javascript:\'\';" class="bgiframe"  marginwidth="0" marginheight="0" align="bottom" scrolling="no" tabIndex="-1" frameborder="0"  ></iframe>').css({ height: $select.height() + 4 + 'px', width: $select.width() + 4 + 'px' }));
        }
        /* Now we add the options */
        SelectUpdate(element);
        /* Apply the click handler to the Open */
        $('div', $wrapper).click(function() {
            var $ul = $(this).siblings('ul');
            if ($ul.css('display') == 'none') { SelectHide(); } /* Check if box is already open to still allow toggle, but close all other selects */
            $ul.show();
            var offSet = ($('a.selected', $ul).offset().top - $ul.offset().top);
            $ul.animate({ scrollTop: offSet });
            return false;
        });
        /* Add the key listener */
        $select.keydown(function(e) {
            var selectedIndex = this.selectedIndex;
            switch (e.keyCode) {
                case 40: /* Down */
                    if (selectedIndex < this.options.length - 1) { selectedIndex += 1; }
                    break;
                case 38: /* Up */
                    if (selectedIndex > 0) { selectedIndex -= 1; }
                    break;
                default:
                    return;
                    break;
            }
            $('ul a', $wrapper).removeClass('selected').eq(selectedIndex).addClass('selected');
            $('span:eq(0)', $wrapper).html($('option:eq(' + selectedIndex + ')', $select).attr('selected', 'selected').text());
            return false;
        }).focus(function() { $wrapper.addClass('jNiceFocus'); }).blur(function() { $wrapper.removeClass('jNiceFocus'); });
    };

    var SelectUpdate = function(element) {

        var $select = $(element);
        var $wrapper = $select.siblings('.jNiceSelectWrapper');
        var $ul = $wrapper.find('ul').find('li').remove().end().hide();
        $('option', $select).each(function(i) {
            $ul.append('<li><a href="#" index="' + i + '">' + this.text + '</a></li>');
        });
        /* Add click handler to the a */
        $ul.find('a').click(function() {
            $('a.selected', $wrapper).removeClass('selected');
            $(this).addClass('selected');
            /* Fire the onchange event */

            if ($select[0].selectedIndex != $(this).attr('index') && $select[0].onchange) {


                $select[0].selectedIndex = $(this).attr('index');

                document.all ? $select.get(0).fireEvent("onchange") : $select.change();

            }
            $select[0].selectedIndex = $(this).attr('index');

            $('span:eq(0)', $wrapper).html($(this).html());
            $ul.hide();
            return false;
        });
        /* Set the defalut */
        $('a:eq(' + $select[0].selectedIndex + ')', $ul).click();
    };

    var SelectRemove = function(element) {
        var zIndex = $(element).siblings('.jNiceSelectWrapper').css('zIndex');
        $(element).css({ zIndex: zIndex }).removeClass('jNiceHidden');
        $(element).siblings('.jNiceSelectWrapper').remove();
    };

    /* Utilities */
    $.jNice = {
        SelectAdd: function(element, index) { SelectAdd(element, index); },
        SelectRemove: function(element) { SelectRemove(element); },
        SelectUpdate: function(element) { SelectUpdate(element); }
    }; /* End Utilities */

    /* Automatically apply to any forms with class jNice */
    $(function() { if ($("#MSOLayout_InDesignMode").attr("value") != 1) $('.jNice').jNice(); });
})(jQuery);


/* Detect legacy browses */
if (!Array.prototype.push || !document.getElementById) {

}
else {


    var MG = {};
    /* Check if DOM has finished loading */
    $(function() {



        MG.ui = {
            printLayout: function() {

                $("a.print").click(function() {
                    //$("head").find("link[@media=print]").attr("media", "all");
                    $("link[@rel*=style][title]").each(function() {
                        this.disabled = true;
                        if (this.title == "print_preview" || this.title == "main") {
                            this.disabled = false;
                        }
                    });
                    $("body").prepend("<p class='printPreview'>" + translations['UIContent_PrintMessage_Title'] + "</p><p class='printPreview'><a href='#' id='returnToNormal'>" + translations['UIContent_PrintMessage_Close'] + "</a></p>")
                    $(".mainCol").append("<p class='dynCopy'>&copy; 2010 Mets&auml;verkko</p>")
                    $(".MGfooter").hide();
                    $("a#returnToNormal").click(function() {
                        $("link[@rel*=style][title]").each(function() {
                            if (this.title == "print_preview") {
                                this.disabled = true;
                            }
                        });
                        $(".printPreview").remove();
                        $(".dynCopy").remove();
                        $(".MGfooter").show();
                    });
                    window.print();
                });

            },
            initContentHighlights: function() {

                /* ------------------------------------------------------------------
					Hide ContentHiglightText and show it with mouseover
					------------------------------------------------------------------ */
                // options
                var distance = 10;
                var time = 250;
                var hideDelay = 1000;

                var hideDelayTimer = null;

                // tracker
                var beingShown = false;
                var shown = false;
                var shownEl = null;
                var timeOuts = {};

                if ($('.MGContentHighLight').parent("#listItem").length > 0) {
                    return false;
                }

                $('.MGContentHighLight').each(function(i) {
                    if ($(this).hasClass('static')) {
                        return false;
                    }
                    $(this).parent(".group").height($(this).height());
                    var descriptionHeight = $(this).find(".contentHighlightDescription").height();
                    $(this).attr("id", "MGContentHighLight" + i);

                    $(this).find(".contentHighlightDescription").height(descriptionHeight).css({ display: "none", visibility: "visible" });

                    // set the mouseover and mouseout

                    $(this).hover(

                    function() { //MOUSEOVER
                        $(this).addClass("contentHiglightHover");
                        if (timeOuts[$(this).attr("id")]) { //if re-hovering same element
                            clearTimeout(timeOuts[$(this).attr("id")]);
                            delete (timeOuts[$(this).attr("id")]);
                            return;

                        } else { // element is different from shown element

                            $(this).children("dd").children(".contentHighlightDescription").css({
                                display: "block",
                                height: "0"
                            }).animate({
                                height: descriptionHeight
                            }, 1500);

                            shownEl = $(this);
                        }


                    }, function(e) { //MOUSEOUT

                        $(this).removeClass("shown");
                        $(this).removeClass("contentHiglightHover");
                        var targetEl = $(this);

                        timeOuts[$(this).attr("id")] = setTimeout(function() {

                            $(targetEl).children("dd").children(".contentHighlightDescription").animate({
                                height: "0"
                            }, 1500, function() {
                                shownEl = null;
                                $(targetEl).children("dd").children(".contentHighlightDescription").css('display', 'none');

                            });



                            delete (timeOuts[$(targetEl).attr("id")]);

                        }, hideDelay);


                    }

                ); //.hover END

                });

            },
            initEqualHeightColumns: function() {
                //$("ELEMENT").equalHeights();
            },
            init: function() {

                /* ------------------------------------------------------------------

					Initialize all MG.ui functions

					------------------------------------------------------------------ */
                MG.ui.initContentHighlights();
                MG.ui.initEqualHeightColumns();
                MG.ui.printLayout();
            }

        }

        MG.ui.init();


    });

}

jQuery.fn.equalHeights = function() {
    var maxHeight = 0;
    this.each(function() {
        if (this.offsetHeight > maxHeight) { maxHeight = this.offsetHeight; }
    });
    this.each(function() {
        $(this).height(maxHeight + "px");
        if (this.offsetHeight > maxHeight) {
            $(this).height((maxHeight - (this.offsetHeight - maxHeight)) + "px");
        }
    });
};


