﻿jQuery(document).ready(function($) {
    initSubNav();
    setPrintOnClick();
    initTranslateMenu();
    initLogin();

    if ($("meta[name='language']").attr('content') == 'SV') {
        $.timeago.settings.language = 'sv';
    }
    $('.date:not(.noconvert)').timeago();
});


var initSubNav = function() {
    jQuery('#second-nav div>ul>li:first-child').addClass('first');
    jQuery('#second-nav div>ul>li:last-child').addClass('last');
    jQuery('#second-nav div>ul>li:last-child li:last').addClass('last');
    jQuery('#second-nav div>ul>li:last-child ul li:last-child').addClass('last');
}

var setPrintOnClick = function() {

    //Add an onClick handler to the button with id printpagelink
    jQuery("#printpagelink").click(function() {

        var docroot = document.location.protocol + '//' + document.location.host;
        var $contentElement = jQuery("#maincontent:first");  //get the first element matching id "maincontent"

        if ($contentElement) {
            //open a new window and write the content of #main-body to it. These declarations are HTML5 compliant, content might not be.
            var contentWindow = window.open('print.htm', 'printable', 'width=600,height=700');
            contentWindow.document.open("text/html");
            contentWindow.document.write("<!DOCTYPE HTML>\n<HTML><HEAD><meta charset=\"UTF-8\"><TITLE>" + document.title + "</TITLE>");
            contentWindow.document.writeln("<link rel=\"stylesheet\" type=\"text/css\" href=\"" + docroot + "/Templates/Sodracommon/Styles/css/hh-style.css\" />");
            contentWindow.document.writeln("<link rel=\"stylesheet\" type=\"text/css\" href=\"" + docroot + "/Templates/Sodracommon/Styles/css/sodra-framework.css\" />");
            contentWindow.document.writeln("<link rel=\"stylesheet\" type=\"text/css\" href=\"" + docroot + "/Templates/Sodracommon/Styles/css/printstyle.css" + "\" />");
            contentWindow.document.writeln("</HEAD>");
            contentWindow.document.writeln("<BODY>");
            contentWindow.document.writeln($contentElement.html());
            contentWindow.document.writeln("</BODY></HTML>");
            contentWindow.document.close();
            contentWindow.print();
        }

        return false;
    });

}

/* FIND FLASH CONTENT AND HIDE ID. FIX FOR Z-INDEX ISSUE WITH FLASH IN BROWSER
-----------------------------------------------------------------------*/
var toggleFlash = function() {
    var flasObjekt = jQuery('.flash');
    if (flasObjekt.length < 1) return;
    //if flash exists on page
    for (var i = 0; i < jQuery(flasObjekt).length; ++i) {
        if (jQuery(flasObjekt[i]).css('visibility') == 'visible') {
            jQuery(flasObjekt[i]).css({ 'visibility': 'hidden' });
        } else {
            jQuery(flasObjekt[i]).css({ 'visibility': 'visible' });
        }
    }
}

/* GOOGLE TRANSLATE MENU
----------------------------------------------------------------------*/
var initTranslateMenu = function() {

    //Get Translate menu and show it
    var translateWrapper = jQuery('.translate');
    if (jQuery(translateWrapper).length < 1) return;
    jQuery(translateWrapper).css({ 'display': 'block' });

    //Open up translate menu
    var translate = jQuery('.gettranslatemenu');
    jQuery(translate).click(function() {
        toggleFlash();
        jQuery('.lang').parent().parent().slideDown("fast");
    });

    // get clicked language
    var selectedLanguage = '';
    var langItem = jQuery('a[name=lang]').click(function(e) {
        e.preventDefault();
        jQuery(this).blur();
        selectedLanguage = jQuery(this);
    });

    // language menu items
    jQuery('.lang').click(function() {
        toggleFlash();
        jQuery('.lang').parent().parent().slideUp("fast", function() {
            // call google translate function and pass through clicked language
            initTranslate(selectedLanguage);
        });
    });

    // close button
    jQuery('.close').click(function() {
        toggleFlash();
        jQuery('.lang').parent().parent().slideUp("fast");
    });
}
/* GOOGLE TRANSLATE CONTENT
----------------------------------------------------------------------*/
var initTranslate = function(lang) {
    // show disclaimer only if it is not yet added
    if (jQuery('.error').length < 1) jQuery('#maincontent').prepend('<div class="error">Denna sida är översatt med Google translate. Fel kan förekomma.</div>');
    // get laguage code from clicked link
    var language = lang.parent().attr('rel');
    // translate content
    jQuery('#maincontent').translate(language, {
        start: function() {
            jQuery('.translate .visible .gettranslatemenu').after('<img src="/Templates/Newsroom/Styles/gfx/loading.gif" class="loading" alt="" />');
        },
        complete: function() {
            jQuery('.translate .visible img').remove();
        }
    });
    //translate disclaimer
    jQuery('.error').translate(language);
}

