
/*global window */
/*global self */
/*global alert */

var siteMap = '';

// Adds navigation -------------------------------------------------------------

function rpToolbox_addNavigation(){
    var header = rpToolbox_createElementWithId('div', 'header');
    var headerContent = rpToolbox_createElementWithId('div', 'headercontent');
    var breadcrumbnavigationPosition = rpToolbox_createElementWithId('div', 'breadcrumbnavigation');
    headerContent.appendChild(breadcrumbnavigationPosition);
    header.appendChild(headerContent);
    document.body.appendChild(header);
    
    //var commentlinkcontainer = rpToolbox_createElementWithId('span', 'commentlinkcontainer');
    //var commentlinkposition2 = document.createElement("span");
    //commentlinkposition2.className = 'rpcomments';
    //commentlinkcontainer.appendChild(commentlinkposition2);
    //document.body.appendChild(commentlinkcontainer);

    var sitemapLink = rpToolbox_createLink('http://www.slojd.nu/sajtkarta/', 'Sajtkarta');
    sitemapLink.id = 'sitemaplink2'
    header.appendChild(sitemapLink);
    
    var anchorlinksposition = rpToolbox_createElementWithId('span', 'rp_anchorlinksposition');
    document.body.appendChild(anchorlinksposition);
    
    var sideBar = document.getElementById("sidebar1");
    if(!sideBar) {
        sideBar = rpToolbox_createElementWithId('span', 'sidebar1');
        sideBar.className = 'sidebar';
        document.body.appendChild(sideBar);
    }
    var locallinksPosition = document.getElementById("rp_locallinksposition");
    if(!locallinksPosition) {
        locallinksPosition = rpToolbox_createElementWithId('div', 'rp_locallinksposition');
        sideBar.appendChild(locallinksPosition);
    }
}

// Add breadcrumbnavigation ----------------------------------------------------

function rpToolbox_buildBreadcrumbNavigation2(sitemap){
    var breadCrumbNavigation = rpToolbox_createElementWithId("ul", "breadcrumbnavigation");
    breadCrumbNavigation.innerHTML = sitemap;
    breadCrumbNavigation.getElementsByTagName("a")[0].className = 'indexpagelink';
    var indexnodes = breadCrumbNavigation.getElementsByTagName("UL");
    for (var m = 1; m < indexnodes.length; m++) {
        indexnodes[m].parentNode.getElementsByTagName("a")[0].className = 'indexpagelink';
    }
    var listItems = breadCrumbNavigation.lastChild.getElementsByTagName("UL")[0].getElementsByTagName("LI");
    var link;
    for (var i = 1; i < pathParts.length; i++) {
        for (var n = 0; n < listItems.length; n++) {
            link = listItems[n].getElementsByTagName("a")[0];
            //if(link.getAttribute('href').removeTrailingSlash().endsWith(pathParts[i])){
            if(link.getAttribute('href').removeTrailingSlash().endsWith('/' + pathParts[i])) {
                breadCrumbNavigation.appendChild(listItems[n].cloneNode(true));
            }
        }
    }
    breadCrumbNavigation.firstChild.id = 'firstcrumb';
    if(breadCrumbNavigation.lastChild.id === 'firstcrumb') {
        breadCrumbNavigation.lastChild.id = 'onlycrumb';
    }
    else {
        breadCrumbNavigation.lastChild.id = 'lastcrumb';
    }
    rpToolbox_addBreadCrumbNavigation(breadCrumbNavigation);
}

// Add list with local links ---------------------------------------------------

