﻿/// <reference path="jquery.min-vsdoc2.js"/>

// Google analytics tracking
function GARecordLink(link, redirect, category, action) {
    _gat._getTrackerByName()._trackEvent(category, action);
    if (redirect)
        setTimeout('document.location = "' + link.href + '"', 100);
}

$(document).ready(function () {
    if (!$.noCustomSelect) {
        $.each($('select.customDDL'), function (i, item) {
            setCustomSelect($(this));
            $(this).change(function () {
                setCustomSelect($(this), true);
            });
        });
    }
});

function setCustomSelect(select, updated) {

    var sc = $('div.search').length;

    var updateCssClass = sc > 0;
    var cropText = sc > 0;

    var selectedItem = select.find(':selected');
    var selectText = selectedItem.text();
    var cssClass = 'select';

    if (cropText) {
        selectText = selectText.replace(/\u00a0{2,}/gi, '');
        selectText = selectText.charAt(0) != '-' ? selectText.cropText(29, false) : selectText;
    }

    if (updateCssClass)
        cssClass = selectedItem.val() == '' ? 'select' : 'selected';

    if (updated)
        select.prev().text(selectText).removeClass().addClass(cssClass);
    else
        select.addClass('customSelect').before('<span class="' + cssClass + '">' + selectText + '</span>');
}

/* Script for changing css class on mouseover */
function changeClass(id, newClass) {
    if (typeof (id) == 'object')
        id.className = newClass;
    else
        document.getElementById(id).className = newClass;
}

/* Extensions */
String.prototype.contains = function(s) { return this.indexOf(s) > -1; }
String.prototype.cropText = function (length, addTooltip) {
    if (this.length > length) {
        var cropped = String.format('{0}...', this.substring(0, length));
        if (addTooltip)
            cropped = String.format('<span title="{0}">{1}</span>', this, cropped);

        return cropped;
    }
    else {
        return this.toString();
    }
}

function StringBuilder() {
    this.strings = [];
}
StringBuilder.prototype.append = function(s) { this.strings.push(s); };
StringBuilder.prototype.appendLine = function(s) { this.strings.push(s + '\n'); };
StringBuilder.prototype.clear = function() { this.strings = []; };
StringBuilder.prototype.toString = function() { return this.strings.join(""); };

(function($) {
    $.fn.extend({
        appendObjects: function(obj) {
            $.fn.append.apply(this, $.isArray(obj) ? obj : [obj]);
        }
    });
})(jQuery);


(function($) {
    $.fn.extend({
        waterMarkText: function(text, noReAdd) {
            var t = this;
            if (t[0]) {
                t.attr('title', text);
                if (t.val() == '' || t.val() == text)
                    t.val(text);
                t.focus(function() {
                    if (t.val() == text)
                        t.val('');
                });
                if (!noReAdd) {
                    t.blur(function() {
                        if (t.val() == '') {
                            t.val(text);
                        }
                    });
                }
            }
        }
    });
})(jQuery);

(function ($) {
    $.fn.extend({
        cropTextToWidth: function (width, settings) {
            function removeTags(str) {
                var re = /<\/?[^>]+>/gi;
                return str.replace(re, '');
            };

            $.each(this, function (i, el) {
                var item = $(el);
                var str = item.html();
                var span = $('<span style="display:inline;visibility:hidden;padding:0px" />');
                span.html(str);
                span.addClass(item.attr('class'));
                if (settings && settings.extraClass)
                    span.addClass(settings.extraClass);
                if (settings && settings.extraCss) {
                    $.each(settings.extraCss, function (j, cssItem) {
                        span.css(cssItem.name, cssItem.value);
                    });
                }

                $('body').append(span);

                if (span.width() > width) {
                    str = removeTags(str);
                    var posStart = 0, posMid, posEnd = str.length, posLength;
                    while (posLength = (posEnd - posStart) >> 1) {
                        posMid = posStart + posLength;
                        span.html(str.substring(0, posMid) + '&hellip;');
                        if (span.width() > width)
                            posEnd = posMid;
                        else
                            posStart = posMid;
                    }

                    result = '<span title="' + str.replace("\"", "&quot;") + '">' + str.substring(0, posStart) + '&hellip;</span>';

                    item.html(result);
                }

                span.remove();
            });

            return this;
        }
    })
})(jQuery);


