function initialCap(field) {
   field.value = field.value.substr(0, 1).toUpperCase() + field.value.substr(1);
}

/**
 * Function to remove leading and trailing spaces in the Input String
 * 
 * @param strValue1
 *            which is to be trimed.
 * @return boolean
 */
function trimString(strValue1)
{
    var strValue    = ''+strValue1;
    var startIndex  =0;
    var endIndex    =0;
    for (startIndex=0; strValue.length > startIndex && 
        (strValue.charAt(startIndex)==' ' || 
        strValue.charCodeAt(startIndex) == 32); startIndex++);
    {    
        for (endIndex = strValue.length - 1; endIndex > startIndex && 
            (strValue.charAt(endIndex) == ' '  || 
            strValue.charCodeAt(endIndex) == 32); endIndex--);
        {
            return strValue.substring(startIndex,endIndex+1);
        }
    }    
}

/**
 * Function to check the given value contains any special characters
 * 
 * @param strValue
 *            which is to be checked
 * @param strExpChrs
 * @return boolean
 */
function isAlphaNumeric(strValue, strExpChrs)
{
    var chrValue = "";
    for (var index = 0; index < strValue.length; ++index)
    {
        chrValue = strValue.charAt(index);
        if ((chrValue < 'a' || chrValue > 'z') &&
            (chrValue < 'A' || chrValue > 'Z') &&
            (chrValue < '0' || chrValue > '9'))
        {
            if ((strExpChrs == '') || (strExpChrs.indexOf(chrValue) == -1))
                return false;
        }
    }
    return true;
}

/**
 * Function to check if the entered value is Numeric and positive integer
 * 
 * @param val
 *            is the input number
 * @return boolean
 */
function isNumber(val)
{
  var len = val.length;
  for ( var i=0; i<len; i++ )
  {
    var num = val.charAt(i);
    if ( num < "0" || num > "9")
    {
      return false;
    }
  }
  return true;
}

/**
 * Function removes leading zeros if any
 * 
 * @param str
 * @return str
 */
function removeLeadingZeros(str)
{
    str = trimString(str);
    if(str == '') 
    {
        return str;
    }
    while(str.length > 1 && str.substring(0,1) == '0')
    {
         str = str.substring(1,str.length);
    }
    return str;      
}

/**
 * Function Which sets the focus to the first element in the screen (form)
 * 
 * @return boolean
 */
function setInitialFocus()
{
    var intNoOfElements = 0;
    var strFormName     = arguments[0]; // Get the form name
    var objForm;
    if (strFormName != "")
    {
        objForm = document.forms[strFormName];
    }
    else
    {
        objForm = document.forms[0];
    }
    intNoOfElements = objForm.elements.length ;
    if (intNoOfElements > 0)
    {
        for (var i=0;i<intNoOfElements;i++)
        {
            if (objForm.elements[i].type.toLowerCase() != 'hidden' && 
                objForm.elements[i].type.toLowerCase() != "checkbox" &&
                 objForm.elements[i].type.toLowerCase() != "button")          
            {
                objForm.elements[i].focus();
                return;
            }
        }
    }
    return  false;
}

/**
 * This function is used to check if the given number is with in the given range
 * 
 * @param objNumber
 * @param intLimit
 * @param decimalLimit
 * @return boolean
 */
function validateLimit(objNumber,intLimit,decimalLimit)
{
    var strNumToValidate    = trimString(objNumber.value);
    var LengthOfNum= strNumToValidate.length;
    var strNumberLike = '';
    
    // check if the entered value is a valid numeric/decimal
    if (isNaN(strNumToValidate))
    {
        alert(strValidNumber);
        objNumber.focus();
        return false;
    }
    
    // find the index of "."
    var intDotPointerPosition = (strNumToValidate).indexOf(".");
    
    if (decimalLimit == 0 && intDotPointerPosition < 0) 
    {
        return true;
    }
    
    // if the number is numeric
    if (intDotPointerPosition == -1)
    {
        intDotPointerPosition = LengthOfNum;
    }
    
    var decimalLength=LengthOfNum-intDotPointerPosition-1;
    intLimit = intLimit-0;
    decimalLimit = decimalLimit -0;
    
    for (i=0; i<intLimit; i++)
    {
        strNumberLike = strNumberLike + '9';
    }
    
    if(decimalLimit > 0)
    {
        strNumberLike = strNumberLike + '.';
    }
    
    for (i=0; i<decimalLimit; i++)
    {
        strNumberLike = strNumberLike + '9';
    }
    
    if ((intDotPointerPosition <= intLimit))
    {
        if (!(decimalLength <= decimalLimit))
        {
            alert(strValidFormat + strNumberLike + '');
            objNumber.focus();
            return false;
        }
    }
    else
    {
        alert(strValidFormat + strNumberLike + '');
        objNumber.focus();
        return false;
    }
    return true;
}

