// calendar properties
var calField,calUseTime,calFieldValue
function showCalendar(useTime,fieldName){
   calField = fieldName
   calUseTime = useTime
   calFieldValue = document.forms[0].elements[fieldName].value
   WindowFeature ="Resizable=no,ScrollBars=No,MenuBar=No,Directories=No,ToolBar=No,Location=No,Status=no,titlebar=yes,dependent=yes,Width=285,Height=280,ScreenX=0,ScreenY=0,Top=0,Left=0";
   this.newWindow = open("/js/calendar.html","myCalendar",WindowFeature);
}
function setCalVal(val){
	document.forms[0].elements[calField].value = val
}
//

var originalFieldValue
function setOriginalValue(field)
{
        originalFieldValue = field.value
        field.select()
}

function validateStrDate(tgl){ //format(YYYY/MM/DD)
	var Len = tgl.length;
	if(Len != 10){
		return false;
	}
	del1 = tgl.substring(4,5);
	del2 = tgl.substring(7,8);
	if ((del1 >= '0' && del1 <= '9') || (del2 >=  '0' && del2 <= '9') || del1 != del2){
		return false;
	}

   var tbl = new Date(tgl.substring(0,4)+"/"+tgl.substring(5,7)+"/"+tgl.substring(8,10));
   Year1 = new Number(tgl.substring(0,4));
   Mont1 = new Number(tgl.substring(5,7));
   Date1 = new Number(tgl.substring(8,10));
   Year2 = new Number(tbl.getYear());
	if(Year2 < '1900'){
		return false;
	}
   Mont2 = new Number(tbl.getMonth() + 1);
   Date2 = new Number(tbl.getDate());
   if (Year1.valueOf() != Year2.valueOf() || Mont1.valueOf() != Mont2.valueOf() || Date1.valueOf() != Date2.valueOf())
   {
      return false;
   }
   return true;
}

