// Listing Item VO function ListingItem(id, name, imageUrl, desc) { this.id = id; this.name = name; this.imageUrl = imageUrl; this.description = desc; }; function ListingItemMgr(pageSize, detailUrl) { var pageSize = (pageSize == null ? 6 : pageSize); var items = new Array(); var containerId = null; var currentPage = 1; var pagerSize = 5; var currentPagerStartPage = 1; var detailUrl = (detailUrl == null ? 'details.jsp' : detailUrl); var setContainerId = function (id) { containerId = id; }; var getContainerId = function () { return containerId; }; var getItems = function () { return items; }; var getDescription = function (str) { return str; }; var createPaging = function (pagerId) { var html = StringUtil.format('
', pagerId); var numOfPage = (getItems().length - 1) / pageSize + 1; if (numOfPage < 2) { return ''; } if (numOfPage > pagerSize) { html += StringUtil.format('', pagerId + '_prev'); } html += StringUtil.format('', 1, pagerId + '_1'); for (var i = 2; i <= (numOfPage < pagerSize ? numOfPage : pagerSize); i++) { html += StringUtil.format('', i, pagerId + '_' + i); } if (Math.floor(numOfPage) > pagerSize) { html += StringUtil.format('', pagerId + '_next'); } html += '
{0}{0}>
'; return html; }; var createItemTd = function (itemKey) { var item = getItems()[itemKey]; if (item != null) { var td = ''; td += ''; td += StringUtil.format('', item.id, item.imageUrl, detailUrl); td += '
'; td += StringUtil.format('

{1}

', item.id, item.name, detailUrl); td += StringUtil.format('

{0}

', getDescription(item.description)); td += '
'; return td; } else { return ''; } }; var createDetailTd = function (itemKey) { var item = getItems()[itemKey]; if (item != null) { var td = ''; td += StringUtil.format('', item.id, detailUrl); return td; } else { return ''; } }; var createVSpaceTd = function () { return ' '; }; var createListing = function (page) { var html = ''; var count = 0; var detailBottomTr = ""; for (var key = (page - 1) * pageSize; key < page * pageSize && getItems().length > key ; key++) { var mode = count++ % 3; switch (mode) { case 0: html += ''; html += createItemTd(key); html += createVSpaceTd(); detailBottomTr = '' + createDetailTd(key) + createVSpaceTd(); break; case 1: html += createItemTd(key); html += createVSpaceTd(); detailBottomTr += createDetailTd(key) + createVSpaceTd(); break; case 2: html += createItemTd(key); detailBottomTr += createDetailTd(key) + ''; html += ''; html += detailBottomTr; if (count % pageSize != 0) { html += ''; } break; } } if (count % 3 == 1) { html += ''; html += detailBottomTr; html += ''; } else if (count % 3 == 2) { html += ''; html += detailBottomTr; html += ''; } html += '
   
   
 
 
'; return html; }; this.add = function (item) { getItems().push(item); }; this.renderWithBottomPagingOnly = function (divId) { setContainerId(divId); var html = ""; html += StringUtil.format('
', divId + "_listing"); html += createListing(1); html += '
'; html += createPaging(divId + "_pagerbottom"); divObj = document.getElementById(divId); divObj.innerHTML = html; }; this.render = function (divId) { setContainerId(divId); var html = createPaging(divId + "_pagertop"); html += StringUtil.format('
', divId + "_listing"); html += createListing(1); html += '
'; html += createPaging(divId + "_pagerbottom"); divObj = document.getElementById(divId); divObj.innerHTML = html; }; var getTopPager = function (pageNum) { if (document.getElementById(containerId + '_pagertop_' + pageNum)==null){ return getBottomPager(pageNum); }else{ return document.getElementById(containerId + '_pagertop_' + pageNum); } }; var getBottomPager = function (pageNum) { return document.getElementById(containerId + '_pagerbottom_' + pageNum); }; this.switchPage = function (page, selectedPage) { getTopPager(currentPage).className = getBottomPager(currentPage).className = 'page'; getTopPager(selectedPage).className = getBottomPager(selectedPage).className = 'current'; currentPage = selectedPage; document.getElementById(getContainerId() + '_listing').innerHTML = createListing(page); }; var changePageTo =function (from, to) { var divTop = getTopPager(from); var divBottom = getBottomPager(from); divBottom.onclick = function() {liMgr.switchPage(to,to)}; divTop.onclick = function() {liMgr.switchPage(to,to)}; divBottom.innerHTML = divTop.innerHTML = to; divTop.id = containerId + '_pagertop_' + to; divBottom.id = containerId + '_pagerbottom_' + to; }; this.changePager = function (change) { var numOfPage = (((getItems().length - 1) / pageSize) | 0) + 1; if ((currentPagerStartPage <= 1 && change < 0) || (numOfPage <= currentPagerStartPage && change > 1)) { return; } var start = currentPagerStartPage + change * pagerSize; var end = start + pagerSize - 1; if (start < 1) { start = 1; end = pagerSize; } else if (end > numOfPage) { start = numOfPage - pagerSize + 1; end = numOfPage; } if (start - currentPagerStartPage < pagerSize) { for (var i = end; i >= start; i--) { var from = --currentPagerStartPage + pagerSize; if (from == currentPage) { currentPage = i; } changePageTo(from , i); } } else { for (var i = start; i <= end; i++) { var from = currentPagerStartPage++; if (from == currentPage) { currentPage = i; } changePageTo(from, i); } } currentPagerStartPage = start; //change current page this.switchPage(currentPagerStartPage, currentPagerStartPage); //show/hide the prev/next buttons if (currentPagerStartPage == 1) { getBottomPager('prev').style.visibility = getTopPager('prev').style.visibility = 'hidden'; getBottomPager('next').style.visibility = getTopPager('next').style.visibility = 'visible'; } else if (currentPagerStartPage + pagerSize - 1 >= numOfPage) { getBottomPager('next').style.visibility = getTopPager('next').style.visibility = 'hidden'; getBottomPager('prev').style.visibility = getTopPager('prev').style.visibility = 'visible'; } else { getBottomPager('prev').style.visibility = getTopPager('prev').style.visibility = 'visible'; getBottomPager('next').style.visibility = getTopPager('next').style.visibility = 'visible'; } }; this.setPageSize = function(newPageSize) { }; };