/*
 * Function to validate the date @param strDate
 */
function validateDate(strDate)
{
    var strFormatError          =   "The date you have specified is not in the proper format. Please enter the Date in the format MM/DD/YYYY";
    var strInvalidMonthError    =   "The month of the Field you have specified is not valid. Please enter a valid month1";
    var strInvalidDayError      =   "The date you have specified is invalid. Please enter a valid date!";
    var arrData     =   new Array(3);
    arrData =   strDate.split('/');
    
    if(strDate.indexOf("/") == -1)
    {
        alert(strFormatError);
        return false;
    }
    
    if((arrData[0].length == 0)||(arrData[1].length == 0)||(arrData[2].length == 0))
    {
        alert(strFormatError);
        return false;
    }   
    if(arrData.length != 3)
    {
        alert(strFormatError);
        return false;
    }
    if(isNaN(arrData[0]))
    {
        alert(strFormatError);
        return false;
    }
    if(containsAlpha(arrData[0]))
    {
        alert(strInvalidDayError);
        return false;
    }
    if (parseInt(arrData[0], 10) < 1)
    {
        alert(strInvalidDayError);
        return false;
    }
    if(isNaN(arrData[1]))
    {
        alert(strFormatError);
        return false;
    }
    if(containsAlpha(arrData[1]))
    {
        alert(strInvalidDayError);
        return false;
    }
    if (parseInt(arrData[1], 10) < 1)
    {
        alert(strInvalidDayError);
        return false;
    }
    if(isNaN(arrData[2]))
    {
        alert(strFormatError);
        return false;
    }
    if(containsAlpha(arrData[2]))
    {
        alert(strInvalidDayError);
        return false;
    }
    if(arrData[2].length != 4)
    {
        alert(strFormatError);
        return false;
    }
    if(parseInt(arrData[2], 10) <= 0)
    {
        alert("The year you have specified is not valid. Please enter a valid year!");
        return false;
    }

    var intMonth    =   parseInt(arrData[0], 10);
    var intDay      =   parseInt(arrData[1], 10);
    var intYear     =   parseInt(arrData[2], 10);

    if (intMonth < 1 || intMonth > 12)
    {
        alert(strFormatError);
        return false;
    }

    var strMonth = arrMonth[intMonth-1];

    if ((strMonth == 'January' || strMonth == 'March' || strMonth == 'May' || strMonth == 'July' ||
    strMonth == 'August' || strMonth == 'October' || strMonth == 'December') && (intDay > 31))
    {
        alert(intDay + ' is not a valid day for Month ' + strMonth);
        return false;
    }
    if ((strMonth == 'April' || strMonth == 'June' || strMonth == 'September' || strMonth == 'November') && (intDay > 30))
    {
        alert(intDay + ' is not a valid day for Month ' + strMonth);
        return false;
    }
    if ((strMonth.toUpperCase()) == 'FEBRUARY')
    {
        if ((intDay > 28) && (intYear%4 != 0))
        {
            alert(intDay + ' is not a valid day for Month ' + strMonth+ ' of Year ' + intYear);
            return false;
        }
        if ((intDay > 29) && (intYear%4 == 0))
        {
            alert(intDay + ' is not a valid day for Month ' + strMonth+ ' of Year ' + intYear);
            return false;
        }
        if ((((year%4 == 0) && (year%100 != 0) ) || (year % 400 != 0)) && (intDay > 29))
        {
            alert(intDay + ' is not a valid day for Month ' + strMonth+ ' of Year ' + intYear);
            return false;       
        }
    }
    return true;
}

/**
 * Method to check whether the page get modified
 */
