﻿//加载图片
var loadingPic = '<img src="/images/loading.gif">';
//Ajax文件路径
var htmlPath = '/AjaxHtml/';
var ajaxPath = '/Ajax/';
var ajaxForm = '/My/AjaxForm/';


Ajax.Responders.register({
    onCreate:function(){
       // Biuren.clearText('help','pophelp');
        //Biuren.showText('status',requestLoading,'help');
    },
    onComplete:function(){
       // Biuren.clearText('status');
    }
});

//静态类，含有常用方法
var Cvtt = new function(){

	//判断浏览器版本
	this.isIE7 = navigator.userAgent.search('MSIE')>0&&navigator.userAgent.search('7.')>0;
	this.isIE6 = navigator.userAgent.search('MSIE')>0&&navigator.userAgent.search('6.')>0;
	this.isIE = navigator.userAgent.search('MSIE')>0;
	this.isOpera = navigator.userAgent.indexOf('Opera')>-1;
	this.isMoz = navigator.userAgent.indexOf('Mozilla/5.')>-1;

	// 去掉字符串左空格
	this.lTrim = function(str){
		return str.replace(/^\s*/,"");
	}
	
	// 去掉字符串右空格
	this.rTrim = function(str){
		return str.replace(/\s*$/,"");
	}
	
	// 去掉字符串左右空格
	this.trim = function(str){
		// Trim Extra Spaces & Newlines
		if(str=='' || typeof str == 'undefined'){ return ""; }
		str=str.replace(/(^\s*|\s*$)/g,"");
		str=str.replace(/(\r*\n){3,}/g,"\n\n");
		str=str.replace(/\r/g,"");
		
		return str;
	}
	
	// 去掉HTML代码
	this.cleanHTML = function(str){
		var re=new RegExp("\<scr"+"ipt([^\<\>]+)\>","ig");
		str=str.replace(re,"&lt;script$1&gt;");
		re=new RegExp("\<\/scr"+"ipt\>","ig");
		str=str.replace(re,"&lt;/script&gt;");
		delete re;

		str=str.replace(/\<iframe(\/| \/|)\>/ig,"&lt;iframe$1&gt;");
		str=str.replace(/\<\/iframe\>/ig,"&lt;/iframe&gt;");

		str=str.replace(/\<br(\/| \/|)\>/ig,"<br/>");

		return str;
	}

	// 检测长度
	this.len = function(str){
		var str = str.replace(/[^\x00-\xff]/g,"**"); 
		return str.length;
	}
	
	//判断是否数字
	this.isInt = function(str){
		var reg = /^\d+$/; 
		return reg.test(str)
	}
	
	//是否包含中文
	this.isCnChar = function(str){
		str = this.trim(str);
		var reg = /[^\x00-\xff]/;
		return reg.test(str)
	}
    
    //是否是有效用户名，英文字符串，下划线，中文
    this.isValidName = function(str)
    {
        var reg = /^(\w|_|[\u4e00-\u9fa5]){1,40}$/;
        return reg.test(str)
    }

	//是否英文
	this.isEnChar = function(str){
		var reg = /^[a-zA-Z]+$/;
		if (!reg.test(str))
		{
			return false;
		}
		return true;
	}
	
	//是否双字节（包括中文）
	this.isDoubleChar = function(str){
		var reg = /^[^\x00-\xff]+$/;
		if (!reg.test(str)){
			return false;
		}
		return true;
	}	
	
	//判断Email
	this.isEmail = function(str){
		var reg = /^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.){1,4}[a-z]{2,3}$/i; 
		return reg.test(str)
	}
	
	//判断手机
	this.isMobile = function(str){
		var reg = /^1[35][0-9]{9}$/;
		return reg.test(str)
	}
	
	//检查是否是正确的日期
	this.isDate = function(sDate){
		var iaMonthDays		= [31,28,31,30,31,30,31,31,30,31,30,31]
		var iaDate			= new Array(3)
		var year, month, day

		if (arguments.length != 1) return false
		iaDate = sDate.toString().split("-")
		if (iaDate.length != 3) return false
		if (iaDate[1].length > 2 || iaDate[2].length > 2) return false

		year	= parseFloat(iaDate[0])
		month	= parseFloat(iaDate[1])
		day		= parseFloat(iaDate[2])

		if (year < 1900 || year > 2100) return false
		if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1]=29;
		if (month < 1 || month > 12) return false
		if (day < 1 || day > iaMonthDays[month - 1]) return false
		return true
	}

	//是否是域名
	this.isDomain = function(str){
		var bCheck = false
		var reg =/^([0-9a-z\u4E00-\u9FA5]([a-z0-9\u4E00-\u9FA5\-]*[a-z0-9\u4E00-\u9FA5])?\.){1,3}[a-z]{2,6}$/gi;
		
		if(reg.test(str)){
			reg = /(--)/;
			if(!reg.test(str))
				bCheck = true;
		}
		return bCheck;
	}
	
	// HTMLEncode String
	this.HTMLEncode = function(str){
		if(str=='' || typeof str == 'undefined'){ return ""; }
		str = str.replace(/\&/g, "&amp;");
		str = str.replace(/\>/g, "&gt;");
		str = str.replace(/\</g, "&lt;");
		str = str.replace(/\t/g, "&nbsp;&nbsp;");
		str = str.replace(/\"/g, "&quot;");
		str = str.replace(/\'/g, "&#39;");
		str = str.replace(/\n/g, "<br />");
		return str;
	}
	
	//设置对象className
	this.SetClass = function(id,className){
	    $(id).setAttribute('class',className);
        $(id).setAttribute('className',className);
	}
	
	//显示提示文字
	this.showText = function(emid, str,strCss){
		var e = $(emid);
		if(!e) return;
		e.style.display = '';
		e.innerHTML = str;

		if(typeof strCss != 'undefined'){
			this.SetClass(emid,strCss);
		}
	}
	
	this.scrollTop = function() {window.scrollTo(0, 0)};
	
	//显示提示文字，并获焦点
	this.inputErr = function(fid, emid, str,strCss,setTop){
		var f = $(fid);
		this.showText(emid, str,strCss);
		if(!f) return false;
		if(f.disabled) return false;
		f.focus();
		if(typeof setTop != 'undefined') this.scrollTop();
		return false;
	}
	
		//显示提示文字
	this.showWarn = function(emid, str,strCss){
		var e = $(emid);
		if(!e) return;
		e.style.display = '';
		e.innerHTML = str;

		if(strCss!=undefined){
			e.className += ' ' + strCss;
		}
	}
	
	//消除提示
	this.clearText = function(){
		for (var i = 0; i < arguments.length; i++){
			var element = $(arguments[i]);
			if(element){
				this.SetClass(element,'');
				element.innerHTML = '';
				element.style.display = 'none';
			}
		}
	}
	
	//清除CSS,bText是否清除控件值
	this.clearCss = function(emid, bText){
		var e = $(emid);
		if(!e) return;
		his.SetClass(emid,'');
		if(bText){
			if(e.tagName.toLowerCase()=="input"||e.tagName.toLowerCase()=="textarea")
				e.value = "";
			else
				e.innerHTML = "";
		}
	}
	
	//回车触发事件
	this.enterSubmit = function(evt,btnName){
		evt = evt ? evt : (window.event ? window.event : null);
		
		if (evt.keyCode==13){
			if($(btnName)!=null){
				$(btnName).click();
			}
		}
	}
	
	//禁止一些键
	this.DisableKeyDown = function() { 
		if ((window.event.altKey)&&((window.event.keyCode==37)|| (window.event.keyCode==39))){ 
			event.returnValue=false; 
		} 
		if (event.keyCode==116){ //F5  
			event.keyCode=0; 
			event.returnValue=false; 
		} 
		if (event.keyCode==122){ //F11
			event.keyCode=0; 
			event.returnValue=false; 
		} 
		if ((event.ctrlKey)&&(event.keyCode==7)){ //Ctrl+n 
			event.returnValue=false; 
		} 
		if ((event.shiftKey)&&(event.keyCode==121)){ //shift+F10 
			event.returnValue=false; 
		} 
	} 
	
	//Cookie
	this.cookie = {
		get : function(n){
			var v = '',
			c = ' ' + document.cookie + ';',
			s = c.indexOf((' ' + n + '='));
			if (s >= 0) {
				s += n.length + 2;
				v = unescape(c.substring(s, c.indexOf(';', s)));
			}
			return v;
		},
		set : function(n,v){
			var a=arguments,al=a.length;
			document.cookie = n + '=' + v +
			((al>2&&a[2]!='') ? ';expires=' + (typeof(a[2])=='object' ? a[2] : (new Date(a[2] * 1000)).toGMTString()) : '') +
			';path='    + ((al>3&&a[3]!='') ? a[3] : '/') +
			';domain='  + ((al>4&&a[4]!='') ? a[4] : 'www.biuren.com');
		},
		checksub : function(sCookie,s){
			var aParts = sCookie.split('&'),nParts = aParts.length,aKeyVal;
			if (nParts==1) {
				return sCookie.indexOf(s);
			} else {
				for(var i=0; i<nParts; i++){
					aKeyVal = aParts[i].split('=');
					if(aKeyVal[0]==s){
						return i;
					}
				}
			}
			return -1;
		},
		getsub : function(n,s){
			var sCookie = this.get(n);
			var nExists = this.checksub(sCookie,s);
			if (nExists>-1) {
				return sCookie.split('&')[nExists].split('=')[1];
			} else if (sCookie.indexOf(s)>0) {
				return sCookie.split('=')[1];
			}
			return '';
		},
		setsub : function(n,s,v){
			var sCookie = this.get(n),a=arguments,al=a.length;
			var aParts = sCookie.split('&');
			var nExists = this.checksub(sCookie,s);
			if (sCookie=='') {
				sNewVal=(s+'='+v).toString();
			} else {
				if(nExists==-1){nExists=aParts.length;}
				aParts[nExists]=s+'='+v;
				sNewVal = aParts.join('&');
			}
			return this.set(n,sNewVal,(a[3]||''),(a[4]||'/'),(a[5]||'www.oray.net'));
		}
	}
	
	//根据URL参数字符串，读取变量值
	this.getParam = function(s, f){
		if(typeof(s)!='string')
			return '';
		var a = s.split('&');
		for(var i=0; i<a.length; i++){
			var p = a[i].split('=',2)
			if(p[0]==f){
				if(p.length==2)
					//return unescape(p[1]);
					return p[1];
				else
					return '';
			}
		}
		return '';
	}
	
	// HTMLEncode String
	this.HTMLEncode = function(str){
		if(str=='' || typeof str == 'undefined'){ return ""; }
		str = str.replace(/\&/g, "&amp;");
		str = str.replace(/\>/g, "&gt;");
		str = str.replace(/\</g, "&lt;");
		str = str.replace(/\t/g, "&nbsp;&nbsp;");
		str = str.replace(/\"/g, "&quot;");
		str = str.replace(/\'/g, "&#39;");
		str = str.replace(/\n/g, "<br />");
		return str;
	}
	
	//执行Script
	this.evalScripts = function(str){
		var scripts, re;
		re = new RegExp("(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)","ig");
		re.exec(str);
		scripts = RegExp.$1;
		eval(scripts);
	}

	// 包含js或css文件 
	this.importFile = function(path,type,title){
		var s,i;
		if(type == "js"){
			var ss=document.getElementsByTagName("script");
			for(i=0;i<ss.length;i++){
				if(ss[i].src && ss[i].src.indexOf(path)!=-1)return;
			}
			s		=	document.createElement("script");
			s.type	=	"text/javascript";
			s.src	=	path;
		}else if(type=="css"){
			var ls=document.getElementsByTagName("link");
			for(i=0;i<ls.length;i++){
				if(ls[i].href && ls[i].href.indexOf(path)!=-1)return;
			}
			s=document.createElement("link");
			s.rel="alternate stylesheet";
			s.type="text/css";
			s.href=path;
			s.title=title;
			s.disabled=false;
		}
		else return;
		var head=document.getElementsByTagName("head")[0];
		head.appendChild(s);
	} 
	
	//设定到时之后执行什么动作
	this.doTimeout = function(DoType,Action,Times)
	{
		if (Times=="") Times = 1;
		if (typeof(Times)!="number") Times = 1;		
		switch(DoType.toLowerCase()){
			case "go":
				window.setTimeout("top.window.location='"+ Action +"'",Times);
				break;
			case "alert":
				window.setTimeout("alert('"+ Action +"')",Times);
				break;
			case "js":
				window.setTimeout("'"+ Action.toString() +"'",Times);
				break;
			case "top":
				window.setTimeout(Action,Times);
				break;
			default:
				alert("Nothing will do!");
				break
		}		
	}
}

//得到文本域输入文字多少,并在指定控件中显示剩下字数
function limitText(field,maxlimit,showID) 
 {
      var str = $F(field);
      str = str.replace(/[^\x00-\xff]/g,"**"); 

      if (str.length > maxlimit)
      {
          str = getByteOfNum($F(field),maxlimit)
          $(field).value=str;
      }
      $(showID).update(maxlimit - str.replace(/[^\x00-\xff]/g,"**").length);   
 }
 
 function getByteOfNum(val, num)
 {
  var ch,bytenum=0;
  var rs = "";
  var pt = /[^\x00-\xff]/;
  for (var i=0; i < num; i++)
  {
   ch = val.substr(i, 1);
   if (ch.match(pt))
   {
    bytenum += 2;
    if (bytenum > num)
    {
     return rs;
    }
   }else
   {
    bytenum += 1;
   }
   rs += ch;
   if (bytenum == num)
   {
    return rs;
   }
  }
  return rs;
 }

//全选复选款
function selectDel(obj,byName)
{
    var target = $(byName);
    
    var value = false ;
    
    if (obj.checked == true)
    {
        value = true;
    }
    
    for (var i = 0;i< target.length;i++)
        target[i].checked = value;
}

//得到复选框选择的个数
function selectTotal(byName)
{
    var target = $(byName);
    
    var count = 0;
    
    for(var i = 0;i< target.length;i++)
    {
        if (target[i].checked == true)
            count ++;
    }
    
    return count;
}

function selectByValue(target,values)
{
    var ary = values.split(',');
    for(var i = 0;i< target.length;i++)
    {
        if (ary.indexOf(target[i].value) != -1)
            target[i].checked = true;
    }
}

var BiurenGrid = {
	create : function(options){
		//获取父标签
		var parentTag = $(options.container);

		//创建一个<table>元素
		mytable = document.createElement("table");
		mytable.setAttribute("id",options.id);
		mytable.setAttribute("class",options.className);
		
		//创建表标题
		if(typeof(options.caption) != 'undefined')
		{
			var caption = mytable.createCaption();
			caption.innerHTML = options.caption;
		}
	
		//创建tbody
		var tbody = document.createElement("tbody");
		// 将<tbody>添加到<table>
		mytable.appendChild(tbody);
		
		//创建列表内容
		var newRow;	//新行对象
		var newCell;//新单元格对象
		var cellHtml;//单元格内容
		var temp;//临时变量
		var tempRow = options.template.row;		//行模板
		var ds = options.ds;//数据源
		//是否没有数据
		if(ds.length == 0)
		{
		    newRow = tbody.insertRow(-1);
		    newCell = newRow.insertCell(-1);
			newCell.innerHTML = options.noData;
		}
		for(var i = 0; i< ds.length;i++)
		{
		    if ( (i%options.col) == 0)
		    {
			    newRow = tbody.insertRow(-1);//插入新行在表的末尾
			    //表格行样式
			    if(typeof(tempRow.style) != 'undefined')
			    {
				    newRow.className = tempRow.style.className;
				    if(tempRow.style.type == 'switch' && i%2 != 0)
					    newRow.className = tempRow.style.className1;
			    }
			    temp = '';

			    //行事件
			    if(typeof(tempRow.event) != 'undefined')
			    {
				    for(var l = 0;l < tempRow.event.length;l++)
					    newRow.setAttribute(tempRow.event[l].name,tempRow.event[l].func);
			    }
            }

			//循环显示行的列数据
			var tempCell = options.template.cell; //列模板
			for(var j =0;j<tempCell.length;j++)
			{
				newCell = newRow.insertCell(-1);
				newCell.innerHTML = this.replaceParam(tempCell[j].text,this.getValueFromAry(ds[i],tempCell[j].value));
				if(typeof(tempCell[j].className) != 'undefined')
				    newCell.setAttribute("class",tempCell[j].className);
			}
		}

		 //创建表头
		if(typeof(options.template.head) != 'undefined')
		{
		    var newthead = mytable.createTHead();
		    var tempHead = options.template.head;//表头模板
		    newRow = newthead.insertRow(0);
		    for(var i = 0;i<tempHead.length;i++)
		    {	
			    newCell = newRow.insertCell(i)
			    newCell.innerHTML = tempHead[i].text;
		    }
		}
	 
		//创建表尾
		if(typeof(options.template.foot) != 'undefined' && ds.length != 0)
		{
			var newtfoot = mytable.createTFoot();
			var tempFoot = options.template.foot;//表尾模板
			var newtfootrow = newtfoot.insertRow(0);
			var newCell = newtfootrow.insertCell(0);
			temp = tempFoot.text;
			
			var viewState = '<input type="hidden" name="' +  options.id+ 'ViewState" id="' +  options.id+ 'ViewState" />';
			
			if(typeof(options.pageLink) != 'undefined')
			    temp = temp.replace('{0}',options.pageLink);
			
			newCell.innerHTML = '<div class="pagenav">' + viewState + temp + ' ' + '</div>';
			newCell.colSpan = options.template.cell.length*options.col;	
		}

		//将表格插入页面
		parentTag.appendChild(mytable);
	},
	
	chkAll:function(obj){
        var ary = document.getElementsByClassName('biurenchk');
        if(obj.checked == true)
            ary.each(function(s){s.checked = true;});
        else
            ary.each(function(s){s.checked = false;});
    },
    
    getChkValue:function(){
        var ary = document.getElementsByClassName('biurenchk');
        var result = [];
        ary.each(function (s){
            if(s.checked == true)
                result.push(s.value);
        });
        
        return result.toString();
    },
    
    delChkRow:function(){
        var ary = document.getElementsByClassName('biurenchk');
        var result = [];
        ary.each(function (s){
            if(s.checked == true)
            {
                var row = s.parentNode.parentNode;
                $(row).remove();  
            }
        });
        
        return result.toString();
    },

	show:function(json,options){
        $(options.container).update();
        if(typeof(json.Table) != 'undefined')
            Object.extend(options,{ds:json.Table.rows});
        else
             Object.extend(options,{ds:json.rows});

        this.create(options);
    },
	
	//根据一个事件返回行索引
	getRowIndexByEvent:function(event){
	    var obj = Event.element(event);
        var row = obj.parentNode.parentNode;
		var rIndex = row.sectionRowIndex;
		return rIndex;
		},
	
	//根据表行索引删除一行
	delRow: function(tableID,rowIndex){
		var mytable = $(tableID);
		var tbody = mytable.tBodies[0];
		if(tbody.rows.length > 0)
			tbody.deleteRow(rowIndex);
	},
	
	//获取一个数组中自定列的值，位置由1开始
	getValueFromAry : function(ary,value)
	{
	    var temp;
		var result = new Array(value.length);

		for(var i=0;i<value.length;i++)
		{
		    temp = ary[value[i].pos];
		    //为空处理或有默认值
		    if(typeof(temp) == 'undefined' || temp.length == 0) 
		    {
		        if(typeof(value[i].def) != 'undefined') 
		            temp = value[i].def;
		        else
		            temp = '';

		    }
            temp = temp.toString();
            
            //是否有转义
            if (typeof(value[i].parse) != 'undefined')
            {
                temp = value[i].parse[temp];
            }
            
		    if(value[i].isHtml != true)
		        temp = temp.escapeHTML();
		    
			result[i] = temp;
		}
		return result;
	},
	
	//替换参数
	replaceParam : function(text,value)
	{
		var result = text;
		var reg;
		for(var i=0;i<value.length;i++)
		{
		    reg =new RegExp('\{+' + i + '+\}','g')
			result = result.replace(reg,value[i]);
			}
		return result;
	},
    
    getPageNav:function(id,listOptions)
    {
       var pageSize = listOptions.row * listOptions.col;
       var pageIndex = listOptions.pageIndex;
       var pages = Math.floor((listOptions.total - 1)/ pageSize) + 1;
       
       var linkPrev = '';
       var linkNext = '';
       if(pageIndex > 1)
            linkPrev = '<a href="javascript:BiurenGrid.goto(\'' + escape(Object.toJSON({id:id,pageIndex:pageIndex - 1})) + '\')" title="上一页"> << </a>';
        if (pageIndex < pages)
            linkNext = '<a href="javascript:BiurenGrid.goto(\'' + escape(Object.toJSON({id:id,pageIndex:pageIndex + 1})) + '\')" title="下一页">>> </a>';
        
       var loop = '';
       for(var i = 1;i<= pages;i++)
       {
            if (i == pageIndex)
                loop += '<span class="current">' + i + '</span>';
            else
                loop += '<a href="javascript:BiurenGrid.goto(\'' + escape(Object.toJSON({id:id,pageIndex:i})) + '\')"> ' + i + ' </a>';
            
            if(i == 2 && pageIndex >= 9)
            {
               loop += '<span>…</span>';
               i = (pageIndex >= pages - 5) ? pages - 10 : pageIndex - 6;
            }
            if(i == 10 && pageIndex <= 8 || i == pageIndex + 4 && pageIndex >= 9 && pages - pageIndex > 6)
            {
                loop += '<sapn>…</span>';
                i = pages - 2;
            }
       }
        
       var result = linkPrev + loop + ' ' + linkNext;
       return result;
    },
    
    //显示表格
    goto : function(ajaxOptions,templateOptions)
    {
            //还原参数
            if(arguments.length == 1)
            {
                var obj = unescape(arguments[0]).evalJSON();
                var json = $F(obj.id + 'ViewState');
                json = unescape(json).evalJSON();
                ajaxOptions = Object.extend(json.ajax,{pageIndex:obj.pageIndex});
                templateOptions = json.template;
             }

            //更新插入容器ID
            Object.extend(templateOptions,{container:ajaxOptions.container});
      	    $(ajaxOptions.container).update('loading...');	
            var options = {
            method:'post',
            parameters: ajaxOptions.queryParams + '&pageSize=' + ajaxOptions.row * ajaxOptions.col + '&pageIndex=' + ajaxOptions.pageIndex,
            onFailure:function(){
                Biuren.showText('help',getErrorText('1000'),'error');
                Form.enable('biurenform');
            },
            onSuccess:function(transport)
                {
                    var json = transport.responseText.evalJSON();

                    //如果有分页,则创建分页导航
                    if(typeof(templateOptions.template.foot) != 'undefined'){
                        if (ajaxOptions.pageIndex == 1)
                            Object.extend(ajaxOptions,{"total":json['Table1'].rows[0]});//记录总数
                       var pagelink = BiurenGrid.getPageNav(templateOptions.id,ajaxOptions); //获取换页导航
                        Object.extend(templateOptions,{pageLink:pagelink});//将数据增加到表格模板中
                    } 
                    //传入显示行数与列数
                    Object.extend(templateOptions,{row:ajaxOptions.row,col:ajaxOptions.col});

                    //显示表格
                    BiurenGrid.show(json,templateOptions);

                    //如果有分页则将参数缓存到页面
                    if(typeof(templateOptions.template.foot) != 'undefined'){
                        templateOptions = Object.extend(templateOptions,{ds:[]});
                        var param = {ajax:ajaxOptions,template:templateOptions};
                        $(templateOptions.id + 'ViewState').value = escape(Object.toJSON(param));
                    }
                }
            }
        new Ajax.Request(ajaxOptions.url,options); 
    }
}
