/*function replaceString(string String, from String, to String) : replaces from with to in string*/
function replaceString(string, from, to)
{
	var i = string.indexOf(from);
	if (i == -1)
		return string;  //base case
	else
		return(string.substring(0,i-1) + to + replaceString(string.substring(i+1,string.length-1),from,to));
}

/*function trim (string String) : removes extra space(s) behind and in front of a string*/
function trim(v)
{
	return v.replace(/^\s+|\s+$/g, "");
	/*	len = v.length;
	if (len>0)
	{
		while (v.length>0 && v.substr(0,1)==' ')
			v = v.substr(1);
		while (v.length>0 && v.substr(v.length-1)==' ')
			v = v.substr(0,v.length-1);
	}
	return v
		String.prototype.Trim=Trim;
		
		function Trim() {return this.replace(/^\s+|\s+$/g, "");}
 */
}

/*function isdigit (number Integer) : checks whether a number consists of digits (1~9) only*/
function isdigit(v)
{
	if (isNaN(v))
		return false;
	else
	{
		vstr = v.toString();
		if (vstr.indexOf(".")!=-1)
			return false;
		if (vstr.indexOf("-")!=-1)
			return false;
		if (vstr.indexOf("+")!=-1)
			return false;
	}
	return true;
}

/*function isint (number Integer) : checks whether a number is a valid integer*/
function isint(v)
{
	if (isNaN(v))
		return false;
	else
	{
		vstr = v.toString();
		if (vstr.indexOf(".")!=-1)
			return false;
		if (vstr.indexOf("+")!=-1)
			return false;
	}
	return true;
}

/*function isvdate (date String) : checks whether a date string is validate*/
function isvdate(v)
{
	var datepattern=/^\d{4}\/\d{1,2}\/\d{1,2}$|^\d{1,2}\/\d{1,2}\/\d{4}$/
	if (datepattern.test(v))
	{
		vstr = v.toString();
		pos1 = vstr.indexOf("/");
		if (pos1==4)								//format: yyyy/mm/dd
		{
			y = vstr.substr(0,pos1);
			pos2 = vstr.indexOf("/",pos1+1);
			m = vstr.substring(5,pos2);
			d = vstr.substr(pos2+1);
		}
		else										//format: mm/dd/yyyy
		{
			pos2 = vstr.indexOf("/",pos1+1);
			m = vstr.substr(0,pos1);
			d = vstr.substr(pos1+1,pos2-pos1-1);
			y = vstr.substr(pos2+1);
		}
		if (y>0 && m>0 && m<13 && d>0 && d<32)
		{
			maxday = lastdayof(y,m);
			if (d>maxday)
				return false;
			else
				return true;
		}
		else
			return false;
	}
	else
		return false;
}

/*function isvdate (date String) : checks whether a date string is validate*/
function isvdatetime(v)
{
	var datepattern=/^\d{4}\/\d{1,2}\/\d{1,2}$|^\d{1,2}\/\d{1,2}\/\d{4}$/
	var timepattern = /^([01]?[0-9]|[2][0-3])(:[0-5][0-9])?$/
	var vdate = v.split(' ')[0];
	var vtime = v.split(' ')[1];
	if (! isvdate(vdate)) return false;
	if (!((vtime.length == 5) && timepattern.test(vtime))) return false;
	return true;
}

/*function lastdayof (year Integer,month Integer) : returns the last day of a month*/
function lastdayof(y,m)
{
	if (m==2)
	{
		if ((y%4 == 0) && (!((y%100 == 0) && (y%400 != 0))))
			return 29
		else
			return 28
	}
	else if ((m<=7 && m%2!=0) || (m>=8 && m%2==0))
		return 31
	else 
		return 30
}

/*function dateadd (interval Character,number Integer,date Datetime) : returns a date to which a specified time interval has been added*/
function dateadd(s,v,d)
{
	var d2 = null;
	d1 = new Date(d);
	d1y = d1.getFullYear();
	d1m = d1.getMonth();
	d1d = d1.getDate();
	if (s=="d")
		d2 = new Date(d1y,d1m,d1d+v);
	else if (s=="m")
		d2 = new Date(d1y,d1m+v,d1d);
	else if (s=="y")
		d2 = new Date(d1y+v,d1m,d1d);
	return d2;
}

/*function datediff (interval Character,date1 Datetime,date2 Datetime) : returns the time difference between the two given dates*/
function datediff (s,v1,v2)
{
	divSec = 1000;
	divMin = 60 * 1000;
	divHrs = 60 * 60 * 1000;
	divDay = 24 * 60 * 60 * 1000;
	d1 = new Date(v1);
	d2 = new Date(v2);
	s = s.toLowerCase();
	datedifference = Math.abs(d1-d2);
	if (s=="s")
		return datedifference/divSec;
	else if (s=="m")
		return datedifference/divMin;
	else if (s=="h")
		return datedifference/divHrs;
	else
		return datedifference/divDay;
}

/*function formatdate (format String,date Datetime) : formats the date using the specified formatting options*/
function formatdate(f,d)
{
	var d1 = new Date(d)
	var d1y = d1.getFullYear();
	var d1m = d1.getMonth() + 1;
	var d1d = d1.getDate();
	switch(f)
	{
		case "yyyy/mm/dd":
			return d1y.toString() + "/" + d1m.toString() + "/" + d1d.toString();
		case "mm/dd/yyyy":
			return d1m.toString() + "/" + d1d.toString() + "/" + d1y.toString();
		case "dd/mm/yyyy":
			return d1d.toString() + "/" + d1m.toString() + "/" + d1y.toString();
		case "mm/dd":
			return d1m.toString() + "/" + d1d.toString()
		default:
			return d1m.toString() + "/" + d1d.toString() + "/" + d1y.toString();
	}
}