function rpToolbox_initLocalLinks(content){
    var localLinksContainer = document.createElement("div");
    localLinksContainer.className = 'sidebaritem';
    var list = document.createElement("ul");
    list.innerHTML = content;
    localLinksContainer.appendChild(list);
    rpToolbox_addLocalLinks(localLinksContainer);
    rpToolbox_markCurrentPageLink('sidebar1');
    var currentPageLink = document.getElementById("selected");
    if(currentPageLink) {
        if(currentPageLink.parentNode.getElementsByTagName("ul")[0]) {
            currentPageLink.parentNode.getElementsByTagName("ul")[0].setAttribute('id', 'show');
            currentPageLink.parentNode.parentNode.parentNode.getElementsByTagName("ul")[0].setAttribute('id', 'show');
        }
        else {
            currentPageLink.parentNode.parentNode.setAttribute('id', 'show');
            currentPageLink.parentNode.parentNode.parentNode.parentNode.setAttribute('id', 'show');
        }
    }
    rpToolbox_positionFixedOnlyIfFitsHeight(15, 'sidebar1');
}

// Adds functionality to a link ------------------------------------------------

function rpToolbox_enhanceLink(link, openInNewWindow){
    if(link.href.endsWith('pdf')) {
        link.className += ' pdf';
        link.title += ' PDF-fil';
        link.className += ' externallink';
    }
    if(link.href.endsWith('rss')) {
        link.className += ' rss';
    }
    if(!link.className.contains('externallink')) {
        if(link.href.indexOf('slojd.nu') === -1 && link.href.indexOf('http') !== -1 && link.href.indexOf(window.document.location.host) === -1) {
            link.className += ' externallink';
        }
    }
    if(link.className.contains('externallink')) {
        if(openInNewWindow) {
            link.target = '_blank';
            link.title += ' (Öppnas i nytt fönster)';
        }
        if(link.firstChild && link.firstChild.nodeValue) {
            link.className += ' externallinkicon';
        }
    }
}

// Adds functionality to links -------------------------------------------------

var rpToolbox_linksEnhanced = false;
function rpToolbox_enhanceLinks2(container){
    var links;
    if(!container) {
        links = document.links;
    }
    else {
        links = container.getElementsByTagName("a");
    }
    for (var i = 0; i < links.length; i++) {
        rpToolbox_enhanceLink(links[i], true);
    }
    rpToolbox_linksEnhanced = true;
}

// Appends list with anchor links ----------------------------------------------

function rpToolbox_appendAnchorLinks(anchorLinksList, contentContainer){
    if(!anchorLinksList) {
        anchorLinksList = document.getElementById('anchorlinkslist');
    }
    var itemCount = 0;
    if(anchorLinksList) {
        //	var elements = rpToolbox_removeEmptyNodes(contentContainer).getElementsByTagName("*"); // BUG: Tar bort mellanrum mellan ord!
        var elements = contentContainer.getElementsByTagName("*");
        var nodeValue = '';
        var previousNodeValue = '';
        var listItem = document.createElement("li");
        for (var i = 1; i < elements.length; i++) {
            if((elements[i].tagName.toLowerCase() === 'th' || elements[i].tagName.toLowerCase().startsWith('h')) && elements[i].id) {
                itemCount++;
                listItem = document.createElement("li");
                if(elements[i].firstChild.firstChild) { // if the text is in the H tag
                    nodeValue = elements[i].firstChild.firstChild.nodeValue;
                }
                else { // if the text is in the H tags child, fx a A
                    nodeValue = elements[i].firstChild.nodeValue;
                }
            }
            else 
            if(elements[i].tagName.toLowerCase() === 'div' && elements[i].id && elements[i].firstChild && elements[i].firstChild.tagName && elements[i].firstChild.tagName.toLowerCase().startsWith('h')) {
                itemCount++;
                listItem = document.createElement('li');
                nodeValue = elements[i].firstChild.firstChild.nodeValue;
            }
            if(nodeValue && previousNodeValue !== nodeValue) {// Weed out double hits.
                listItem.appendChild(rpToolbox_createLink('#' + elements[i].id, nodeValue, '', 'rpToolbox_scrolloffset(20,100)'));
                anchorLinksList.appendChild(listItem);
            }
            previousNodeValue = nodeValue;
        }
    }
    return itemCount;
}

// Add list with anchor links --------------------------------------------------

