﻿//Date.prototype.format = function(format) {        var returnStr = '';        var replace = Date.replaceChars;        for (var i = 0; i < format.length; i++) {               var curChar = format.charAt(i);                 if (i - 1 >= 0 && format.charAt(i - 1) == "\\") {                        returnStr += curChar;                }                else if (replace[curChar]) {                        returnStr += replace[curChar].call(this);                } else if (curChar != "\\"){                        returnStr += curChar;                }        }        return returnStr;};Date.replaceChars = {        shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],        longMonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],        shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],        longDays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],        d: function() { return (this.getDate() < 10 ? '0' : '') + this.getDate(); },        D: function() { return Date.replaceChars.shortDays[this.getDay()]; },        j: function() { return this.getDate(); },        l: function() { return Date.replaceChars.longDays[this.getDay()]; },        N: function() { return this.getDay() + 1; },        S: function() { return (this.getDate() % 10 == 1 && this.getDate() != 11 ? 'st' : (this.getDate() % 10 == 2 && this.getDate() != 12 ? 'nd' : (this.getDate() % 10 == 3 && this.getDate() != 13 ? 'rd' : 'th'))); },        w: function() { return this.getDay(); },        z: function() { var d = new Date(this.getFullYear(),0,1); return Math.ceil((this - d) / 86400000); },      W: function() { var d = new Date(this.getFullYear(), 0, 1); return Math.ceil((((this - d) / 86400000) + d.getDay() + 1) / 7); },           F: function() { return Date.replaceChars.longMonths[this.getMonth()]; },        m: function() { return (this.getMonth() < 9 ? '0' : '') + (this.getMonth() + 1); },        M: function() { return Date.replaceChars.shortMonths[this.getMonth()]; },        n: function() { return this.getMonth() + 1; },        t: function() { var d = new Date(); return new Date(d.getFullYear(), d.getMonth(), 0).getDate() },       L: function() { var year = this.getFullYear(); return (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)); },       o: function() { var d  = new Date(this.valueOf());  d.setDate(d.getDate() - ((this.getDay() + 6) % 7) + 3); return d.getFullYear();},     Y: function() { return this.getFullYear(); },        y: function() { return ('' + this.getFullYear()).substr(2); },        // Time        a: function() { return this.getHours() < 12 ? 'am' : 'pm'; },        A: function() { return this.getHours() < 12 ? 'AM' : 'PM'; },        B: function() { return Math.floor((((this.getUTCHours() + 1) % 24) + this.getUTCMinutes() / 60 + this.getUTCSeconds() / 3600) * 1000 / 24); }, // Fixed now        g: function() { return this.getHours() % 12 || 12; },        G: function() { return this.getHours(); },        h: function() { return ((this.getHours() % 12 || 12) < 10 ? '0' : '') + (this.getHours() % 12 || 12); },        H: function() { return (this.getHours() < 10 ? '0' : '') + this.getHours(); },        i: function() { return (this.getMinutes() < 10 ? '0' : '') + this.getMinutes(); },        s: function() { return (this.getSeconds() < 10 ? '0' : '') + this.getSeconds(); },        u: function() { var m = this.getMilliseconds(); return (m < 10 ? '00' : (m < 100 ?'0' : '')) + m; },        // Timezone        e: function() { return "Not Yet Supported"; },        I: function() { return "Not Yet Supported"; },        O: function() { return (-this.getTimezoneOffset() < 0 ? '-' : '+') + (Math.abs(this.getTimezoneOffset() / 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() / 60)) + '00'; },        P: function() { return (-this.getTimezoneOffset() < 0 ? '-' : '+') + (Math.abs(this.getTimezoneOffset() / 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() / 60)) + ':00'; }, // Fixed now        T: function() { var m = this.getMonth(); this.setMonth(0); var result = this.toTimeString().replace(/^.+ \(?([^\)]+)\)?$/, '$1'); this.setMonth(m); return result;},        Z: function() { return -this.getTimezoneOffset() * 60; },        // Full Date/Time        c: function() { return this.format("Y-m-d\\TH:i:sP"); }, // Fixed now        r: function() { return this.toString(); },        U: function() { return this.getTime() / 1000; }};
var autoUpdateRunning = false;
var next10Articles = null;
$(document).ready(function () {

    bindHashChange();
    $(window).trigger("hashchange");


    $('.artiklar-button').hide();

    var updateSliderBackground = function (event, ui) {
        setSliderBackground($(this), ui.value);
    }

    var updateContent = function (event, ui) {
        var runLoadArticles = true;
        var visit = $("#slider-visit").slider("value");
        if ((visit / 50) % 1 != 0) {
            var newValue = Math.round(visit / 50) * 50;
            visit = newValue;
            setSliderValue(newValue, "slider-visit");
            runLoadArticles = false;
        }

        var learning = $("#slider-education").slider("value");
        if ((learning / 50) % 1 != 0) {
            var newValue = Math.round(learning / 50) * 50;
            learning = newValue;
            setSliderValue(newValue, "slider-education");
            runLoadArticles = false;
        }

        var science = $("#slider-research").slider("value");
        if ((science / 50) % 1 != 0) {
            var newValue = Math.round(science / 50) * 50;
            science = newValue;
            setSliderValue(newValue, "slider-research");
            runLoadArticles = false;
        }

        var industry = $("#slider-business").slider("value");
        if ((industry / 50) % 1 != 0) {
            var newValue = Math.round(industry / 50) * 50;
            industry = newValue;
            setSliderValue(newValue, "slider-business");
            runLoadArticles = false;
        }

        if (runLoadArticles && !autoUpdateRunning)
            loadArticles(visit, learning, science, industry);
    }

    var sliders = new Array("visit", "education", "research", "business");
    for (var i = 0; i < sliders.length; i++) {
        var sliderid = "#slider-" + sliders[i];
        $(sliderid).slider({
            animate: 500,
            value: 50,
            slide: updateSliderBackground,
            change: updateContent
            //max: 2,
            //min: 0
            //values: [0, 1, 2]
        });
        setSliderBackground($(sliderid).slider(), 50);
    }

    var calendarParameters = {
        firstDay: 1,
        minDate: 0,
        showWeek: true,
        weekHeader: 'v',
        dateFormat: 'yy-mm-dd',
        altFormat: 'yy-mm-dd',

        onSelect: function (dateText, inst) {
            loadEvents(dateText);
        }
    };

    if (getLanguage() === "SE") {
        $.extend(calendarParameters, {
            dayNamesMin: ['Sö', 'Må', 'Ti', 'On', 'To', 'Fr', 'Lö'],
            dayNamesShort: ['Sön', 'Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör'],
            dayNames: ['Söndag', 'Måndag', 'Tisdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lördag'],
            monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
            monthNames: ['Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December'],
            nextText: 'Senare',
            prevText: 'Tidigare'
        });
    }

    $('#datepicker').datepicker(calendarParameters);

    $('.artiklar-button').click(function () {
        if (next10Articles.Articles.length > 0) {
            $("#searchResultTemplate").tmpl(next10Articles).find("div.box").hide().appendTo("#boxes-wrapper");
            var timer = 300;
            $("#boxes-wrapper div.box:hidden").each(function () {
                $(this).fadeIn(timer);
                timer += 450;
            });
        }
        if (next10Articles.Articles.length > 10) {
            $('.artiklar-button').show();
            next10Articles.Articles.splice(0, 12);
            next10Articles = next10Articles;
        } else {
            $('.artiklar-button').hide();
        }
    });

    /*
    var initValueVisit = 50;
    var initValueEducation = 50;
    var initValueResearch = 50;
    var initValueBusiness = 50;
    setSliderValue(initValueVisit, "slider-visit");
    setSliderValue(initValueEducation, "slider-education");
    setSliderValue(initValueResearch, "slider-research");
    setSliderValue(initValueBusiness, "slider-business");
    */
    //loadArticles(50, 50, 50, 50);
    //updateContent();    
    loadEvents("");


});