function parseXml(xml) {
    if (jQuery.browser.msie) {
        var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.loadXML(xml);
        xml = xmlDoc;
    }
    return xml;
}

/* LOAD MORE NEWS "PAGINATION"
----------------------------------------------------------------------*/
var initLoadMoreNews = function() {
    jQuery('a[name=morenews]').click(function(e) {
        //Cancel the link behavior
        e.preventDefault();
        //jQuery('a[name=morenews]').attr('href', '#more');

        jQuery(".morenews").before('<div class="morenewsitems"></div>');
        // add loading spinner
        jQuery(".morenews").after('<img src="/Templates/Newsroom/Styles/gfx/loading-more-news-transparent.gif" class="loading" alt="" />');

        //get all .morenewsitems
        var moreItemsArray = jQuery(".morenewsitems");


        var currentNewsflow = jQuery('.mediatypes').find('.selected').children().attr('class');

        var offset = jQuery('#newsflow').find('.newsitem').length;

        jQuery.ajax({
            type: 'POST',
            url: '/Templates/Newsroom/Services/News.asmx/GetNewsListingItems',
            cache: false,
            data: "{'offset':'" + offset + "','media':'" + currentNewsflow + "','language':'sv'}",
            contentType: "application/json; charset=utf-8",
            dataType: 'html',
            error: function(jqXHR, textStatus, errorThrown) {
                alert("Ooops! Something went wrong when retrieving more news items." + this.error);
            },
            complete: function() {
                // remove loading spinner
                jQuery("#newsflow img.loading").remove();
            },
            success: function(xml) {
                if (xml.length > 0) {
                    jQuery(moreItemsArray[moreItemsArray.length - 1]).append(jQuery(xml));
                    // apply effect only on the last created class, .morenewsitems
                    jQuery(moreItemsArray[moreItemsArray.length - 1]).css('display', 'none').fadeIn();
                    // if shortcut nav exist
                    if (jQuery('#newslistshortcut').length > 0) {
                        // remove it
                        jQuery('#newslistshortcut').remove();
                    }
                    // then add it to its new location
                    jQuery(moreItemsArray[moreItemsArray.length - 1]).before('<ul id="newslistshortcut"><li class="pagedown"><a name="pagedown" href="#" title="Go to bottom of page"><span>Bottom</span></a></li><li class="pageup"><a name="pageup" href="#" title="Go to top of page"><span>Top</span></a></li></ul>');
                    jQuery('#newslistshortcut').css('display', 'none').fadeIn('slow');
                    // scroll to top
                    jQuery('a[name=pageup]').click(function(e) {
                        //Cancel the link behavior
                        e.preventDefault();
                        jQuery('html,body').animate({ scrollTop: 0 }, 500);
                    });
                    // scroll to bottom
                    jQuery('a[name=pagedown]').click(function(e) {
                        //Cancel the link behavior
                        e.preventDefault();
                        jQuery('html,body').animate({ scrollTop: jQuery(document).height() }, 500);
                    });
                    //Twitter.init();
                }
                else { Console.Log('No data was received'); jQuery('a.morenews').hide(); }
            }
        });
    });
}

var Console = function() {
    return {
        Log: function(msg, args) { if (typeof console == 'undefined') return false; if (!args) args = ''; console.log(msg, args) },
        Info: function(msg, args) { if (typeof console == 'undefined') return false; if (!args) args = ''; console.info(msg, args) },
        Warn: function(msg, args) { if (typeof console == 'undefined') return false; if (!args) args = ''; console.warn(msg, args) },
        Error: function(msg, args) { if (typeof console == 'undefined') return false; if (!args) args = ''; console.error(msg, args) }
    }
} ();