function rpToolbox_addAnchorLinks2(contentContainerID, headline){
    var contentContainer;
    if(!contentContainerID) {
        contentContainer = document.getElementById('maincontent');
    }
    else {
        contentContainer = document.getElementById(contentContainerID);
    }
    if(contentContainer) {
        var anchorlinks = document.getElementById('anchorlinks');
        if(anchorlinks) {
            anchorlinks.parentNode.removeChild(anchorlinks);
        }
        var anchorLinksList = rpToolbox_createElementWithId('ul', 'anchorlinkslist');
        var itemCount = rpToolbox_appendAnchorLinks(anchorLinksList, contentContainer);
        if(!document.getElementById("presentationbar") && itemCount > 3) {
            anchorlinks = rpToolbox_createElementWithId('div', 'anchorlinks');
            if(!headline) {
                headline = 'On This Page';
            }
            var headlineNode = document.createElement('h4');
            headlineNode.appendChild(rpToolbox_createLink('#', headline, '', 'rpToolbox_scrolloffset(0)'));
            anchorlinks.appendChild(headlineNode);
            anchorlinks.appendChild(anchorLinksList);
            var positionNode = document.getElementById('rp_anchorlinksposition');
            positionNode.parentNode.replaceChild(anchorlinks, positionNode);
            var mainContent = window.document.getElementById('maincontent');
            var anchorlinksWidth = 15 + (rpToolbox_getStyle(anchorlinks, 'width').replace(/px/, '') - 0);
            mainContent.style.marginRight = anchorlinksWidth + "px";
            
        }
    }
    rpToolbox_positionFixedOnlyIfFitsHeight(-15, 'anchorlinks');
}

// Ugly hack to make things full height in all browsers ------------------------

function rpToolbox_fullHeight(){
    if(document.getElementById('fullheight')) {
        document.getElementById('fullheight').height = (rpToolbox_getWinHeight() - 130);
    }
}

function rpToolbox_initFullHeightHack(){
    if(document.getElementById('fullheight')) {
        rpToolbox_fullHeight();
        window.onresize = rpToolbox_fullHeight;
    }
}

// Makes image links open in new window ----------------------------------------

function rpToolbox_imageLinksToNewWindow(containerID){
    var container = null;
    if(containerID) {
        container = document.getElementById(containerID);
    }
    var links;
    if(!container) {
        links = document.links;
    }
    else {
        links = container.getElementsByTagName("a");
    }
    for (var i = 0; i < links.length; i++) {
        if(links[i].getElementsByTagName("img").length > 0) {
            links[i].target = '_blank';
            links[i].title += ' (Extern länk, öppnas i nytt fönster)';
        }
    }
}

// Loads sitemap ---------------------------------------------------------------

function rpToolbox_loadSitemap(){
    var sitemapLinkPosition = rpToolbox_getLinkByRel('contents');
    if(sitemapLinkPosition) {
        siteMap = rpToolbox_getSitemapFromServer_xmlHttpRequest(sitemapLinkPosition.href);
        siteMap = siteMap.removeEmptyNodes().replace(/[\s\S]*?<ul id="sitemap">([\s\S]*?)<\/ul><\/div>[\s\S]*?/g, '$1');
    }
}

// Twitter START ///////////////////////////////////////////////////////////////

var storedTweets = null;
var storedTweetsURL = null;
var twitterDone = false;
var hideTwitterTimeStamps = false;

function relative_time(time_value){
    var values = time_value.split(" ");
    time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
    var parsed_date = Date.parse(time_value);
    var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
    var delta = parseInt((relative_to.getTime() - parsed_date) / 1000, 10);
    delta = delta + (relative_to.getTimezoneOffset() * 60);
    if(delta < 60) {
        return 'Mindre än en minut sedan ';
    }
    else 
    if(delta < 120) {
        return 'En minut sedan ';
    }
    else
    if(delta < (60 * 60)) {
        return (parseInt(delta / 60, 10)).toString() + ' minuter sedan ';
    }
    else
    if(delta < (120 * 60)) {
        return 'En timme sedan ';
    }
    else
    if(delta < (24 * 60 * 60)) {
        return (parseInt(delta / 3600, 10)).toString() + ' timmar sedan ';
    }
    else
    if(delta < (48 * 60 * 60)) {
        return 'En dag sedan ';
    }
    else {
        return (parseInt(delta / 86400, 10)).toString() + ' dagar sedan ';
    }
}

