 /**
 * 	@author Aravintha Krishnan Jagannathan
 * 	@since Moveo 1.0
 * 	Mandatory Check
 */
 
 /* global variables */
 


 /* function - to checks for mandatory element(s) in a page

	input - any object in which the mandatory option to be checked and alert flag if required
			if alert flag is 'true' - displays consolidated alert messages in an alert
			if alert flag is 'false' - returns consolidated alert messages as a string
			if alert flag is other than 'true' or 'false' or even if not mentioned 
			- displays first alert message in an alert and cursor focus to that element

	output - returns true or false or message string, if any
 */
 	function checkMandatory(object, alertFlag) {
 		var displayMessage = EMPTY_STRING;
		
		setFocusElement(NULL_VALUE);
		alertFlag = checkFlag(alertFlag);

 		if (isDocument(object)) {
 			displayMessage = checkMandatoryAllFormElements(alertFlag);
 		}
 		else if (isForm(object)) {
 			displayMessage = checkMandatoryFormElements(object, alertFlag);
 		}
 		else {
 			displayMessage = checkMandatoryElements(object)
 		}
		
		if (checkAlert(alertFlag, displayMessage) || checkAllAlert(alertFlag, displayMessage)) {
			displayMessage =  MANDATORY_DISPLAY_MESSAGE + displayMessage;
 			object = getFocusElement();
			alertMessage(displayMessage, object);
 			//elementFocus(object);
 			return FALSE_FLAG;
 		}
 		else if (checkNoAlert(alertFlag, displayMessage)) {
	 		return displayMessage;
 		}
 		return TRUE_FLAG;
 	}


 /* function - to checks for all the mandatory elements in all forms in a page
	input - 
	output -  returns message string, if any or an empty string
 */
	function checkMandatoryAllFormElements(alertFlag) {
	 	var displayMessage = EMPTY_STRING;
		var formObjects = document.forms;

 		alertFlag = checkFlag(alertFlag);
 
		for(var i=0; i < formObjects.length; i++) {
			displayMessage += checkMandatoryFormElements(formObjects[i], alertFlag);

			if(checkAlert(alertFlag, displayMessage)) {
				break;
			}
		}
		return displayMessage;
	}


 /* function - to checks for all the mandatory elements in a form
	input - gets a form object
	output -  returns message string, if any or an empty string
 */
 	function checkMandatoryFormElements(formObject, alertFlag) {
	 	var displayMessage = EMPTY_STRING;
	 	checkboxName=EMPTY_STRING;
	 	radioName=EMPTY_STRING;

		alertFlag = checkFlag(alertFlag);

	 	for(var formLength=0; formLength < formObject.elements.length; formLength++) {
			var elementObject = formObject.elements[formLength];
			displayMessage += checkMandatoryElements(elementObject);

			if(checkAlert(alertFlag, displayMessage)) {
				break;
			}
		} 	
		return displayMessage;		
	}

 
 /* function - to checks for the mandatory element
		 	   element may have an attribute, "mandatory" with a value, "true" for mandatory check
			   element may have an attribute, "caption" with a value which is to be displayed on the alert box. 
			   "mandatory" and "caption" attributes are optional for non mandatory fields.
	input - gets an element object
	output - returns message string
 */
 	function checkMandatoryElements(elementObject) {
	 	var displayMessage = EMPTY_STRING;

 		if(elementObject && elementObject.getAttribute("mandatory") == TRUE_STRING && (elementObject.getAttribute("disabled") != TRUE_STRING && elementObject.getAttribute("disabled") != 'disabled')) {
 			var elementType = elementObject.type;
  			var caption = getCaption(elementObject);
 			
 			switch(elementType){
				case "select-one":
					if (elementObject.selectedIndex == -1 || isEmpty(elementObject.options[elementObject.selectedIndex].value)) {
						displayMessage += formatString(caption);
					}
					break;
				case "select-multiple":
					if (elementObject.selectedIndex == -1) {
						displayMessage += formatString(caption);
					}
					break;
				case "text":
				case "file":
				case "password":
				case "textarea":
					if (isEmpty(elementObject.value) || elementObject.value == NULL_VALUE) {
						displayMessage += "<br>"+formatString(caption);
					}
					break;
				case "checkbox":
					if(checkboxName != elementObject.name && !isObjectChecked(elementObject)) {
						checkboxName = elementObject.name;
						displayMessage += formatString(caption);
					}
					break;
				case "radio":
					if(radioName != elementObject.name && !isObjectChecked(elementObject)) {
						radioName = elementObject.name;
						displayMessage += formatString(caption);
					}
					break;
				default:
			}
		}

		if(isNull(getFocusElement()) && !isEmpty(displayMessage)) {
			setFocusElement(elementObject);
		}
		return displayMessage;
	}

 
 /*	function - to validate whether objects with same name are checked or not
  	input - gets an element object
  	output - returns true or false
 */
  	function isObjectChecked(elementObject) {
	  	var elementName = elementObject.name;
	  	
		for(var count=0, elementLength=0; elementLength < document.getElementsByName(elementName).length; elementLength++) {
			count = (document.getElementsByName(elementName)[elementLength].checked)?count+=1:count;
		}
		return (count>0)?true:false;
	}
