/*
 - Copyright (c) 2000-2005 Reflexis Systems, Inc. All Rights Reserved.
 - Use of this code is subject to the terms and conditions of the contract with Reflexis Systems, Inc.
 - Unauthorized reproduction or distribution of any material or programming content is prohibited.
 -
 - Author(s): Reflexis_Dvlp
 - Date: 01/01/2004
 - $Header: $
 - Description:
 - Modified By(MM/DD/YYYY)  Description
 */

var defaultEmptyOK = false;
function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}
// Functions added For HTML Injection 
function checkHtmlTag(obj) 
	{
	     var word=obj.value;
	      word =   word.replace('>', '&gt;');
          word= word.replace('<', '&lt;');
          obj.value=word;
     
	}
function hideURL(str,buttonClick)
{
	var start = str.indexOf("?");
  	var idSeperator = "&";
	var resp = str.substr(start+1,str.length);
	var hiddenStr = "";
 	var end = resp.length;
 	
	start = 0;
	resp2 = resp;
	var i=0;
	var start1=0;
	while(end > 0)
  	 {
  	     resp2 = resp.substr(start ,resp.length);   
         start1=0;      	
         end = start1 + resp2.indexOf("&");
         	
         if(end > 0)
         {
	        resp1 = resp2.substr(start1,end);
          }
         else
            resp1 = resp2;
          eqStart = resp1.indexOf("=");
         hiddenName = resp1.substr(0,eqStart)
         hiddenVal = resp1.substr(eqStart+1,resp1.length)
         start = start+end+1;
       	var input1 = document.createElement("input");
		input1.setAttribute("type", "hidden");
		input1.setAttribute("name", hiddenName);
		input1.setAttribute("value", hiddenVal);
		if(buttonClick=="N")
		{
			document.getElementById("dummyform").appendChild(input1);
		}
		else
			document.getElementById(document.forms[0].id).appendChild(input1);
  	 }
}
function stripMarkupScheck(formField)
{   
      var description = formField.value;
     
        var origLen = description.length;

    var newLen = description.length;

            description = description.toLowerCase();
	
    var codevalCheck = strJscripcommsep.split(",");
   
   //if(description == "'")
   //{   	
   	//return false;
   //}
    for(var i=0 ; i<codevalCheck.length-1 ;i++)
    {
       
       description= description.replace(codevalCheck[i].toLowerCase(), "");
        newLen = description.length;
		if(newLen != origLen)
			return false;
      
    }
   
   
    if(newLen == origLen)
    return true;
}
function checkstripMarkupS11(CntrlName,fieldName,alertmsg)
{

	if(stripMarkupScheck(CntrlName)==false)
	{               
		var msg=rfx_unescape(alertmsg);
		alertmsg=messageFormat(msg,fieldName);
		alert(alertmsg); 
		CntrlName.focus();
		window.returnValue=false;
		return false;

     }
    
}
// Functions added For HTML Injection ends...  
function isCorrectUrl(fileName,flag)
{
	var retFlag = false;
	var optionsStr = url_Options;
	urlArr = optionsStr.split("__");
	for(var i = 0; i < urlArr.length; i++){
		if(flag){
			if(fileName != null && fileName != "" && ((fileName.toUpperCase()).indexOf(urlArr[i])) != 0)
			{	
				retFlag = true;
			}
			else{		
		 		retFlag = false;
				break;
			}
		}
		else{
			if(fileName != null && fileName != "" && ((fileName.toUpperCase()).indexOf(urlArr[i])) == 0)
			{	
				retFlag = true;
				break;
			}		
			else		
		 		retFlag = false;		
		}
	}
		
	return retFlag;	 		
}
// Added for the purpose of Globalization ..
// The purpose of this is same as MessageFormat class in Java
function messageFormat()
{
	var transString = messageFormat.arguments[0];
	var pattern = "";
	var s = 0;
	var e = 0;
	var result = "";
	if(messageFormat.arguments.length > 1)
	{
		for(var i = 1 ; i < messageFormat.arguments.length ; i++)
		{
			s = 0;
			result = '';
			pattern = "{" + (i-1) + "}";
			while((e = transString.indexOf(pattern, s)) >= 0)         
			{   
				result = result + transString.substring(s,e);            
				result = result + messageFormat.arguments[i];            
				s = e + pattern.length;        
			}        
			result = result + transString.substring(s);
			transString = result;
		}
	}
	else
		result = transString;
	
	return result;
}

// Added while working for Globalization...(to get rid of 'quotes problem in alert messages);
function rfx_unescape(str)
{
	if(str == "")
		return(str);
	else
		return unescape(replaceString(str, "+", "%20"));
}

function isEmpty(s)
{
    return((s == null) || (s.length == 0));
}

function isDigit(c)
{
   return((c >= "0") && (c <= "9"));
}

function isSignedFloat(s)
{
	var startPos = 0;
    if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
        startPos = 1;
    return (isFloat(s.substring(startPos, s.length)));

}

function stripNonIdChars(s)
{
   var whitespace =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-,";
   var i;
   var returnString = "";
   var inStr = new String(s);
   for (i = 0; i < inStr.length; i++)
   {
      var c = inStr.charAt(i);
      if (whitespace.indexOf(c) != -1) returnString += c;
   }
   return returnString;
}
//8586 modified by Sarika for globalization, lang_code is the global variable
function isFloat(s)
{
   var i;
   var seenDecimalPoint = false;
   var decimalPointDelimiter = "."; //8586 
   if(lang_code == '103276')//if user lang code  is German
	{
	   decimalPointDelimiter = ",";
	}//8586
	
   if (s == decimalPointDelimiter) return false;

   for (i = 0; i < s.length; i++)
   {
      var c = s.charAt(i);
      if ((c == decimalPointDelimiter) && (!(seenDecimalPoint)))
         seenDecimalPoint = true;
      else if (!isDigit(c))
	     return(false);
   }
   return(true);
}
function isRealyFloat(s)
{
   var i;
   var decimalPointDelimiter = "."; //8586 
   if(lang_code == '103276')//if user lang code  is German
	{
	   decimalPointDelimiter = ",";
	}//8586
   for (i = 0; i < s.length; i++)
   {
	   var c = s.charAt(i);
	      if ((c == decimalPointDelimiter))
	    	  return true;
   }
   return(false);
}
function isFloatInRange(s, a, b)
{
	var num;
	//8586 added by sarika
	if(lang_code == '103276' && s.charAt(0) == ',')
	{
		var s1 = s.substring(1);	
		num = parseFloat(s1);
		//var s2 = "0,".concat(s1);
	}
	else
		var num = parseFloat(s);//8586 
   return((num >= a) && (num <= b));
}

function isPositiveInteger(s)
{
   return(isSignedInteger(s)&&((parseInt(s)> 0)));
}

function isSignedInteger(s)
{
   var startPos = 0;
   if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
      startPos = 1;
   return(isInteger(s.substring(startPos, s.length)));
}