function setSliderBackground(element, value) {
    //value = value;
    element.parent().children(".color").css("width", (value + 20) + "px");
    element.parent().children(".background").css("width", (131 - value) + "px");
}

function setSliderValue(value, slider) {
    var sliderId = '#' + slider;
    $(sliderId).slider('value', value);
    setSliderBackground($(sliderId).slider(), value);
}

var isPageLoad = true;
function loadArticles(visit, learning, science, industry) {
    window.location.hash = "v:" + visit + "|" + "l:" + learning + "|" + "s:" + science + "|" + "i:" + industry;
    if ($.browser.msie && $.browser.version.substr(0, 1) < 8 && isPageLoad == true) {
        isPageLoad = false;
        $(window).trigger("hashchange");
    }
}


var searchTimer = null;
function performSearch(e) {
    clearTimeout(searchTimer);
    searchTimer = setTimeout("execPerformSearch()", 500);
}

function execPerformSearch() {
    var searchtext = $('#searchfield').val();
    if (searchtext.length > 0) {
        window.location.hash = "search=" + searchtext;
    }
}

function loadEvents(date) {
    var postdata = '';//'{ "date":"' + date + '", "language":"' + getLanguage() + '" }';

    $.ajax({
        async: false,
        type: "GET",
        url: wcfServiceUrl + "Service.svc/GetEvents?language=" + getLanguage() + "&date=" + date + "&callback=?",
        data: postdata,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        processdata: true,
        success: function (data) {
            $("#todayOnC").html('');
            $("#todayOnCTemplate").tmpl(data).appendTo("#todayOnC");
            $("#todayOnC li").hide();

            var timer = 300;
            $("#todayOnC li").each(function () {
                $(this).fadeIn(timer);
                timer += 450;
            });

            var d = new Date();
            var curr_date = d.getDate();
            var curr_month = getMonthString(d.getMonth());
            var curr_year = d.getFullYear().toString();
            var d1 = curr_year + "-" + curr_month + "-" + curr_date;

            if (date == "" || date == d1) {
                if (getLanguage() == "SE")
                    $("#todayOnCHeader").html("Idag på C");
                else
                    $("#todayOnCHeader").html("Today on C");
            } else {
                if (getLanguage() == "SE")
                    $("#todayOnCHeader").html("På C " + date);
                else
                    $("#todayOnCHeader").html("On C " + date);
            }

            if (data.length == 0) {
                if (getLanguage() == "SE")
                    $("#nomovies").html("Idag är Visualiseringscenter C stängt (måndagar) eller så är domprogrammet inte satt ännu, var god välj en annan dag eller återkom vid senare tillfälle.");
                else
                    $("#nomovies").html("Today Visualiseringscenter C is closed (mondays) or the schedule for the dome-theater hasn´t been decided yet. Please choose a different day or return at a later date.");
                $('#nomovies').css('display', 'block');
            } else {
                $('#nomovies').css('display', 'none');
            }
        },
        error: function (xhr, err) {
            //alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status + "\nresponseText: " + xhr.responseText);
            alertErrorMsg("An error occured, please try again later.");
        }
    });
}

