/// <reference path="../dev/jQuery-1.2.6.min-vsdoc.js" />
/// <Xreference path="../jQuery-1.3.js" />


jQuery(document).ready(function() {
    jQuery('div.genericListingWithPagingContainer').each(function() {

        var thisListing = this;
       
        var currentPage = 1;
        genericListingLoadPage(thisListing, currentPage, function() {
        
            //Attach paging event
            jQuery('ul.paging li a', thisListing).click(function(e) {
                e.preventDefault();
                if (jQuery(this).parent().hasClass('current')) { return };
                var gotoPage = jQuery(this).text();
                if (!IsNumeric(gotoPage)) return;
                var currentPage = jQuery('ul.paging li.current', thisListing).text();
                var container = jQuery(this).parents('div.genericListingWithPagingContainer');
                genericListingLoadPage(container, gotoPage)
                setActivePage(jQuery(this).parent().parent(), gotoPage);

                function IsNumeric(sText) {
                    var ValidChars = "0123456789.";
                    var IsNumber = true;
                    var Char;
                    for (i = 0; i < sText.length && IsNumber == true; i++) {
                        Char = sText.charAt(i);
                        if (ValidChars.indexOf(Char) == -1) {
                            IsNumber = false;
                        }
                    }
                    return IsNumber;
                }
            });
            jQuery('ul.paging li:first a', thisListing).click(function(e) {
                e.preventDefault();
                if (jQuery(this).parent().hasClass('currentFirst')) { return };
                var currentPage = jQuery('ul.paging li.current', thisListing).text();
                var gotoPage = currentPage - 1;
                if (gotoPage == 0) {
                    gotoPage = 1;
                    return;
                }
                var container = jQuery(this).parents('div.genericListingWithPagingContainer');
                genericListingLoadPage(container, gotoPage);
                setActivePage(jQuery(this).parent().parent(), gotoPage);
            });
            jQuery('ul.paging li:last a', thisListing).click(function(e) {
                e.preventDefault();
                if (jQuery(this).parent().hasClass('currentLast')) { return };
                var currentPage = jQuery('ul.paging li.current', thisListing).text();
                var gotoPage = currentPage * 1 + 1;
                if (gotoPage == jQuery('ul.paging li', thisListing).length) {
                    gotoPage = gotoPage - 2;
                    return;
                }
                var container = jQuery(this).parents('div.genericListingWithPagingContainer');
                genericListingLoadPage(container, gotoPage)
                setActivePage(jQuery(this).parent().parent(), gotoPage);
            });
            setActivePage(jQuery('ul.paging', thisListing), 1);
        });
    });
});
function genericListingLoadPage(container,gotoPage,callback) {
    var currentPage = jQuery('ul.paging li.current', container).text();
    if (!currentPage || currentPage == '' || currentPage == undefined) {
        currentPage = 1;
    }
    var startNode = jQuery('span.startNode', container).text();
    var recordsPerPage = jQuery('span.recordsPerPage', container).text();
    var recordTemplate = jQuery('span.recordTemplate', container).text();
    var jsonSource = jQuery('span.jsonSource', container).text();
    var titleAlias = jQuery('span.titleAlias', container).text();
    var textAlias = jQuery('span.textAlias', container).text();
    var imageAlias = jQuery('span.imageAlias', container).text();
    var ajaxLoaderImage = jQuery('span.ajaxLoaderImage', container).text();
    var sortBy = jQuery('span.sortBy', container).text();

    var innerContainer = jQuery('.genericListingContainer', container);
    
    /*Anpassnig för listining av singlar, ska visa så många items som record compilations ger utrymme för*/
    if(jQuery('#records-compilations').length > 0)
    {
            var height = jQuery('#records-compilations').height();
            innerContainer.css('height', (height - 80) + 'px');
            recordsPerPage = Math.floor((height - 80)/29);
    }
    else
    {
        /*
	//Låter original css ta hand om detta, om inte annat begärs
	//Nedanstående kod funkar hjälpligt
	var height = innerContainer.height();
        if (height > 20) {
            innerContainer.css('min-height', height + 'px');
        }
	*/
    } 
    //var img = jQuery('<img></img>')
    //        .attr('src', ajaxLoaderImage);
    
    //jQuery('.genericListingContainer', container).html(img);

    jQuery.get(recordTemplate, function(data) {    // callback function, executed on GET success
        var template = data;
        jQuery.getJSON(
            jsonSource,
            { 'startNode': startNode, 'recordsPerPage': recordsPerPage, 'imageAlias': imageAlias, 'textAlias': textAlias, 'pageNumber': gotoPage, 'sorting': sortBy },
            function(data) {
                var page = data;
                if (jQuery.isFunction(callback)) {

                    //Write paging
                    if (page.count > 1) {
                        var pagination = jQuery('<ul></ul>');
                        pagination.addClass('paging');
                        pagination.addClass('clearfix');
                        pagination.append('<li><a href="#">&lt;</a></li>');
                        for (i = 0; i < Math.ceil(page.count / recordsPerPage); i++) {
                            var li = jQuery('<li></li>');
                            if ((i * 1 + 1) == currentPage) {
                                li.addClass('current');
                            }
                            var a = jQuery('<a></a>')
                            a.html((1 * i + 1))
                            a.attr('href', '#');
                            li.html(a);

                            pagination.append(li);
                        }
                        pagination.append('<li><a href="#">&gt;</a></li>');
                        jQuery('.paginationContainer', container).html(pagination);
                    }
                }
                //Apply template
                var itemsstring = '';
                jQuery.each(page.items, function() {
                    var thisItemString = template;
                    if (this.imageUrl == '') {
                        thisItemString = template.replace(/image={IMAGEURL}/g, 'text=%20')
                    }
                    thisItemString = thisItemString.replace(/{URL}/g, this.url)
                    .replace(/{IMAGEURL}/g, this.imageUrl)
                    .replace(/{TITLE}/g, this.title)
                    .replace(/{TEXT}/g, this.text)
                    itemsstring += thisItemString;
                });

                /*HACK: N�r oakwood fixat floatproblemet kan rekursiv ifsats tas bort*/
                /*L�ste det -antagligen- med fast h�jd p� bilderna i css, testa, och kolla med oakwood att de godk�nner css-�ndringen*/
                var newrecordsPerPage;
                if (jQuery('#records-compilations').length > 0) {

                    var newheight = jQuery('#records-compilations').height();
                    innerContainer.css('height', (height - 80) + 'px');
                    newrecordsPerPage = Math.floor((height - 80) / 29);
                }
                if (newrecordsPerPage != recordsPerPage && jQuery('#records-compilations').length > 0) {
                    //float-problem gjort att h�jden inte var klar
                    //d� g�r vi om det
                    genericListingLoadPage(container, gotoPage, callback);
                }
                else /*Utan hack alltid detta:*/
                {
                    jQuery('.genericListingContainer', container).html(itemsstring);
                    if (jQuery.isFunction(callback)) {
                        callback();
                    }
                }

            });
    });
    }
    function setActivePage(pagingList, activePage) {
        jQuery('li', pagingList).removeClass('current');
        jQuery('li', pagingList).removeClass('currentLast');
        jQuery('li', pagingList).removeClass('currentFirst');
        jQuery('li', pagingList).each(function() {
            if (jQuery('a', this).text() == activePage) {
                jQuery(this).addClass('current');
            }
        });
        if (activePage == 1) {
            jQuery('li:first', pagingList).addClass('currentFirst');
            //jQuery('li:first', pagingList).addClass('current');
        }
        if (activePage == jQuery('li', pagingList).length - 2) {
            jQuery('li:last', pagingList).addClass('currentLast');
            //jQuery('li:last', pagingList).addClass('current');
        }
    }