function isInteger(s)
{
   var i;
   for (i = 0; i < s.length; i++)
   {
      var c = s.charAt(i);
      if (!isDigit(c)) return(false);
   }
   return(true);
}

function isIntegerInRange(s, a, b)
{
    var num = parseInt(s);
    return((num >= a) && (num <= b));
}

function stripWhiteSpace(s)
{

   var whitespace = " \t\n\r";
   var i;
   var returnString = "";
   var inStr = new String(s);
   for (i = 0; i < inStr.length; i++)
   {
      var c = inStr.charAt(i);
      if (whitespace.indexOf(c) == -1) returnString += c;
   }
   return returnString;
}

function isRatingsEmpty(pRatingsArray)
{
    for (var i=0; i<pRatingsArray.length; i++)
    {
        if(typeof pRatingsArray[i] == "object")
		{
			if (!isTextEmpty(pRatingsArray[i]))
				return false;
		}
    }
    return true;
}

function isTextGroupEmpty(pTextArray)
{
    for (var i=0; i<pTextArray.length; i++)
    {
		if(typeof pTextArray[i] == "object")
		{
			if (!isTextEmpty(pTextArray[i]))
				return false;
		}
    }
    return true;
}

function isListEmpty(pList)
{
    if (pList.selectedIndex == 0)
	{
        pList.focus();
		return true;
	}
    else
        return false;
}

function isRadioGroupEmpty(pRadio)
{
	
	if(typeof pRadio.length == "undefined")
	{
	
		if(pRadio.checked)
			return false;
		
	}
	
	else
	{
	
		for (var i=0; i<pRadio.length; i++)
		{
		
			if (pRadio[i].checked)
				return false;
		}
			
	}
 
    if(typeof pRadio.length == "undefined")
      pRadio.focus();
	else
	pRadio[0].focus();
       return true;
	
}

function isTextEmpty(pText)
{
    if (typeof pText == "undefined")
        return false;

    if ((stripWhiteSpace(pText.value)).length == 0)
	{
//        pText.focus();
		return true;
	}
    else
        return false;
}


function isCheckBoxGroupEmpty(pChkGroupArray)
{
    for (var i=0; i<pChkGroupArray.length; i++)
    {
		if(typeof pChkGroupArray[i] == "object")
		{
			if (pChkGroupArray[i].checked)
				return false;
		}
    }
    //For multi-choice to multi-choice filter since all options might not be present for the target question
	for (var i=0; i<pChkGroupArray.length; i++)
    {
		if(typeof pChkGroupArray[i] == "object")
		{
			pChkGroupArray[i].focus();
			break;
		}
    }
	return true;
}
function isSingleCheckBoxGroupEmpty(pChkGroupArray)
{
    for (var i=0; i<pChkGroupArray.length; i++)
    {
		if(typeof pChkGroupArray[i] == "object")
		{
			if (pChkGroupArray[i].checked)
				return false;
		}
    }
   	return true;
}

function resetAll()
{
    var i;
    if (document.all || document.getElementById)
    {
        var coll = document.forms(0).elements;
        for (i=0; i<coll.length; i++)
        {
            if (coll.item(i).disabled)
                coll.item(i).disabled = false;
        }
        for (i=0; i<document.all.tags('TABLE').length; i++)
        {
            if (document.all.tags('TABLE').item(i).id)
            {
                if (document.all.tags('TABLE').item(i).bgColor == disableColor)
                    document.all.tags('TABLE').item(i).bgColor = enableColor;
            }
        }
    }
}

function setRadio(radio, defaultValue)
{
	if(typeof radio.length == "undefined")
	{
		if(radio.value == defaultValue)
			radio.checked = true;
		else
			radio.checked = false;
	}
	else
	{
		for (i=0; i < radio.length; i++)
		{
			 if (radio[i].value == defaultValue)
				radio[i].checked = true;
			 else
				radio[i].checked = false;
		}
	}
}


function setListBox(selectBox, defaultValue)
{
    for (i=0; i < selectBox.options.length; i++)
    {
            if (selectBox.options[i].value == defaultValue)
                    selectBox.selectedIndex = i;
    }
}

// date field validation (called by other validation functions that specify minYear/maxYear)
function isDate(gField, minYear,maxYear,minDays,maxDays) 
{
	var inputStr = gField.value
	// convert hyphen delimiters to slashes
	while (inputStr.indexOf("-") != -1) {
		inputStr = replaceString(inputStr,"-","/")
	}
	var delim1 = inputStr.indexOf("/")
	var delim2 = inputStr.lastIndexOf("/")
	if (delim1 != -1 && delim1 == delim2) {
		// there is only one delimiter in the string
		alert(messageFormat(dateEntry_al1))
		gField.focus()
		gField.select()
		return false
	}
	if (delim1 != -1) {
		// there are delimiters; extract component values
		var mm = parseInt(inputStr.substring(0,delim1),10)
		var dd = parseInt(inputStr.substring(delim1 + 1,delim2),10)
		var yyyy = parseInt(inputStr.substring(delim2 + 1, inputStr.length),10)
	} else {
		// there are no delimiters; extract component values
		var mm = parseInt(inputStr.substring(0,2),10)
		var dd = parseInt(inputStr.substring(2,4),10)
		var yyyy = parseInt(inputStr.substring(4,inputStr.length),10)
	}
	if (isNaN(mm) || isNaN(dd) || isNaN(yyyy)) {
		// there is a non-numeric character in one of the component values
		alert(messageFormat(dateEntry_al2))
		gField.focus()
		gField.select()
		return false
	}
	if (mm < 1 || mm > 12) {
		// month value is not 1 thru 12
		alert(messageFormat(dateEntry_al3))
		gField.focus()
		gField.select()
		return false
	}
	if (dd < 1 || dd > 31) {
		// date value is not 1 thru 31
		alert(messageFormat(dateEntry_al4))
		gField.focus()
		gField.select()
		return false
	}

	// validate year, allowing for checks between year ranges
	// passed as parameters from other validation functions
	if (yyyy < 100) {
		// entered value is two digits, which we allow for 1930-2029
		if (yyyy >= 30) {
			yyyy += 1900
		} else {
			yyyy += 2000
		}
	}

	var today = new Date()
	if (!minYear) {
		// function called with specific day range parameters
		var dateStr = new String(monthDayFormat(mm) + "/" + monthDayFormat(dd) + "/" + yyyy)
		var testDate = new Date(dateStr)
		if (testDate.getTime() < (today.getTime() + (minDays * 24 * 60 * 60 * 1000))) {
			alert(messageFormat(dateRange_al1,minDays))
		}
		if (testDate.getTime() > today.getTime() + (maxDays * 24 * 60 * 60 * 1000)) {
			alert(messageFormat(dateRange_al2,maxDays))
		}
	} else if (minYear && maxYear) {
		// function called with specific year range parameters
		if (yyyy < minYear || yyyy > maxYear) {
			// entered year is outside of range passed from calling function
			alert(messageFormat(dateRange_al3,minYear,maxYear))
		}
	} else {
		// default year range (now set to (this year - 100) and (this year + 25)
		var thisYear = today.getYear()
		if (thisYear < 100) {
			thisYear += 1900
		}
		if (yyyy < minYear || yyyy > maxYear) {
			alert(messageFormat(dateRange_al4,minYear,maxYear))
		}
	}
	if (!checkMonthLength(mm,dd)) {
		gField.focus()
		gField.select()
		return false
	}
	if (mm == 2) {
		if (!checkLeapMonth(mm,dd,yyyy)) {
			gField.focus()
			gField.select()
			return false
		}
	}
	// put the Informix-friendly format back into the field
	//gField.value = monthDayFormat(mm) + "/" + monthDayFormat(dd) + "/" + yyyy
	gField.value = mm + "/" + dd + "/" + yyyy
	return true
}

