
function runAjax(url,data,method,callback){method=method==undefined?'GET':method;data=data==undefined?'':data;$.ajax({timeout:100000,type:method,url:url,data:data,dataType:"xml",beforeSend:function(){},success:function(responseText,statusText){if(callback!=undefined){callback(responseText);}},complete:function(){},error:function(data,status,e){alert('e: '+e);}});return null;}
function pageTableObj(outDiv,loadUrl,totalRow,perPage,tableClass,column){var COLUMN_TAG_LABEL='columnTag';var COLUMN_NAME_LABEL='columnName';var COLUMN_PROCESS_LABEL='process';var ROW_NUM_TAG='rowNumber';var classes={ODD_ROW:"odd",EVEN_ROW:"even",PAGEBAR_DIV:"pagebar",TOTAL_ROW:"totalRow",TOTAL_PAGE:"totalPage",PAGES_DIV:"pages",CURRENT_PAGE:"currentPage"};var text={PAGEBAR_PREV:"上一頁",PAGEBAR_NEXT:"下一頁",PAGEBAR_FIRST:"最前頁",PAGEBAR_LAST:"最末頁",PAGEBAR_TOTAL_ROW:"共{0}筆",PAGEBAR_PAGE:"第{0}頁/共{1}頁"};var url=loadUrl;var table=null,tbody=null,thead=null,tfoot=null;var pagebarDiv=null,totalRowDiv=null,totalPageDiv=null,pageDiv=null;var preA=null,nextA=null,firstA=null,lastA=null,pagesA=[];var pageCache=[];var p=0;var pp=perPage;var totalPage=Math.ceil(totalRow/perPage);initial();function initial(){if(totalRow==0){return;}
table=$('<table></table>');tbody=$('<tbody></tbody>');thead=$('<thead></thead>');tfoot=$('<tfoot></tfoot>');var tr=$('<tr></tr>');for(var i=0;i<column.length;i++){var th=$('<th>'+column[i][COLUMN_NAME_LABEL]+'</th>');tr.append(th);}
thead.append(tr);tfoot.append(tr.clone());table.addClass(tableClass);table.append(thead);table.append(tfoot);table.append(tbody);pagebarDiv=$('<div></div>');totalRowDiv=$('<div></div>');totalPageDiv=$('<div></div>');pageDiv=$('<div></div>');totalRowDiv.addClass(classes.TOTAL_ROW);totalPageDiv.addClass(classes.TOTAL_PAGE);pageDiv.addClass(classes.PAGES_DIV);pagebarDiv.addClass(classes.PAGEBAR_DIV);totalRowDiv.text(text.PAGEBAR_TOTAL_ROW.replace('{0}',totalRow));totalPageDiv.text(text.PAGEBAR_PAGE.replace('{0}',(p+1)).replace('{1}',totalPage));pagebarDiv.append(totalRowDiv);pagebarDiv.append(pageDiv);pagebarDiv.append(totalPageDiv);preA=$('<a href="#">'+text.PAGEBAR_PREV+'</a>');nextA=$('<a href="#">'+text.PAGEBAR_NEXT+'</a>');firstA=$('<a href="#">'+text.PAGEBAR_FIRST+'</a>');lastA=$('<a href="#">'+text.PAGEBAR_LAST+'</a>');for(var i=0;i<totalPage;i++){pagesA[i]=$('<a href="#">'+(i+1)+'</a>');}
pageDiv.append(firstA);pageDiv.append(preA);for(var i=0;i<totalPage;i++){pageDiv.append(pagesA[i]);}
pageDiv.append(nextA);pageDiv.append(lastA);preA.click(function(e){if(p!=0){changePage(p-1);}return false;});nextA.click(function(e){if(p!=totalPage-1){changePage(p+1);}return false;});firstA.click(function(e){if(p!=0){changePage(0);}return false;});lastA.click(function(e){if(p!=totalPage-1){changePage(totalPage-1);}return false;});for(var i=0;i<totalPage;i++){pagesA[i].click(function(e){var targetA=$(e.target?e.target:e.srcElement);var targetP=targetA.text()-1;if(p!=targetP){changePage(targetP);}return false;});}
outDiv.empty();outDiv.append(pagebarDiv);outDiv.append('<div style="clear:both; height:1px; width:1px;">&nbsp;</div>');outDiv.append(table);changePage(p);}
function render(){for(var i=0;i<totalPage;i++){pagesA[i].removeClass(classes.CURRENT_PAGE);if(i==p){pagesA[i].addClass(classes.CURRENT_PAGE);}else if(i<p-5||i>p+5){pagesA[i].hide();}else{pagesA[i].show();}}
totalPageDiv.text(text.PAGEBAR_PAGE.replace('{0}',(p+1)).replace('{1}',totalPage));for(var i=0;i<pageCache[p].length;i++){var row=pageCache[p][i];var tr=$('<tr></tr>');tr.addClass((i+1)%2==0?classes.EVEN_ROW:classes.ODD_ROW);tr.attr(ROW_NUM_TAG,i);for(var j=0;j<column.length;j++){var columnData=row[column[j][COLUMN_TAG_LABEL]]==undefined?"":row[column[j][COLUMN_TAG_LABEL]];var td=$('<td>'+columnData+'</td>');td.attr(COLUMN_TAG_LABEL,column[j][COLUMN_TAG_LABEL]);td.attr(ROW_NUM_TAG,i);if(column[j][COLUMN_PROCESS_LABEL]!=undefined){column[j][COLUMN_PROCESS_LABEL](row,td);}
tr.append(td);}
tbody.append(tr);}}
function changePage(page){function changePageProcess(){tbody.empty();p=page;render();}
if(pageCache[page]==undefined){loadPage(page,pp,changePageProcess);}else{changePageProcess();}}
function loadPage(page,perPage,callback){runAjax(url,{p:page,pp:perPage},'GET',function(xml){pageCache[page]=jQuery.parseJSON($(xml).find('json').text());callback();});}}
