/*
=========================================================
 Version: Jax 0.5
 Date: 2006-5-1
 Script Written by Utoper Jax Group
 Copyright (C) 2006 Utoper Corp. All rights reserved.
 Web: http://Jax.Utoper.com
 Email: UtoJax@163.com
=========================================================
****************************************************************** 
** 名: init  属于JFC － Jax Foundation Class
** 创建：welsham 2006-7-8  修改: welsham 2006-7-8
** 描述: parser之初始化模块，填充界面各种规范数据，如时间、列表
** 修改描述: 
******************************************************************
*/

//**************初始化parser对象和init对象*************************
if(typeof parser != "object") { var parser={}; }
if(typeof parser.init != "object") { parser.init={}; }

/****************************************************************** 
** 名: time  属于JFC － Jax Foundation Class
** 创建：welsham 2006-7-8  修改: welsham 2006-7-8
** 描述: parser.init的时间初始化函数
** 修改描述: 
******************************************************************/
//**************初始化时间列表框***********************************
parser.init.initTime=function(o,start,end,_default)
{
	var items='',sOption,i;
	removeAllOption(o);
	for(i=start;i<=end;i++) 
	{	
		o.options[o.length]=new Option(i,i);
		if(_default && _default==i) o.options[o.length-1].selected=true;
	}
};
parser.init.getDays=function(year,month)
{
	var days=31;year=parseInt(year);month=parseInt(month);
	switch(month)
	{
		case 4:case 6:case 9:case 11: {days=30;break;}
		case 2:
		{
			if( (year%4==0 && year%100!=0) || year%400==0 ) days=29;
			else days=28;
			break;
		}
	}
	return days;
};

//**************绑定日和月****************************************
parser.init.bindTime=function(oYear,oMonth,oDay)
{
	var year=oYear.options[oYear.selectedIndex].value;
	var month=oMonth.options[oMonth.selectedIndex].value;
	var day=oDay.options[oDay.selectedIndex].value;
	var days=parser.init.getDays(year,month);
  		
	parser.init.initTime(oDay,1,days,day);
};
//**************获取时间段***************************************
parser.init.getTimePart=function(_time,_part)
{
	var e= "([0-9]{4})\-([0-9]{1,2})\-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})";
	var p=new RegExp(e);
	var times=_time.match(p);
	switch(_part)
	{
		case "date":
		{
			return times[1]+"-"+times[2]+"-"+times[3];	
		}
		case "time":
		{
			return times[4]+":"+times[5]+":"+times[6];		
		}
		case "y":
		{
			if(times.length>=1) return times[1];
			else return "";
		}
		case "m":
		{
			if(times.length>=2) return times[2];
			else return "";
		}
		case "d":
		{
			if(times.length>=3) return times[3];
			else return "";
		}
		case "h":
		{
			if(times.length>=4) return times[4];
			else return "";
		}
		case "mm":
		{
			if(times.length>=5) return times[5];
			else return "";
		}
		case "s":
		{
			if(times.length>=6) return times[6];
			else return "";
		}
		case "y":
		{
			if(times.length>=1) return times[1];
			else return "";
		}
	}
};

/****************************************************************** 
** 名: list  属于JFC － Jax Foundation Class
** 创建：welsham 2006-7-8  修改: welsham 2006-7-8
** 描述: parser.init的列表初始化函数
** 修改描述: 
******************************************************************/
//**************列表初始化****************************************
//参数：DD-数据字典,如place；_key-选中键，不空将填充该键下级键；isStrict-有(false)无(true)“不限”或“所有”项；
//_default-默认键值; list节点对象，可多级
//情形：默认值；DD和_key与节点对应，可选取DD不同层级往下递推；DD子项不完全时，以父项填充；
//设定不同参数，实现list多级之间关联
parser.init.initList=function(DD,_key,isStrict,_default)
{
	var i,j,key,flag,o,pKey=null,childNodes,sOption,defaults=[];
	//默认值的父树计算
	if(_default && DD[_default])
	{
		defaults[0]=_default;
		key=_default;
		while(DD[key].parent&&DD[key].parent!="0"&&DD[key].parent!=_key)
		{
			key=DD[key].parent;defaults[defaults.length]=key;
		}
		defaults.reverse();
	}
	else _default=false;
	//遍历节点，填充数据
	for(i=4;i<arguments.length;i++)
	{
		o=arguments[i];
		removeAllOption(o);
		//遍历数组，寻找子节点填充
		if(i==4) pKey=_key;
		childNodes=parser.JSON.childNodes(DD,pKey);
		//没有子项，用父项值填充
		if(childNodes.length==0)
		{
			o.options[o.length]=new Option(DD[pKey].value,pKey);
			continue;
		}
		//循环，填充
		flag=true;
		for(j in childNodes)
		{
			if(isStrict && (childNodes[j]=="0" || childNodes[j]=="0"+pKey) ) continue;
			o.options[o.length]=new Option(DD[childNodes[j]].value,childNodes[j]);	
			if(flag) {pKey=childNodes[j];flag=false;}
			if(_default && i-4<defaults.length && childNodes[j]==defaults[i-4])
			{ o.options[o.length-1].selected=true;pKey=childNodes[j]; }
		}
	}
};

//**************移动列表数据*************************************
//参数：_max-最多可移动个数,0不限; list节点对象，索引1为移动到的目标对象，索引2开始为源对象，多级（低到高）
parser.init.moveList=function(_max)
{
	var i,toO=arguments[1],fromO=arguments[2],toValue,toText="";
	if(fromO.length<=0) return false; //源对象是否有效
	if(fromO.selectedIndex<0) fromO.options[0].selected=true;
	if(_max>0 && toO.length>=_max) {alert("您只能最多选择" + _max + "个!");return false;} //不超过最大可移动数
	//目标对象重复判断
	toValue=fromO.options[fromO.selectedIndex].value;
	for(i=0;i<toO.length;i++)
	{
		if(toValue==toO.options[i].value) return false;
	}
	//获取父树,生成目标文本
	for(i=arguments.length-1;i>2;i--)
	{ 
		if(toText) toText += ">>" + arguments[i].options[arguments[i].selectedIndex].text;
		else toText = arguments[i].options[arguments[i].selectedIndex].text;
	}
	if(toText) toText += ">>" + fromO.options[fromO.selectedIndex].text;
	else toText = fromO.options[fromO.selectedIndex].text;
	toO.options[toO.length]=new Option(toText,toValue);	
	fromO.remove(fromO.selectedIndex);
	fromO.reset;
};

//**************删除列表数据*************************************
//参数：list节点对象，索引0为源对象
parser.init.removeList=function()
{
	var fromO=arguments[0];
	if(fromO.length<=0) return false;
	if(fromO.selectedIndex==-1) fromO.options[0].selected=true;
	fromO.remove(fromO.selectedIndex);
	fromO.reset;
	return true;
};

//**************初始化列表时进行左右数据对比***********************
//list节点对象，索引0为源对象，索引1为目标对象
parser.init.compareList=function()
{
	var i,j,fromO=arguments[0],toO=arguments[1],toValue;
	if(toO.length<=0) return;
	for(i=0;i<toO.length;i++)
	{
		var toValue=toO.options[i].value;
		for(j=0;j<fromO.length;j++)
		{
			if(fromO.options[j].value==toValue)
			{
				fromO.remove(j);fromO.reset;
			}
		}
	}
};

//**************全选列表****************************************
parser.init.selectAll=function()
{
	var i,o=arguments[0];
	for(i=0;i<o.length;i++)
	{
		o.options[i].selected=true;
	}
};