function validateMe(field, type)
{
        var newValue = doTrim(field.value)
        var newLength = newValue.length
        var errorCode = false
        originalFieldValue = newValue;
        if(newLength == 0)
        {
                	return
        }
        if (errorCode == false)
        {
	        if(type == 'NONE')
	        {

	        }
	        else if(type == 'NUM')
	        {
	                var newLength = newValue.length
	                for(var i = 0; i != newLength; i++)
	                {
	                        aChar = newValue.substring(i,i+1)
	                        if( ( aChar < "0" || aChar > "9") && ( aChar != "-") )
	                        {
	                                errorCode = true
	                        }
	                }

	                if(errorCode == true)
	                {
	                        alert('This field requires Numeric values \nPlease re-enter a value')
	                        field.value = '1'
	                        field.focus()
	                        field.select()
	                }

	        }
	        else if(type == 'ALPH')
	        {
	                var extraChars=". -,"
	                var search

	                if(newLength == 0)
	                {
	                        alert('This field requires a valid alphabetical string.\nPlease re-enter a value')
	                        field.value = originalFieldValue
	                        field.focus()
	                        //field.select()
	                }

	                for(var i = 0; i != newLength; i++)
	                {
	                        aChar = newValue.substring(i,i+1)
	                        aChar = aChar.toUpperCase()
	                        search = extraChars.indexOf(aChar)
	                        if(search == -1 && (aChar < "A" || aChar > "Z") )
	                        {
	                                alert('This field requires a valid alphabetical string.\nPlease re-enter a value')
	                                field.value = originalFieldValue
	                                field.focus()
	                                field.select()
	                        }
	                }
	        }
	        else if(type == 'STR')
	        {
	                var extraChars=". -,0123456789:?><!@#$%^&*()_+=|}{][/\'\""
	                var search

	                if(newLength == 0)
	                {
	                        alert('This field requires a valid alphanumeric string.\nPlease re-enter a value')
	                        field.value = originalFieldValue
	                        field.focus()
	                        field.select()
	                }
	                for(var i = 0; i != newLength; i++)
	                {
	                        aChar = newValue.substring(i,i+1)
	                        aChar = aChar.toUpperCase()
	                        search = extraChars.indexOf(aChar)
	                        if(search == -1 && (aChar < "A" || aChar > "Z") )
	                        {
	                                alert('This field requires a valid alphanumeric string.\nPlease re-enter a value')
	                                field.value = originalFieldValue
	                                field.focus()
	                                field.select()
	                        }
	                }
	        }


	        // This uses javascripts date functions.  Works pretty good, but doesn't handle dates of the form mm.dd.yy (with periods) too well.
	        else if(type == 'DATE')
	        {
	                if( isNaN(Date.parse(field.value)) || validateStrDate(field.value) != true)
	                {
	                        alert('This field requires a valid date.\nPlease re-enter a value')
	                        field.value = '2002/01/01'
	                        field.focus()
	                        field.select()
	                }
	        }
	        else if (type == 'TIME')
	        {
	                var status1 = true
	                status1 = pictureValid(field, "##:##:##")
	                if(status1 == false )
	                {
	                    alert('This field requires a valid Time ##:##:## .\nPlease re-enter a value')
	                    field.value = originalFieldValue
	                    field.focus()
	                    field.select()
	                }
	        }
		else if (type == 'DATETIME')
	        {
	        	checkDateTime(field,type)

	        }
	        else if(type == 'EMAIL')
	        {
	                var errorCode = false
	                if (newLength > 5)
	                {
	                        var linSumOfx = 0;
	                        var linSumOfy = 0

	                        for (j=0; j < newLength; j++)
	                        {
	                                Ch = newValue.charAt(j);
	                                if (Ch == "@")
	                                {
	                                        //check posisi . (error : xxx@.com)
	                                        if (linSumOfy > 0)
	                                        {
	                                                linSumOfy = 0;
	                                        }

	                                        if ( newValue.substring(j,(j+2)) == "@.")
	                                        {
	                                                alert("Between \"@\" and \".\" should be one or more characters.");
	                                                errorCode = true;
	                                                field.value = originalFieldValue
	                                                field.focus()
	                                                field.select()
	                                        }
	                                        linSumOfx++;
	                                }
	                                else if (Ch == ".")
	                                {
	                                        linSumOfy++;
	                                }
	                        }

	                        if (errorCode == true)
	                        {
	                                alert("There is a/some wild characters OR blank character.");
	                                field.value = originalFieldValue
	                                field.focus()
	                                field.select()
	                        }
	                        else if ((linSumOfx > 1) || (linSumOfx < 1))
	                        {
	                                alert("Quantity of \"@\" should be 1.");
	                                field.value = originalFieldValue
	                                field.focus()
	                                field.select()
	                        }
	                        else if (linSumOfy < 1)
	                        {
	                                alert("Quantity of \".\" should be more than or equal 1 after \" @\" .");
	                                field.value = originalFieldValue
	                                field.focus()
	                                field.select()
	                        }
	                }
	                else
	                {
	                        alert("Length of your email should be more than 5 characters.");
	                        field.value = originalFieldValue
	                        field.focus()
	                        field.select()
	                }
	        }
	} // End Code Error Code == false
}


/*
Function name: CheckNumeric(fobjToBeCheck, fstrParam)
Objective: check numeric value of string or inputted data on a html tag/object
Input parameter:
	fobjToBeCheck : String to be checked
	fstrParam : Some of Wild Character such as "%".
Output parameter : return value of variable "allValid" ---> true/false
*/

function CheckNumeric(fobjToBeCheck, fstrParam)
{
  var lstrCheckOK = "0123456789 " + fstrParam;
  allValid = true;
  for (i = 0;  i < fobjToBeCheck.length; i++)
  {
    lstrCh = fobjToBeCheck.charAt(i);
    for (j = 0; j < lstrCheckOK.length; j++)
      if (lstrCh == lstrCheckOK.charAt(j))
        break;
    if (j == lstrCheckOK.length)
    {
      allValid = false;
      break;
    }
  }

  if (!allValid)
  {
    //alert("Please enter only valid characters in the field.");
    return (false);
  }
  return (true);
}

/*
Function name: validateForm(gstrInputName)
Objective: check blank input (only required)
Input parameter:
	gstrInputName : Passing input text object must be not blank !
Output parameter : return value true/false.
*/

  function doTrim(oldValue) {
    var count = oldValue.length;
    var newValue = "";
    for(i=0;i<count;i++){
      if(oldValue.charAt(i) != " "){
	     newValue = newValue + oldValue.substring(i, i+1);
      }
    }
    return(newValue);
  }