// check the entered month for too high a value
function checkMonthLength(mm,dd) {
	var names     = new Array(12);
	
	names[0] = '<%=RfxApp.getMessage(config,locale,1000012054,"Jan")%>';
	names[1] = '<%=RfxApp.getMessage(config,locale,1000012045,"Feb")%>';
	names[2] = '<%=RfxApp.getMessage(config,locale,1000012062,"Mar")%>';
	names[3] = '<%=RfxApp.getMessage(config,locale,1000012016,"Apr")%>';
	names[4] = '<%=RfxApp.getMessage(config,locale,1000012064,"May")%>';
	names[5] = '<%=RfxApp.getMessage(config,locale,1000012058,"Jun")%>';
	names[6] = '<%=RfxApp.getMessage(config,locale,1000012056,"Jul")%>';
	names[7] = '<%=RfxApp.getMessage(config,locale,1000012023,"Aug")%>';
	names[8] = '<%=RfxApp.getMessage(config,locale,1000012086,"Sep")%>';
	names[9] = '<%=RfxApp.getMessage(config,locale,1000012073,"Oct")%>';
	names[10] = '<%=RfxApp.getMessage(config,locale,1000012069,"Nov")%>';
	names[11] = '<%=RfxApp.getMessage(config,locale,1000012035,"Dec")%>';
	if ((mm == 4 || mm == 6 || mm == 9 || mm == 11) && dd > 30) {
		alert(messageFormat(daysInMonth_al1,names[mm]))
		return false
	} else if (dd > 31) {
		alert(messageFormat(daysInMonth_al2,names[mm]))
		return false
	}
	return true
}

// check the entered February date for too high a value 
function checkLeapMonth(mm,dd,yyyy) {
	if (yyyy % 4 > 0 && dd > 28) {
		alert(messageFormat(daysInMonth_al3,yyyy))
		return false
	} else if (dd > 29) {
		alert(messageFormat(daysInMonth_al4,yyyy))
		return false
	}
	return true
}

/*
function datediff_old(d1, d2)
{
	var StartDate, EndDate, diff;
	var timediff;
	var days;

	StartDate = new Date(d1);
	EndDate = new Date(d2);
	diff = new Date();

	diff.setTime(Math.abs(EndDate.getTime() - StartDate.getTime()));
	timediff = diff.getTime();
	
	days = Math.ceil(timediff / (1000 * 60 * 60 * 24)); 

	if(days != 0)
	{
		days = days + 1;
	}
	return days;
}
*/

// This method returns difference in days between two Dates passed in.
// It identifies Daylight Savings Time changes and automatically
// adds or substracts one hour when needed ...
function datediff(d1, d2)
{
    var M_SECS_PER_HOUR = 60*60*1000;
    var M_SECS_PER_DAY  = 1000*60*60*24;
	var StartDate, EndDate, diff;
	var timediff;
	var days;

	StartDate = new Date(d1);
	EndDate   = new Date(d2);
	diff      = new Date();
	timediff  = Math.abs(EndDate.getTime() - StartDate.getTime());
	
	if (timediff % M_SECS_PER_DAY != 0)
    {
        if ((timediff + M_SECS_PER_HOUR) % M_SECS_PER_DAY == 0)
        {
            timediff += M_SECS_PER_HOUR;
        }
        else
        {
           timediff -= M_SECS_PER_HOUR;
        }
    }
    days = timediff/M_SECS_PER_DAY;
	if(days != 0)
	{
		days = days + 1;
	}
	return days;
}




function IdCheck()
{

        if((window.event.keyCode<97 || window.event.keyCode>122) && (window.event.keyCode<65 || window.event.keyCode>90) && (
            window.event.keyCode<48 || window.event.keyCode>57)  && (window.event.keyCode != 45) && (window.event.keyCode != 95))
        {
                alert (messageFormat(dataEntry_al1));
                window.event.keyCode=0;
        }
        if((window.event.keyCode>96 && window.event.keyCode<123))
        {
                window.event.keyCode=window.event.keyCode - 32 ;
        }

}

/*
	* 
*/
// This method returns difference in days between two Dates passed in.
// It identifies Daylight Savings Time changes and automatically
// adds or substracts one hour when needed ...
function absoluteDateDiff(d1, d2)
{
    var M_SECS_PER_HOUR = 60*60*1000;
    var M_SECS_PER_DAY  = 1000*60*60*24;
	var StartDate, EndDate, diff;
	var timediff;
	var days;

	StartDate = new Date(d1);
	EndDate   = new Date(d2);
	diff      = new Date();
	timediff  = Math.abs(EndDate.getTime() - StartDate.getTime());
	
	if (timediff % M_SECS_PER_DAY != 0)
    {
        if ((timediff + M_SECS_PER_HOUR) % M_SECS_PER_DAY == 0)
        {
            timediff += M_SECS_PER_HOUR;
        }
        else
        {
           timediff -= M_SECS_PER_HOUR;
        }
    }
    days = timediff/M_SECS_PER_DAY;
	/*if(days != 0)
	{
		days = days + 1;
	}*/
	return days;
}

/**/


function chkCodes()
{
    if(window.event.keyCode==39 || window.event.keyCode==34) 
	{
		alert (messageFormat(dataEntry_al2));
		window.event.keyCode=0;
	}
}
function chkCode()
{
    if( window.event.keyCode==34) 
	{
		alert (messageFormat(dataEntry_al3));
		window.event.keyCode=0;
	}
}
function checkNum()
{
    if(window.event.keyCode<48 || window.event.keyCode>57)
    {
        alert (messageFormat(dataEntry_al4));
        window.event.keyCode=0;
    }
}

function checkFloat()
{
    if ((window.event.keyCode<48 || window.event.keyCode>57) && window.event.keyCode != 46)
    {
         alert (messageFormat(dataEntry_al5));
        window.event.keyCode=0;
    }
}