/****** Row Re-arrange Function Group ******/
/*function moverow () : moves a table row to another position*/
function moverow()
{
	(arguments[0]==null || arguments[0]=='') ? obj=null : obj=arguments[0];
	(arguments[1]==null || arguments[1]=='') ? TableId=null : TableId=arguments[1];	

	if (obj!=null)
	{
		if (TableId!=null)
			tableobj = getobj(TableId);
		else
		{
			tableobj = obj.parentElement;
			while (tableobj!=null && tableobj.tagName!="TABLE")
				tableobj = tableobj.parentElement;
		}
		if (tableobj!=null)
		{
			maxlen = tableobj.rows.length;
			if (TableId!=null)
			{
				for (i=0;i<maxlen;i++)
				{
					if (tableobj.rows(i).contains(obj))
					{
						trobj = tableobj.rows(i);
						break;
					}
				}
			}
			else
			{
				trobj = obj.parentElement;
				while (trobj!=null && trobj.tagName!="TR")
					trobj = trobj.parentElement;
			}
			currentIndex = trobj.rowIndex;
			nextIndex = obj.value;
			if (currentIndex!=nextIndex)
			{
				tableobj.moveRow(currentIndex,nextIndex);
				startpos = (currentIndex<nextIndex) ? currentIndex-1 : nextIndex-1
				obj2 = document.all(obj.id);
				for (i=startpos;i<obj2.length;i++)
				{
					if (obj2(i)!=null)
						obj2(i).value=i+1;
				}
			}
		}
	}
}

/*function moveup () : moves up a table row*/
function moveup()
{
	(arguments[0]==null || arguments[0]=='') ? obj=null : obj=arguments[0];
	(arguments[1]==null || arguments[1]=='') ? TableId=null : TableId=arguments[1];	
	(arguments[2]==null || arguments[2]=='') ? FieldToUpdate=null : FieldToUpdate=arguments[2];

	if (obj!=null)
	{
		if (TableId!=null)
			tableobj = getobj(TableId);
		else
		{
			tableobj = obj.parentElement;
			while (tableobj!=null && tableobj.tagName!="TABLE")
				tableobj = tableobj.parentElement;
		}
		if (tableobj!=null)
		{
			maxlen = tableobj.rows.length;
			if (TableId!=null)
			{
				for (i=0;i<maxlen;i++)
				{
					if (tableobj.rows(i).contains(obj))
					{
						trobj = tableobj.rows(i);
						break;
					}
				}
			}
			else
			{
				trobj = obj.parentElement;
				while (trobj!=null && trobj.tagName!="TR")
					trobj = trobj.parentElement;
			}
			currentIndex = trobj.rowIndex;
			nextIndex = (currentIndex-1)<=1 ? 1 : currentIndex-1;
			tableobj.moveRow(currentIndex,nextIndex);
			if (FieldToUpdate!=null && currentIndex!=nextIndex)
			{
				obj2 = getobj(FieldToUpdate);
				startpos = (currentIndex<nextIndex) ? currentIndex-1 : nextIndex-1
				for (i=startpos;i<=startpos+1;i++)
				{
					if (obj2(i)!=null)
						obj2(i).value=i+1;
				}
			}
		}
	}
}

/*function movedown () : moves down a table row*/
function movedown()
{
	(arguments[0]==null || arguments[0]=='') ? obj=null : obj=arguments[0];
	(arguments[1]==null || arguments[1]=='') ? TableId=null : TableId=arguments[1];	
	(arguments[2]==null || arguments[2]=='') ? FieldToUpdate=null : FieldToUpdate=arguments[2];

	if (obj!=null)
	{
		if (TableId!=null)
			tableobj = getobj(TableId);
		else
		{
			tableobj = obj.parentElement;
			while (tableobj!=null && tableobj.tagName!="TABLE")
				tableobj = tableobj.parentElement
		}
		if (tableobj!=null)
		{
			maxlen = tableobj.rows.length;
			if (TableId!=null)
			{
				for (i=0;i<maxlen;i++)
				{
					if (tableobj.rows(i).contains(obj))
					{
						trobj = tableobj.rows(i);
						break;
					}
				}
			}
			else
			{
				trobj = obj.parentElement;
				while (trobj!=null && trobj.tagName!="TR")
					trobj = trobj.parentElement
			}
			currentIndex = trobj.rowIndex;
			nextIndex = (currentIndex+1)>=maxlen ? maxlen-1 : currentIndex+1;
			tableobj.moveRow(currentIndex,nextIndex);
			if (FieldToUpdate!=null && currentIndex!=nextIndex)
			{
				obj2 = getobj(FieldToUpdate);
				startpos = (currentIndex<nextIndex) ? currentIndex-1 : nextIndex-1
				for (i=startpos;i<=startpos+1;i++)
				{
					if (obj2(i)!=null)
						obj2(i).value=i+1;
				}
			}
		}
	}
}
function CheckMax(obj,vmax){
	if (obj.value!=""){
		var tmp=obj.value;
		tmplen=tmp.length;
		if (tmplen>vmax ){
			alert("¶W¹L¦r¼Æ,¤Å¶W¹L"+vmax + "¦r");
			obj.value=tmp.substr(0,vmax);
		}
	}
}

function remark_onblur(id) {
	if (id.value=="")
		id.rows=1;
	else
		id.rows=4;
}

function remark_onfocus(id) {
	id.rows=4;
}

function change_size(id)
{

if (id.rows==4) 
	id.rows=1;
else
	id.rows=4;	
}