/*
Function name: validateForm1(gstrInputName,IndexForm)
Objective: check blank input (only required) which use more than one FORM.
Input parameter:
	gstrInputName : Passing input text object must be not blank !
	IndexForm : number Form started from 0, counted form Top of HTML Page.
Output parameter : return value true/false.
*/
var isNotCancel = true;
function onCancel(){
	isNotCancel = false;
}

function validateForm(gstrInputName,IndexForm)
{
	var TempObj = new Array();
	if(isNull(IndexForm) == true) IndexForm = 0
	if(isNotCancel){
		TempObj = gstrInputName.split(',');
		for(k=0;k<(TempObj.length);k++){
			Temp = TempObj[k];
			valInputName = document.forms[IndexForm].elements[Temp].value;
			if(isNull(valInputName) == true){
				ind = document.forms[IndexForm].elements[Temp].selectedIndex
				if(isNull(ind) == false){
					valInputName = document.forms[IndexForm].elements[Temp].options[ind].value
				}
			}
			if(isNull(valInputName) == true){
				alert('Unknown field name : '+Temp)
				return false;
			}
			if(doTrim(valInputName) == ""){
	                        alert('Field is required value.')
				document.forms[IndexForm].elements[Temp].focus();
				//document.forms[IndexForm].elements[Temp].select();
				return false;
			}
		}
	}
	return true;
}

/*
Function name: validateSE(gstrInputName,IndexForm)
Objective: Check Start Date and End Date.
Input parameter:
	gstrInputName : Passing input text object must not be blank !
	IndexForm : number Form started from 0, counted form Top of HTML Page.
Output parameter : return value true/false.
*/

function validateSE(gstrInputName,IndexForm,focus,message){
	var TempObject = "";
	var TempObj = gstrInputName.split(',');
	var TempObject_ = "";
	var SumOfObject = 0;
	Temp = TempObj[0];
	var StartDate = document.forms[IndexForm].elements[Temp].value;
	Temp = TempObj[1];
	var EndDate = document.forms[IndexForm].elements[Temp].value;
	if (Date.parse(StartDate) > Date.parse(EndDate)){
		if(isNull(message) == true) message = 'End Date must be equal or greater than Start Date' ;
		alert(message)
		if(isNull(focus) == true)focus = 0 ;
		Temp = TempObj[focus];
		document.forms[IndexForm].elements[Temp].focus();
		return false;
	}
	return true;
}

function valBetween(val1,val2,inputName,inputLable,IndexForm){
	var rtn = true;
	if(isNull(IndexForm) == true)IndexForm = 0 ;
	var Temp = document.forms[IndexForm].elements[inputName].value;
	if((rtn = CheckNumeric(Temp))){
		if(parseInt(Temp) < parseInt(val1) || parseInt(Temp) > parseInt(val2)){
			alert('Please Enter '+ inputLable +' ,The number must only contain digit and between '+ val1 +' and '+val2);
			rtn = false;
		}
	}
	if(rtn == false){
		document.forms[IndexForm].elements[inputName].focus();
		document.forms[IndexForm].elements[inputName].select();
	}
	return rtn;

}
// use date format (YYYY/MM/DD)
function checkDateTime(field,type){
	var val = field.value
	var tn = new Date()
	var dateNow = tn.getYear()<1900?tn.getYear()+1900:tn.getYear()
	    dateNow = dateNow+'/'+tn.getMonth()+'/'+tn.getDate()
	var timeNow = tn.getHours()+':'+tn.getMinutes()+':'+tn.getSeconds()
	var rtn = field.value;
	if(type == 'DATE'){
		if( isDate(val) == false ){
	                        alert('This field requires a valid Date.\nPlease re-enter a value')
	                        field.focus()
	                        field.select()
	                        rtn = dateNow
	         }
	}else if(type == 'TIME'){
		if( isTime(val) == false ){
	                        alert('This field requires a valid time.\nPlease re-enter a value')
	                        field.focus()
	                        field.select()
	                        rtn = timeNow
	         }
	}else if(type == 'DATETIME'){
		var arDateTime = val.split(" ")//new Array;
		if(arDateTime.length != 2){
			alert('This field requires a valid DateTime.\nPlease re-enter a value')
			field.focus()
	                field.select()
	                rtn = dateNow + ' ' + timeNow
		}else{
			if( isDate(arDateTime[0]) == false || isTime(arDateTime[1]) == false){
		                        alert('This field requires a valid DateTime.\nPlease re-enter a value')
		                        field.focus()
	                        	field.select()
			                rtn = dateNow + ' ' + timeNow
		         }
		 }
	}
	field.value = rtn;
}