function isModified()
{    
    changeFlag = false;
    var i = 0;    
    var elementType = "";
    var val = "";
    
    for(i=0;i<arrChange.length;i++)
    {
        if ((document.forms[0].elements[i].name).indexOf("cb") == 0) {
            elementType = "select-one";       
            val = document.forms[0].elements[i].options[(document.forms[0].elements[i].selectedIndex)].value;
        } 
        else 
        {
            elementType = document.forms[0].elements[i].type;
            val = jsTrim(document.forms[0].elements[i].value);
        }
      
        if((elementType.toUpperCase() =="RADIO" && document.forms[0].elements[i].checked==true)
                || (elementType.toUpperCase() =="CHECKBOX" && document.forms[0].elements[i].checked==true))
        {
            arrChange[i] = 'Selected';
        }
        else if((elementType.toUpperCase() =="RADIO" && document.forms[0].elements[i].checked==false)
                || (elementType.toUpperCase() =="CHECKBOX" && document.forms[0].elements[i].checked==false))
        {
            arrChange[i] = val;
        }
        else if(elementType.toUpperCase() == "HIDDEN")
        {
            arrChange[i] = "";
        }
        else
        {
            arrChange[i] = val;
        }
    }    
    
    for(i=0;i<arrOriginal.length;i++)
    {
        if(arrOriginal[i] != arrChange[i])
        {
            changeFlag = true;  
            break;
        }
    }
    
    return changeFlag;       
}

/**
 * Method to save the initial data
 */
function saveInitialData()
{
    
    var elementType = "";
    var val = "";
    
    for(var i=0;i<arrOriginal.length;i++)
    {
        if ((document.forms[0].elements[i].name).indexOf("cb") == 0) 
        {
            elementType = 'select-one';
            val = document.forms[0].elements[i].options[(document.forms[0].elements[i].selectedIndex)].value;
        } 
        else
        {
            elementType = document.forms[0].elements[i].type;
            val = jsTrim(document.forms[0].elements[i].value);

        }   
            
        if((elementType.toUpperCase() =="RADIO" && document.forms[0].elements[i].checked==true)
                ||(elementType.toUpperCase() =="CHECKBOX" && document.forms[0].elements[i].checked==true))
        {
            arrOriginal[i] = 'Selected';
        }
        else if((elementType.toUpperCase() =="RADIO" && document.forms[0].elements[i].checked==false)
                ||(elementType.toUpperCase() =="CHECKBOX" && document.forms[0].elements[i].checked==false))
        {
            arrOriginal[i] = val;
        }
        else if(elementType.toUpperCase() == "HIDDEN")
        {
            arrOriginal[i] = "";
        }
        else
        {
            arrOriginal[i] = val;
        }
    }
    return true;
}

/*
 * Method to get the today's date from client browser @return String
 */
function getPrevWeek()
{
    dtToday = new Date(new Date() - 6 * 24 * 60 * 60 * 1000);
    dtYear = 1900;
    intMonth = 0;

    if (dtToday.getYear() < 500)
    {
        dtYear +=   dtToday.getYear();
    }
    else
    {
        dtYear = dtToday.getYear();
    }
    intMonth = dtToday.getMonth()+1;

    if (intMonth < 10)
    {
        intMonth = '0' + intMonth;
    }

    return (intMonth) + "/" + dtToday.getDate() + "/" + dtYear;
}


function popUpMenu(url, name) {
	newWindow = window
			.open(
					url,
					name,
					'toolbar=0,location=0,directories=0,status=0,menubar=1,scrollbars=yes,resizable=yes,width=640,height=480');
}

function popUp(URL) {
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=yes,width=800,height=270');");
	// eval("page" + id + " = window.showModalDialog(URL, '" + id + "',
	// 'help=0;status=0;scrollbars=0;resizable=0;width=800;height=270');");
}



function validateSigninForm(frm) {

	if (frm.email.value.length == 0) {
		alert("Please enter your email address");
		frm.email.focus();
		return false;
	}
	if (!checkEmail(frm.email.value)) {
		frm.email.focus();
		return false;
	}

	if (frm.password.value.length == 0) {
		alert("Please enter your password.");
		frm.password.focus();
		return false;
	}
	
	return true;
}

function validateSignUpForm(formObj) {

	if (formObj.emailAddress.value.length == 0) {
		alert("Please enter Email!");
		formObj.emailAddress.focus();
		return false;
	}
	if (!checkEmail(formObj.emailAddress.value)) {
		formObj.emailAddress.focus();
		return false;
	}
	if (formObj.password.value.length == 0) {
		alert("Please enter password!");
		formObj.password.focus();
		return false;
	}
	if (formObj.password1.value.length == 0) {
		alert("Please reconfirm the password!");
		formObj.password1.focus();
		return false;
	}
	if (formObj.jcaptcha_response.value.length == 0) {
		alert("Please enter the word appearing in the picture.");
		formObj.jcaptcha_response.focus();
		return false;
	}

	return true;
}

