//=============================================================================
// isLetter( c /* char */)
//
// Returns true if character c is a letter.
//=============================================================================
function isLetter (c)
{
    return (    ((c >= "a") && (c <= "z"))
             || ((c >= "A") && (c <= "Z")));
}

//=============================================================================
// isDigit( c /* char */)
//
// Returns true if character c is a digit.
//=============================================================================
function isDigit (c)
{
    return (    (c >= "0")
             && (c <= "9"));
}

//=============================================================================
// isLetterOrDigit( c /* char */)
//
// Returns true if character c is a letter or digit.
//=============================================================================
function isLetterOrDigit (c)
{
    return (    (isLetter(c))
             || (isDigit(c)));
}

//=============================================================================
// isInteger (s /* string */)
//
// Return true if string s has digits for each character in the string.
//=============================================================================
function isInteger (s)
{
    var i;
    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
    // All characters are numbers.
    return true;
}

function isFloat (s)
{
    var i;
    var l_iNumDecimals = 0;
    for (i = 0; i < s.length; i++)
    {
        var c = s.charAt(i);
        if( c == ".")
        {
            if( l_iNumDecimals == 0)
                l_iNumDecimals++;
            else
                return false;
        }
        else if( i == 0)
        {
            if(    (!isDigit(c))
                && (c != '-'))
            return false;
        }
        else if (!isDigit(c))
            return false;
    }
    // All characters are numbers.
    return true;
}

function parseInteger( p_str)
{
	var i = 0;
	for( i = 0; i < p_str.length; i++)
		if( p_str.charAt( i) != 0) break;

	if( i == p_str.length)
		i--;
	var l_subStr = p_str.substring( i, p_str.length);
	return parseInt( l_subStr);
}


//=============================================================================
// isEmpty( s  /* string */)
//
// Returns true if string is empty.
//=============================================================================
function isEmpty (s)
{
	if (s == "")
		return true;
	else if (s.length == 0)
		return true;
	else {
		var strippedString = s.replace(/[ ]/g, "");

		if (strippedString.length == 0)
			return true;
		else
			return false;
	}
}

//=============================================================================
// f_checkSSN( SSN1, SSN2, SSN3)
//
// Check the Social Security Number
//=============================================================================
function f_checkSSN( SSN1, SSN2, SSN3)
{
	var l_bIllegalSSN = false;

    if(    (SSN1.length != 3)
        || (!isInteger(SSN1)))
		l_bIllegalSSN = true;

    if(    (SSN2.length != 2)
        || (!isInteger(SSN2)))
		l_bIllegalSSN = true;

    if(    (SSN3.length != 4)
        || (!isInteger(SSN3)))
		l_bIllegalSSN = true;

	return l_bIllegalSSN;
}


//=============================================================================
// f_checkPhoneNumber( PhNum1, PhNum2, PhNum3)
//
// Check the phone number
//=============================================================================
function f_checkPhoneNumber( PhNum1, PhNum2, PhNum3)
{
	var l_bIllegalPhNum = false;

    if(    (PhNum1.length != 3)
        || (!isInteger(PhNum1)))
		l_bIllegalPhNum = true;

    if(    (PhNum2.length != 3)
        || (!isInteger(PhNum2)))
		l_bIllegalPhNum = true;

    if(    (PhNum3.length != 4)
        || (!isInteger(PhNum3)))
		l_bIllegalPhNum = true;

	return l_bIllegalPhNum;
}

function f_move_source_dest(p_sname, p_dname, p_orig, p_flag)
{
	f_copy_source_dest(p_sname, p_dname, p_orig)
	p_flag.value = "Y";
	return true;

}

function f_move_dest_source(p_sname, p_dname, p_orig, p_flag)
{
	f_copy_dest_source(p_sname, p_dname, p_orig)
	p_flag.value = "Y";
	return true;
}

function f_all_source_dest (p_sname, p_dname, p_orig, p_flag)
{
	for (i=0;i<p_sname.options.length; i++)
	{
	     p_sname.options[i].selected  = true;
	}
	f_copy_source_dest(p_sname, p_dname, p_orig)

	p_flag.value = "Y";
	return true;
}

function f_all_dest_source (p_sname, p_dname, p_orig, p_flag)
{
	for (i=0;i<p_dname.options.length; i++)
	{
	     p_dname.options[i].selected  = true;
	}
	f_copy_dest_source(p_sname, p_dname, p_orig)

	p_flag.value = "Y";
	return true;
}