function pageNav(navgFlag, reqId, frmNm)
{
	if(changeFlag == 1)
	{
		if(confirm(messageFormat(confirm1)))
		{
		    if (navgFlag == 'I')
		        validateAndSubmit('I');
		    else if (navgFlag == 'P')
		        validateAndSubmit('P');
		    else if (navgFlag == 'Q')
		        validateAndSubmit('Q'); 
		    else if (navgFlag == 'Y')
		        validateAndSubmit('Y');
		    else if (navgFlag == 'F')
		        validateAndSubmit('F');
		    else if (navgFlag == 'Z')
		        validateAndSubmit('Z');
		    else if (navgFlag == 'T')
		        validateAndSubmit('T');
		    else if (navgFlag == 'R')
    		    validateAndSubmit('R');
			else if (navgFlag == 'RL')
		        validateAndSubmit('RL');
		    else if (navgFlag == 'S')
		        validateAndSubmit('S');
	    }
		else
		{
			navigation(navgFlag, reqId, frmNm);
		}	
	}
	else
	{
		navigation(navgFlag, reqId, frmNm);
	}	
}

function navigation(navgFlag, reqId, frmNm)
{
    if(navgFlag == 'I')
    {
        eval('document.' + frmNm + '.action = \'rtm_statusRequests.jsp\'');
    	eval('document.' + frmNm + '.submit()');	
    }    
    else if(navgFlag == 'P')
    {
        eval('document.' + frmNm + '.action = \'req_maintainProject.jsp?newRequest=N&requestId=' + reqId + '\'');
    	eval('document.' + frmNm + '.submit()');	
    } 
	else if(navgFlag == 'Z')
	{
        eval('document.' + frmNm + '.action = \'req_attachReviewDoc.jsp?requestId=' + reqId + '\'');
    	eval('document.' + frmNm + '.submit()');	
	}
	else if(navgFlag == 'Y')
	{
        eval('document.' + frmNm + '.action = \'req_addPredecessor.jsp?requestId=' + reqId + '\'');
    	eval('document.' + frmNm + '.submit()');	
	}
	else if(navgFlag == 'F')
	{
        eval('document.' + frmNm + '.action = \'req_questions_rev.jsp?requestId=' + reqId + '\'');
    	eval('document.' + frmNm + '.submit()');	
	}
	else if(navgFlag == 'Q')
	{
        eval('document.' + frmNm + '.action = \'req_response.jsp?requestId=' + reqId + '\'');
    	eval('document.' + frmNm + '.submit()');	
	}
    else if(navgFlag == 'T')
    {
        eval('document.' + frmNm + '.action = \'req_tasks.jsp?requestId=' + reqId + '\'');
    	eval('document.' + frmNm + '.submit()');	
    } 
    else if(navgFlag == 'R')
    {
        eval('document.' + frmNm + '.action = \'req_rolloutSummary.jsp?requestId=' + reqId + '\'');
    	eval('document.' + frmNm + '.submit()');	
    }
    else if(navgFlag == 'S')
    {
        eval('document.' + frmNm + '.action = \'req_confirm.jsp?requestId=' + reqId + '\'');
    	eval('document.' + frmNm + '.submit()');	
    }
}        

function workload_navigation(navgFlag, frmNm)
{
    if(navgFlag == 'I')
    {
        eval('document.' + frmNm + '.action = \'rtm_simulation.jsp\'');
    	eval('document.' + frmNm + '.submit()');	
    }    
    else if(navgFlag == 'R')
    {
        eval('document.' + frmNm + '.action = \'req_resequence.jsp\'');
    	eval('document.' + frmNm + '.submit()');	
    } 
    else if(navgFlag == 'S')
    {
        eval('document.' + frmNm + '.action = \'req_simulationSummary.jsp\'');
    	eval('document.' + frmNm + '.submit()');	
    } 
    else if(navgFlag == 'F')
    {
        eval('document.' + frmNm + '.action = \'req_rolloutSummary.jsp?requestId=' + reqId + '\'');
    	eval('document.' + frmNm + '.submit()');	
    }
}        

function commPageNav(navgFlag, initId, frmNm)
{

	if(changeFlag == 1)
	{
		if(confirm(messageFormat(confirm1)))
		{
		    if (navgFlag == 'I')
		        validateAndSubmit('I');
			else if (navgFlag == 'P')
		        validateAndSubmit('P');
		    else if (navgFlag == 'RV')
		        validateAndSubmit('RV');
		    else if (navgFlag == 'PMA')
		        validateAndSubmit('PMA');
		    else if (navgFlag == 'Q')
		        validateAndSubmit('Q'); 
		    else if (navgFlag == 'Y')
		        validateAndSubmit('Y');
		    else if (navgFlag == 'F')
		        validateAndSubmit('F');
		    else if (navgFlag == 'Z')
		        validateAndSubmit('Z');
		    else if (navgFlag == 'T')
		        validateAndSubmit('T');
		    else if (navgFlag == 'R')
    		    validateAndSubmit('R');
			else if (navgFlag == 'RL')
    		    validateAndSubmit('RL');
		    else if (navgFlag == 'S')
		        validateAndSubmit('S');
	    }
		else
		{
			commNavigation(navgFlag, initId, frmNm);
		}	
	}
	else
	{
		commNavigation(navgFlag, initId, frmNm);
	}	
}

function commPageNavigation(navgFlag, initId, frmNm, pageName)
{	
	 if(typeof eval('document.'+frmNm+'.preplanCopyAs') != 'undefined')
		{	 		
		// alert(eval('document.'+frmNm+'.preplanCopyAs.value')=='Y');
				if(eval('document.'+frmNm+'.preplanCopyAs.value') =='Y')
				{
					alert(dataEntry_al14);
					return;
				}
			
		}
	eval('document.'+frmNm+'.target ="_self"');
	if (frmNm == 'attachRivewDoc' || frmNm == 'editNotes' || frmNm == 'rtmselimpfile' || (frmNm == 'editInitiative' && typeof eval('document.'+frmNm+'.overview') != 'undefined') )
	{
		checkChange();
	}
	if(changeFlag == 1)
	{
		if(confirm(messageFormat(confirm1)))
		{
		    if (navgFlag == 'I')
		        validateAndSubmit('I');
		    else if (navgFlag == 'P')
		        validateAndSubmit('P');
		    else if (navgFlag == 'RV')
		        validateAndSubmit('RV');
		    else if (navgFlag == 'PMA')
		        validateAndSubmit('PMA');
			else if (navgFlag == 'AL')
		        validateAndSubmit('AL');
		    else if (navgFlag == 'Q')
		        validateAndSubmit('Q'); 
		    else if (navgFlag == 'Y')
		        validateAndSubmit('Y');
		    else if (navgFlag == 'F')
		        validateAndSubmit('F');
		    else if (navgFlag == 'Z')
		        validateAndSubmit('Z');
		    else if (navgFlag == 'T')
		        validateAndSubmit('T');		  
		    else if (navgFlag == 'R')
    		    validateAndSubmit('R');
			else if (navgFlag == 'RL')
    		    validateAndSubmit('RL');
		    else if (navgFlag == 'S')
		        validateAndSubmit('S');
		    else if (navgFlag == 'CR')
		        validateAndSubmit('CR');
	        else if (navgFlag == 'AZ')
		        validateAndSubmit('AZ');
	        else if (navgFlag == 'FT')
		        validateAndSubmit('FT');
	    }
		else
		{
			if (pageName == '')
			{
				commNavigation(navgFlag, initId, frmNm);
			}
			else
			{
				if(frmNm=='attachRivewDoc' || frmNm=='editInitiative' || frmNm == 'rtmselimpfile')
				{
					checkFileElements(frmNm);
				}
				eval('document.' + frmNm + '.action = \'' + pageName + '&initId=' + initId + '\'');
		    	eval('document.' + frmNm + '.submit()');	
			}
		}
	
	}
	else
	{
			if (pageName == '')
			{
				commNavigation(navgFlag, initId, frmNm);
			}
			else
			{
				eval('document.' + frmNm + '.action = \'' + pageName + '&initId=' + initId + '\'');
		    	eval('document.' + frmNm + '.submit()');	
			}

	}	
}

