﻿$(document).ready(function () {

    // Divide menu into columns
    $("#navigationTop li ul li ul.m3rd").wrapList({ itemsPerColumn: 5 });
    $("#navigationTop li ul li ul").addClass("m3rd");

    $("#sitemap .m1st").wrapList({ itemsPerColumn: 4 });
    $("#sitemap .m1st").siblings().addClass("m1st sitemapLevel");

    // hotlinks-menu dropdown
    $("#hot-links .aid-dd").hide();
    $("#hot-links li").hover(function () {
        $(this).children(".aid-dd").slideDown(300);
    }, function () {
        $(this).children(".aid-dd").slideUp(500);
    });

    // Print page function
    $('#print_btn').click(function () {
        window.print();
    });

    // Spot configuration - Tómas
    function spotsConfig() {

        // Assign Left or Right values to spots
        if (/msie|MSIE 7/.test(navigator.userAgent) || /msie|MSIE 8/.test(navigator.userAgent)) {
            var middle = document.body.clientWidth / 2 - 1;
        } else {
            var middle = window.innerWidth / 2 - 10;
        }

        $(window).load(function () { // Loads after images are loaded so it is possible to calculate height

            // Position absolute-image to bottom
            $(".absolute-image").each(function () {
                var self = $(this);
                var selfWidth = self.width();
                $(".image-right .spot-content").css('padding-right', self.width() + 'px');
                //	element doesnt refresh in webkit after padding-right change, need to force
                if (navigator.userAgent.indexOf('AppleWebKit') > -1) $(".image-right .spot-content").hide().show(1);
            });


            // Check image width and apply padding to create space between image and text if necessary
            $(".main-content-text p img").each(function () {
                var self = $(this);
                var parentWidth = $(".main-content-text").width();
                var selfWidth = self.width();
                if (selfWidth < parentWidth - 105) {
                    self.css('padding-left', 10 + 'px');
                }
            });
        });
    }
    spotsConfig();


    // Topmenu hover opacity fix
    $("#navigationTop .m3rd li a").hover(function () { // To make it work with a cheat empty level.
        $(this).fadeTo(100, 0.33);
        $(this).fadeTo(500, 1);
    });

    //Foldy list items
    $(".foldy .foldy-content").css({ display: 'none' });
    $(".foldy h4").click(function () {
        $(this).next().slideToggle("slow");
        $(this).toggleClass("foldy-up");
    });

    var st = getParameterByName('st');
    if (st && st.length > 0)
        $('.searchcriteria').find('#sitesearch-field').val(st);

    $(window).bind('hashchange', function (e) {
        st = getParameterByName('st');

        if (st && st.length > 0) {
            $('#searchcriteria').find('.sitesearch-field').val(st);
        }

        $('.mylist-wrapper').each(function (index) {
            this.data = JSON2.parse($(this).find('script.config')[0].innerHTML)[0];
            ExecuteSearch(this);
        });

        $('.didyoumean-wrapper').each(function (index) {
            this.data = JSON2.parse($(this).find('script.dymconfig')[0].innerHTML)[0];
            GetSearchTermSuggestions(this);
        });

        $('.tag-cloud-wrapper').each(function (index) {
            this.data = JSON2.parse($(this).find('script.config')[0].innerHTML)[0];
            GetTagCloud(this);
        });

        $('.archive-wrapper').each(function (index) {
            this.data = JSON2.parse($(this).find('script.config')[0].innerHTML)[0];
            GetArchive(this);
        });

        $('.related-pages-wrapper').each(function (index) {
            this.data = JSON2.parse($(this).find('script.config')[0].innerHTML)[0];
            GetRelatedPages(this);
        });
    });

    // Since the event is only triggered when the hash changes, we need to trigger
    // the event now, to handle the hash the page may have loaded with.
    $(window).trigger('hashchange');

    //Site Search
    /*
    $(".searchfield").bind("keypress", function(e) {
    var domain = $(this).siblings('.searchbutton').attr('href');
    var characterCode;
    if (e && e.which) { //if which property of event object is supported (NN4)
    e = e;
    characterCode = e.which; //character code is contained in NN4's which property
    }
    else {
    e = event;
    characterCode = e.keyCode; //character code is contained in IE's keyCode property
    }
    if (characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key)
    // Function is registered for multiple elements. Event is fired from input element
    // referenced from e.target
    var query = Url.encode(e.target.value);
    window.location = domain + query;
    return false;
    }

    return true;
    });

    $(".searchbutton").click(function(e) {
    // Function is registered for multiple elements. Event is fired from A element
    // We really only need e.target.previousSibling but FF handling of empty text nodes
    // requires to find firstchild by loop
    var domain = $(this).attr('href');
    var c = e.target.parentNode.childNodes;
    for (var i = 0; i < c.length; i++) {
    if (/searchfield/i.test(c[i].className))
    break;
    }
    var query = Url.encode(c[i].value);
    $(".searchbutton").attr('href', domain + query);
    });	
    */
});