function validateGuestBookForm(formObj) {

	if (formObj.name.value.length == 0) {
		alert("Please enter Name!");
		formObj.name.focus();
		return false;
	}else
	{
		initialCap(formObj.name);
	}
	if (!isAlphaNumeric(formObj.name.value, ""))
	{
		alert("Name cannot contain special characters!");
		formObj.name.focus();
		return false;
	}
	
	if (formObj.emailAddress.value.length == 0) {
		alert("Please enter Email!");
		formObj.emailAddress.focus();
		return false;
	}
	if (!checkEmail(formObj.emailAddress.value)) {
		formObj.emailAddress.focus();
		return false;
	}
	if (formObj.number.value.length != 0) {
		if (!isNumber(formObj.number.value)){
			formObj.number.focus();
			return false;
		}
	}
	if (formObj.comments.value.length == 0) {
		alert("Please enter comments!");
		formObj.comments.focus();
		return false;
	}
	if (formObj.validateUser.value.length == 0) {
		alert("Please enter the word appearing in the picture.");
		formObj.validateUser.focus();
		return false;
	}
	return true;
}

function validateActivationForm(formObj) {
	if (formObj.email.value.length == 0) {
		alert("Please enter your email address");
		formObj.email.focus();
		return false;
	}
	if (!checkEmail(formObj.email.value)) {
		formObj.email.focus();
		return false;
	}

	if (formObj.userId.value.length == 0) {
		alert("Please enter the activation code!");
		formObj.userId.focus();
		return false;
	}

}

function validateContactForm(formObj) {
	if (formObj.firstName.value.length == 0) {
		alert("Please enter First Name!");
		formObj.firstName.focus();
		return false;
	}else
	{
		initialCap(formObj.firstName);
	}
	if (!isAlphaNumeric(formObj.firstName.value, ""))
	{
		alert("First Name cannot contain special characters!");
		formObj.firstName.focus();
		return false;
	}
	if (formObj.middleName.value.length > 0) {
		if (!isAlphaNumeric(formObj.middleName.value, ""))
		{
			alert("Middle Name cannot contain special characters!");
			formObj.middleName.focus();
			return false;
		}
		else
		{
			initialCap(formObj.middleName);
		}
	}
	if (formObj.lastName.value.length > 0) {
		if (!isAlphaNumeric(formObj.lastName.value, ""))
		{
			alert("Last Name cannot contain special characters!");
			formObj.lastName.focus();
			return false;
		}
		else
		{
			initialCap(formObj.lastName);
		}
	}	
	if (formObj.nickName.value.length == 0) {
		alert("Please enter Nick Name!");
		formObj.nickName.focus();
		return false;
	}
	else
	{
		initialCap(formObj.nickName);
	}
	if (!isAlphaNumeric(formObj.nickName.value, ""))
	{
		alert("Nick Name cannot contain special characters!");
		formObj.nickName.focus();
		return false;
	}
	if (formObj.emailAddress.value.length == 0) {
		alert("Please enter Email!");
		formObj.emailAddress.focus();
		return false;
	}
	if (!checkEmail(formObj.emailAddress.value)) {
		formObj.emailAddress.focus();
		return false;
	}
	return true;
}

function checkEmail(email) {
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)) {
		return (true);
	}
	alert("Invalid E-mail Address! Please re-enter.");
	return (false);
}


function validateOccasionForm(formObj) {

	if (formObj.occasionDate.value.length == 0) {
		alert("Please enter the occasion date!");
		formObj.occasionDate.focus();
		return false;
	}
	if(!validateDate(formObj.occasionDate.value))
	{
		formObj.occasionDate.focus();
		return false;
	}
	return true;
}

function validateUploadForm(formObj) {
	if (formObj.imageName.value.length == 0) {
		alert("Please enter Picture Name!");
		formObj.imageName.focus();
		return false;
	}
	if (!isAlphaNumeric(formObj.imageName.value, ""))
	{
		alert("Picture Name cannot contain special characters!");
		formObj.imageName.focus();
		return false;
	}
	if (formObj.imageDescription.value.length > 1000) {
		alert("Description cannot exceed more then 1000 character!");
		formObj.imageDescription.focus();
		return false;
	}
	return true;
}

// General code...
function clickIE() {
	if (document.all) {
		return false;
	}
}
function clickNS(e) {
	if (document.layers || (document.getElementById && !document.all)) {
		if (e.which == 2 || e.which == 3) {
			return false;
		}
	}
}
if (document.layers) {
	document.captureEvents(Event.MOUSEDOWN);
	document.onmousedown = clickNS;
} else {
	document.onmouseup = clickNS;
	document.oncontextmenu = clickIE;
}
document.oncontextmenu = new Function("return false");
