/*************************************************
zhouji add script 091103  
13912699233@139.com
*************************************************/

/*
字符串处理类
*/
var zjString=function(str)
{
	this.MeStr=str || "";	
};
zjString.sLeft=function(str,int)
{
	var s=new zjString(str);
	return s.Left(int);
}
zjString.Left=function(str,intLen)
{
	var me=new zjString(str);
	return me.Left(str);
}
zjString.prototype.Left=function(intLen)
{
	var sa=this.MeStr.split('');
	var inti=0;
	for(var i in sa)
	{
		if(sa[i].charCodeAt(0)<=0  || sa[i].charCodeAt(0)>255)
		{
			inti=inti+2;
		}else{
			inti++;	
		}
		if(inti>intLen)
		{
			return this.MeStr.substring(0,i)+"...";
		}
	}
	return this.MeStr;
}
//对字符串编码,采用int进行代码偏移,默认57907896,可以不写
zjString.encrypt1=function(str,int)
{
	var me=new zjString(str);
	return me.encrypt1(int);
}
zjString.prototype.encrypt1=function(int)
{
	if(int==null)int=57907896;
	var sa=this.MeStr.split('');
	var str1="";
	for(var i in sa)
	{
		str1+="&"+(sa[i].charCodeAt(0)+int);
	}
	return str1;
}
//对字符串解码,采用int进行代码偏移,默认57907896,可以不写
zjString.decryption1=function(str,int)
{
	var me=new zjString(str);
	return me.decryption1(int);
}
zjString.prototype.decryption1=function(int)
{
	if(int==null)int=57907896;
	var sa=this.MeStr.split('&');	
	var str1="";
	for(var i=1;i<sa.length;i++){
		var str2=sa[i];

		str1+=""+ String.fromCharCode( (str2-int));
	}
	return str1;
}
//***********************************************************公用的方法
function sLeft(str,int)
{
	var s=new zjString(str);
	return s.Left(int);
}

//对分页资料进行处理的类
	/*
	options:
	{
		Data:数据,jquery返回的json类型资料
		PageSize:每页数量
		PageStart:显示的记录的起始位置
		CallBack: 数据循环显示的回调函数
		CallBackBefort:数据循环显示前使用的回调函数
	}
	AttriBute:
	{
		PageSize:每页数量
		PageStart:起始资料
	}
	function:
	{
		SetData(数据源,是否设置起始记录位置为0):重新设置一个数据源
		PageCount():当前数据源的记录总数
		CallBack():
		CallBackBefore():
		get():处理数据,获得相关的正确的分页资料,如果实际位置小于0 则置成第一页,如果实际位置大于记录数,则设置成最后一页
		Show(跳转参数):根据参数,处理分页数据,并且执行两个回调函数(0:第一页,1:上一页,2:下一页 ,其他:最后页)
	}
	
	*/
var zjPagination=function(options)
{
	var options=options || [];
	
	//把数据封装起来,不允许从外面再更新数据
	var _Data=options.Data || [];
	this.Data=function()
	{
		return _Data;	
	}
	this.SetData=function(o,blnRefStart)
	{
		blnRefStart=blnRefStart||true;
		_Data=o || this._Data;
		if(blnRefStart)
		{
			this.PageStart=0;	
		}
	}
	//分页数量 默认10条记录一页
	this.PageSize=options.PageSize || 10 ;
	//起始记录位置
	this.PageStart=options.PageStart || 0;
	//记录总数
	this.PageCount=function()
	{
		return $(_Data).size();
	}
	//数据循环时候的回调函数  i:数据的索引   items:对应对象
	this.CallBack=options.CallBack || function(i,items){ return [];}
	//在数据循环回调前执行的函数
	this.CallBackBefore=options.CallBackBefore || function(){}
	this.get=function()
	{
		var intSize=this.PageCount();
		
		if(this.PageStart>=intSize)
		{
			this.PageStart=parseInt(intSize/this.PageSize)*this.PageSize;
			if(this.PageStart>=intSize)
			{
				this.PageStart=intSize-this.PageSize;
			}
		}
		if(this.PageStart<0)
		{
			this.PageStart=0;
		}
		
		var refO=new Object();
		var o=$(this.Data() || []);
		if(o.size()>=0){
			var j=0;
			for(var i=this.PageStart;i<o.size();i++)
			{
				if(j>=this.PageSize)
				{
					break;
				}
				refO[j]=o[i];
				j++;
			}
			//this.PageCount=intSize;
			
			return refO;
		}else{
			return [];	
		}
	}
	
	//获得最开始资料
	this.First=function()
	{
		this.PageStart=0;
		return this.get();
	}
	//获得最后一页资料
	this.Last=function()
	{
		this.PageStart=this.PageCount();
		return this.get();
	}
	//上翻页
	this.Up=function()
	{
		this.PageStart=this.PageStart-this.PageSize;
		return this.get();
	}
	//下翻页
	this.Down=function()
	{
		this.PageStart=this.PageStart+this.PageSize;
		return this.get();
	}
	
	this.Show=function(intPageType)
	{
		intPageType=intPageType || 0;
		var o=[];
		switch(intPageType)
		{
			case 0:
				o=this.First();
			break;
			case 1:
				o=this.Up();
			break;
			case 2:
				o=this.Down();
			break;
			default:
				o=this.Last();
			break;
		}

//		o=this.get();
		this.CallBackBefore();
		$.each(o,this.CallBack);
	}
}








