$.fn.pager = function(clas, options) {
	var settings = {
		navId: 'nav',
		navClass: 'nav',
		navAttach: 'append',
		highlightClass: 'highlight',
		prevText: '&laquo;',
		nextText: '&raquo;',
		linkText: null,
		linkWrap: null,
		linkUrl:null,
		linkCd :null,
		paramnm :'&start',
		otherparam:null,
		height: null,
		total_cnt:null,
		pg_cnt:null,
		tblID:null,
		tblClass:null,
		initInd:null
	}


	if(options) $.extend(settings, options);
	
	return this.each( function () {
		var me = $(this);
		var size;
		//var ind = 0;		
		var ind   = 0;
		var nodata= "sorry no data";		
		var navid = '#'+settings.navId;
		var tblid = '#'+settings.tblID;
		
		function init () {
			//alert("init start");
			if(settings.initInd != null ){
				ind = settings.initInd;
				////alert("ind"+ind);
			}
			//for pages change
			if(settings.linkText == null ){
				if( (settings.total_cnt%settings.pg_cnt) == 0 ){ 
					size = parseInt(settings.total_cnt/settings.pg_cnt);
				}else{
					size = parseInt(settings.total_cnt/settings.pg_cnt)+1;
				}
			}else{
			//for text
				size = settings.linkText.length;
			}

			if(settings.height == null) {
				settings.height = getHighest();
			}
			if(size > 0) {
				//alert("start maketbl");
				makeTdiv();
				makeNav();
				setData();
				show();
				highlight();
			}
			sizePanel();
		}
		function makeNav () {
			var str = '<div id="'+settings.navId+'" class="'+settings.navClass+'">';
			str += '<a href="#" rel="prev">'+settings.prevText+'</a>';

			for(var i = 0; i < size; i++) {
				var j = i+1;
				str += '<a href="#" rel="'+j+'">';
				str += (settings.linkText == null) ? j : settings.linkText[i];				
				str += '</a>';
			}

			str += '<a href="#" rel="next">'+settings.nextText+'</a>';
			str += '</div>';

			str += '</div>';

			switch (settings.navAttach) {		
				case 'before':
					$(me).before(str);
					break;
				case 'after':		
					$(me).after(str);
					break;
				case 'prepend':
					$(me).prepend(str);
					break;
				default:
					$(me).append(str);
					break;
			}
		}
		function makeTdiv () {
			var str = "";
			//for(var i = 1; i < size; i++) {
			for(var i = 0; i < size; i++) {
				var j = i + 1;
				str += "<div id=\""+settings.tblID+j + "\" class=\""+settings.tblClass+"\">" + nodata + "</div>";
			}
			$(me).append(str);
			
		}
		function show () {
			$(me).find(clas).not(navid).hide();
			var id = tblid + (ind + 1);

			//alert("show id:"+id);

			var show = $(id);
			$(show).show();
		}
		
		function highlight () {
			$(me).find(navid).find('a').removeClass(settings.highlightClass);
			var show = $(me).find(navid).find('a').get( (ind + 1) );			
			$(show).addClass(settings.highlightClass);
		}

		function sizePanel () {
			if($.browser.msie) {
				$(me).find(clas).not(navid).css( {
					height: settings.height
				});	
			} else {
				$(me).find(clas).not(navid).css( {
					minHeight: settings.height
				});
			}
		}
		function getHighest () {
			var highest = 0;
			$(me).find(clas).not(navid).each(function () {
				
				if(this.offsetHeight > highest) {
					highest = this.offsetHeight;
				}
			});
			highest = highest + "px";
			return highest;
		}
		function getNavHeight () {
			var nav = $(navid).get(0);
			return nav.offsetHeight;
		}
		function linkWrap () {
			$(me).find(navid).find("a").wrap(settings.linkWrap);
		}

		//request
		function setData()
		{
			//alert("setDatstart");

			var tblind = ind + 1;							//plus1 count for tbldiv
			var cd = "";
			if(settings.linkCd == null ){
				cd = settings.pg_cnt*ind;
			}else{
				////alert("ind=".ind);
				cd = settings.linkCd[ind];
				//alert("cd ="+cd);
			}
			var url = settings.linkUrl;
			var query = settings.otherparam + settings.paramnm + '=' + cd;

			//alert("query="+query);
			//alert(url);

		    var http = new JKL.ParseXML( url, query );
			http.async( onloaded );
			http.parse();                  			  	//download
		}
		//for receive
		function onloaded(data){
			if(data.lists.head.count > 0){
				//alert("ok");
				var str = makeTbl(data.lists.head.count,data.lists);
					var id = tblid + (ind + 1);
					var tbl = $(me).find(id);
					tbl.empty();
					tbl.html(str);
			}else{
				//alert("ng");
			}
		}

		init();
		$(this).find(navid).find("a").click(function () {
			if($(this).attr('rel') == 'next') {
				if(ind + 1 < size) {
					ind = ind+1;
				}
			} else if($(this).attr('rel') == 'prev') { 
				if(ind > 0) {	
					ind = ind-1;
				}
			} else {		
				var j = $(this).attr('rel');	
				ind = j-1;		
			}

			//var j = $(this).attr('rel');	
			//ind = j-1;		
			var id = tblid + (ind + 1);
			var tbl = $(me).find(id);

			if( tbl.text() == nodata ){
				//alert("setdata start");
				setData();
			}
			show();
			highlight();
			return false;
		});
	});
}