function f_copy_source_dest(p_sname, p_dname, p_orig)
{
	for (i=0;i<p_sname.options.length; i++)
	{
		 var opt = new Option();

	     if ( p_sname.options[i].selected &&
      	      p_sname.options[i].value != "-1" )
		 {
		 	if (p_orig.length == 0)
		 	{
				opt.value = p_sname.options[i].value;
				opt.text =  p_sname.options[i].text;
			}
			else
			{
				opt.value = p_sname.options[i].value;
				opt.text =  p_sname.options[i].value;
			}

			p_dname[p_dname.length]= opt;
		}
	}

	while (true)
	{
		 for (i=0;i<p_sname.options.length; i++)
		 {
			var opt1 = new Option();

			if ( p_sname.options[i].selected &&
			  p_sname.options[i].value != "-1" )
			{
				opt1 = null;
				p_sname[i]= opt1;
				break;
			}
		}
		if ( i == p_sname.options.length)
			break;
	}
/*
	if (p_sname.length == 0)
	{
		var opt1 = new Option();
	      opt1.text = "No More Available";
		opt1.value= "-1";
		p_sname[0]=opt1;
	}
*/
	return true;

}
function f_copy_dest_source(p_sname, p_dname, p_orig)
{
	for (i=0;i<p_dname.options.length; i++)
	{
		 var opt = new Option();

	       if ( p_dname.options[i].selected &&
      	      p_dname.options[i].value != "-1" )
		 {
		 	var l_text = "";
		 	if (p_orig.length == 0)
		 		l_text = p_dname.options[i].text;
		 	else
		 	{
			 	for (j=0;j<p_orig.length; j++)
			 	{
					if ( p_orig[j].value == p_dname.options[i].value )
						l_text = p_orig[j].text;
			 	}
		 	}

			opt.value = p_dname.options[i].value;
			if ( l_text != "" )
				opt.text =  l_text;
			else
				opt.text =  p_dname.options[i].text;

			p_sname[p_sname.length]= opt;
		}
	}

	while (true)
	{
		for (i=0;i<p_dname.options.length; i++)
		{
			var opt1 = new Option();

			if ( p_dname.options[i].selected &&
			  p_dname.options[i].value != "-1" )
			{
				opt1 = null;
				p_dname[i]= opt1;
				break;
			}
		}
		if ( i == p_dname.options.length)
			break;
	}
/*
	if (p_dname.length == 0)
	{
		var opt1 = new Option();
	      opt1.text = "No More Available";
		opt1.value= "-1";
		p_dname[0]=opt1;
	}
*/
	return true;
}

function f_excl_source_dest(p_available,p_excluded,p_orig,p_excl)
{
	var l_error_found = false;
	for (i=0;i<p_available.options.length; i++)
	{
		if ( p_available.options[i].selected)
		{
			var l_val = p_available.options[i].value;
			if (l_val == "ALL" || l_val.search(" ALL") != -1 ||
				l_val.search("-ALL") != -1 || l_val == "ALL-ALL" )
			{
				alert ('You cannot exclude ALL option.');
				l_error_found = true;
				break;
			}
		}
	}

	if (!l_error_found)
		f_move_source_dest(p_available,p_excluded,p_orig,p_excl)
}

function f_buildListStr(p_added_str, p_added_flag, p_added_value)
{
	if ( p_added_flag.value == "Y")
    {

		var l_val  ="";
		for (i=0;i<p_added_value.options.length; i++)
		{
		    if (p_added_value.options[i].value != -1)
		    {
				if (l_val == "")
					l_val = p_added_value.options[i].value;
				else
					l_val += '|' + p_added_value.options[i].value;
			}
		}
		p_added_str.value = l_val;
	}

	return true;
}

function skipField(val, next, len)
{
    //alert( 'val:' + val + ', len:' + len);
    if( val.length == len && next.value.length == 0)
    {
//    	next.value ="";
    	next.focus();
    }
    return true;
}

function getDaysInMonth( p_month, p_year)
{
	switch(p_month)
	{
		case 8 : /* September */
		case 3 : /* April     */
		case 5 : /* June      */
		case 10: /* November */
			return 30;
		break;
		case 1: /* February   */
            if (p_year % 4 != 0)
				return 28;
            else if (p_year % 400 == 0)
				return 29;
            else if (p_year % 100 == 0)
				return 28;
            else
				return 29;
		break;
	}
	return 31;
}

function chk_Time(p_hh, p_mi, p_ss, p_pstField, p_text, p_required, p_count)
{
	var l_bEmpty = false;
	var l_bErrorInForm = false;
	var date_str = "";
	var l_ErrorStr = "";
	var p_error_count = p_count;

	if(  (p_hh.length == 0)
	&& (p_mi.length == 0)
	&& (p_ss.length == 0))
	if( p_required == true)
	{
    l_ErrorStr += (p_error_count++) + ') ' + p_text + ' must be filled in\n';
		l_ErrorStr += '::' + p_error_count;
		return l_ErrorStr;
	}
	else
		l_bEmpty = true;

	if(    (l_bEmpty == false)
			&& ((p_hh.length == 0)
			|| (p_mi.length == 0)
			|| (p_ss.length == 0)))
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' is not completely filled out\n';
			l_bErrorInForm = true;
		}
		else
			if( (!isInteger( p_hh))
		|| (!isInteger( p_mi))
		|| (!isInteger( p_ss)))
	{
    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' has non numeric characters in it\n';
		l_bErrorInForm = true;
	}

	if (p_hh > 23 || p_hh < 0)
	{
    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' Hours must be between 0 and 24.\n';
		l_bErrorInForm = true;
	}

	if (p_mi > 59 || p_mi < 0)
	{
    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' Minutes must be between 0 and 60.\n';
		l_bErrorInForm = true;
	}

	if (p_ss > 59 || p_ss < 0)
	{
    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' Seconds must be between 0 and 60.\n';
		l_bErrorInForm = true;
	}

	p_pstField.value =
	((p_hh.length == 1) ? ('0' + p_hh) : p_hh) + ":" +
	((p_mi.length == 1) ? ('0' + p_mi) : p_mi) + ":" +
	((p_ss.length == 1) ? ('0' + p_ss) : p_ss) ;

	if(l_ErrorStr.length > 0)
		l_ErrorStr += '::' + p_error_count;

	return l_ErrorStr;
}