//added by sundar for issue 16625
function checkFileElements(frmNm)
{
eval('var len=document.'+frmNm+'.elements.length');
	for (var i=0;i<len;i++) 
	  {
		    eval('var elem = document.'+frmNm+'.elements[i]');
		    if(elem.type == 'file')
		    elem.disabled = true;
	  }
}


function commNavigation(navgFlag, initId, frmNm)
{
    if(navgFlag == 'I')
    {
        eval('document.' + frmNm + '.action = \'com_projects.jsp\'');
    	eval('document.' + frmNm + '.submit()');	
    }    
    else if(navgFlag == 'P')
    {
        eval('document.' + frmNm + '.action = \'com_maintainProject.jsp?initId=' + initId + '\'');
    	eval('document.' + frmNm + '.submit()');	
    } 
    else if(navgFlag == 'PMA')
    {
        eval('document.' + frmNm + '.action = \'com_projMultipleAsg.jsp\'');
    	eval('document.' + frmNm + '.submit()');	
    } 
     else if(navgFlag == 'RV')
    {
        eval('document.' + frmNm + '.action = \'com_reviewers.jsp\'');
    	eval('document.' + frmNm + '.submit()');	
    } 
	else if(navgFlag == 'Z')
	{
        eval('document.' + frmNm + '.action = \'com_attachDocs.jsp?initId=' + initId + '\'');
    	eval('document.' + frmNm + '.submit()');	
	}
	else if(navgFlag == 'Y')
	{
        eval('document.' + frmNm + '.action = \'com_maintainPredecessor.jsp?initId=' + initId + '\'');
    	eval('document.' + frmNm + '.submit()');	
	}
	else if(navgFlag == 'F')
	{
        eval('document.' + frmNm + '.action = \'com_questions.jsp?initId=' + initId + '\'');
    	eval('document.' + frmNm + '.submit()');	
	}
	else if(navgFlag == 'Q')
	{
        eval('document.' + frmNm + '.action = \'com_response.jsp?initId=' + initId + '\'');
    	eval('document.' + frmNm + '.submit()');	
	}

    else if(navgFlag == 'T')
    {
        eval('document.' + frmNm + '.action = \'com_tasks.jsp?initId=' + initId + '\'');
    	eval('document.' + frmNm + '.submit()');	
    } 
    else if(navgFlag == 'R')
    {
        eval('document.' + frmNm + '.action = \'com_rollout.jsp?initId=' + initId + '\'');
    	eval('document.' + frmNm + '.submit()');	
    }
	else if(navgFlag == 'RL')
    {
        eval('document.' + frmNm + '.action = \'com_releaseTask.jsp?initId=' + initId + '\'');
    	eval('document.' + frmNm + '.submit()');	
    }
    else if(navgFlag == 'S')
    {
        eval('document.' + frmNm + '.action = \'com_projSummary.jsp?initId=' + initId + '\'');
    	eval('document.' + frmNm + '.submit()');	
    }
}        
function stripWhiteSpace(s)
{   
    var whitespace = " \t\n\r";
    var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}


function checkDate(dateStr, fldStr)
{
	// Checks for the following valid date formats:
	// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
	// Also separates date into month, day, and year variables

	//var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
	
	var datePat = /^(\d{1,2})(\/)(\d{1,2})\2(\d{2}|\d{4})$/;

	// To require a 4 digit year entry, use this line instead:
	// var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;

	var matchArray = dateStr.match(datePat); // is the format ok?
	if (matchArray == null) 
	{
		alert(messageFormat(dateEntry_al5,fldStr))
		return false;
	}
	month = matchArray[1]; // parse date into variables
	day = matchArray[3];
	year = matchArray[4];
	if (month < 1 || month > 12)	// check month range
	{ 
		alert(messageFormat(dateEntry_al6,fldStr))
		return false;
	}
	if (day < 1 || day > 31) 
	{
		alert(messageFormat(dateEntry_al7,fldStr))
		return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
	{
		alert(messageFormat(dateEntry_al7,fldStr,month))
		return false
	}
	if (month == 2)  // check for february 29th
	{
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) 
		{
			alert(messageFormat(dateEntry_al7,year,day))
			return false;
		}
	}
	return true;  // date is valid
}

<!--

// Function to 'rollover' images
function swapimg(id) {
	   if(document.images) {
	       tsrc = document[id].src
	   		document[id].src = document[id].lowsrc
	   		document[id].lowsrc = tsrc
	   		
	     }
}

// -->

function showLayer(name,text)
{
	name.style.left = window.event.x;
	name.style.top  = window.event.y + 15;
	name.innerHTML  = text;
	name.style.visibility = "visible";
}

function hideLayer(name)
{
	name.style.visibility = "hidden";
}

function isAlphaNumericId(fldObj)
{
	var val = fldObj.value;
	var valLen = val.length;
	re = new RegExp("[A-Za-z0-9_-]{" + valLen + "}");
	return (re.test(val));
}

