// TiGrou©2002
// cedrich@webnext.com
//
// Field Check functions

function FCKIsEmpty(FieldName,FieldLabel,Err)
{
	if(IsUndefined(FieldLabel))
		FieldLabel=FieldName
	var O=FCKeditorAPI.GetInstance(FieldName)
	if(IsStringEmpty(O.GetXHTML(true)))
		return !SetError(null,IsUndefined(Err)?eval(ErrFCKIsEmpty):Err)
	return false
}
function ObjIsEmpty(Obj,Err)
{
	var V=IsObj(Obj)?Obj.value:Obj
	if(IsStringEmpty(V))
		return !SetError(Obj,IsUndefined(Err)?ErrObjIsEmpty:Err)
	return false
}
function ObjIsUrl(Obj,Err)
{
	return ObjIsFilter(Obj,1,1,1,0,0,":/.?%-&+=#_",Err)
}
function ObjIsFilter(Obj,IsLower,IsUpper,IsNbr,IsAccent,IsSpecial,Others,Err)
{
	var V=IsObj(Obj)?Obj.value:Obj
	if(V=='')	return true	
	var Chars='',TErr=ErrObjIsFilter
	if(IsLower)	
	{
		Chars+='a-z'
		TErr+='\n'+ErrObjIsFilterLower
	}
	if(IsUpper)	
	{
		Chars+='A-Z'
		TErr+='\n'+ErrObjIsFilterUpper
	}
	if(IsNbr)	
	{
		Chars+='\\d'
		TErr+='\n'+ErrObjIsFilterNbr
	}
	if(IsAccent)
	{
		Chars+='Ç-ùÖÜáíóúñÑ'
		TErr+='\n'+ErrObjIsFilterAccent
	}
	if(IsSpecial)	
	{
		Chars+='\\s'
		TErr+='\n'+ErrObjIsFilterSpecial
	}
	if(Others)	
	{
		
		var T=Others.replace(/\\/g,'\\\\')
		Chars+=T.replace(/-/g,'\\-')
		TErr+='\n'+eval(ErrObjIsFilterOthers)
	}
	if(!new RegExp('^'+(Chars.length==0?'':'['+Chars+']+')+'$').test(V))
		return SetError(Obj,IsUndefined(Err)?TErr:Err)
	return true
}
function ObjIsNbr(Obj,IsInteger,Min,Max,Err)
{
	var V=IsObj(Obj)?Obj.value:Obj
	if(V=='')	return true	
	Exp="([eE][+-]?\\d+)?"
	if(!new RegExp("^[+-]?\\d+"+(IsInteger?"":"[.]?\\d*"+Exp)+"$").test(V))
		return SetError(Obj,IsUndefined(Err)?(IsInteger ? ErrObjIsNbrInteger : ErrObjIsNbr):Err)
	switch(ChkNbrBorn(parseFloat(V),Min,Max))
	{
	case -1:
		return SetError(Obj,IsUndefined(Err)?eval(ErrObjIsNbrMin):Err)
	case 1:
		return SetError(Obj,IsUndefined(Err)?eval(ErrObjIsNbrMax):Err)
	}
	return true
}
function ObjIsSize(Obj,Min,Max,Err)
{
	var V=IsObj(Obj)?Obj.value:Obj
	if(V=='')	return true	
	switch(ChkNbrBorn(V.length,Min,Max))
	{
	case -1:
		return SetError(Obj,IsUndefined(Err)?eval(Min==Max?ErrObjIsSizeEqu:ErrObjIsSizeMin):Err)
	case 1:
		return SetError(Obj,IsUndefined(Err)?eval(Min==Max?ErrObjIsSizeEqu:ErrObjIsSizeMax):Err)
	}
	return true
}
function ObjIsTel(Obj,Filter,Err)
{
	var V=IsObj(Obj)?Obj.value:Obj
	if(V=='')	return true	
	Match=Filter.replace(/(X)/ig,'\\d')
	Match=Match.replace(/\(/ig,'\\(')
	Match=Match.replace(/\)/ig,'\\)')
	Match=Match.replace(/\+/ig,'\\+')
	if(!new RegExp('^'+Match+'$').test(V))
		return SetError(Obj,IsUndefined(Err)?eval(ErrObjIsTel):Err)
	return true
}

