var _FRM_CURRENT_ERROR_FIELD = null;
var _FRM_SET_FAILED_FOCUS = true;
function executeFunction(functionName, formObj) 
{
if(functionName == null || formObj == null) {
return;
}
var formObjName = formObj.name + "Obj";
var result = true;
if(window[formObjName] && (window[formObjName][functionName]))
{
result = window[formObjName][functionName](formObj);
}
else
{
result = validateForm(formObj);
}
if(result)
{
return handleStateForForm(formObj);
}
else
{
return false;
}
}
function createFormMethodContainer(formName){
var methodContainer = null;
if(window[formName + "Obj"] != null){
methodContainer = window[formName + "Obj"];
}
else {
methodContainer = new Object();
window[formName + "Obj"] = methodContainer;
}
if(methodContainer[ "ValidateForm"] == null){
methodContainer["ValidateForm"] = validateForm;
}
}
function validateAndSubmitForm(frm)
{
return executeFunction("validateForm",frm);   
}
function setFailedFocus(formObject){
if(formObject.getAttribute("setfailedfocus") != null && formObject.getAttribute("setfailedfocus") == "false"){
_FRM_SET_FAILED_FOCUS = false;
}	
}
function validateForm(formObject)
{
return validateFormElements(formObject.elements,formObject);
}
function validateFormElements(formElements,parentEl)
{
var size = formElements.length;
var isFailure = false;
var failedObj = null;
setFailedFocus(parentEl);
for(var count = 0; count < size; count++){
var element = formElements[count];
var validateMethod = element.getAttribute("validatemethod");
if(validateMethod != null && validateMethod != "" && !element.disabled){
if(!executeElementCall(validateMethod,element)){
isFailure = true;
var alertType = parentEl.getAttribute("alerttype");
if(alertType == null || alertType.indexOf("Complete") < 0){
return false;
}
if(failedObj == null){
failedObj = element;
}
}
}
}
if(failedObj != null){
if(_FRM_SET_FAILED_FOCUS){
failedObj.focus();
}
failedObj = null;
}
if(isFailure){
return false;
}
return true;
}
function executeElementCall(methodName, formElement){
var formObj = formElement.form;
var isNullable = formElement.getAttribute("isnullable");
var elemVal = formElement.value;
if(isNullable == "true" && (elemVal == "" || elemVal == null)){
return true;
}
if((formObj != null) &&  window[formObj.name + "Obj"] != null && window[formObj.name + "Obj"][methodName] != null){
return window[formObj.name + "Obj"][methodName](formElement.value, formElement);
}
else
{
return validateElement(methodName,formElement);
}
}
function disableEditMode(value, formElement){
var formObj = formElement.form;
var formName = formObj.name;
if(formObj.getAttribute("viewname") != null){
formName = formObj.getAttribute("viewname");
}
document.getElementById(formName + "ReadMode").className = 'show';
document.getElementById(formName + "EditMode").className = 'hide';
}
function trimAll(str)
{
if(str == null)
{
return "";
}  
var objRegExp =/^(\s*)$/;
if (objRegExp.test(str))
{
str = str.replace(objRegExp,''); 
if (str.length == 0)
return str; 
} 
objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
if(objRegExp.test(str))
{
str = str.replace(objRegExp, '$2');
}
return str;
}
function isEmailId(str)
{
str = trimAll(str);
var objRegExp  = /^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,3}(\.[a-z]{2}){0,2})$/i;
return objRegExp.test(str); 
}
function isMultipleEmailId(str)
{
var emailIds = str.split(',');
for(var i = 0; i < emailIds.length; i++)
{
if(!isEmailId(emailIds[i]))
{
return false;
}
}
return true;
}
function isNotEmpty(str)
{
var temp = trimAll(str);
if (temp.length > 0 )
return true;
return false;
}
function isIpAddress(str)
{
var ipAddress = str.split(".");
if(ipAddress.length != 4)
{
return false;
}
for(i=0;i<ipAddress.length;i++)
{
if(isPositiveInteger(ipAddress[i]))
{
var temp = parseInt(ipAddress[i],10);
if(temp > 255)
{
return false;
}
}
else
{
return false;
}
}
return true;
}
function isInteger(str)
{
var objRegExp = /(^-?\d\d*$)/;
return objRegExp.test(str);
}
function isPositiveInteger(str)
{
var temp  = parseInt(str,10);
if ( isNaN(temp) || temp.toString().length != str.length) {
return false;
}
var objRegExp = /(^\d\d*$)/;
return objRegExp.test(temp);
}
function isDate(str)
{
var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
return objRegExp.test(str); 
}
function isCharacter(str)
{
var objRegExp = /^\w$/;
return objRegExp.test(str);
}
function isTrueFalse(str)
{
if((str!="true")&&(str!="false"))
{
return false;
}	
else
{
return true;
}
}
function isInArray(str,arr)
{
var len =arr.length;
for(var i =0;i<len;i++)
{
if (str==arr[i])
{
return true;
}
}
return false;
}
function  isInAllowedValues(value,formElement)
{
var allowedvalues= formElement.getAttribute("allowedvalues");
var arr  = allowedvalues.split(','); 
return isInArray(value,arr);
}
function isWithinRange(value,formElement)
{
if(!isInteger(value))
{
return false;
}
value = parseInt(value);
if(formElement.getAttribute("maxvalue") != null)
{
maxValue = parseInt(formElement.getAttribute("maxvalue"));
if(value > maxValue)
return false;
}
if(formElement.getAttribute("minvalue") != null)
{
minValue = parseInt(formElement.getAttribute("minvalue"));
if(value < minValue)
return false;
}
return true;
}
function validateElement(methodName,formElement)
{
setFailedFocus(formElement.form);
if(window[methodName] == null)
{
alert("Wrong configuration.The validation method : " + methodName + " is not loaded");
return false;
}
var message = null;
var isNullable = formElement.getAttribute("isnullable");
var elemVal = formElement.value;
if(isNullable == "true" && (elemVal == "" || elemVal == null)){
return true;
}
var result;
if(elemVal == null || elemVal == ""){
result = false;
}
else {
result = window[methodName](elemVal, formElement);
}
if(result == true)
{
var alertType = formElement.form.getAttribute("alerttype");
if(alertType != null && alertType.indexOf("Complete")>=0){
if(document.getElementById(formElement.name+"_DIV") != null){
document.getElementById(formElement.name+"_DIV").style.display = "none";
}
else if(document.getElementById(formElement.id+"_DIV") != null){
document.getElementById(formElement.id+"_DIV").style.display = "none";
}
}
return true;
}
else if(result == false)
{
message = formElement.getAttribute("errormsg");
}
else 
{
message = result;
}
if(message != null) 
{
if(formElement.getAttribute("displayname") != null)
{
message = message.replace("${COLUMNALIAS}", formElement.getAttribute("displayname"));
}
var alertType = formElement.form.getAttribute("alerttype");
if(alertType != null && alertType == 'Custom')
{
showCustomMessage(message, formElement);
}
else if(alertType != null && alertType.indexOf("Complete")>=0){
if(document.getElementById(formElement.name+"_DIV") != null){
document.getElementById(formElement.name+"_DIV").innerHTML = message;
document.getElementById(formElement.name+"_DIV").style.display = "block";
document.getElementById(formElement.name+"_DIV").className = "errorMsg";
}
else if(document.getElementById(formElement.id+"_DIV") != null){
document.getElementById(formElement.id+"_DIV").innerHTML = message;
document.getElementById(formElement.id+"_DIV").style.display = "block";
document.getElementById(formElement.id+"_DIV").className = "errorMsg";
}
}
else 
{
alert(message);
}
}
if(_FRM_SET_FAILED_FOCUS){
formElement.focus();
}
return false;
}
function getCustomAlert(cssName){
if(cssName == null){
cssName = 'customAlert';
}	
var code = document.getElementById("CUSTOM_BUBBLE");
if(code == null){
code = "<Table class='"+cssName+"' cellspacing=0><tr><td class='caTopLeft'></td><td class='caTopCenter' colspan='2'></td><td class='caTopRight'></td></tr>";
code = code.concat("<tr><td class='caMiddleLeft'></td><td class='caMessage'>$MESSAGE</td><td class='caClose'><button class='caCloseButton' onClick='hideCustomMessage()'></td><td class='caMiddleRight'></td></tr>");
code = code.concat("<tr><td class='caBottomLeft'></td><td class='caBottomCenter' colspan='2'></td><td class='caBottomRight'></td></tr>");
code = code.concat("</table>");
}
else {
code = code.innerHTML;
}
return code;
}
function showCustomMessage(message, curId, cssName){
_FRM_CURRENT_ERROR_FIELD = curId;
var obj = document.getElementById("customAlertMessage");
var ifrmObj = document.getElementById("_CUSTOMALERTFRAME");
if (ifrmObj == null) {
var newObj = document.createElement("iframe");
if(browser_ie){
newObj.id="_CUSTOMALERTFRAME";
newObj.style.position="absolute";
newObj.style.cursor="default";
newObj.style.display = "none";
newObj.style.border = "0px solid";
newObj.frameBorder = "0";
newObj.scrolling = "no";
if(window["CONTEXT_PATH"] != null)
{
newObj.src= CONTEXT_PATH + "/framework/html/blank.html";
}
}
else if (browser_nn4 || browser_nn6){
newObj.setAttribute("id","_CUSTOMALERTFRAME");
newObj.setAttribute("frameBorder","0");
newObj.setAttribute("style","position: absolute; cursor: default; display:none;");
}
document.body.appendChild(newObj);
ifrmObj = newObj;
}
if(obj == null){
var newObj = document.createElement("DIV");
if(browser_ie){
newObj.id="customAlertMessage";
newObj.style.position="absolute";
newObj.style.cursor="default";
newObj.style.display = "none";
}
else if (browser_nn4 || browser_nn6){
newObj.setAttribute("id","customAlertMessage");
newObj.setAttribute("style","position: absolute; cursor: default; display:none;");
}
document.body.appendChild(newObj);
obj = newObj;
}
var code = getCustomAlert(cssName);
code = code.replace("$MESSAGE", message);
ifrmObj.style.display = 'block';
obj.innerHTML = code;
obj.style.left = findPosX(curId);
obj.style.top = findPosY(curId) + curId.offsetHeight;
obj.style.width = curId.parentNode.offsetWidth + "px";
obj.style.zIndex = 100;
ifrmObj.style.left = findPosX(curId);
ifrmObj.style.top = findPosY(curId) + curId.offsetHeight + 15;
ifrmObj.style.width = curId.parentNode.offsetWidth - 5 + "px";
ifrmObj.style.height = "28px";
ifrmObj.style.zIndex = obj.style.zIndex - 1;
obj.style.display = "block";
}
function hideCustomMessage(){
if(_FRM_CURRENT_ERROR_FIELD != null){
document.getElementById("_CUSTOMALERTFRAME").style.display = "none";
document.getElementById("customAlertMessage").style.display = "none";
if(_FRM_SET_FAILED_FOCUS && _FRM_CURRENT_ERROR_FIELD.focus){
_FRM_CURRENT_ERROR_FIELD.focus();
}
_FRM_CURRENT_ERROR_FIELD = null;
}
}
function isNumeric(str, formElement){
var objRegExp = /^[0-9]+$/;
if(objRegExp.test(str)){
return true;
}
return false;
}
function isAlphaNumeric(str, formElement){
var objRegExp = /^[a-zA-Z0-9]+$/;
if(objRegExp.test(str)){
return true;
}
return false;
}
function isString(str, formElement){
var objRegExp = /^[a-zA-Z]+$/;
if(objRegExp.test(str)){
return true;
}
return false;
}
function isMinute(str, formElement){
str = trimAll(str);
if(str==""){
return false;
}
var regEx = /^[0-9]+$/;
if(regEx.test(str)){
if(str <= 59){
return true;
}
}
return false;
}
function isHour(str, formElement){
str = trimAll(str);
if(str==""){
return false;
}
var regEx = /^[0-9]+$/;
if(regEx.test(str)){
if(str <= 23){
return true;
}
}
return false;
}
function isSearchDataNumeric(str, formElement){
trimAll(str);
if(str != null && str != ''){
return isNumeric(str, formElement);
}
return true;
}
function compareValues(str, formElement){
var elemVal = trimAll(formElement.value);
var formObj = formElement.form;
var compareFieldName = formElement.getAttribute("checkwith");
var compareFieldValue = trimAll(formObj.elements[compareFieldName].value);
var checkType = trimAll(formElement.getAttribute("checktype").toUpperCase());
if (isNaN(elemVal) || elemVal.length == 0) elemVal = "'" + elemVal + "'";
if (isNaN(compareFieldValue) || compareFieldValue.length == 0) compareFieldValue = "'" + compareFieldValue + "'";
return eval(elemVal + checkType + compareFieldValue);
}
function isDummyNotSelected(formElValue,formEl)
{
return (formElValue != formEl.getAttribute("dummyvalue"))
} 
function isAtleastOneChecked(formElValue,formEl)
{
var els = formEl.form[formEl.name];
for(var i =0; i < els.length;i++)
{
if(els[i].checked){return true;};
}
return false;
}
function updateFormWithData(frmName,frmData)
{
var formElements = DOMUtils.getChildElsWithAttr(DOMUtils.getForm(frmName),"name","*");
DOMUtils.fillData(formElements,frmData);
}

