﻿/*  ------------------------------------------------------------------

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();
}


document.write('<style type="text/css"> .MGReferenceThumbnail{display:none;} .gridReferencesMain .referenceNavigator .col2 .webPartContent .linkList li{padding-left:0;} <\/style>');

function googleMaps() {

    window.setTimeout(function() {
        $(".mapArea div[@dir]").each(function(i) {

            if ($(this)[0].isPending == undefined) {

                if ($(this).parents("div.gridReferenceDetail").length > 0) {
                    $(this).parents("div.webPartContent").css("margin-top", "40px").end().addClass("MGGoogleMap");
                }
                else { $(this).addClass("MGGoogleMap"); }
            }
        });
    }, 2000);


}
/* Closes layers in case the iframed page is browsed by admin */
function CloseModal(obj) {
    obj.parent.tb_remove(); return false;
}

/* Cookie method */
//Set_Cookie( 'mycookie', 'visited 9 times', 30, true, '/', '', '' );.
// If parameter isDay is set to TRUE then parameter expires is count of days
// If parameter isDay is set to FALSE then parameter expires is count of seconds
function Set_Cookie(name, value, expires, isDay, path, domain, secure) {
    var today = new Date();
    var expires_date;
    if (isDay) {
        today.setDate(today.getDate() + (expires));
        expires_date = today;
    }
    else {
        // set time, it's in milliseconds
        today.setTime(today.getTime());
        expires = expires * 1000;
        expires_date = new Date(today.getTime() + (expires));
    }

    document.cookie = name + "=" + escape(value) +
        ((expires) ? ";expires=" + expires_date.toGMTString() : "") +
        ((path) ? ";path=" + path : "") +
        ((domain) ? ";domain=" + domain : "") +
        ((secure) ? ";secure" : "");
}

function Get_Cookie(check_name) {
    // note: document.cookie only returns name=value, not the other components
    var a_all_cookies = document.cookie.split(';');
    var a_temp_cookie = '';
    var cookie_name = '';
    var cookie_value = '';
    var b_cookie_found = false; // set boolean t/f default f

    for (i = 0; i < a_all_cookies.length; i++) {
        // now we'll split apart each name=value pair
        a_temp_cookie = a_all_cookies[i].split('=');


        // and trim left/right whitespace while we're at it
        cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

        // if the extracted name matches passed check_name
        if (cookie_name == check_name) {
            b_cookie_found = true;
            // we need to handle case where cookie has no value but exists (no = sign, that is):
            if (a_temp_cookie.length > 1) {
                cookie_value = unescape(a_temp_cookie[1].replace(/^\s+|\s+$/g, ''));
            }
            // note that in cases where cookie is initialized but no value, null is returned
            return cookie_value;
            break;
        }
        a_temp_cookie = null;
        cookie_name = '';
    }
    if (!b_cookie_found) {
        return null;
    }
}


/* Open Survey Frame and OpenLater */
function surveyClose() {
    var surveyUrl = document.getElementById('SurveyUrlParam');
    // cookie will expire after 60 days
    Set_Cookie('SurveyClosed', surveyUrl.value, 60, true, '/', '', '');
}

function surveyLater() {
    var surveyTimeout = document.getElementById('SurveyRemindTimeParam');
    var surveyUrl = document.getElementById('SurveyUrlParam');
    if (surveyTimeout != null) {
        Set_Cookie('SurveyRemindMeLater', surveyUrl.value, surveyTimeout.value, false, '/', '', '');
        setTimeout('openSurvey()', (30 * 1000));    // check cookie each 30 seconds
    }
}

function openSurvey() {
    var surveyTimeout = document.getElementById('SurveyOpenTimeParam');
    var surveyUrl = document.getElementById('SurveyUrlParam');

    // check if survey is enabled
    if ((surveyTimeout != null) && (surveyTimeout.value != "") && (surveyTimeout.value > 0)) {
        var cookieSurveyClosed = Get_Cookie('SurveyClosed');
        var cookieSurveyOpened = Get_Cookie('SurveyOpened');
        var cookieSurveyRemindMeLater = Get_Cookie('SurveyRemindMeLater');
        var today = new Date();

        if ((cookieSurveyClosed == null) || (cookieSurveyClosed != surveyUrl.value)) {
            if (cookieSurveyOpened == null) {
                Set_Cookie('SurveyOpened', today, '', true, '/', '', '');
                setTimeout('openSurvey()', (30 * 1000));    // check cookie each 30 seconds
            }
            else {
                var id_TB_window = document.getElementById('TB_window');
                today = new Date(today.getTime() - (surveyTimeout.value * 1000));
                cookieSurveyOpened = new Date(cookieSurveyOpened);
                // check if pop-up is not already opened
                if ((id_TB_window == null) && (cookieSurveyOpened <= today) && (cookieSurveyRemindMeLater == null)) {
                    tb_show(null, '/_layouts/TEDI/SurveyForm.aspx?height=514px&width=100%&placeValuesBeforeTB_=savedValues&TB_iframe=true&height=600&width=700&modal=true', null);
                    id_TB_window = document.getElementById('TB_window');
                    id_TB_window.style.position = "absolute";
                    id_TB_window.style.marginTop = "0px";
                    id_TB_window.style.top = "50px";
                }
                else {
                    setTimeout('openSurvey()', (30 * 1000));    // check cookie each 30 seconds
                }
            }
        }
    }
}