function chk_DateTime( p_mm, p_dd, p_yyyy, p_hh, p_mi, p_ss, p_pstField, p_text, p_required, p_count)
{
	var l_bEmpty = false;
	var l_bErrorInForm = false;
	var date_str = "";
	var l_ErrorStr = "";
	var p_error_count = p_count;

	if(    (p_mm.length == 0)
		&& (p_dd.length == 0)
		&& (p_yyyy.length == 0))
		if( p_required == true)
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' must be filled in\n';
			l_ErrorStr += '::' + p_error_count;
			return l_ErrorStr;
		}
		else
			l_bEmpty = true;

		if(    (l_bEmpty == false)
			&& (    (p_mm.length == 0)
			|| (p_dd.length == 0)
			|| (p_yyyy.length == 0)))
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' is not completely filled out\n';
			l_bErrorInForm = true;
		}
		else
			if(    (!isInteger( p_mm))
		|| (!isInteger( p_dd))
		|| (!isInteger( p_yyyy)))
	{
    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' has non numeric characters in it\n';
		l_bErrorInForm = true;
	}
	else
	{
		date_str = "" + p_mm;
		if((date_str.charAt(0) == "0") && (date_str.length > 1))
			date_str = date_str.substring(1);
		var l_iMonth   = parseInt( date_str);
		date_str = "" + p_dd;
		if((date_str.charAt(0)) == "0" && (date_str.length > 1))
			date_str = date_str.substring(1);
		var l_iDate    = parseInt( date_str );
		var l_iYear    = parseInt( p_yyyy);
		var l_iLargestDayInMonth = getDaysInMonth( l_iMonth - 1, l_iYear);
		if( l_iMonth > 12 || l_iMonth < 1)
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' month is out of range\n';
			l_bErrorInForm = true;
		}
		if( l_iDate > l_iLargestDayInMonth)
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' date is too large for month ' + l_iMonth + ', max is ' + l_iLargestDayInMonth + '.\n';
			l_bErrorInForm = true;
		}
		if( l_iDate < 1 )
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' date is out of range\n';
			l_bErrorInForm = true;
		}
		if( l_iYear < 1900)
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' Year is out of range\n';
			l_bErrorInForm = true;
		}
	}
	if( l_bErrorInForm == false)
	{
		if( l_bEmpty == true)
		{
			p_pstField.value = "";
		}
		else
		{
			p_pstField.value = 	p_yyyy + '-' +
								((p_mm.length == 1) ? ('0' + p_mm) : p_mm) + '-' +
								((p_dd.length == 1) ? ('0' + p_dd) : p_dd) + ' ' +
								((p_hh.length == 1) ? ('0' + p_hh) : p_hh) + ':' +
								((p_mi.length == 1) ? ('0' + p_mi) : p_mi) + ':' +
								((p_ss.length == 1) ? ('0' + p_ss) : p_ss) ;
		}
	}

	if(l_ErrorStr.length > 0)
		l_ErrorStr += '::' + p_error_count;
	return l_ErrorStr;
}