function parseTweets(tweets){
    var statusHTML = [];
    for (var i = 0; i < tweets.length; i++) {
        var username = tweets[i].user.screen_name;
        var status = tweets[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s<\>]*[^.,;'">\:\s<\>\)\]\!])/g, function(url){
            return ' <a href="' + url + '"> ' + url + ' </a> ';
        }).replace(/\B@([_a-z0-9]+)/ig, function(reply){
            return reply.charAt(0) + ' <a href="http://twitter.com/' + reply.substring(1) + '"> ' + reply.substring(1) + ' </a> ';
        });
        statusHTML.push('<li>');
        if(!hideTwitterTimeStamps) {
            statusHTML.push('<a class="twittertimelink" href="http://twitter.com/' + username + '/statuses/' + tweets[i].id + '">' + relative_time(tweets[i].created_at) + '</a>');
        }
        statusHTML.push(status + '</li>');
    }
    return statusHTML.join('');
}

function initTwitter(tweetsURL, hideTimeStamps){
    if(!twitterDone) {
        storedTweetsURL = tweetsURL || storedTweetsURL;
        hideTwitterTimeStamps = hideTimeStamps;
        if(!storedTweets && storedTweetsURL) {
            rpToolbox_addJS(storedTweetsURL);
        }
        else 
        if(storedTweets) {
            twitterCallbackSlojd(storedTweets);
        }
    }
}

function twitterCallbackSlojd(incomingTweets){
    storedTweets = incomingTweets || storedTweets;
    var position = document.getElementById('twitter_update_list');
    if(position) {
        position.innerHTML = parseTweets(storedTweets);
        twitterDone = true;
        rpToolbox_enhanceLinks2(position);
        rpToolbox_setOddEvenClasses(position);
    }
    else {
        rpToolbox_addOnLoad(initTwitter);
    }
}

// Twitter END /////////////////////////////////////////////////////////////////

// Flickr START ////////////////////////////////////////////////////////////////

var storedFlickrJson = null;
var storedFlickrURL = null;
var flickrCount = null;

function parseFlickrJson(flickrJson){
    var content = [];
    var item = null;
    var count = flickrCount || flickrJson.items.length;
    for (var i = 0; i < count; i++) {
        item = flickrJson.items[i];
        content.push('<a href="' + item.link + '"  title="' + item.title + '"><img src="' + item.media.m + '" alt="' + item.title + '"></a>');
    }
    content = '<div id="flickrbadge"><h4><a title="bilder" class="rss" href="' + storedFlickrURL + '&amp;format=rss_200">&nbsp;</a><a href="' + item.link.removeTrailingSlash().removePathEnd() + '" class="flickrlink"><strong style="color: #3993ff">flick<span style="color: #ff1c92">r</span></strong></a></h4><span class="flickrimages">' + content.join('').replace(/_m.jpg/g, '_s.jpg') + '</span><div style="clear:both;"></div></div>';
    return content;
    
}

function initFlickr(flickrURL, count){
    flickrCount = count;
    storedFlickrURL = flickrURL || storedFlickrURL;
    if(!storedFlickrJson && storedFlickrURL) {
        rpToolbox_addJS(storedFlickrURL + '&format=json');
    }
    else 
    if(storedFlickrJson) {
        jsonFlickrFeed(storedFlickrJson);
    }
}

function jsonFlickrFeed(incomingFlickrJson){
    storedFlickrJson = incomingFlickrJson || storedFlickrJson;
    var position = document.getElementById('flickrbadgeposition');
    if(position) {
        position.innerHTML = parseFlickrJson(storedFlickrJson);
    }
    else {
        rpToolbox_addOnLoad(initFlickr);
    }
}

// Flickr END //////////////////////////////////////////////////////////////////

