﻿var Utility = {
    TruncateString: function(textValue, length) {
        if (textValue.length > length)
            return textValue.substring(0, length) + '...';
        return textValue;
    }
};
var RequestCache = Class.create({
    initialize: function() {
        this.requests = [];
        this.handler = this.onResponse.bind(this);
        this.defaultTTL = 100;
    },
    fetch: function(url, rpars, handler) {
        var request = this.requests.find(function(req) {
            return req.url == url && req.pars == $H(rpars).toQueryString();
        });

        if (request != null) {
            if (request.response == null) {
                request.handler = handler;
                return;
            }
            if (request.timeout < new Date()) {
                this.requests = this.requests.without(request);
                request = null;
            }
            else {
                if (handler)
                    handler(request.response);
                return;
            }
        }
        request = { handler: handler, url: url, pars: $H(rpars).toQueryString(), response: null };
        request.reqObject = new Ajax.Request(url, { method: 'get', contentType: 'application/json', parameters: $H(rpars).toQueryString(), onSuccess: this.handler });
        this.requests.push(request);
    },
    preload: function(url, pars) {
        this.fetch(url, pars, null);
    },
    onResponse: function(response) {
        var request = this.requests.find(function(r) { return r.reqObject == response.request; });

        if (request.handler)
            request.handler(response);

        var ttl = this.defaultTTL;
        var cache = response.getHeader("Cache-Control");
        if (cache != null && (match = cache.match(/max-age:\s*([0-9]+)/i))) {
            ttl = parseInt(match[1]);
        }
        var timeout = new Date();
        timeout.setTime(timeout.getTime() + (ttl * 1000));
        request.timeout = timeout;
        request.response = response;
    }
});

function LoadPager(currentPage, requestParsIdentity, maxItems, totalItems, pagerReference, dataLoader, isPreviewMode, url) {

    var pagerList = $$(pagerReference);

    var template = "<a class='counter #{Current}' href='javascript:#{DataLoader}(#{RequestParsIdentity}, #{MaxItems}, #{PageOffset}, \"#{Url}\", #{PreviewMode});'>#{Page}</a>\n";

    var pageArray = [];

    for (var i = 1; i <= Math.ceil(totalItems / maxItems); i++) {
        var currentPageClass = '';
        var showItem = false;
        var isFirst = false;
        var isLast = false;
        if ((currentPage + 1) == i)
            currentPageClass = 'current';
        if (currentPage < i+4 && currentPage >= i-5)
            showItem = true;
        else if (i == 1) {
            isFirst = true;
            showItem = true;
        }
        else if (i == Math.ceil(totalItems / maxItems)) {
            isLast = true;
            showItem = true;
        }
        var newPage = {
            Page: i,
            PageOffset: i - 1,
            Show: showItem,
            IsFirst: isFirst,
            IsLast: isLast,
            MaxItems: maxItems,
            Current: currentPageClass,
            DataLoader: dataLoader,
            RequestParsIdentity: requestParsIdentity,
            PreviewMode: isPreviewMode,
            Url: url
        };
        pageArray.push(newPage);
    }

    var htmlComplete = "";
    pageArray.each(function(item, index) {
        if (item.Show) {
            var html = template.interpolate(item);
            if (item.IsFirst) {
                html += "<a style='text-decoration: none; margin-right: 5px;'>...</a>";
            }
            else if (item.IsLast) {
                html = "<a style='text-decoration: none; margin-right: 5px;'>...</a>" + html;
            }
            htmlComplete += html;
        }
    }, this);

    pagerList.each(function(item, index) {
        item.update('');
        item.insert(htmlComplete);
    }, this);
}

function HidePager(pagerReference) {
    var pagerList = $$(pagerReference);
    pagerList.each(function(item, index) {
        item.update('');
    }, this);
}

function HideControls(reference) {
    var controlList = $$(reference);
    controlList.each(function(item, index) {
        item.hide();
    }, this);
}

function ShowControl(reference) {
    var controlList = $$(reference);
    controlList.each(function(item, index) {
        item.show();
    }, this);
}

function LoadMainContentFilterRequestPars(requestPars, onlyLoadDRMFree, onlyLoadDomestic) {
    requestPars.OnlyLoadDRMFree = onlyLoadDRMFree;
    requestPars.excludeDomestic = onlyLoadDomestic;
    return requestPars;
}

function FilterResults(caller) {
    /*LoadMainContentFilterRequestPars(requestTrackListPars, onlyLoadDRMFree, onlyLoadDomestic)
    LoadMainContentFilterRequestPars(requestAuthorListPars, onlyLoadDRMFree, onlyLoadDomestic)
    LoadMainContentFilterRequestPars(requestAlbumListPars, onlyLoadDRMFree, onlyLoadDomestic)
    LoadMainContentFilterRequestPars(requestMusicVideoListPars, onlyLoadDRMFree, onlyLoadDomestic)

    ShowControl('.ajaxbox .content');

    LoadTrackListData(requestTrackListPars, 10, 0, urlTrack, 1);
    LoadAuthorListData(requestAuthorListPars, 5, 0, url, 1);
    LoadAlbumListData(requestAlbumListPars, 5, 0, albumUrl, 1);
    LoadMusicVideoListData(requestMusicVideoListPars, 3, 0, videourl, 1);*/

    $$('.search.header a').each(function(item, index) {
        item.removeClassName("selected");
    }, this);

    caller = $(caller);   
    caller.addClassName("selected");
}

function AccountType() {
}