function chk_Date( p_mm, p_dd, p_yyyy, p_pstField, p_text, p_required, p_count)
{
	var l_bEmpty = false;
	var l_bErrorInForm = false;
	var date_str = "";
	var l_ErrorStr = "";
	var p_error_count = p_count;

	if(    (p_mm.length == 0)
		&& (p_dd.length == 0)
		&& (p_yyyy.length == 0))
		if( p_required == true)
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' must be filled in\n';
			l_ErrorStr += '::' + p_error_count;
			return l_ErrorStr;
		}
		else
			l_bEmpty = true;

		if(    (l_bEmpty == false)
			&& (    (p_mm.length == 0)
			|| (p_dd.length == 0)
			|| (p_yyyy.length == 0)))
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' is not completely filled out\n';
			l_bErrorInForm = true;
		}
		else
			if(    (!isInteger( p_mm))
		|| (!isInteger( p_dd))
		|| (!isInteger( p_yyyy)))
	{
    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' has non numeric characters in it\n';
		l_bErrorInForm = true;
	}
	else
	{
		date_str = "" + p_mm;
		if((date_str.charAt(0) == "0") && (date_str.length > 1))
			date_str = date_str.substring(1);
		var l_iMonth   = parseInt( date_str);
		date_str = "" + p_dd;
		if((date_str.charAt(0)) == "0" && (date_str.length > 1))
			date_str = date_str.substring(1);
		var l_iDate    = parseInt( date_str );
		var l_iYear    = parseInt( p_yyyy);
		var l_iLargestDayInMonth = getDaysInMonth( l_iMonth - 1, l_iYear);
		if( l_iMonth > 12 || l_iMonth < 1)
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' month is out of range\n';
			l_bErrorInForm = true;
		}
		if( l_iDate > l_iLargestDayInMonth)
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' date is too large for month ' + l_iMonth + ', max is ' + l_iLargestDayInMonth + '.\n';
			l_bErrorInForm = true;
		}
		if( l_iDate < 1 )
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' date is out of range\n';
			l_bErrorInForm = true;
		}
		if( l_iYear < 1900)
		{
	    	l_ErrorStr += (p_error_count++) + ') ' + p_text + ' Year is out of range\n';
			l_bErrorInForm = true;
		}
	}
	if( l_bErrorInForm == false)
	{
		if( l_bEmpty == true)
		{
			p_pstField.value = "";
		}
		else
		{
			p_pstField.value = 	p_yyyy + '-' +
				((p_mm.length == 1) ? ('0' + p_mm) : p_mm) + '-' +
				((p_dd.length == 1) ? ('0' + p_dd) : p_dd) + ' ' ;
		}
	}

	if(l_ErrorStr.length > 0)
		l_ErrorStr += '::' + p_error_count;
	return l_ErrorStr;
}

//=============================================================================
// checkWhiteSpace( p_field_value /* string */)
//
// Returns true if p_field_value contains only white spaces.
//=============================================================================
function checkWhiteSpace( p_field_value )
{
    var value = "";
    var white_space = true;

    value = "" + p_field_value;
    for(var i=0;i<value.length;i++)
    {
        if(value.charAt(i) != ' ')
        {
                white_space = false;
                break;
        }
    }

    return white_space;
}

//=============================================================================
// function to validate date
//
// Returns errors if not a valid date.
//=============================================================================

function f_validateDate(pdate) {
    var strErrors = "";

	var arDate = pdate.split("/");
	if (arDate.length != 3)
	    return strErrors = "Not a valid date. Please enter date in 'mm/dd/yyyy' format'.";

	var month = arDate[0];
	var day = arDate[1];;
	var year = arDate[2];

	if (isEmpty(month))
	{	if( strErrors.length > 0)
			strErrors += ", ";

		strErrors += "No Month entered ";

	}

	if (isEmpty(day))
	{	if( strErrors.length > 0)
			strErrors += ", ";

		strErrors += "No Date entered ";

	}

	if (isEmpty(year))
	{	if( strErrors.length > 0)
			strErrors += ", ";

		strErrors += "No Year entered ";

	}

	var iCount = 0;
	var iNunNumericErrors = 0;
	if(!isInteger(month))
	{	if( strErrors.length > 0)
			strErrors += ", ";

		strErrors += "Please enter a numeric value in the Month field";

	}
	else
	{
		if (! inRange(month,1,12))
		{	if( strErrors.length > 0)
				strErrors += ", ";

			strErrors = "Please enter a valid month.";
		}
	}

	if( !isInteger(day))
	{
		if( strErrors.length > 0)
			strErrors += ", ";

	    strErrors += "Please enter a numeric value in the Date field";
	}
	else
	{
		var monthMax = new Array(31,31,29,31,30,31,30,31,31,30,31,30,31)
		var iMonth = parseInt(month,10);
		var top = monthMax[iMonth];

		if (! inRange(day,1,top))
		{
			if( strErrors.length > 0)
				strErrors += ", ";

			strErrors += "Please enter a valid date";
		}
	}

	if( !isInteger(year))
	{
		if( strErrors.length > 0)
			strErrors += ", ";

		strErrors += "Please enter a numeric value in the Year field";
	}
	else
	{
		var iYear = parseInt( year,10);
		//alert( 'iYear: ' + iYear);
		if( iYear < 1900)
		{
			if( strErrors.length > 0)
				strErrors += ", ";

			strErrors += "Please enter a valid year";
		}
	}

	return strErrors;

}

//=============================================================================
// function to validate month
//
// Returns boolean based on month is correct or wrong.
//=============================================================================

function inRange(inputStr,lo,hi) {
	var num = parseInt(inputStr,10);

	if (num < lo || num > hi) {
		return false
	}

	return true

 }

//================================================================================
// function to compare a valid date (yyyymmdd format), grater than today
//
// function f_isGraterThanToday(String pdate,pPstDate)
//================================================================================
function f_isGraterThanToday(pdate,pPstDate) {
    var v_retStatus = true;

    //var today = new Date();
    //var v_mon   = today.getMonth();v_mon++;
    //var v_dte   = today.getDate();
    //var v_yr    = today.getFullYear();
    //if (String(v_mon).length != 2) { v_mon = "0"+v_mon }
    //if (String(v_dte).length != 2) { v_dte = "0"+v_dte }
    //var v_today = String(v_yr)+String(v_mon)+String(v_dte);

    if (pdate <= pPstDate)
        v_retStatus = false;

   return v_retStatus;

}