function isTime(val){
	var arTime = val.split(':')
	if(arTime.length != 3) return false
	if(!CheckNumeric(arTime[0])) return false
	if(!CheckNumeric(arTime[1])) return false
	if(!CheckNumeric(arTime[2])) return false

	// check hours
	if(parseInt(arTime[0]) > 23 || parseInt(arTime[0]) < 0) return false
	// check minutes
	if(parseInt(arTime[1]) > 59 || parseInt(arTime[1]) < 0) return false
	// check seconds
	if(parseInt(arTime[2]) > 59 || parseInt(arTime[2]) < 0) return false
	return true
}

function isDate(val){
	var arDate = val.split('/')
	if(arDate.length != 3) return false
	if(!CheckNumeric(arDate[0])) return false
	// check month
	if(!CheckNumeric(arDate[1])) return false
	// check day
	if(!CheckNumeric(arDate[2])) return false

	// check year
	if(parseInt(arDate[0]) > 3000 && parseInt(arDate[0]) < 1900) return false
	// check month
	if(parseInt(arDate[1]) > 12 && parseInt(arDate[1]) < 1) return false
	// check day
	if(parseInt(arDate[2]) > 31 && parseInt(arDate[2]) < 1) return false
	return true
}

// Globals used by pictureValid
var DIGITS = "0123456789"
var UPPERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var LOWERS = "abcdefghijklmnopqrstuvwxyz"
function pictureValid(field, picture)
{
        var status = true
        var isRepeat = false
        var pLen = picture.length
        var search = 0
        var validData = ""
        var picChar = ""
        var aChar = ""
        var newValue = field.value
        var tLen = newValue.length
        var detailError = ""

        for(var i = 0, j = 0; (i != newValue.length)&& (j != picture.length)&& (status==true); i++)
        {
                picChar=picture.substring(j,j+1)
                if(picChar == "[")
                {
                        validData = ""
                        j++
                        for(; j != picture.length; j++)
                        {
                                if(picture.substring(j,j+1) == "]")
                                {
                                        break
                                }
                                validData = validData + picture.substring(j,j+1)
                        }
                }
                else if(picChar =="@")  // Any character
                {
                        j++
                        continue
                }
                else if(picChar == "?")   // Any letter
                {
                        validData = UPPERS + LOWERS
                }
                else if(picChar == "#")      // Any number
                {
                        validData = DIGITS
                }
                else if(picChar =="$")       // Money characters
                {
                        validData = DIGITS + "." + "-" + "+"
                }
                else if(picChar == "*")
                {
                        isRepeat = true
                        j++
                        i--
                        continue
                }

                else
                {
                        validData = picChar
                }

                aChar = newValue.substring(i,i+1)
                search = validData.indexOf(aChar)

                if(search == -1)
                {
                        if(isRepeat)
                        {
                                isRepeat = false
                                j++
                                i--
                                continue
                        }
                        status = false
                        if(aChar == " ")
                        {
                                detailError = "A space is not allowed in position #"+(i+1)+". "
                        }
                        else
                        {
                                detailError = "The character, " + aChar + ", is not allowed in position #"+(i+1)+". "
                        }
                }
                else
                {
                        if(!isRepeat)
                        {
                                j++
                        }
                }
       }

        //Check length
         if(status == true && (j < picture.length || i < newValue.length))
        {
                status = false
                detailError = "incorrect length"
        }
       return(status)
}

// this function will return true if 'val' eq null otherwise false
function isNull(val){
	// object navigator,
	var isIE = navigator.appName.indexOf('Netscape') != -1 ? false : true
	if(isIE == true){
		if(val == null)// || val == '')
			return true
		else
			return false
	}else{
		if(val == undefined)// || val == '')
			return true
		else
			return false
	}
}