function alertErrorMsg(msg) {
    $("#notification").html(msg);
    $("#notification").jmNotify({
        methodIn: "slideDown",
        methodOut: "slideUp",
        delay: 5000
    });
}

function showArticle(url, color) {
    $("#article").removeClass('purple').removeClass('blue').removeClass('green').removeClass('orange');
    var newClass = $("#article").attr('class');
    newClass += ' ' + color;
    $("#article").attr('class', newClass);
    url = url.replace(/ /g, '%20')
    var hash = window.location.hash.replace('#', '').replace(/ /g, '%20');
    if (hash == url)
        $(window).trigger("hashchange");
    else
        window.location.hash = url;
}

var addThisInitiated = false;
function bindHashChange() {
    $(window).bind("hashchange", function (e) {
       
        var hash = window.location.hash.replace('#', '');
        if (hash.length == 0) {
            loadArticles(50, 50, 50, 50);
        }
        if (hash.length > 0) {
            var hashArray = hash.split("|");
            if (hashArray.length == 4) {
                autoUpdateRunning = true;
                resetSearchText();
                closeArticle();

                $('.artiklar-button').hide(); //visa fler knappen

                var visit = Math.max(0, Math.min(100, parseInt(hashArray[0].substring(hashArray[0].indexOf(":") + 1))));
                var learning = Math.max(0, Math.min(100, parseInt(hashArray[1].substring(hashArray[1].indexOf(":") + 1))));
                var science = Math.max(0, Math.min(100, parseInt(hashArray[2].substring(hashArray[2].indexOf(":") + 1))));
                var industry = Math.max(0, Math.min(100, parseInt(hashArray[3].substring(hashArray[3].indexOf(":") + 1))));

                //alert(visit);     
                setSliderValue(visit, "slider-visit");
                setSliderValue(learning, "slider-education");
                setSliderValue(science, "slider-research");
                setSliderValue(industry, "slider-business");

                var postdata = ""; //'{ "visit":' + visit + ', "learning":' + learning + ', "science":' + science + ', "industry":' + industry + ', "language":"' + getLanguage() + '" }';
                $.ajax({
                    async: false,
                    type: "GET",
                    url: wcfServiceUrl + "Service.svc/GetArticles?visit=" + visit + "&learning=" + learning + "&science=" + science + "&industry=" + industry + "&language=" + getLanguage() + "&callback=?",
                    data: postdata,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    processdata: true,
                    success: function (data) {
                        $("#boxes-wrapper").html('');
                        var randomTemplateNumber = Math.floor(Math.random() * 4);
                        var templateId = "#listTemplate-" + randomTemplateNumber;

                        $(templateId).tmpl(data).appendTo("#boxes-wrapper");
                        $("#boxes-wrapper div.box").hide();
                        var timer = 300;
                        $("#boxes-wrapper div.box").each(function () {
                            $(this).fadeIn(timer);
                            timer += 450;
                        });

                        if (data.Articles.length > 9) {
                            $('#btn-more-articles').attr('value', data.MoreArticlesText);
                            $('#btn-more-articles').show();
                            data.Articles.splice(0, 10);
                            next10Articles = data;
                        }
                        loadTwitterAccount();
                    },
                    error: function (xhr, err) {
                        //alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status + "\nresponseText: " + xhr.responseText);
                        alertErrorMsg("An error occured, please try again later.");
                    }
                });
                autoUpdateRunning = false;
                pushGoogleAnalytics();
            } else if (hash.indexOf('search=') > -1) {
                var searchtext = hash.replace('search=', '');
                $('#searchfield').val(searchtext);
                autoUpdateRunning = true;
                resetSliders();
                closeArticle();
                $('#btn-more-articles').hide();

                $("#boxes-wrapper").html('');

                $("#article").html('');
                $("#loadingTemplate").tmpl().appendTo("#article");
                $('#article').fadeIn('fast', function () {
                    var postdata = ""; //'{ "text":"' + searchtext + '", "language":"' + getLanguage() + '" }';
                    $.ajax({
                        async: false,
                        type: "GET",
                        url: wcfServiceUrl + "Service.svc/Search?text=" + searchtext + "&language=" + getLanguage() + "&callback=?",
                        //data: postdata,
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        processdata: true,
                        success: function (data) {
                            $('#article').hide();
                            $("#boxes-wrapper").html('');
                            if (data.Articles.length > 0) {
                                $("#searchResultTemplate").tmpl(data).appendTo("#boxes-wrapper");
                            } else {
                                $("#noHits").tmpl(data).appendTo("#boxes-wrapper");
                            }

                            if (data.Articles.length > 11) {
                                $('.artiklar-button').show();
                                data.Articles.splice(0, 12);
                                next10Articles = data;
                            }
                        },
                        error: function (xhr, err) {
                            //alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status + "\nresponseText: " + xhr.responseText);
                            alertErrorMsg("An error occured, please try again later.");
                        }
                    });
                });
                autoUpdateRunning = false;
                pushGoogleAnalytics();
            } else {
                resetSearchText();
                $("#article").html('');
                $("#loadingTemplate").tmpl().appendTo("#article");
                $('#article').slideDown('slow', function () {
                    var postdata = ""; //'{ "url":"' + hash + '", "language":"' + getLanguage() + '" }';
                    $.ajax({
                        async: false,
                        type: "GET",
                        url: wcfServiceUrl + "Service.svc/GetArticleByUrl?url=" + hash + "&language=" + getLanguage() + "&callback=?",
                        data: postdata,
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        processdata: true,
                        success: function (data) {
                            if ($('#boxes-wrapper').children().length == 0)
                                $("#article").html('').removeClass('purple').removeClass('blue').removeClass('green').removeClass('orange').addClass(data.Color);

                            $("#article").html('');
                            $("#articleTemplate").tmpl(data).appendTo("#article");
                            if (data.ArticleImageUrl.length == 0 && data.Video.length == 0) {
                                var imagedivId = "#image-" + data.ArticleId;
                                $(imagedivId).css('display', 'none');
                            } else if (data.ArticleImageUrl.length == 0 && data.Video.length > 0) {
                                var imagedivId = "#image-" + data.ArticleId;
                                var trailerId = "#trailer-" + data.ArticleId;
                                $(imagedivId).css('display', 'none');
                                $(trailerId).css('display', 'block');
                            }

                            $.scrollTo(0, 300, function () {
                                onAfter: $("#article").slideDown('slow');
                            });

                            stButtons.makeButtons();
                            stWidget.init();

                            var fbLikeHtml = "<iframe src='http://www.facebook.com/plugins/like.php?app_id=147056572035129&amp;href=http%3A%2F%2Fwww.visualiseringscenter.se%23" + data.Url + "&amp;send=false&amp;layout=button_count&amp;width=450&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=lucida+grande&amp;height=21' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:21px;' allowTransparency='true'></iframe>";
                            $("#fblikeiframewrapper").html(fbLikeHtml);
                        },
                        error: function (xhr, err) {
                            //alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status + "\nresponseText: " + xhr.responseText);
                            alertErrorMsg("An error occured, please try again later.");
                        }
                    });
                });
                pushGoogleAnalytics();
            }
        }
    });
}