function isFldValid()
{
	var callFld = isFldValid.arguments[0];		//HTML Element for which validation is being performed
	var callMsg = isFldValid.arguments[1];		//HTML Element label to be used in alerts
	var fldType = isFldValid.arguments[2];		//Type of HTML Element - Text, Numeric, Select, Radio, Checkbox, etc.
	var fldMandatory = isFldValid.arguments[3];	//Whether mandatory check to be performed

	//Text Checks
	if (fldType == 'T')
	{
		if (fldMandatory == 'Y' && isTextEmpty(callFld))
		{
			alert('"' + callMsg + '" must be entered.');
			callFld.focus();
			return false;
		}
		var maxLen = isFldValid.arguments[4];			//Maximum length of field, required in case of textarea
	    if (maxLen != '')
		{
			if ((stripWhiteSpace(callFld.value)).length > maxLen)
			{
				alert('"' + callMsg + '" should not be more than ' + maxLen + ' characters.');
				callFld.focus();
				return false;
			}
		}
		var idCheck = isFldValid.arguments[5];			//Whether field is being used to specify an ID
		if (idCheck == 'Y')
		{
			//Perform id Check
			if (!isAlphaNumericId(callFld))
			{
				alert('"' + callMsg + '" should only contain A-Z, 0-9, "_", "-"');
				callFld.focus();
				return false;
			}
		}
	}
	//Numeric Checks
	else if (fldType == 'N')
	{	
		if (fldMandatory == 'Y' && isTextEmpty(callFld))
		{
			alert('"' + callMsg + '" must be entered.');
			callFld.focus();
			return false;
		}
		var minVal = isFldValid.arguments[4];					//Minimum Value for the numeric value
		var maxVal = isFldValid.arguments[5];					//Maximum Value for the numeric value
		var decimalsAllowed = isFldValid.arguments[6];			//Decimals allowed for the numeric value
		if (!minVal || minVal == '')
			minVal = "0";
		if (!decimalsAllowed)
			decimalsAllowed = 'Y';

		if (!isTextEmpty(callFld))
		{
			if (decimalsAllowed == 'Y')
			{
				if (!isSignedFloat(callFld.value))
				{
					alert('"' + callMsg + '" - Please enter a valid number.');
					callFld.focus();
					return(false);
				}
				if (minVal.length > 0)
				{
					if (!isFloatInRange(callFld.value, parseFloat(minVal), parseFloat(maxVal)))
					{
						alert('"' + callMsg + '" - Number should be between ' + minVal + ' and ' + maxVal);
						callFld.focus();
						return(false);
					}
				}
			}
			else
			{
				if (!isInteger(callFld.value))
				{
					alert('"' + callMsg + '" - Please enter a valid integer.');
					callFld.focus();
					return(false);
				}
				if (minVal.length > 0)
				{
					if (!isIntegerInRange(callFld.value, parseInt(minVal), parseInt(maxVal)))
					{
						alert('"' + callMsg + '" - Number should be between ' + parseInt(minVal) + ' and ' + parseInt(maxVal));
						callFld.focus();
						return(false);
					}
				}
			}
		}
	}
	//Select drop-down box checks
	else if (fldType == 'S')
	{
		if (fldMandatory == 'Y' && isListEmpty(callFld))
		{
			alert('"' + callMsg + '" must be selected');
			callFld.focus();
			return false;
		}
	}
	//Radio button checks
	else if (fldType == 'R')
	{
		if (fldMandatory == 'Y')
		{
			var radioCnt = 0;
			for (var i=0; i<document.forms[0].elements.length; i++)
			{
				if (document.forms[0].elements(i).name == callFld.name)
					radioCnt++;
			}	
			if (radioCnt == 1)
			{
				if (callFld.checked)
				{
					alert('"' + callMsg + '" must be selected');
					callFld.focus();
					return false;
				}
			}
			else if (radioCnt > 1)
			{
				if (isRadioGroupEmpty(callFld))
				{
					alert('"' + callMsg + '" must be selected');
					callFld[0].focus();
					return false;
				}
			}
		}
	}
	//Check-box checks
	{
		if (fldMandatory == 'Y')
		{
			var minChecked = isFldValid.arguments[4];			//Minimum options to be checked
			if (!minChecked || minChecked.length() <= 0)
				minChecked = 0;
			else
				minChecked = parseInt(minChecked);
			var chkCount = 0;
			for (var i=0; i<document.forms[0].callFld.length; i++)
			{
				if (document.forms[0].callFld[i].checked)
					chkCount++;
			}
			if (chkCount < minChecked)
			{
				alert('"' + callMsg + '" - Atleast ' + minChecked + ' option(s) must be checked.');
				callFld[0].focus();
				return false;
			}
		}
	}
	return true;
}

function replaceString(inputString, fromString, toString) {
   // Goes through the inputString and replaces every occurrence of fromString with toString
   var temp = inputString;
   if (fromString == "") {
      return inputString;
   }
   if (toString.indexOf(fromString) == -1) { // If the string being replaced is not a part of the replacement string (normal situation)
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } else { // String being replaced is part of replacement string (like "+" being replaced with "++") - prevent an infinite loop
      var midStrings = new Array("~", "`", "_", "^", "#");
      var midStringLen = 1;
      var midString = "";
      // Find a string that doesn't exist in the inputString to be used
      // as an "inbetween" string
      while (midString == "") {
         for (var i=0; i < midStrings.length; i++) {
            var tempMidString = "";
            for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
            if (fromString.indexOf(tempMidString) == -1) {
               midString = tempMidString;
               i = midStrings.length + 1;
            }
         }
      } // Keep on going until we build an "inbetween" string that doesn't exist
      // Now go through and do two replaces - first, replace the "fromString" with the "inbetween" string
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + midString + toTheRight;
      }
      // Next, replace the "inbetween" string with the "toString"
      while (temp.indexOf(midString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(midString));
         var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } // Ends the check to see if the string being replaced is part of the replacement string or not
   return temp; // Send the updated string back to the user
} // Ends the "replaceString" function
function replaceStringInNotes(inputString, fromString, toString){
   // Goes through the inputString and replaces every occurrence of fromString with toString
    if(typeof inputString=='undefined')
   {
   		inputString='';
   	}
   var temp = inputString;
    if(typeof temp=='undefined')
   {
   		temp='';
   	}
   if (fromString == "") {
      return inputString;
   }
   if (toString.indexOf(fromString) == -1) { // If the string being replaced is not a part of the replacement string (normal situation)
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } else { // String being replaced is part of replacement string (like "+" being replaced with "++") - prevent an infinite loop
      var midStrings = new Array("~", "`", "_", "^", "#");
      var midStringLen = 1;
      var midString = "";
      // Find a string that doesn't exist in the inputString to be used
      // as an "inbetween" string
      while (midString == "") {
         for (var i=0; i < midStrings.length; i++) {
            var tempMidString = "";
            for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
            if (fromString.indexOf(tempMidString) == -1) {
               midString = tempMidString;
               i = midStrings.length + 1;
            }
         }
      } // Keep on going until we build an "inbetween" string that doesn't exist
      // Now go through and do two replaces - first, replace the "fromString" with the "inbetween" string
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + midString + toTheRight;
      }
      // Next, replace the "inbetween" string with the "toString"
      while (temp.indexOf(midString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(midString));
         var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } // Ends the check to see if the string being replaced is part of the replacement string or not
   return temp; // Send the updated string back to the user
} // Ends the "replaceString" function

function replaceNLwithBR(inStr)
{
	var str1 = inStr;
	str1 = replaceString(str1, "\n\r","<BR>");
	str1 = replaceString(str1, "\r\n","<BR>");
	str1 = replaceString(str1, "\r","<BR>");
	str1 = replaceString(str1, "\n","<BR>");
	return str1;
}

