YAHOO.CMA.albumTab = {
    data:null
    , pag:null
    , msgElm:null
    , pagElm:null
    , contentElm:null
    , rowsPerPage:10
    , message:""
    , CountTag:"%count%"
    , AlbumLabelTag:"%album label%"
    , init:function(elements, data, message, rowsPerPage) {
        if (YAHOO.lang.isObject(elements)) {
            if (YAHOO.lang.isString(elements.msgElm)) {
                this.msgElm = $(elements.msgElm);
            } else {
                this.msgElm = elements.msgElm;
            }
            if (!YAHOO.lang.isString(elements.pagElm)) {
                this.pagElm = elements.pagElm;
            } else {
                this.pagElm = $(elements.pagElm);
            }
            if (YAHOO.lang.isString(elements.contentElm)) {
                this.contentElm = $(elements.contentElm);
            } else {
                this.contentElm = elements.contentElm;
            }
        } else {
            throw "Invalid Parameter: elements";
        }
        if (YAHOO.lang.isArray(data) || data=="") {
            this.data = data;
        } else {
            throw "Invalid Data: Array or Empty String Required";
        }
        this.message = message;
        if (YAHOO.lang.isNumber(rowsPerPage)) {
            this.rowsPerPage = rowsPerPage;
        }

        this.pag = new YAHOO.widget.Paginator({
            rowsPerPage:this.rowsPerPage
            , totalRecords:this.data.length
            , 'containers':this.pagElm
            , pageLinks : 10 // configure the PageLinks UI Component
            , rowsPerPageOptions : [ 10, 20, 30 ] // configure the RowsPerPageDropdown UI Component
        });
        this.updateMsg();
        if(this.data.length > this.rowsPerPage) {
            this.updatePag();
            if(YAHOO.lang.isArray(this.pagElm)) {
                for(var idx = 0; idx < this.pagElm.length ; idx++) {
                    $(this.pagElm[idx]).style.display = 'block';
                }
            } else {
                this.pagElm.style.display = 'block';
            }
        }

    }
    , updatePag:function() {
        this.pag.subscribe('changeRequest', this.handlePagination);
        this.pag.render();
    }
    , updateMsg:function() {
        var tmpMsg = this.message.replace(this.CountTag, this.data.length);
        tmpMsg = tmpMsg.replace(this.AlbumLabelTag, this.data.length == 1 ? "Album" : "Albums");
        this.msgElm.innerHTML = tmpMsg;
        this.updateContent();
    }
    , getPageData:function(page) {
        var pageData = [];
        var pageRowBottom = (this.rowsPerPage * (page-1));
        var pageRowTop = (this.rowsPerPage * (page-1)) + this.rowsPerPage;
        if (pageRowTop > this.data.length) {
            pageRowTop = this.data.length;
        }
        for (var i = pageRowBottom; i < pageRowTop; i++) {
            pageData[i-pageRowBottom] = this.data[i];
        }
        return pageData;
    }
    , updateContent:function(newState) {
        var buf = "";
        var page = 1;
        var recordOffset = 0;
        var pageData = null;
        if (YAHOO.lang.isObject(newState)) {
            page = newState.page;
            recordOffset = newState.recordOffset;
        }
        pageData = this.getPageData(page);

        var prevRowNum = 0;
        var limit = pageData.length;
        for (var i = 0; i < limit; i++) {
            var album = pageData[i];
            var colNum = ((i)%2==0) ? 1 : 2;
            var rowNum = Math.ceil((i+1)/2);

            if (prevRowNum != rowNum) {
                if (prevRowNum != 0) {
                    buf += '<div class="nrHR"></div>';
                    buf += '</div>';
                }
                    buf += '<div class="ATCItem Clear">';
            }

            buf += '<div style="width:290px;float:' + ((colNum%2==0) ? "right" : "left") + ';">';

            buf += '<a href="/album/' + album.upc + '.html"';
            buf += ' style="position:absolute;left:' + ((colNum%2==0) ? 300 : 0) + 'px;top:0px;"><img';
            if (album.image_path) {
                buf += ' src="' + album.image_path + '" width="' + album.image_width + '" height="' + album.image_height + '"';
            } else {
                buf += ' src="/images/album_cover_not_available.gif" width="100" height="100"';
            }
                buf += ' id="apg_mo_' + album.upc + '"';
                buf += ' onmouseover="qaa.show(this.id,\'/ajax/qai/' + album.upc + '.json\',null,\'tl:tl\', {x:-120,y:0});"';
            buf += ' class="ca ca3D" alt="View Album Details"/>';
            buf += '<div class="ATCNum Clear">- ' + (i + recordOffset + 1) + ' -</div>';
            buf += '</a>\n';

            buf += '<div class="atcInfo" style="position:absolute;left:' + ((colNum%2==0) ? 414 : 114) + 'px;top:0px;">';
            buf += '<strong>' + this.adjStringLen(album.title,48) + '</strong><br/>\n';
            if (!YAHOO.lang.isUndefined(album.performer) && album.performer.length>0) {
                buf += this.adjStringLen(album.performer,24) + '<br/>\n';
            }
            buf += '<br/><em>'+ album.label + '</em><br/>\n';
            buf += 'Rel. ' + album.release_date + '<br/>\n';
            buf += '</div>';

            buf += '<div style="position:absolute;left:' + ((colNum%2==0) ? 414 : 114) + 'px;bottom:40px;">';
            buf += '<div class="btnDetails"><a href="/album/' + album.upc + '.html"><img alt="View Album Details" src="/images/b_details.gif"/></a></div>';
            buf += '</div>';

            buf += '</div>';
            prevRowNum = rowNum;
        }
        if (prevRowNum != 0) { // CLOSE OFF OPEN DIV
            buf += '</div>';
        }
        this.contentElm.innerHTML = buf;
    }
    , adjStringLen:function(str, len) {
        var tmpStr = str;
        if (tmpStr.length > len) {
            tmpStr = tmpStr.substr(0, len-3) + "...";
        }
        return tmpStr;
    }
    , handlePagination:function(newState) {
        YAHOO.CMA.albumTab.updateContent(newState);
        YAHOO.CMA.albumTab.pag.setState(newState);
    }
}