var tweets = null;
function loadTwitterAccount() {
    if (tweets == null) {
        if ($('#twitterlist').length > 0) {
            $.getJSON("http://twitter.com/statuses/user_timeline.json?screen_name=visualiseringc&trim_user=1&include_entities=1&callback=?", function (data) {
                $.each(data, function (i, item) {
                    $("#twitterlist").append("<div class='twitteritem'>" + linkify(item.text) + "<div class='date'>" + parseTwitterDate(item.created_at) + "</div></div>");
                });
                tweets = $("#twitterlist").html();
            });
        }
    } else {
        $("#twitterlist").append(tweets);
    }
}

function parseTwitterDate(text) {
    //running regex to grab everything after the time
    var newtext = text.replace(/(\d{1,2}[:]\d{2}[:]\d{2}) (.*)/, '$2 $1');
    //moving the time code to the end
    newtext = newtext.replace(/(\+\S+) (.*)/, '$2 $1');
    var date = new Date(Date.parse(newtext));
    var datestring = date.getFullYear() + "-" + getMonthString(date.getMonth()) + "-" + date.getDate() + " " + date.toLocaleTimeString().substr(0, 5);
    return datestring;
}

function showTrailer(articleId) {
    var imageId = "#image-" + articleId;
    var trailerId = "#trailer-" + articleId;

    $(imageId).fadeOut('slow', function () {
        $(trailerId).fadeIn('slow');        
    });
}