/* Additional plugins */


/*
* timeago: a jQuery plugin, version: 0.9.2 (2010-09-14)
* @requires jQuery v1.2.3 or later
*
* Timeago is a jQuery plugin that makes it easy to support automatically
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
*
* For usage and examples, visit:
* http://timeago.yarp.com/
*
* Licensed under the MIT:
* http://www.opensource.org/licenses/mit-license.php
*
* Copyright (c) 2008-2010, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org)
*
* Modified by Wezz Balk, Hallvarson & Halvarsson (2011)
*/

(function($) {
    $.timeago = function(timestamp) {
        if (timestamp instanceof Date) return inWords(timestamp);
        else if (typeof timestamp == "string") return inWords($.timeago.parse(timestamp));
        else return inWords($.timeago.datetime(timestamp));
    };
    var $t = $.timeago;

    $.extend($.timeago,
	{
	    settings:
		{
		    refreshMillis: 60000,
		    allowFuture: true,
		    language: 'en',
		    distanceLimit: 172800000, // Two days
		    strings: {
		        en: {
		            prefixAgo: null,
		            prefixFromNow: null,
		            suffixAgo: "ago",
		            suffixFromNow: "from now",
		            seconds: "less than a minute",
		            minute: "about a minute",
		            minutes: "%d minutes",
		            hour: "about an hour",
		            hours: "about %d hours",
		            day: "a day",
		            days: "%d days",
		            month: "about a month",
		            months: "%d months",
		            year: "about a year",
		            years: "%d years",
		            monthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
		            numbers: []
		        },
		        sv: {
		            prefixAgo: null,
		            prefixFromNow: null,
		            suffixAgo: "sedan",
		            suffixFromNow: "om",
		            seconds: "mindre än en minut",
		            minute: "ca en minut",
		            minutes: "%d minuter",
		            hour: "en timme",
		            hours: "för %d timmar",
		            day: "en dag",
		            days: "%d dagar",
		            month: "för en månad",
		            months: "%d månader",
		            year: "ett år",
		            years: "%d år",
		            monthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
		            numbers: []
		        }
		    }
		},
	    inWords: function(distanceMillis, date) {

	        var $l = this.settings.strings.en;
	        if (this.settings.language != 'en') {
	            if (this.settings.language == 'sv') {
	                $l = this.settings.strings.sv;
	            }
	        }
	        var distanceLimit = this.settings.distanceLimit;
	        var prefix = $l.prefixAgo;
	        var suffix = $l.suffixAgo;

	        if (this.settings.allowFuture) {
	            if (distanceMillis < 0) {
	                prefix = $l.prefixFromNow;
	                suffix = $l.suffixFromNow;
	            }
	            distanceMillis = Math.abs(distanceMillis);
	        }

	        if ((distanceLimit && distanceLimit > 0) && (distanceMillis < distanceLimit)) {

	            var seconds = distanceMillis / 1000;
	            var minutes = seconds / 60;
	            var hours = minutes / 60;
	            var days = hours / 24;
	            var years = days / 365;

	            function substitute(stringOrFunction, number) {
	                var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
	                var value = ($l.numbers && $l.numbers[number]) || number;
	                return string.replace(/%d/i, value);
	            }

	            var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
				seconds < 90 && substitute($l.minute, 1) ||
				minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
				minutes < 90 && substitute($l.hour, 1) ||
				hours < 24 && substitute($l.hours, Math.round(hours)) ||
				hours < 48 && substitute($l.day, 1) ||
				days < 30 && substitute($l.days, Math.floor(days)) ||
				days < 60 && substitute($l.month, 1) ||
				days < 365 && substitute($l.months, Math.floor(days / 30)) ||
				years < 2 && substitute($l.year, 1) ||
				substitute($l.years, Math.floor(years));

	            return $.trim([prefix, words, suffix].join(" "));
	        }
	        else {
	            return date.getDate() + ' ' + ($l.monthNames[date.getMonth()]) + ' ' + date.getFullYear();
	        }
	    },
	    parse: function(iso8601) {
	        var s = $.trim(iso8601);
	        s = s.replace(/\.\d\d\d+/, ""); // remove milliseconds
	        s = s.replace(/-/, "/").replace(/-/, "/");
	        s = s.replace(/T/, " ").replace(/Z/, " UTC");
	        s = s.replace(/([\+-]\d\d)\:?(\d\d)/, " $1$2"); // -04:00 -> -0400
	        return new Date(s);
	    },
	    datetime: function(elem) {
	        // jQuery's `is()` doesn't play well with HTML5 in IE

	        var isTime = $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
	        var isSpan = $(elem).get(0).tagName.toLowerCase() === "span";
	        var isDiv = $(elem).get(0).tagName.toLowerCase() === "div";
	        var iso8601 = isTime ? $(elem).attr("datetime") : $(elem).attr("title");
	        iso8601 = ((!iso8601 && isSpan) || (!iso8601 && isDiv)) ? $(elem).text() : '';
	        if ($(elem).children().length > 1) {
	            iso8601 = '';
	        }
	        return $t.parse(iso8601);
	    }
	});

    $.fn.timeago = function() {

        var self = this;
        self.each(refresh);
        var $s = $t.settings;
        if ($s.refreshMillis > 0) { setInterval(function() { self.each(refresh); }, $s.refreshMillis); }
        return self;
    };

    function refresh() {

        var data = prepareData(this);
        if (!isNaN(data.datetime)) { $(this).text(inWords(data.datetime)); }
        return this;
    }

    function prepareData(element) {
        element = $(element);
        if (!element.data("timeago")) {

            element.data("timeago", { datetime: $t.datetime(element) });
            var text = $.trim(element.text());
            if (text.length > 0) { element.attr("title", text); }
        }
        return element.data("timeago");
    }
    function inWords(date) { return $t.inWords(distance(date), date); }
    function distance(date) { return (new Date().getTime() - date.getTime()); }

    // fix for IE6 suckage
    document.createElement("abbr");
    document.createElement("time");
})(jQuery);