var studentum =
{
    webServices:
    {
        post: function (wsUrl, parameters, callback, debug) {
            $.ajax({
                type: 'POST',
                url: wsUrl,
                data: JSON.stringify(parameters),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function (p) {
                    if (callback)
                        callback(p.d);
                },
                error: function (x, t, e) {
                    if (debug) {
                        alert(String.format('Error {0}: {1}', x.status, x.statusText));
                        alert(String.format('Data: {0}', x.responseText));
                    }
                }
            });
        }
    },
    ui:
    {
        findControl: function (id, returnDomObject) {
            var controls = $(String.format("*[id*='{0}']", id));
            if (controls.length < 1)
                return null;

            return returnDomObject ? controls[0] : controls;
        }
    },
    utils:
    {
        autoCompleteRedirectToPage: function (item, ac) {
            ac.val('');
            if (item && item.value) {
                var url = item.value.toLowerCase();
                if (url[0] != '/')
                    url = '/' + url;
                document.location = url;
            }
            else if (item && !item.value) {
                alert('Item is not linked');
            }
        }
    }
};

(function ($) {
    $.fn.extend({
        waterMark: function (options) {

            var elements = this;
            $('form').submit(function () {
                elements.each(function () {
                    if ($(this).val() == $(this).attr('title'))
                        $(this).val('');
                });
                return true;
            });

            elements.each(function () {
                var t = $(this);
                if (t[0]) {
                    var text = t.attr('title');
                    t.attr('title', text);
                    if (t.val() == '' || t.val() == text) {
                        t.val(text);
                        t.addClass(options.cssClass);
                    }
                    t.focus(function () {
                        if (t.val() == text) {
                            t.val('');
                            t.removeClass(options.cssClass);
                        }
                    });
                    if (!options.noReAdd) {
                        t.blur(function () {
                            if (t.val() == '') {
                                t.val(text);
                                t.addClass(options.cssClass);
                            }
                        });
                    }
                }
            });
        }
    });

    $.keyCodes = {
        enter: 13,
        tab: 9,
        keyUp: 38,
        keyDown: 40
    };

    $.autoCompleteDdl = function (input, settings) {

        var listItems = [];
        var searchDelay;
        var checkBlur = false;
        var listContainer = createListContainer();
        if (settings.createHiddenField)
            createHiddenField();

        input.addClass(settings.inputCssClass);
        input.attr("autocomplete", "off");
        input.blur(function () {

            if (!checkBlur) {
                var s = getSelectedItem();
                if (!s && !$(String.format('#{0}Value', input.attr('id'))).val())
                    input.val('');

                if (!input.val())
                    $(String.format('#{0}Value', input.attr('id'))).val('');

                listContainer.hide();
            }
        });

        input.keyup(function (e) {
            var k = e.keyCode;
            if (k != $.keyCodes.tab && k != $.keyCodes.enter && k != $.keyCodes.keyUp && k != $.keyCodes.keyDown) {

                if (settings.searchDelay) {
                    if (searchDelay) clearTimeout(searchDelay);
                    searchDelay = setTimeout(function () { txtChanged() }, settings.searchDelay);
                }
                else
                    txtChanged();
            }
        });

        input.keydown(function (e) {
            var k = e.keyCode;
            switch (k) {
                case $.keyCodes.tab:
                case $.keyCodes.enter:
                    saveValue();
                    e.preventDefault();
                    if (settings.autoPostback)
                        $('form')[0].submit();
                    break;
                case $.keyCodes.keyUp:
                    e.preventDefault();
                    changeItem(-1);
                    break;
                case $.keyCodes.keyDown:
                    e.preventDefault();
                    changeItem(1);
                    break;
            }
        });

        function getSelectedItem() {

            var index = listContainer.find('li').index(listContainer.find('li.' + settings.listItemActiveCssClass));
            if (index == -1 || listItems == null || listItems.length == 0)
                return null;
            else
                return listItems[index];
        }

        function changeItem(direction) {
            var items = listContainer.find('li');
            var index = items.index(listContainer.find('li.' + settings.listItemActiveCssClass));
            items.removeClass(settings.listItemActiveCssClass);

            if (index == -1 && direction == 1)
                index = 0;
            else if (index == -1 && direction == -1)
                return;
            else
                index = index + direction;

            if (index == -1 && direction == -1)
                index = (settings.cycleList) ? items.length - 1 : index + 1;
            else if (index == items.length && direction == 1)
                index = (settings.cycleList) ? 0 : index - 1;

            selectItem(index);
        }

        function selectItem(index) {

            listContainer.find('li:eq(' + index + ')').addClass(settings.listItemActiveCssClass);
            rePosition(listContainer);
        }

        function saveValue() {
            var s = getSelectedItem();
            if (s) {
                input.val(s.name.replace(/\&nbsp;/gi, ' '));
                $(String.format('#{0}Value', input.attr('id'))).val(s.value);

                if (settings.onSelectedCallback)
                    settings.onSelectedCallback(s, input);
            }

            listContainer.hide();
            if (!settings.autoPostback)
                input.blur();
        };

        function txtChanged() {
            if (input.val().length >= settings.minSearchLength)
                generateList();
            else
                listContainer.hide();
        };

        function createListContainer() {

            var el = $("<div />").addClass(settings.listCssClass).css("position", "absolute").hide();
            rePosition(el);
            $("body").append(el);

            return el;
        };

        function createHiddenField() {
            var hidden = $('<input type="hidden" />');
            var id = String.format("{0}_value", input.attr('id'));
            hidden.attr('name', id);
            hidden.attr('id', id);

            input.parent().append(hidden);
        };

        function rePosition(el) {
            var offset = input.offset();
            var left = offset.left;
            var top = offset.top + input.height() + 4;

            el.css({
                "left": left,
                "top": top,
                "width": String.format("{0}px", input.width() - 6)
            });
        };

        function generateList() {

            var parameters = { prefixText: input.val(), count: settings.maxItems };
            $.extend(parameters, settings.wsParameters || {});

            studentum.webServices.post(settings.formatUrl(), parameters, listItemsReceived);
        };

        function listItemsReceived(wsItems) {

            listContainer.empty();
            rePosition(listContainer);
            listItems = wsItems;

            if (listItems != null && listItems.length > 0) {
                var ul = $('<ul />');
                for (var i = 0; i < listItems.length; i++) {
                    var li = $('<li />');
                    li.addClass(settings.listItemCssClass);
                    li.html(listItems[i].name.replace(/\&amp;/gi, '&'));
                    li.hover(
                        function () {
                            checkBlur = true;
                            listContainer.find('li').removeClass(settings.listItemActiveCssClass);
                            $(this).addClass(settings.listItemActiveCssClass);
                            selectItem(i);
                        },
                        function () {
                            checkBlur = false;
                            $(this).removeClass(settings.listItemActiveCssClass);
                        }
                    );

                    li.click(function (e) {
                        e.stopPropagation();
                        e.preventDefault();
                        selectItem(i);
                        checkBlur = false;
                        saveValue();
                    });

                    ul.append(li);
                }

                listContainer.append(ul);
                listContainer.show();
            }
            else if (settings.noItemsFoundText) {
                listContainer.text(settings.noItemsFoundText);
                listContainer.show();
            }
            else
                listContainer.hide();
        };
    };

    $.fn.autoCompleteDdl = function (userSettings) {
        var settings = {
            inputCssClass: "autoCompleteInput",
            listCssClass: "autoCompleteList",
            listItemCssClass: "autoCompleteListItem",
            listItemActiveCssClass: "autoCompleteListItemActive",
            noItemsFoundText: null,
            cycleList: false,
            createHiddenField: false,
            searchDelay: 200,
            autoPostback: false,
            onSelectedCallback: null,
            minSearchLength: 2,
            maxItems: 25,
            wsUrl: null,
            wsMethod: null,
            wsParameters: {},
            formatUrl: function () {
                return String.format("{0}/{1}", this.wsUrl, this.wsMethod);
            }
        };

        if (userSettings)
            $.extend(settings, userSettings);

        this.each(function () {
            $.autoCompleteDdl($(this), settings);
        });

        return this;
    };

})(jQuery);