/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/

var Url = {

	// public method for url encoding
	encode: function(string) {
		return escape(this._utf8_encode(string));
	},

	// public method for url decoding
	decode: function(string) {
		return this._utf8_decode(unescape(string));
	},

	// private method for UTF-8 encoding
	_utf8_encode: function(string) {
		string = string.replace(/\r\n/g, "\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if ((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// private method for UTF-8 decoding
	_utf8_decode: function(utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while (i < utftext.length) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if ((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i + 1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i + 1);
				c3 = utftext.charCodeAt(i + 2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

}

function linkSelectionRedirectUrl(value) {
	if (value == '')
		return;
	
	var values = value.split('|');

	if (values.length != 2) {
		return;
	}
	
	var url = values[0];
	var target = values[1];

	if (target == '_blank') {
		window.open(url);
	}
	else {
		document.location.href = url;
	}
}

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\#&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null)
        return "";
    else
        return decodeURIComponent(results[1].replace(/\+/g, " "));
}

function getSerializedDate(value) {
    return DateDeserialize(value).toLocaleDateString();
}

function ExecuteSearch(wrapper) {
    var list = $(wrapper).find('.mylist'),
		data = wrapper.data;
    data.searchdata.endIndex = parseInt(data.searchdata.startIndex) + parseInt(data.config.resultstodisplay) - 1;

    var sitesearchFieldValue = $('.searchcriteria').find('#sitesearch-field').val();
    var st = getParameterByName('st');
    
    if ((sitesearchFieldValue && sitesearchFieldValue.length > 0) || (st && st.length >0)) {
        data.searchdata.searchTerm = sitesearchFieldValue;
        if (!data.searchdata.searchTerm || data.searchdata.searchTerm.length == 0)
            data.searchdata.searchTerm = st;
        data.searchdata.highlightSearchTerms = 'true';
    }

    var categories = getParameterByName('cats');
    if (categories && categories.length > 0)
        data.searchdata.categories = categories;

    var sb = getParameterByName('sb');
    if (sb && sb.length > 0) {
        data.searchdata.sortBy = "EC" + sb;
    }

    var sd = getParameterByName('sd');
    if (sd && sd.length > 0) {
        data.searchdata.sortAscending = (sd == '1');
    }

    var fromdate = getParameterByName('fromdate');
    if (fromdate && fromdate.length > 0) {
        data.searchdata.fromdate = fromdate;
    }
    
    var todate = getParameterByName('todate');
    if (todate && todate.length > 0) {
        data.searchdata.todate = todate;
    }

    var author = getParameterByName('author');
    if (author && author.length > 0) {
        data.searchdata.author = author;
    }

    var searchRequest = {};
    searchRequest.searchRequest = data.searchdata;
    
    $.ajax({
        url: '/Custom/Main/ComposerFunctions/Search/Search.svc/ExecuteSearch',
        data: JSON2.stringify(searchRequest),
        dataType: 'json',
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        success: function (resp) {
            resultItems = resp.d.ResultSet;
            totalResults = resp.d.TotalResults;
            resp.d.ColumnsToShow = data.config.columnstoshow;
            resp.d.ColumnNames = data.columnnames;
            list.empty();

            $.get('/Custom/Main/js/templates/' + data.config.listtemplate + '.tmpl.txt', function (template) {
                $.tmpl(template, resp).appendTo(list);
            });

            numberOfPages = (totalResults) / data.config.resultstodisplay;
            if (data.config.displaypaging == 'true' && parseInt(numberOfPages) > 0) {
                pagingSection = $(wrapper).find('.paging').show();
                $(pagingSection).find('.listpagenumbers').empty();
                var start = 1;
                //Generate paging pages list                
                for (i = 0; i < parseInt(totalResults) / data.config.resultstodisplay; i++) {
                    var pageClass = (parseInt(data.searchdata.startIndex) == parseInt(start) ? "listpagenumber selected" : "listpagenumber");
                    var li = $('<li class="' + pageClass + '" style="cursor: pointer;">' + (parseInt(i) + 1) + '</li>').data('start', start);
                    $(pagingSection).find('.listpagenumbers').append(li);
                    start = start + parseInt(data.config.resultstodisplay);
                }
                //Bind click event to each page link
                $('.listpagenumber').bind("click", function (event) {
                    var wrapper = $(this).parents('.mylist-wrapper')[0];
                    wrapper.data.searchdata.startIndex = $(this).data().start;
                    ExecuteSearch(wrapper);
                });
                //Generate previous page paging button
                var prevButton = $(wrapper).find('.prev');
                prevButton.data('start', parseInt(data.searchdata.startIndex) - parseInt(data.config.resultstodisplay));
                if (parseInt(prevButton.data().start) < 0) //if first page
                    prevButton.hide();
                else {
                    prevButton.show();
                    prevButton.bind("click", function (event) {
                        var wrapper = $(this).parents('.mylist-wrapper')[0];
                        wrapper.data.searchdata.startIndex = $(this).data().start;
                        ExecuteSearch(wrapper);
                    });
                }
                //Generate next page paging button
                var nextButton = $(wrapper).find('.next');
                nextButton.data('start', parseInt(data.searchdata.endIndex) + 1);
                if (parseInt(nextButton.data().start) > parseInt(totalResults)) //if last page
                    nextButton.hide();
                else {
                    nextButton.unbind();
                    nextButton.show();
                    nextButton.bind("click", function (event) {
                        var wrapper = $(this).parents('.mylist-wrapper')[0];
                        wrapper.data.searchdata.startIndex = $(this).data().start;
                        ExecuteSearch(wrapper);
                    });
                }
            }
            else
                $(wrapper).find('.paging').hide();
        },
        error: function () {
            return "Error creating list";
        }
    });
}

function GetSearchTermSuggestions(wrapper) {
    var list = $(wrapper).find('.didyoumean'),
		data = wrapper.data;

    var sitesearchFieldValue = $('#searchcriteria').find('.sitesearch-field').val();
    if (sitesearchFieldValue && sitesearchFieldValue.length > 0) {
        data.searchTerm = sitesearchFieldValue;
    }

    $.ajax({
        url: '/Custom/Main/ComposerFunctions/Search/Search.svc/DidYouMean',
        data: JSON2.stringify(data),
        dataType: 'json',
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        success: function (json) {
            list.empty();
            $('#DidYouMeanTemplate').tmpl(json).appendTo(list);
        },
        error: function () {
            return "Error generating paging";
        }
    });
}

function GetTagCloud(wrapper) {
    var list = $(wrapper).find('.tag-cloud'),
		data = wrapper.data;
    data.searchdata.endIndex = parseInt(data.searchdata.startIndex) + parseInt(data.config.resultstodisplay) - 1;

    var sitesearchFieldValue = $('.searchcriteria').find('#sitesearch-field').val();
    var st = getParameterByName('st');

    if ((sitesearchFieldValue && sitesearchFieldValue.length > 0) || (st && st.length > 0)) {
        data.searchdata.searchTerm = sitesearchFieldValue;
        if (!data.searchdata.searchTerm || data.searchdata.searchTerm.length == 0)
            data.searchdata.searchTerm = st;
        data.searchdata.highlightSearchTerms = 'true';
    }

//    var categories = getParameterByName('cats');
//    if (categories && categories.length > 0)
//        data.searchdata.categories = categories;

//    var fromdate = getParameterByName('fromdate');
//    if (fromdate && fromdate.length > 0) {
//        data.searchdata.fromdate = fromdate;
//    }

//    var todate = getParameterByName('todate');
//    if (todate && todate.length > 0) {
//        data.searchdata.todate = todate;
//    }

    var searchRequest = {};
    searchRequest.searchRequest = data.searchdata;

    $.ajax({
        url: '/Custom/Main/ComposerFunctions/Search/Search.svc/TagCloud',
        data: JSON2.stringify(searchRequest),
        dataType: 'json',
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        success: function (json) {
            list.empty();
            $('#TagCloudTemplate').tmpl(json).appendTo(list);
        },
        error: function () {
            return "Error creating tag cloud";
        }
    });
}

function GetArchive(wrapper) {
    var list = $(wrapper).find('.archive'),
		data = wrapper.data;
    data.searchdata.endIndex = parseInt(data.searchdata.startIndex) + parseInt(data.config.resultstodisplay) - 1;

    var sitesearchFieldValue = $('.searchcriteria').find('#sitesearch-field').val();
    var st = getParameterByName('st');

    if ((sitesearchFieldValue && sitesearchFieldValue.length > 0) || (st && st.length > 0)) {
        data.searchdata.searchTerm = sitesearchFieldValue;
        if (!data.searchdata.searchTerm || data.searchdata.searchTerm.length == 0)
            data.searchdata.searchTerm = st;
        data.searchdata.highlightSearchTerms = 'true';
    }

//    var categories = getParameterByName('cats');
//    if (categories && categories.length > 0)
//        data.searchdata.categories = categories;

    var sb = getParameterByName('sb');
    if (sb && sb.length > 0) {
        data.searchdata.sortBy = "EC" + sb;
    }

    var sd = getParameterByName('sd');
    if (sd && sd.length > 0) {
        data.searchdata.sortAscending = (sd == '1');
    }

//    var fromdate = getParameterByName('fromdate');
//    if (fromdate && fromdate.length > 0) {
//        data.searchdata.fromdate = fromdate;
//    }

//    var todate = getParameterByName('todate');
//    if (todate && todate.length > 0) {
//        data.searchdata.todate = todate;
//    }

    var searchRequest = {};
    searchRequest.searchRequest = data.searchdata;

    $.ajax({
        url: '/Custom/Main/ComposerFunctions/Search/Search.svc/Archive',
        data: JSON2.stringify(searchRequest),
        dataType: 'json',
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        success: function (json) {
            list.empty();
            $('#ArchiveTemplate').tmpl(json).appendTo(list);
        },
        error: function () {
            return "Error creating archive";
        }
    });
}

function GetRelatedPages(wrapper) {
    var list = $(wrapper).find('.related-pages'),
		data = wrapper.data;
    data.searchdata.endIndex = parseInt(data.searchdata.startIndex) + parseInt(data.config.resultstodisplay) - 1;

    var sitesearchFieldValue = $('.searchcriteria').find('#sitesearch-field').val();
    var st = getParameterByName('st');

    if ((sitesearchFieldValue && sitesearchFieldValue.length > 0) || (st && st.length > 0)) {
        data.searchdata.searchTerm = sitesearchFieldValue;
        if (!data.searchdata.searchTerm || data.searchdata.searchTerm.length == 0)
            data.searchdata.searchTerm = st;
        data.searchdata.highlightSearchTerms = 'true';
    }

    //    var categories = getParameterByName('cats');
    //    if (categories && categories.length > 0)
    //        data.searchdata.categories = categories;

    //    var fromdate = getParameterByName('fromdate');
    //    if (fromdate && fromdate.length > 0) {
    //        data.searchdata.fromdate = fromdate;
    //    }

    //    var todate = getParameterByName('todate');
    //    if (todate && todate.length > 0) {
    //        data.searchdata.todate = todate;
    //    }

    var searchRequest = {};
    searchRequest.searchRequest = data.searchdata;

    $.ajax({
        url: '/Custom/Main/ComposerFunctions/Search/Search.svc/ExecuteSearch',
        data: JSON2.stringify(searchRequest),
        dataType: 'json',
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        success: function (json) {
            list.empty();
            $('#RelatedPagesTemplate').tmpl(json).appendTo(list);
        },
        error: function () {
            return "Error creating related pages";
        }
    });
}


String.prototype.htmlEncode = function () {
    var div = document.createElement('div');
    if (typeof (div.textContent) == 'string')
        div.textContent = this.toString();
    else
        div.innerText = this.toString();
    return div.innerHTML;
}

function DateDeserialize(dateStr) {
    return eval('new' + dateStr.replace(/\//g, ' '));
}

function getDate(dateStr) {
    var theDate = DateDeserialize(dateStr).getDate();
    if (theDate < 10) {
        theDate = "0" + theDate;
    }
    return theDate;
}

function getYear(dateStr) {
    return DateDeserialize(dateStr).getFullYear();
}

function IsColumnVisible(columnName, columnsToShow) {
    var columns = columnsToShow.split(',');
    for (var i = 0; i < columns.length; i++) {
        if (columns[i] == columnName)
            return true;
    }
    return false;
}

function ParseCategory(categoryValue) {
    var output = "";
    var categories = categoryValue.replace('{','').replace('}','').split(',');
    for(var i = 0; i < categories.length; i++) {
        var category = jQuery.trim(categories[i]).replace(/([A-Z])/g, ' $1').toLowerCase();
        var category = category.substring(1, 2).toUpperCase() + category.substring(2, category.length);
        output += category + ", ";
    }    
    return output.substring(0, output.length-2);
}

function ParseBool(value) {
    return (value == "true" ? "Ja" : "Nej");    
}

function oddOrEven(value) {
    return (parseInt(value) % 2) ? "even" : "";
}

function getSortDirection(columnName) {
    var sb = getParameterByName('sb');
    var sd = getParameterByName('sd');
    if (sb == columnName) {
        return 1-parseInt(sd);
    }
    return "0";
}

function searchDataList() {
    location.hash = "";
    return true;
}

function resetDataList() {
    location.hash = "";
    $('.searchcriteria').find('#sitesearch-field').val('');
    return true;
}

function getNumberOfComments(id) {
    $.get('/Custom/Main/Units/Comments/CommentService.svc/GetNumberOfComments/?id=' + id, function (numberOfComments) {
        $('#comment' + id).text(numberOfComments);
    });
    return "&nbsp;";
}