function formatCurrency(thisone, prefix) 
{
	
	var textFormat = "";
	var t		   = 0;
	var str = eval(thisone + '.value');
	
	
	
	str = str.replace(',','');
	
	if (str.charAt(0) == prefix)
		str = str.substr(1);
	if (str.length != 0)
	{
		for (var k = str.length-1; k>=0 ; k--)
		{
			t++;
			if (t % 3 == 0)
				textFormat = "," + str.substr(k,1) + textFormat; 
			else 
				textFormat =  str.substr(k,1) + textFormat;
		} 
		if (textFormat.substr(0,1) == ",")
			eval(thisone + '.value = \"' + prefix + textFormat.substr(1,textFormat.length-1) + "\"");
		else 
			eval(thisone + '.value = \"' + prefix + textFormat + "\"");
	}
}
//Added by U Dilip Kumar
var dateformat = "mm/dd/yyyy";
function dateDifference(d1,d2)// reutrns true if d1<d2
{
	var startDate, endDate;

	valuesD1 = d1.split("/");
	valuesD2 = d2.split("/");
	
	if(dateformat == "dd/MM/yyyy")//If //Input format:dd/mm/yy
	{
		// reformatting reqd
		var stStr = valuesD1[1] + "/" + valuesD1[0] + "/" + valuesD1[2];
		var endStr = valuesD2[1] + "/" + valuesD2[0] + "/" + valuesD2[2];
	}
	else
	{
		// coming in as mm/dd/yyyy...so no reformatting reqd
		var stStr = d1;
		var endStr = d2;
	}
	startDate = new Date(stStr);	
	endDate = new Date(endStr);
	
	var diffMS = endDate.getTime() - startDate.getTime();
	
	if(diffMS >= 0)
		return true;
	else
		return false;
}
function formatDecimal(thisone, prefix, postFix, noOfDeci) 
{
	var textFormat = "";
	var t		   = 0;
	var str = eval(thisone + '.value');
	str = str.replace(prefix,'');
	str = str.replace(postFix,'');
	
	if (str.indexOf(".") == -1)
	{
		str = str + ".";
		for(var i=0;i<=noOfDeci;i++)
			str = str + "0";
	}	
	var percentVal = "";
	var count = 0;
	var countDecimals = false;
	
	if (str.length != 0)
	{
		for (var k=0;k<=str.length-1; k++)
		{
			percentVal += str.charAt(k); 
			if (countDecimals)
				count++;
			if (noOfDeci == count)
				break;
			if (str.charAt(k) == ".")
				countDecimals = true;
		}
		for(var i=0;i<noOfDeci-count;i++)
			percentVal = percentVal + "0";
		if (percentVal != "")
		{
			percentVal = percentVal + postFix;
			eval(thisone + '.value = \"' + percentVal + "\"");
		}	
	}
}

function formDisabled(frm, isDisabled)
{
   var ele;
   for (var i=0; i<frm.elements.length; i++)
   {
      ele = frm.elements[i];
      if(ele.disabled != isDisabled)
	ele.disabled = isDisabled;
   }
}
//document.write('<script language="JavaScript" src="norightclick.js"></SCRIPT>');




// ------------------------------------------------------------------
// These functions use the same 'format' strings as the 
// java.text.SimpleDateFormat class, with minor exceptions.
// The format string consists of the following abbreviations:
// 
// Field        | Full Form          | Short Form
// -------------+--------------------+-----------------------
// Year         | yyyy (4 digits)    | yy (2 digits), y (2 or 4 digits)
// Month        | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits)
//              | NNN (abbr.)        |
// Day of Month | dd (2 digits)      | d (1 or 2 digits)
// Day of Week  | EE (name)          | E (abbr)
// Hour (1-12)  | hh (2 digits)      | h (1 or 2 digits)
// Hour (0-23)  | HH (2 digits)      | H (1 or 2 digits)
// Hour (0-11)  | KK (2 digits)      | K (1 or 2 digits)
// Hour (1-24)  | kk (2 digits)      | k (1 or 2 digits)
// Minute       | mm (2 digits)      | m (1 or 2 digits)
// Second       | ss (2 digits)      | s (1 or 2 digits)
// AM/PM        | a                  |
//
// NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm!
// Examples:
//  "MMM d, y" matches: January 01, 2000
//                      Dec 1, 1900
//                      Nov 20, 00
//  "M/d/yy"   matches: 01/20/00
//                      9/2/00
//  "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM"
// ------------------------------------------------------------------

var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x) {return(x<0||x>9?"":"0")+x}

// ------------------------------------------------------------------
// isDate ( date_string, format_string )
// Returns true if date string matches format of format string and
// is a valid date. Else returns false.
// It is recommended that you trim whitespace around the value before
// passing it to this function, as whitespace is NOT ignored!
// ------------------------------------------------------------------
function isDate(val,format) {
	var date=getDateFromFormat(val,format);
	if (date==0) { return false; }
	return true;
	}

// -------------------------------------------------------------------
// compareDates(date1,date1format,date2,date2format)
//   Compare two date strings to see which is greater.
//   Returns:
//   1 if date1 is greater than date2
//   0 if date2 is greater than date1 of if they are the same
//  -1 if either of the dates is in an invalid format
// -------------------------------------------------------------------
function compareDates(date1,dateformat1,date2,dateformat2) {
	var d1=getDateFromFormat(date1,dateformat1);
	var d2=getDateFromFormat(date2,dateformat2);
	if (d1==0 || d2==0) {
		return -1;
		}
	else if (d1 > d2) {
		return 1;
		}
	return 0;
	}

// ------------------------------------------------------------------
// formatDate (date_object, format)
// Returns a date in the output format specified.
// The format string uses the same abbreviations as in getDateFromFormat()
// ------------------------------------------------------------------
function formatDate(date,format) {
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	// Convert real date parts into formatted versions
	var value=new Object();
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["NNN"]=MONTH_NAMES[M+11];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["E"]=DAY_NAMES[E+7];
	value["EE"]=DAY_NAMES[E];
	value["H"]=H;
	value["HH"]=LZ(H);
	if (H==0){value["h"]=12;}
	else if (H>12){value["h"]=H-12;}
	else {value["h"]=H;}
	value["hh"]=LZ(value["h"]);
	if (H>11){value["K"]=H-12;} else {value["K"]=H;}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11) { value["a"]="PM"; }
	else { value["a"]="AM"; }
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (value[token] != null) { result=result + value[token]; }
		else { result=result + token; }
		}
	return result;
	}
	
// ------------------------------------------------------------------
// Utility functions for parsing in getDateFromFormat()
// ------------------------------------------------------------------
function _isInteger(val) {
	var digits="1234567890";
	for (var i=0; i < val.length; i++) {
		if (digits.indexOf(val.charAt(i))==-1) { return false; }
		}
	return true;
	}
function _getInt(str,i,minlength,maxlength) {
	for (var x=maxlength; x>=minlength; x--) {
		var token=str.substring(i,i+x);
		if (token.length < minlength) { return null; }
		if (_isInteger(token)) { return token; }
		}
	return null;
	}
	