function ObjIsMail(Obj,AcceptFull,Err)
{
	var V=IsObj(Obj)?Obj.value:Obj
	if(V=='')	return true
	var P='[\\w.-]+'
	if(AcceptFull && new RegExp('^.*?<('+P+')@('+P+'[.]{1}[a-zA-Z]+)>$').test(V))	return true
	if(!new RegExp('^('+P+')@('+P+'[.]{1}[a-zA-Z]+)$').test(V))
		return SetError(Obj,IsUndefined(Err)?ErrObjIsMail:Err)
	return true
}
// DATETIME
function ObjIsDateTime(Obj,Min,Max,Err)
{
	var V=IsObj(Obj)?Obj.value:Obj
	if(V=='')	return true
	var R=V.match(/^(.*) (.*)$/)
	if(R==null)	return SetError(Obj,IsUndefined(Err)?ErrObjIsDateTime:Err)	
	var RMin=IsExist(Min)&&Min!=''?Min.match(/^(.*) (.*)$/):Array(null,null)
	var RMax=IsExist(Max)&&Max!=''?Max.match(/^(.*) (.*)$/):Array(null,null)
	if(!ObjIsDate(R[1],RMin[1],RMax[1],Err))
	{
		SetFocus(Obj)
		return false
	}
	var RNbr=DateGetNbrVirtualStr(R[1])
	if(!ObjIsTime(R[2],RNbr==DateGetNbrVirtualStr(RMin[1])?RMin[2]:null,RNbr==DateGetNbrVirtualStr(RMax[1])?RMax[2]:null,Err))
	{
		SetFocus(Obj)
		return false
	}
	return true
}