function hideTrailer(articleId) {

    var imageId = "#image-" + articleId;
    var trailerId = "#trailer-" + articleId;

    var trailerHtml = $(trailerId).html();
    $(trailerId).fadeOut('slow', function () {
        $(trailerId).html('');
        $(trailerId).html(trailerHtml);
        $(imageId).fadeIn('slow');
    });
}

function closeArticle() {
    $('#article').slideUp('slow', function () {
        $('#article').html('');
    });
    if($('#boxes-wrapper').children().length == 0)
        loadArticles(50, 50, 50, 50);
    //else
        //window.location.hash = "";
}

function getLanguage() {
    return $('#language').html();
}

function clearDefault(value) {
    var txt = $('#searchfield').val();
    if(txt == value)
        $('#searchfield').val('');
}

function setDefault(value, ignoreCurrent) {
    var txt = $('#searchfield').val();
    if (txt.length == 0) {
        $('#searchfield').val(value);
        loadArticles(50, 50, 50, 50);
    }
}

function resetSearchText() {
    $('#searchfield').val($('#defaultsearchtext').html());    
}

function getMonthString(month) {
    month = month + 1;
    if (month < 10)
        month = "0" + month;
    return month;
}

function linkify(inputText) {
    //URLs starting with http://, https://, or ftp://
    var replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
    var replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');

    //URLs starting with www. (without // before it, or it'd re-link the ones done above)
    var replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
    var replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');

    //Change email addresses to mailto:: links
    var replacePattern3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
    var replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>');

    return replacedText
}

function resetSliders(){
    setSliderValue(50, "slider-visit");
    setSliderValue(50, "slider-education");
    setSliderValue(50, "slider-research");
    setSliderValue(50, "slider-business");
}

function pushGoogleAnalytics() {
    try {
        _gaq.push(['_setAccount', 'UA-10362058-3']);
        _gaq.push(['_setAllowAnchor', true]);
        _gaq.push(['_trackPageview', document.location.toString()]);
    } catch (err) { }
}