/*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 = {
            stribedTables: function() {
                $('.MGTable tr:odd, .MGReferenceDetails  tr:odd').addClass('even');
            },
            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; 2009 Finnforest</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();
                });

            },

            initReferenceThumbnails: function() {
                $('.MGReferenceThumbnail').hide();
                // these 2 variable determine popup's distance from the cursor

                xOffset = 10;
                yOffset = 30;

                $("a.preview").hover(function(e) {
                    if ($(this).siblings("a").children("img").attr("src") != null) {
                        $("body").append("<p id='preview'><img src='" + $(this).siblings("a").children("img").attr("src") + "' alt='Image preview' /></p>");
                        $("#preview")
	                    .css("top", (e.pageY - xOffset) + "px")
	                    .css("left", (e.pageX + yOffset) + "px")
	                    .fadeIn("fast");
                    }
                },
	        function() {

	            $("#preview").remove();
	        });
                $("a.preview").mousemove(function(e) {
                    $("#preview").css("top", (e.pageY - xOffset) + "px").css("left", (e.pageX + yOffset) + "px");
                });

            },

            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) {
                    $(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

                });


            },
            browseProductsLink: function() {
                // Without js support, users are directed to the products front page, otherwise they will get a modal popup with the browse products page.
                if (document.getElementById("productsPopup")) {
                    var url = $('#productsPopup').attr('href').toString();
                    var urlSplit = url.split("?");
                    var params = urlSplit[1];
                    var newUrl = "/Pages/BrowseSpecial.aspx?" + params;
                    $("#productsPopup").attr('href', newUrl);
                }
            },
            initEqualHeightColumns: function() {
                $(".referenceNavigator .col1 .webPartContent, .referenceNavigator .col2 .webPartContent").equalHeights();
                $(".ProductsSiteMap .webPartContent").equalHeights();
                $(".referenceNavigator .col1 .webPartTitle, .referenceNavigator .col2 .webPartTitle").equalHeights();
            },
            licenceChk: function() {

                $("#chkPostBackAuto input").click(function() {
                    if ($(this).parent().parent().attr('id') === 'chkPostBackAuto') {

                        //                        alert('test');
                        if ($("#chkPostBackAuto input").attr('checked') == false) {
                            $("a.buttonDisableable").attr("disabled", "disabled");
                        }

                        WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions($("#chkPostBackAuto input").attr("id"), '', true, '', '', false, true));
                    }
                    return false;
                });

                $("#chkPostBackAuto .jNiceWrapper .jNiceCheckbox").click(function() {

                    if ($(this).parent().parent().attr('id') === 'chkPostBackAuto') {

                        if ($("#chkPostBackAuto input").attr('checked') == false) {
                            $("a.buttonDisableable").attr("disabled", "disabled");
                            //                            alert($("a.buttonDisableable").attr("disabled"));
                        }

                        WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions($("#chkPostBackAuto input").attr("id"), '', true, '', '', false, true));
                    }
                    return false;
                });
            },

            resizeIframes: function() {
                var height = $("iframe").parent().parent(".webPart").height();
                $("iframe").attr("height", height);
            },

            init: function() {

                /* ------------------------------------------------------------------

					Initialize all MG.ui functions

					------------------------------------------------------------------ */

                MG.ui.initContentHighlights();
                MG.ui.stribedTables();
                MG.ui.browseProductsLink();
                MG.ui.initEqualHeightColumns();
                MG.ui.initReferenceThumbnails();
                MG.ui.printLayout();
                MG.ui.licenceChk();
                MG.ui.resizeIframes();



            }

        }

        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");
        }
    });
};

/*
Function to open the site front page flash "cards".
*/
function linkOut(id) {
    theUrl = "/_layouts/tedi/ReferenceCard.aspx?cardID=" + id + "&modal=true&height=260&width=415&TB_iframe=true";
    tb_show("ReferenceCard",theUrl,"");
}