// TIME
function TimeGetNbrSecondStr(TimeStr)
{
	if(IsExist(TimeStr)&&TimeStr!='')
	{
		var T=TimeStr.match(/^(\d{1,2}):(\d{1,2}):(\d{1,2})$/)
		return TimeGetNbrSecond(T[1],T[2],T[3])
	}
	return null
}
function TimeGetNbrSecond(H,M,S){ return 3600*H+60*M+eval(S) }
function ObjIsTime(Obj,Min,Max,Err)
{
	var V=IsObj(Obj)?Obj.value:Obj
	if(V=='')	return true
	var R=V.match(/^(\d{1,2}):(\d{1,2}):(\d{1,2})$/)
	if(R==null)	return SetError(Obj,IsUndefined(Err)?ErrObjIsTime:Err)	
	if(R[1]<0 || R[1]>23)	return SetError(Obj,IsUndefined(Err)?ErrObjIsTimeH:Err)
	if(R[2]<0 || R[2]>59)	return SetError(Obj,IsUndefined(Err)?ErrObjIsTimeM:Err)
	if(R[3]<0 || R[3]>59)	return SetError(Obj,IsUndefined(Err)?ErrObjIsTimeS:Err)
	switch(ChkNbrBorn(TimeGetNbrSecond(R[1],R[2],R[3]),TimeGetNbrSecondStr(Min),TimeGetNbrSecondStr(Max)))
	{
	case -1:
		return SetError(Obj,IsUndefined(Err)?eval(ErrObjIsTimeMin):Err)
	case 1:
		return SetError(Obj,IsUndefined(Err)?eval(ErrObjIsTimeMax):Err)
	}
	return true
}
// DATE
function DateGetNbrVirtualStr(ObjDate)
{
	if(ObjDate==null||ObjDate=='')	return null
	var OD=IsObj(ObjDate)?ObjDate.value:ObjDate
	var D=DateStr2Arr(OD)
	return D==null?null:DateGetNbrVirtual(D[1],D[2],D[3])
}
function DateStr2Arr(DateStr){ return DateStr.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) }
function DateCompare(Date1,Date2)
{
	N1=DateGetNbrVirtualStr(Date1)
	N2=DateGetNbrVirtualStr(Date2)
	if(N1==null || N2==null)	return null
	if(N1>N2)		return  1
	else if(N1<N2)	return -1
	return 					  0
}
function DateIsBisextile(Y){ return Y%4==0 && (Y%100>0 || Y%400==0) }
function DateGetNbrVirtual(D,M,Y){ return 416*Y+32*M+eval(D) }
function DateGetDayNbr(M,Y){ return 28+(M==1?(DateIsBisextile(Y)?1:0):2)+(M<7 ? (M+1)%2 : M%2) }
function ObjIsDate(Obj,Min,Max,Err)
{		
	var V=IsObj(Obj)?Obj.value:Obj
	if(V=='')	return true
	var R=DateStr2Arr(V)
	if(R==null)	return SetError(Obj,IsUndefined(Err)?ErrObjIsDate:Err)
	var JMax=DateGetDayNbr(R[2]-1,R[3])
	if(R[1]<1 || R[1]>JMax)	return SetError(Obj,IsUndefined(Err)?eval(ErrObjIsDateDay):Err)
	if(R[2]<1 || R[2]>12)	return SetError(Obj,IsUndefined(Err)?ErrObjIsDateMonth:Err)
	switch(ChkNbrBorn(DateGetNbrVirtual(R[1],R[2],R[3]),DateGetNbrVirtualStr(Min),DateGetNbrVirtualStr(Max)))
	{
	case -1:
		return SetError(Obj,IsUndefined(Err)?eval(ErrObjIsDateMin):Err)
	case 1:
		return SetError(Obj,IsUndefined(Err)?eval(ErrObjIsDateMax):Err)
	}
	return true
}
// MENU
function MenuSet(Obj,ValOrTxt,WithText)
{
	if(ValOrTxt=="")	return
	if(!IsExist(Obj))	return
	var F=WithText?'text':'value',i
	for(i=0;i<Obj.length;i++)
	{
		if(eval('Obj[i].'+F)==ValOrTxt)
		{
			Obj.selectedIndex=i
			break
		}
	}
}
function MenuSetMulti(Obj,ValOrTxtArray,WithText)
{
	if(!IsObj(ValOrTxtArray))	return
	if(!IsExist(Obj))	return
	var F=WithText?'text':'value',i,j,ObjM
	for(i=0;i<Obj.length;i++)
	{
		if(ValOrTxtArray.IsIn(eval('Obj[i].'+F)))
			Obj[i].selected=true
	}
}
function MenuIsSel(Obj,Err)
{
	if(Obj.selectedIndex<0)
		return SetError(Obj,IsUndefined(Err)?ErrMenuChk:Err)
	if(Obj[Obj.selectedIndex].value=="")
		return SetError(Obj,IsUndefined(Err)?ErrMenuChk:Err)
	return true
}
function MenuIsSelMulti(Obj,Err)
{
	var i
	for(i=0;i<Obj.length;i++)
		if(Obj[i].selected)	return true
	return SetError(Obj,IsUndefined(Err)?ErrMenuMultiChk:Err)
}
// RADIO
function RadioSet(Obj,Value)
{
	var i
	for(i=0;i<Obj.length;i++)
	{
		if(Obj[i].value==Value)
		{
			Obj[i].checked=true
			break
		}
	}
}
function RadioIsSel(Obj,Err)
{
	var i
	for(i=0;i<Obj.length;i++)
	{
		if(Obj[i].checked)
			return true
	}
	return SetError(Obj,IsUndefined(Err)?ErrRadioIsSel:Err)
}
// CHKBOX
function ChkBoxIsSelMulti(Obj,Err)
{
	if(IsUndefined(Obj.length))
	{
		if(Obj.checked)
			return true
	}
	else
	{
		for(var i=0;i<Obj.length;i++)
		{
			if(Obj[i].checked)
				return true
		}
	}
	return SetError(Obj,IsUndefined(Err)?ErrChkBoxIsSelMulti:Err)	
}