// ------------------------------------------------------------------
// getDateFromFormat( date_string , format_string )
//
// This function takes a date string and a format string. It matches
// If the date string matches the format string, it returns the 
// getTime() of the date. If it does not match, it returns 0.
// ------------------------------------------------------------------
function getDateFromFormat(val,format) {
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var token2="";
	var x,y;
	var now=new Date();
	var year=now.getYear();
	var month=now.getMonth()+1;
	var date=1;
	var hh=now.getHours();
	var mm=now.getMinutes();
	var ss=now.getSeconds();
	var ampm="";
	
	while (i_format < format.length) {
		// Get next token from format string
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		// Extract contents of value based on format token
		if (token=="yyyy" || token=="yy" || token=="y") {
			if (token=="yyyy") { x=4;y=4; }
			if (token=="yy")   { x=2;y=2; }
			if (token=="y")    { x=2;y=4; }
			year=_getInt(val,i_val,x,y);
			if (year==null) { return 0; }
			i_val += year.length;
			if (year.length==2) {
				if (year > 70) { year=1900+(year-0); }
				else { year=2000+(year-0); }
				}
			}
		else if (token=="MMM"||token=="NNN"){
			month=0;
			for (var i=0; i<MONTH_NAMES.length; i++) {
				var month_name=MONTH_NAMES[i];
				if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
					if (token=="MMM"||(token=="NNN"&&i>11)) {
						month=i+1;
						if (month>12) { month -= 12; }
						i_val += month_name.length;
						break;
						}
					}
				}
			if ((month < 1)||(month>12)){return 0;}
			}
		else if (token=="EE"||token=="E"){
			for (var i=0; i<DAY_NAMES.length; i++) {
				var day_name=DAY_NAMES[i];
				if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
					i_val += day_name.length;
					break;
					}
				}
			}
		else if (token=="MM"||token=="M") {
			month=_getInt(val,i_val,token.length,2);
			if(month==null||(month<1)||(month>12)){return 0;}
			i_val+=month.length;}
		else if (token=="dd"||token=="d") {
			date=_getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31)){return 0;}
			i_val+=date.length;}
		else if (token=="hh"||token=="h") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>12)){return 0;}
			i_val+=hh.length;}
		else if (token=="HH"||token=="H") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>23)){return 0;}
			i_val+=hh.length;}
		else if (token=="KK"||token=="K") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>11)){return 0;}
			i_val+=hh.length;}
		else if (token=="kk"||token=="k") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>24)){return 0;}
			i_val+=hh.length;hh--;}
		else if (token=="mm"||token=="m") {
			mm=_getInt(val,i_val,token.length,2);
			if(mm==null||(mm<0)||(mm>59)){return 0;}
			i_val+=mm.length;}
		else if (token=="ss"||token=="s") {
			ss=_getInt(val,i_val,token.length,2);
			if(ss==null||(ss<0)||(ss>59)){return 0;}
			i_val+=ss.length;}
		else if (token=="a") {
			if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
			else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
			else {return 0;}
			i_val+=2;}
		else {
			if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
			else {i_val+=token.length;}
			}
		}
	// If there are any trailing characters left in the value, it doesn't match
	if (i_val != val.length) { return 0; }
	// Is date valid for month?
	if (month==2) {
		// Check for leap year
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
			if (date > 29){ return 0; }
			}
		else { if (date > 28) { return 0; } }
		}
	if ((month==4)||(month==6)||(month==9)||(month==11)) {
		if (date > 30) { return 0; }
		}
	// Correct hours value
	if (hh<12 && ampm=="PM") { hh=hh-0+12; }
	else if (hh>11 && ampm=="AM") { hh-=12; }
	var newdate=new Date(year,month-1,date,hh,mm,ss);
	return newdate.getTime();
	}

// ------------------------------------------------------------------
// parseDate( date_string [, prefer_euro_format] )
//
// This function takes a date string and tries to match it to a
// number of possible date formats to get the value. It will try to
// match against the following international formats, in this order:
// y-M-d   MMM d, y   MMM d,y   y-MMM-d   d-MMM-y  MMM d
// M/d/y   M-d-y      M.d.y     MMM-d     M/d      M-d
// d/M/y   d-M-y      d.M.y     d-MMM     d/M      d-M
// A second argument may be passed to instruct the method to search
// for formats like d/M/y (european format) before M/d/y (American).
// Returns a Date object or null if no patterns match.
// ------------------------------------------------------------------
function parseDate(val) {
	var preferEuro=(arguments.length==2)?arguments[1]:false;
	generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');
	monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');
	dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');
	var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');
	var d=null;
	for (var i=0; i<checkList.length; i++) {
		var l=window[checkList[i]];
		for (var j=0; j<l.length; j++) {
			d=getDateFromFormat(val,l[j]);
			if (d!=0) { return new Date(d); }
			}
		}
	return null;
	}
//added for com_maintainprojects
function checkDuration(st, ed, workdur, commworkdays, weekworkdays)
{
        var workDays = new Array('Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
        var msg;
        var dt = new Date(st);
        var dayofweek;
        var diff = datediff(ed, st);
        var stIdx;
        var curWork = 0;
        // if diff is 0 then it should act as 1
        if (diff == 0)
            diff =1;
        if(commworkdays != null)
        {
            for(var i=0; i<commworkdays.length; i++)
            {
                workDays[i] = commworkdays[i];
            }
        }
        else if(weekworkdays != null)
        {
            for(var i=0; i<weekworkdays.length; i++)
            {        
                workDays[i] = weekworkdays[i];
            }
        }
        else
        {
            for(var i=0; i<workDays.length; i++)
            {
                workDays[i] = 'Y';
            }
        }
        stIdx = dt.getDay();
        
        for(var i=0; i<diff; i++)
        {
            if(workDays[stIdx] == 'Y')
            {
                curWork++;
                if(curWork >= workdur)
                {
                    break;
                }
            }
            stIdx++;
            if(stIdx > 6)
                stIdx = 0;
        }

        if(curWork >= workdur)
            msg = "";       
        else
        {
            if(curWork == 1)
                msg = "Working days are inadequate between start and end dates.There is only " + curWork + " working day.";
            else
                msg = "Working days are inadequate between start and end dates.There are only " + curWork + " working days.";
        }
        return msg;    
    }
    
    //Nikhil Londhe: Added new function as part of XSS fix
    function stripMarkupS1(formField) 
	{
    	var description = formField.value;
		var origLen = description.length;
    	var newLen = description.length;
		description = description.toLowerCase();
    	description.replace(/[\"\'][\s]*javascript:(.*)[\"\']/g, "\"\"");
    	description = description.replace(/\<(.*)script(.*)\>/g, "");    
		description = description.replace(/\%3c(.*)script(.*)\%3e/g, "");    
    	description = description.replace(/eval\((.*)\)/g, "");
		newLen = description.length;
		if(newLen == origLen)
			return true;
		else
			return false;
	}
function checkIsNumber(formField)
{
   var ValidChars = "0123456789-";
   var IsNumber=true;
   var Char;
   for (i = 0; i <=formField.value.length && IsNumber == true; i++) 
    {
    Char = formField.value.charAt(i); 
    
         if (ValidChars.indexOf(Char) == -1) 
         {
	         IsNumber = false;
	         return;
         }
    }
    return IsNumber;
}

function showHideDiv(selVal,divId)
{
	if(selVal=='N')
		eval('document.getElementById("'+divId +'").style.display = \'none\'');
	if(selVal=='Y')
		eval('document.getElementById("'+divId +'").style.display = \'\'');
}