jQuery.parseXml = function(xml) {
    if (xml) {
        if (window.ActiveXObject && window.GetObject) {
            var dom = new ActiveXObject('Microsoft.XMLDOM');
            dom.loadXML(xml);
            return dom;
        }
        if (window.DOMParser)
            return new DOMParser().parseFromString(xml, 'text/xml');

        throw new Error('No XML parser available');
    }
};

// Statistics scripts start
function showHideStats(d, d2) {
    if (document.getElementById(d).style.display == "none") { document.getElementById(d).style.display = ''; }
    else { document.getElementById(d).style.display = "none"; }

    if (document.getElementById(d2).style.display == '') { document.getElementById(d2).style.display = "none"; }
    else { document.getElementById(d2).style.display = ''; }
}
function showHideStatsRows(d) {
    if (document.getElementById(d).style.display == "none") {
        document.getElementById(d).style.display = '';
        document.getElementById("statsShowHide").innerHTML = "dölja";
    }
    else {
        document.getElementById(d).style.display = "none";
        document.getElementById("statsShowHide").innerHTML = "visa";
    }
}

/* End extensions */

function myFlashEvent(eventBannerName, eventName, eventPath, eventDomain) {
    // Register Event with WebTrends
    dcsMultiTrack(
		'DCS.dcssip', eventDomain,                  // name/value pair for URL
		'DCS.dcsuri', eventPath,                  	// name/value pair for Path
		'WT.ti', eventBannerName, 					// name/value pair for page title
		'WT.ac', eventName							// name/value pair for event title
	);
    // Go to URL
    eventValue = eventDomain + eventPath;
    document.location.href = eventValue;
}