var initLogin = function() {

    jQuery("a[target=_login]").click(function(ev) {

        //Stop click event
        ev.preventDefault();

        //Popup content
        var content = (this).href;
        var maxw = 750;
        var maxh = 600;

        w = jQuery(window).width();
        h = jQuery(window).height();

        var middleH = (w) / 2;
        var middleV = (h) / 2;
        var endleft = (w - maxw) / 2;
        var endtop = ((h - maxh) / 2);
        if (endtop < 0) {
            endtop = 0;
        }

        if (endleft < 0) {
            endleft = 0;
        }

        //Popup window
        var el = jQuery("<div id='modal-window'>");
        el.css({ width: maxw + 'px',
            //height: (parseInt(maxh) + 20) + 'px',
            position: 'absolute',
            background: 'url("/templates/sodracommon/styles/images/popup/popup-bg-left-top.png") top left no-repeat Transparent',
            left: endleft + "px",
            top: endtop + "px",
            'z-index': 102
        });

        //Overlay background
        var bg = jQuery("<div id='overlay'>");
        bg.css({
            position: 'fixed',
            top: '0',
            right: '0',
            bottom: '0',
            left: '0',
            height: '100%',
            width: '100%',
            margin: '0',
            padding: '0',
            background: '#131313',
            opacity: '.90',
            filter: 'alpha(opacity=65)',
            'z-index': '101'
        });

        //Right corner
        var rc = jQuery("<div id='right-corner'>");
        rc.css({
            height: '10px',
            background: 'url("/templates/sodracommon/styles/images/popup/popup-bg-right-top.png") top right no-repeat Transparent',
            margin: '0px 0px 0px 10px'
        });
        el.append(rc);

        //Left bottom corner
        var lcb = jQuery("<div id='left-corner-b'>");
        lcb.css({
            height: '10px',
            background: 'url("/templates/sodracommon/styles/images/popup/popup-bg-left-bottom.png") top left no-repeat Transparent',
            padding: '0px 0px 0px 0px'
        });

        //right bottom corner
        var rcb = jQuery("<div id='left-corner-b'>");
        rcb.css({
            height: '10px',
            background: 'url("/templates/sodracommon/styles/images/popup/popup-bg-right-bottom.png") top right no-repeat Transparent',
            padding: '0px 0px 0px 0px',
            margin: '0px 0px 0px 10px'
        });

        lcb.append(rcb);

        //Close button
        var cl = jQuery("<img id='closer' src='/Templates/SodraCommon/Styles/gfx/popup-layer-close.png' />");
        cl.css({
            width: '20px',
            height: '20px',
            position: 'absolute',
            top: '10px',
            right: '10px',
            cursor: 'pointer',
            'z-index': '100000'
        });


        el.append(cl);

        //Add objects to html body
        jQuery("form").append(el);
        jQuery("body").append(bg);

        //Close overlay
        cl.click(function() {
            jQuery(el).fadeOut(500, function() {
                el.empty();
                el.remove();
            });
            bg.remove();
        });

        var div = jQuery("<div>");
        div.css({
            width: maxw,
            background: '#ffffff'
        });

        el.append(div);

        var loadImg = jQuery("<img id='closer' src='/Templates/SodraCommon/Styles/gfx/loading.gif' />");
        loadImg.css({
            margin: '100px 0px 0px 375px'
        });

        div.append(loadImg);

        jQuery(div).load(content + ' #login-wrapper', function() {

            jQuery('#SubmitFormLinkIsa').bind('click', function(ev) {

                var type = jQuery("#logintype").val();
                var url = jQuery("#isaurl").val();
                var form1 = jQuery("<form>");
                form1.attr("action", url);
                form1.attr("method", "post");
                form1.append(jQuery("#curl"));
                form1.append(jQuery("#flags"));
                form1.append(jQuery("#forcedownlevel"));
                form1.append(jQuery("#formdir"));

                var uName = jQuery("<input type='hidden' name='username' />");
                uName.attr("value", jQuery("#username").val());
                form1.append(uName);

                var uPassword = jQuery("<input type='password' name='password' />");
                uPassword.attr("value", jQuery("#userpassword").val());
                uPassword.attr("style", "display:none;");
                form1.append(uPassword);

                jQuery("body").append(form1);
                form1.submit();

            });

            jQuery('#SubmitFormLinkPrenum').bind('click', function(ev) {
                SendLoginForm();
            });

            jQuery('.pwd').keypress(function(ev) {
                if (ev.which == 13) {
                    ev.preventDefault();
                    SendLoginForm();
                }
            });

            jQuery('#userpassword').keypress(function(ev) {
                if (ev.which == 13) {
                    ev.preventDefault();
                    var url = jQuery("#isaurl").val();
                    var form1 = jQuery("<form>");
                    form1.attr("action", url);
                    form1.attr("method", "post");
                    form1.append(jQuery("#curl"));
                    form1.append(jQuery("#flags"));
                    form1.append(jQuery("#forcedownlevel"));
                    form1.append(jQuery("#formdir"));

                    var uName = jQuery("<input type='hidden' name='username' />");
                    uName.attr("value", jQuery("#username").val());
                    form1.append(uName);

                    var uPassword = jQuery("<input type='password' name='password' />");
                    uPassword.attr("value", jQuery("#userpassword").val());
                    uPassword.attr("style", "display:none;");
                    form1.append(uPassword);

                    jQuery("body").append(form1);
                    form1.submit();
                }
            });

        });

        el.append(lcb);

        var SendLoginForm = function() {
            var n = jQuery(".uname").val();
            var p = jQuery(".pwd").val();
            var re = /^med-/i;

            if (n != null && n.length > 3 && re.test(n)) {
                jQuery(el).fadeOut(500, function() {
                    el.empty();
                    el.remove();
                    bg.remove();
                    openHtmlElementLayer(400, 400, content, "#extraInfo");
                });


            }
            else {
                $.post("/Templates/SodraCommon/Services/UserService.ashx", { uname: n, pwd: p }, function(data) {
                    if (data.valid == "True") {
                        window.location = data.url;
                    }
                    else {
                        jQuery("#error").html(data.error);
                    }

                }, "json").error(function(d) {
                    jQuery("#error").html("Could not connect to server.");
                });
            }
        }
    });
}