//=============================================================================
// isSignedInteger (s /* string */)
//
// Return true if string s has digits for each character in the string optionally
// negative symbol.
//=============================================================================
function isSignedInteger (s)
{
    var i;
    var bSignedInteger = true;
    var s1;
    var c;

    s1 = s;
    //Check the first character
    if (s.length > 1)
    {
    	c = s.charAt(0);
    	if (c == '-')
    	{
		    s1 = "";
		    for (i = 1; i < s.length; i++)
		    {
		        c = s.charAt(i);
		        s1 += c;
		    }
    	}
    }

    bSignedInteger = isInteger(s1);

    return bSignedInteger;
}

function popUp(page, name, height, width)
{
    var poupwin = window.open(page, name, "height=" + height + ",width=" + width + "");
    if(poupwin.focus)
    	poupwin.focus();
}

function isEmail(p_email_addr)
{
	if ( (parseInt(p_email_addr.indexOf('@')) <= 0) ||
	    (parseInt(p_email_addr.indexOf('.')) <= 0) )
		return false;
	else
		return true;

	return true;
}


function add_combo(p_value, p_list)
{
    if (p_value.value != null && p_value.value != "") {
	    var option = new Option(p_value.value);
	    option.value = p_value.value;

	      var l_iExistsFlag = false;
	      for (i=0; i<p_list.length ; i++) {
	          if ( p_list[ i ].value  == p_value.value )
	          {
	              alert ('Already added.');
	              l_iExistsFlag = true;
	              return;
	          }
	      }
	      if (!l_iExistsFlag)
               p_list[ p_list.length]  = option;
	    }

	p_value.value = "";
	return;

}


function remove_combo(p_value, p_list)
{
	var option1 = null;

	for (i=0; i<p_list.length; i++) {
	   if (i == p_list.selectedIndex && p_list[ i ].value != -1)
	   {
	       p_list[ i ] =  option1;
	       return;
	   }
	}

return;

}

function whenIs(anyDate, n){
   //-- Returns the date that is n days from any date object.
   var newDate = new Date()
   newDate.setTime(anyDate.getTime()+(n*1000*60*60*24))
   return newDate.getFullYear();
}

function makeArray0() {
    for (i = 0; i<makeArray0.arguments.length; i++)
        this[i] = makeArray0.arguments[i];
}