// Google calendar START ///////////////////////////////////////////////////////

function initGoogleCalendar(url, maxResults){
    maxResults = maxResults ? '&max-results=' + maxResults : '';
    var today = new Date();
    var startDate = today.getFullYear() + '-';
    startDate += (today.getMonth() + 1 < 10) ? '0' + (today.getMonth() + 1) : today.getMonth() + 1;
    startDate += '-';
    startDate += (today.getDate() < 10) ? '0' + (today.getDate()) : today.getDate();
    startDate = '&start-min=' + startDate;
    rpToolbox_addJS(url + "?alt=json-in-script&callback=insertGoogleCalendarEvents&singleevents=true&orderby=starttime&sortorder=a" + maxResults + startDate);
}

function insertGoogleCalendarEvents(root){
    var positionNode = document.getElementById("googlecalendarcontent");
    if(positionNode) {
        var feed = root.feed;
        var entries = feed.entry || [];
        var list = [];
        for (var i = 0; i < entries.length; ++i) {
            var entry = entries[i];
            var title = entry.title.$t;
            var start = (entry['gd$when']) ? entry['gd$when'][0].startTime : "";
            var date = start.substr(0, 10);
            var time = start.substr(11, 5);
            //var day = date.substr(8, 2);
            //var month = date.substr(5, 2);
            //var year = date.substr(0, 4);
            list.push('<li><span class="gcal_date"> ', date, ' </span> <span class="gcal_time"> ', time, ' </span> - <span class="gcal_title"> ', title, ' </span></li>');
        }
        positionNode.innerHTML = list.join("");
        rpToolbox_setOddEvenClasses(positionNode);
    }
}

// Google calendar END /////////////////////////////////////////////////////////

// Bloggerbadge START //////////////////////////////////////////////////////////

var hideBloggerBadgeTimeStamps = false;
function initBloggerBadge(url, maxResults, hideTimeStamps){
    hideBloggerBadgeTimeStamps = hideTimeStamps;
    maxResults = maxResults ? '&max-results=' + maxResults : '';
    rpToolbox_addJS(url + "?orderby=published&alt=json-in-script&callback=insertBloggerbadgeContent" + maxResults);
}

function insertBloggerbadgeContent(root){
    var positionNode = document.getElementById("bloggerbadgelist");
    if(positionNode) {
        var feed = root.feed;
        var entries = feed.entry || [];
        var list = [];
        var entry;
        var title;
        var posturl;
        var postdate;
        for (var i = 0; i < entries.length; ++i) {
            entry = entries[i];
            title = entry.title.$t;
            postdate = entry.published.$t.substring(0, 10);
            for (var l = 0; l < entry.link.length; l++) {
                if(entry.link[l].rel === 'alternate') {
                    posturl = entry.link[l].href;
                    break;
                }
            }
            list.push('<li>');
            
            if(!hideBloggerBadgeTimeStamps) {
                list.push('<span class="date"> ', postdate, ' </span> ');
            }
            list.push('<a href="' + posturl + '">', title, '</a></li>');
        }
        positionNode.innerHTML = list.join("");
        rpToolbox_markCurrentPageLink('bloggerbadgelist');
        rpToolbox_setOddEvenClasses(positionNode);
    }
}

// Bloggerbadge END ////////////////////////////////////////////////////////////

// Bloggercommentsbadge START //////////////////////////////////////////////////

var hideBloggerCommentsBadgeTimeStamps = false;
function initBloggerCommentsBadge(url, maxResults, hideTimeStamps){
    hideBloggerBadgeTimeStamps = hideTimeStamps;
    maxResults = maxResults ? '&max-results=' + maxResults : '';
    rpToolbox_addJS(url + "?orderby=published&alt=json-in-script&callback=insertBloggerCommentsbadgeContent" + maxResults);
}