// ADVANCED TYPE
function ObjIsYear(Obj,Min,Max,Err)
{
	return ObjIsNbr(Obj,1,Min,Max,Err)
}
function ObjIsCP(Obj,Min,Max,Err)
{
	return ObjIsNbr(Obj,1,Min?Min:0,Max,Err)
}
function ObjIsCB(CB1,CB2,CB3,CB4,CBDATE)
{
	if(!_ObjIsCBField(CB1))	return false
	if(!_ObjIsCBField(CB2))	return false
	if(!_ObjIsCBField(CB3))	return false
	if(!_ObjIsCBField(CB4))	return false
	if(!_ObjIsCBField(CBDATE))	return false
	return true
}
function _ObjIsCBField(Obj)
{
	if(ObjIsEmpty(Obj))	return false
	if(!ObjIsSize(Obj,4,4))	return false
	if(!ObjIsNbr(Obj,1))	return false
	return true
}
function ObjIsRIB(B,G,C,K)
{
	if(!_ObjIsRIBField(B,5))	return false
	if(!_ObjIsRIBField(G,5))	return false
	if(!_ObjIsRIBField(C,11))	return false
	if(!_ObjIsRIBField(K,2))	return false
	return true
}
function _ObjIsRIBField(Obj,Size)
{
	if(ObjIsEmpty(Obj))	return false
	if(!ObjIsSize(Obj,Size,Size))	return false
	if(!ObjIsNbr(Obj,1))	return false
	return true
}

// No OBJ
function ChkNbrBorn(Value,Min,Max)
{
	var V=parseFloat(Value)
	if(IsExist(Min) && Min!='' && V<Min)	return -1
	if(IsExist(Max) && Max!='' && V>Max)	return 1
	return 0
}

function Action(form,FctChk,Act,Msg)
{
	if(Act)
		form._ACTION.value=Act
	if(FctChk)
		if(!eval(FctChk+"(form)"))
			return false
	if(Msg)
		if(!confirm(Msg))
			return false
	form.submit()
	return false
}
function FormReset(form)
{
	for(var i=0;i<form.length;i++)
	{
		switch(form[i].type)
		{
			case "textarea":
			case "text":
				form[i].value=""
				break
			case "select-one":
				form[i].selectedIndex=0
				break
			case "select-multiple":
				for(var j=0;j<form[i].length;j++)
					form[i][j].selected=false				
				break
		}
	}
	return false
}
window._GrouPopUpComboCOUNT=0
function GrouPopUpCombo(FormObj,Type,SQL,DefaultValue,IsDebug)
{
	if(NAV.Version>=6)
	{
		var O=document.createElement('IFRAME')
		var Name='GROUPOPUPCOMBOIFRAME'+(window._GrouPopUpComboCOUNT++)
		O.id=Name
		O.name=Name
		O.width=IsDebug?800:0
		O.height=IsDebug?200:0
		if(!IsDebug)
			O.style.visibility='hidden'
		O.src='/build/library/php/GrouPopUpCombo.php?NAME='+Name+'&TYPE='+Type+'&FORMOBJ='+escape(FormObj)+'&DEFAULT='+escape(DefaultValue)+'&SQL='+escape(SQL)+(IsDebug?'&IsDebug=1':'')
		document.body.appendChild(O)
	}
	else
		window.open('/build/library/php/GrouPopUpCombo.php?TYPE='+Type+'&FORMOBJ='+escape(FormObj)+'&DEFAULT='+escape(DefaultValue)+'&SQL='+escape(SQL),'GrouPopUpCombo','top=0,left=0')
}

function ChkFileExtension(Obj,Extension,Err)
{
	var i,V=IsObj(Obj)?Obj.value:Obj	
	if(V=='')	return true	
	V=V.toLowerCase()
	var Ext,Exts=Extension.split(';')
	for(i=0;i<Exts.length;i++)
	{
		Ext=Exts[i]
		if(V.substr(V.length-Ext.length)==Ext)
			return true
	}
	var ErrExt=""
	for(i=0;i<Exts.length;i++)
		ErrExt+="\n"+' - '+Exts[i]
	return SetError(Obj,IsUndefined(Err)?eval(ErrChkFileExtension):Err)
}