function Calendar(	Month,Year,p_start_month,p_start_day,p_start_year,p_end_month,
					p_end_day,p_end_year,p_incl_ss, p_holidays, p_workdays) {
    var output 		= "";
    var today 		= new Date();
	var names   	= new makeArray0('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	var days    	= new makeArray0(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var dow    	 	= new makeArray0('SUN','MON','TUE','WED','THU','FRI','SAT');
	var names_start	= 0;
	var names_end	= 12;

	if (Year == "") Year = today.getFullYear();
	if (Month == "") Month = today.getMonth() + 1;


	if (p_start_day == "")
		p_start_day = 1;
	else
		p_start_day = parseInteger(p_start_day);

	if (p_start_month == "")
		p_start_month = 1;
	else
		p_start_month = parseInteger(p_start_month);

	if (p_start_year == "")
		p_start_year = today.getFullYear();
	else
		p_start_year = parseInteger(p_start_year);

	if (p_end_day == "")
		p_end_day = 31;
	else
		p_end_day = parseInteger(p_end_day);

	if (p_end_month == "")
		p_end_month = 12;
	else
		p_end_month = parseInteger(p_end_month);

	if (p_end_year == "")
		p_end_year = today.getFullYear();
	else
		p_end_year = parseInteger(p_end_year);

	if ( p_incl_ss == "")
		p_incl_ss = 'N';

	if (p_start_year == Year)
		names_start = p_start_month - 1;

	if (p_end_year == Year)
		names_end = p_end_month;

	var l_holidays_arr = p_holidays.split('|');
	var l_workdays_arr = p_workdays.split('|');

    output += '<INPUT TYPE="HIDDEN" NAME="Day" 			VALUE="">';
    output += '<INPUT TYPE="HIDDEN" NAME="day_status" 	VALUE="">';
    output += '<INPUT TYPE="HIDDEN" NAME="holidays" 	VALUE="' 	+ p_holidays + '">';
    output += '<INPUT TYPE="HIDDEN" NAME="workdays" 	VALUE="' 	+ p_workdays + '">';
	output += '<INPUT TYPE="HIDDEN" NAME="start_day" 	VALUE="' 	+ p_start_day + '">';
	output += '<INPUT TYPE="HIDDEN" NAME="start_month" 	VALUE="' 	+ p_start_month + '">';
    output += '<INPUT TYPE="HIDDEN" NAME="start_year" 	VALUE="' 	+ p_start_year + '">';
    output += '<INPUT TYPE="HIDDEN" NAME="end_day" 		VALUE="' 	+ p_end_day + '">';
    output += '<INPUT TYPE="HIDDEN" NAME="end_month" 	VALUE="' 	+ p_end_month + '">';
    output += '<INPUT TYPE="HIDDEN" NAME="end_year" 	VALUE="' 	+ p_end_year + '">';

    output += '<TABLE CELLSPACING="0" CELLPADDING="0" BGCOLOR="#EEEEEE" BORDER="0">';
    output += '<TR><TD colspan="2">&nbsp;<\/TD><\/TR>';

	output += '<TR valign="CENTER"><TD align="CENTER" colspan="2"><B>' +
					p_start_month + '/' + p_start_day + '/' + p_start_year + ' - ' +
					p_end_month + '/' + p_end_day + '/' + p_end_year + '<\/B><\/TD><\/TR>';

    output += '<TR><TD colspan="2">&nbsp;<\/TD><\/TR>';
    output += '<TR><TD ALIGN=CENTER >';
    output += '<B><SPAN CLASS="bold">' + names[Month-1] + ' ' 	+ Year + '<\/SPAN><\/B><\/TD><TD ALIGN=CENTER>';

    output += '<SELECT NAME="Month" onChange="submitCal();">';
	for (i=names_start, month=names_start+1; i<names_end; i++, month++) {
	  if (month == Month) output += '<OPTION VALUE="' + month + '" SELECTED>' + names[i] + '<\/OPTION>';
	  else                output += '<OPTION VALUE="' + month + '">'          + names[i] + '<\/OPTION>';
	}

    output += '<\/SELECT>&nbsp;&nbsp;&nbsp;&nbsp;<SELECT NAME="Year" onChange="submitCal();">';

    for (year=p_start_year; year<=p_end_year; year++) {
        if (year == Year) output += '<OPTION VALUE="' + year + '" SELECTED>' + year + '<\/OPTION>';
        else              output += '<OPTION VALUE="' + year + '">'          + year + '<\/OPTION>';
    }

    output += '<\/SELECT>&nbsp;<\/TD><\/TR><TR><TD ALIGN=CENTER COLSPAN=2>';

    firstDay = new Date(Year,Month-1,1);
    startDay = firstDay.getDay();

    if (((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0))
         days[1] = 29;
    else
         days[1] = 28;

    output += '<TABLE CALLSPACING="0" CELLPADDING="0" BORDER="1" BORDERCOLORDARK="#FFFFFF" BORDERCOLORLIGHT="#C0C0C0">';
	output += '<TR>';
    for (i=0; i<7; i++)
        output += '<TD WIDTH=15 ALIGN=CENTER VALIGN=MIDDLE><B>' + dow[i] +'<\/B><\/TD>';

    output += '<\/TR><TR ALIGN=CENTER VALIGN=MIDDLE>';

    var column = 0;
    var lastMonth = Month;
    if (lastMonth == -1) lastMonth = 11;

    for (i=0; i<startDay; i++, column++)
        output += '<TD WIDTH=15 HEIGHT=5>&nbsp;<\/TD>';

    for (i=1; i<=days[Month-1]; i++, column++) {
    	if (p_start_year == Year && p_start_month == Month && i < p_start_day)
			output += '<TD WIDTH=15 HEIGHT=5>' + '<FONT SIZE=2 COLOR="gray" FACE="ARIAL">' + i + '<\/FONT>' +'<\/TD>';
    	else if (p_end_year == Year && p_end_month == Month && i > p_end_day)
			output += '<TD WIDTH=15 HEIGHT=5>' + '<FONT SIZE=2 COLOR="gray" FACE="ARIAL">' + i + '<\/FONT>' +'<\/TD>';
        else if ((column == 0 || column == 6) && p_incl_ss != "Y" )
		{
			var l_found = false;
			for (wrk_i=0; wrk_i<l_workdays_arr.length; wrk_i++)
			{
				if (l_workdays_arr[wrk_i] == Year + "-" +
							(Month.length==2 ? Month : "0" + Month) + "-" + (i > 9 ? i : "0"+i))
						l_found = true;
			}

			if (l_found)
				output += '<TD WIDTH=15 HEIGHT=5>' + '<A class="calactive" HREF="javascript:changeDay(\'' + i + '\', \'D\' )"><FONT SIZE=2 COLOR="blue" FACE="ARIAL">' + i + '<\/FONT><\/A>' +'<\/TD>';
			else
				output += '<TD WIDTH=15 HEIGHT=5>' + '<A class="calholiday" HREF="javascript:changeDay(\'' + i + '\', \'W\' )"><FONT SIZE=2 COLOR="brown" FACE="ARIAL">' + i + '<\/FONT><\/A>' +'<\/TD>';
		}
    	else
    	{
    		var l_found = false;
			for (hol_i=0; hol_i<l_holidays_arr.length; hol_i++)
			{
				if (l_holidays_arr[hol_i] == Year + "-" +
							(Month.length==2 ? Month : "0" + Month) + "-" + (i > 9 ? i : "0"+i))
						l_found = true;
			}

			if (l_found)
				output += '<TD WIDTH=15 HEIGHT=5>' + '<A class="calholiday" HREF="javascript:changeDay(\'' + i + '\', \'D\' )"><FONT SIZE=2 COLOR="brown" FACE="ARIAL">' + i + '<\/FONT><\/A>' +'<\/TD>';
			else
	    		output += '<TD WIDTH=15 HEIGHT=5>' + '<A class="calactive" HREF="javascript:changeDay(\'' + i + '\', \'H\' )"><FONT SIZE=2 COLOR="blue" FACE="ARIAL">' + i + '<\/FONT><\/A>' +'<\/TD>';
    	}

        if (column == 6) {
            output += '<\/TR><TR ALIGN=CENTER VALIGN=MIDDLE>';
            column = -1;
        }
    }

    if (column > 0) {
        for (i=1; column<7; i++, column++)
            output +=  '<TD WIDTH=15 HEIGHT=5>&nbsp;<\/TD>';
    }

    output += '<\/TR><\/TABLE><\/TD><\/TR><\/TABLE>';

    return output;
}

function project_cal(Month,Year, p_incl_ss, p_holidays, p_workdays) {
    var output 			= '';
    var today 			= new Date();
	var names   		= new makeArray0('January','February','March','April','May','June','July','August','September','October','November','December');
	var days    		= new makeArray0(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var dow     		= new makeArray0('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
	var l_holidays_arr = p_holidays.split('|');
	var l_workdays_arr = p_workdays.split('|');

    curr_year = today.getFullYear();
    start_year = curr_year - 10;
    end_year = curr_year + 10;
    year_range = whenIs(today,331);
    curr_day = today.getDate();
    curr_month = today.getMonth();

    output += '<FORM NAME="Cal"><TABLE BGCOLOR="#EEEEEE" BORDER=0><TR><TD>';
    output += '<B><SPAN CLASS="bold">' + names[Month] + ' ' + Year + '<\/SPAN><\/B><\/TD>';
    output += '<TD><SELECT NAME="Month" onChange="changeMonth();">';

    for (month=0; month<12; month++) {
          if (month == Month) output += '<OPTION VALUE="' + month + '" SELECTED>' + names[month] + '<\/OPTION>';
          else                output += '<OPTION VALUE="' + month + '">'          + names[month] + '<\/OPTION>';
       }

    output += '<\/SELECT>&nbsp;&nbsp;&nbsp;&nbsp;<SELECT NAME="Year" onChange="changeYear();">';

    for (year=start_year; year<=end_year; year++) {
        if (year == Year) output += '<OPTION VALUE="' + year + '" SELECTED>' + year + '<\/OPTION>';
        else              output += '<OPTION VALUE="' + year + '">'          + year + '<\/OPTION>';
    }

    output += '<\/SELECT>&nbsp;<\/TD><\/TR><TR><TD ALIGN=CENTER COLSPAN=2>';

    firstDay = new Date(Year,Month,1);
    startDay = firstDay.getDay();

    if (((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0))
         days[1] = 29;
    else
         days[1] = 28;

    output += '<TABLE CALLSPACING=0 CELLPADDING=0 BORDER=1 BORDERCOLORDARK="#FFFFFF" BORDERCOLORLIGHT="#C0C0C0"><TR>';

    for (i=0; i<7; i++)
        output += '<TD WIDTH=15 ALIGN=CENTER VALIGN=MIDDLE><FONT SIZE=2 COLOR="#000000" FACE="ARIAL"><B>' + dow[i] +'<\/B><\/FONT><\/TD>';

    output += '<\/TR><TR ALIGN=TOP VALIGN=TOP>';

    var column = 0;
    var lastMonth = Month - 1;
    if (lastMonth == -1) lastMonth = 11;

    for (i=0; i<startDay; i++, column++)
        output += '<TD WIDTH=250 HEIGHT=70>&nbsp;<\/TD>';

    for (i=1; i<=days[Month]; i++, column++) {
    	output += '<TD WIDTH=250 HEIGHT=70>';
    	output += '<TABLE CALLSPACING=0 CELLPADDING=0 BORDER=0>';
    	output += '<TR>';
		if ((curr_month == Month) && (curr_year == Year) && (i == curr_day))
			output += '<TD class="f4r">';
		else
			output += '<TD class="f4b">';

	    output += i;
		output += '<\/TD><\/TR>';

		var l_month = parseInt(Month) + 1;
		var l_display_date = Year+'-'+(l_month > 9 ? l_month : '0'+l_month)+'-'+(i > 9 ? i : '0'+i);

		l_work_day = true;
        if ((column == 0 || column == 6) && p_incl_ss != "Y" )
		{
			l_work_day = false;
			for (wrk_i=0; wrk_i<l_workdays_arr.length; wrk_i++)
			{
				if (l_workdays_arr[wrk_i] == Year + "-" +
							(Month.length==2 ? Month : "0" + Month) + "-" + (i > 9 ? i : "0"+i))
						l_work_day = true;
			}
		}

		for (hol_i=0; hol_i<l_holidays_arr.length; hol_i++)
		{
			if (l_holidays_arr[hol_i] == Year + "-" +
						(l_month > 9 ? l_month : "0" + l_month) + "-" + (i > 9 ? i : "0"+i))
					l_work_day = false;
		}


		if (l_work_day)
		{
			for (k=0; k<l_task_len; k++)
			{
				if (l_task_start_date[k] <= l_display_date && l_task_end_date[k] >= l_display_date)
				{
					output += '<TR><TD class="f4">';
					output += l_task_descr[k];
					output += '.<\/TD><\/TR>';
				}
			}
		}
		output += '<\/TABLE>';
		output += '<\/TD>';

        if (column == 6) {
            output += '<\/TR><TR ALIGN=TOP VALIGN=TOP>';
            column = -1;
        }
    }

    output += '<\/TR><\/TABLE><\/FORM><\/TD><\/TR><\/TABLE>';

    return output;
}

function Cal(Month,Year) {
    var output = '';
    var today = new Date();
	var names     = new makeArray0('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	var days      = new makeArray0(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var dow       = new makeArray0('S','M','T','W','T','F','S');

    curr_year = today.getFullYear();
    start_year = curr_year - 50;
    end_year = curr_year + 10;
    year_range = whenIs(today,331);
    curr_day = today.getDate();
    curr_month = today.getMonth();

    output += '<FORM NAME="Cal"><TABLE BGCOLOR="#EEEEEE" BORDER=0><TR><TD ALIGN=CENTER >';
    output += '<B><SPAN CLASS="bold">' + names[Month] + ' ' + Year + '<\/SPAN><\/B><\/TD><TD ALIGN=CENTER>';
    output += '<SELECT NAME="Month" onChange="changeMonth();">';

       for (month=0; month<12; month++) {
          if (month == Month) output += '<OPTION VALUE="' + month + '" SELECTED>' + names[month] + '<\/OPTION>';
          else                output += '<OPTION VALUE="' + month + '">'          + names[month] + '<\/OPTION>';
       }

    output += '<\/SELECT><SELECT NAME="Year" onChange="changeYear();">';

    for (year=start_year; year<=end_year; year++) {
        if (year == Year) output += '<OPTION VALUE="' + year + '" SELECTED>' + year + '<\/OPTION>';
        else              output += '<OPTION VALUE="' + year + '">'          + year + '<\/OPTION>';
    }

    output += '<\/SELECT>&nbsp;<\/TD><\/TR><TR><TD ALIGN=CENTER COLSPAN=2>';

    firstDay = new Date(Year,Month,1);
    startDay = firstDay.getDay();

    if (((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0))
         days[1] = 29;
    else
         days[1] = 28;

    output += '<TABLE CALLSPACING=0 CELLPADDING=0 BORDER=1 BORDERCOLORDARK="#FFFFFF" BORDERCOLORLIGHT="#C0C0C0"><TR>';

    for (i=0; i<7; i++)
        output += '<TD WIDTH=15 ALIGN=CENTER VALIGN=MIDDLE><FONT SIZE=2 COLOR="#000000" FACE="ARIAL"><B>' + dow[i] +'<\/B><\/FONT><\/TD>';

    output += '<\/TR><TR ALIGN=CENTER VALIGN=MIDDLE>';

    var column = 0;
    var lastMonth = Month - 1;
    if (lastMonth == -1) lastMonth = 11;

    for (i=0; i<startDay; i++, column++)
        output += '<TD WIDTH=15 HEIGHT=5>&nbsp;<\/TD>';

    for (i=1; i<=days[Month]; i++, column++) {
		if ((curr_month == Month) && (curr_year == Year) && (i == curr_day)) {
	           output += '<TD WIDTH=15 HEIGHT=5>' + '<A HREF="javascript:changeDay(' + i + ',' + Month + ',' + Year + ')"><B><SPAN CLASS="bold">' + i + '<\/SPAN></B><\/A>' +'<\/TD>';
		}
		else {
	           output += '<TD WIDTH=15 HEIGHT=5>' + '<A HREF="javascript:changeDay(' + i + ',' + Month + ',' + Year + ')"><FONT SIZE=2 FACE="ARIAL" COLOR="#000000">' + i + '<\/FONT><\/A>' +'<\/TD>';
		}
        if (column == 6) {
            output += '<\/TR><TR ALIGN=CENTER VALIGN=MIDDLE>';
            column = -1;
        }
    }

    output += '<\/TR><\/TABLE><\/FORM><\/TD><\/TR><\/TABLE>';

    return output;
}


function containsNumeric(strString)
//  check for valid numeric strings	
{
	var strValidChars = "0123456789";
	var strChar;
	var blnResult = false;
	
	//  test strString consists of valid characters listed above
	for (i = 0; i < strString.length; i++)
	{
	  strChar = strString.charAt(i);
	  if (strValidChars.indexOf(strChar) != -1)
	  {
			blnResult = true;
			break;
	  }
	}
	return blnResult;
}