function insertBloggerCommentsbadgeContent(root){
    var positionNode = document.getElementById("bloggercommentsbadgelist");
    if(positionNode) {
        var feed = root.feed;
        var entries = feed.entry || [];
        var list = [];
        var entry;
        var title;
        var posturl;
        var postdate;
        for (var i = 0; i < entries.length; ++i) {
            entry = entries[i];
            title = entry.title.$t;
            postdate = entry.published.$t.substring(0, 10);
            for (var l = 0; l < entry.link.length; l++) {
                if(entry.link[l].rel === 'alternate') {
                    posturl = entry.link[l].href;
                    break;
                }
            }
            list.push('<li>');
            
            if(!hideBloggerBadgeTimeStamps) {
                list.push('<span class="date"> ', postdate, ' </span> ');
            }
            list.push('<a href="' + posturl + '">', title, '</a></li>');
        }
        positionNode.innerHTML = list.join("");
        rpToolbox_setOddEvenClasses(positionNode);
    }
}

// Bloggerbadge END ////////////////////////////////////////////////////////////

// Blogger START ///////////////////////////////////////////////////////////////

function fixBlogger(){
    window.jstiming = null;
    rpToolbox_imageLinksToNewWindow('maincontent');
//var scripts = window.document.getElementsByTagName('script');	
//scripts[scripts.length -1].innerHTML = 'test';
//scripts[scripts.length -2].src = '';
//alert(scripts[scripts.length -1].innerHTML);
}

// Blogger END /////////////////////////////////////////////////////////////////

// -- Init visitor counter -----------------------------------------------------

var sc_project;
var sc_invisible;
var sc_partition;
var sc_click_stat;
var sc_security;
var sc_text;

function initVisitorCounter(){
    sc_project = 5213694;
    sc_invisible = 1;
    sc_partition = 59;
    sc_click_stat = 1;
    sc_security = "cd7486c3";
    sc_text = 3;
    rpToolbox_addJS('http://www.statcounter.com/counter/counter_xhtml.js');
}

// Runs after content is inserted ----------------------------------------------

function rpToolbox_replaceCallback(){
    rpToolbox_setOddEvenClasses(document.getElementById("maincontent"));
}

// == Init =====================================================================

function runsAfterPageLoad_slojd(){
    initTwitter(); //inits twitter again, just incase it has timed out before.
    rpToolbox_setOddEvenClasses(document.getElementById("maincontent")); // extra run to take care of cs includes
}

function runsAtPageLoad_slojd(){
    window.setTimeout("runsAfterPageLoad_slojd()", 5000);
}

function runsAtPageEnd_slojd(){
    if(document.location.hash.length > 0) {
        rpToolbox_scrolloffset();
    }
    rpToolbox_addNavigation();
    rpToolbox_displayLoadingMessages();
    rpToolbox_initLocalLinks(siteMap);
    rpToolbox_buildBreadcrumbNavigation2(siteMap);
    rpToolbox_addInserts();
    rpToolbox_initFullHeightHack();
    rpToolbox_enhanceForms();
    rpToolbox_setOddEvenClasses(document.getElementById("maincontent"));
    rpToolbox_enhanceLinks2(document.getElementById("maincontent"));
    rpToolbox_addAnchorLinks2('maincontent', 'På denna sida');
    initVisitorCounter();
    rpToolbox_hoverAnything('breadcrumbnavigation', 'LI');
}

function runsAtPageEnd_blog(){
    if(document.location.hash.length > 0) {
        rpToolbox_scrolloffset(32, 150);
    }
    rpToolbox_positionFixedOnlyIfFitsHeight(15, 'sidebar1');
    rpToolbox_setOddEvenClasses();
    rpToolbox_markCurrentPageLink('blogsidebaritem');
    rpToolbox_addOnLoad(fixBlogger);
    rpToolbox_displayLoadingMessages();
    initVisitorCounter();
    rpToolbox_enhanceLinks2(document.getElementById("maincontent"));
}

function runsAtPageStart_slojd(){
    rpToolbox_loadSitemap();
    rpToolbox_addOnLoad(runsAtPageLoad_slojd);
}

// == Start ====================================================================

runsAtPageStart_slojd();
