
var VALIDATE_BLANK = '0';
var VALIDATE_NOT_BLANK = '1';
var VALIDATE_NUMBER = '2';
var VALIDATE_EMAIL = '3';
var VALIDATE_LIST_SELECTION = '4';
var VALIDATE_RADIO_SELECTION = '5';
var VALIDATE_CHECK_SELECTION = '6';
var VALIDATE_STYLED_AREA_NOT_BLANK = '7';
var VALIDATE_URL = '8';
var VALIDATE_MULTI_FIELDS_CAN_NOT_EQUAL = '9';
var VALIDATE_MULTI_FIELDS_MUST_EQUAL = '10';
var NOT_ERROR = "-1";


function validateSubmit(formToSubmit, fields) {
	
	var errorNo = NOT_ERROR;
	var i = 0;
	var lastField;
	
	//alert ("adText: " + tinyMCE.getContent("adText"));
	while ((errorNo == NOT_ERROR) && (i < fields.length)) {
		
		lastField = fields[i];
		
		errorNo = lastField.checkForError();
		i++;
	}
	if (errorNo != NOT_ERROR) {
		
		alert (getErrorMsg(lastField.getFieldLabel(), errorNo));
		lastField.getFieldObject().focus();
		lastField.getFieldObject().select();
	}
	else {
		//alert ("dimana neh gw....");
		var confirmed = confirm(getConfirmationMsgForFileUpload());
		if (confirmed) formToSubmit.submit();
	}
}

function validateSubmitNotConfirm(formToSubmit, fields) {
	
	var errorNo = NOT_ERROR;
	var i = 0;
	var lastField;
	
	//alert ("adText: " + tinyMCE.getContent("adText"));
	while ((errorNo == NOT_ERROR) && (i < fields.length)) {
		
		lastField = fields[i];
		
		errorNo = lastField.checkForError();
		i++;
	}
	if (errorNo != NOT_ERROR) {
		
		alert (getErrorMsg(lastField.getFieldLabel(), errorNo));
		lastField.getFieldObject().focus();
		lastField.getFieldObject().select();
	}
	else {
		//var confirmed = confirm(getConfirmationMsgForFileUpload());
		formToSubmit.submit();
	}
}

function FieldCheck (fieldLabel, field, itemChecks) {
	
	this.m_oField = field;
	this.m_sFieldLabel = fieldLabel;
	this.m_aItemChecks = itemChecks;
	this.m_sValue = this.m_oField.value;
	this.m_sErrorNo = "-1";
	
	this.checkForError = function() {
		
		var errorNo = NOT_ERROR;
		var i = 0;

		while ((errorNo == NOT_ERROR) && (i < this.m_aItemChecks.length)) {
			
			switch (this.m_aItemChecks[i]) {
				
				case VALIDATE_NOT_BLANK :
					if (this.isBlank()) {
						errorNo = VALIDATE_NOT_BLANK;
					}
					break;
	
				case VALIDATE_CHECK_SELECTION :
					if (!this.isCorrectlyChecked()) {
						errorNo = VALIDATE_CHECK_SELECTION;
					}
					break;
	
				case VALIDATE_LIST_SELECTION :
					//alert ("Checking List Selection");
					if (!this.isListSelected()) {
						errorNo = VALIDATE_LIST_SELECTION;
					}
					break;
	
				case VALIDATE_RADIO_SELECTION :
					if (!this.isRadioSelected()) {
						errorNo = VALIDATE_RADIO_SELECTION;
					}
					break;
	
				case VALIDATE_STYLED_AREA_NOT_BLANK :
					if (!this.isTextAreaDesignedProperly()) {
						errorNo = VALIDATE_STYLED_AREA_NOT_BLANK;
					}
					break;
	
				case VALIDATE_NUMBER :
					if (!this.isBlank() && !this.isValidNumber()) {
						errorNo = VALIDATE_NUMBER;
					}
					break;
	
				case VALIDATE_EMAIL :
					if (!this.isBlank() && !this.isValidEmail()) {
						errorNo = VALIDATE_EMAIL;
					}
					break;
	
				case VALIDATE_URL :
					if (!this.isBlank() && !this.isValidURL()) {
						errorNo = VALIDATE_URL;
					}
					break;
	
				default:
					break;
			}
			i++;
		}
		return errorNo;
	}

	this.isBlank = function() {
		
		var blank = true;
		var i = 0;
		
		while (blank && (i < this.m_sValue.length)) {
			if ((this.m_sValue.charAt(i) != " ") && (this.m_sValue.charAt(i) != "")) {
				blank = false;
			}
			i++;
		}
		return blank;
	}
	
	this.isValidNumber = function() {
		
		return (isNaN(parseInt(this.m_sValue)) && 
				isNaN(parseFloat(this.m_sValue))) ? false : true;
	}
	
	this.isValidEmail = function() {
		
		var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		
		return filter.test(this.m_sValue);
	}
	
	this.isValidURL = function() {
		
		var filter = /^h+t+t+p+:+\/+\/+(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+([\?\/]{0,1})/;
		//alert ('validating URL' + filter.test(this.m_sValue));
		return filter.test(this.m_sValue);
	}
	
	this.isCorrectlyChecked = function() {
		
		return this.m_oField.checked;
	}
	
	this.isRadioSelected = function() {
		
		var selected = false;
		
		for (var i=0; i < this.m_oField.length; i++) {
			
			if (this.m_oField[i].checked) {
				selected = true;
				break;
			}
		}
		return selected;
	}
	
	this.isListSelected = function() {
		
		return ((this.m_sValue == "-1") || this.isBlank())? false : true;
	}
	
	this.isTextAreaDesignedProperly = function() {
		
		this.m_sValue = tinyMCE.getContent(this.m_oField.name);
		
		return !this.isBlank();
	}
	
	this.getFieldObject = function() {
		
		return this.m_oField;
	}
	
	this.getFieldLabel = function() {
		
		return this.m_sFieldLabel;
	}
}

function RadioFieldsCheck (radioField, fieldChecks) {
	
	this.m_oRadioField = radioField;
	this.m_aFieldChecks = fieldChecks;
	this.m_oLastFieldChecked = null;

	this.checkForError = function() {
		
		var errorNo = NOT_ERROR;
		var i = 0;
		
		if (this.m_oRadioField.checked) {
			
			while ((errorNo == NOT_ERROR) && (i < this.m_aFieldChecks.length)) {
				
				this.m_oLastFieldChecked = this.m_aFieldChecks[i];
				
				errorNo = this.m_oLastFieldChecked.checkForError();
				i++;
			}
		}
		return errorNo;
	}

	this.getFieldObject = function() {
		
		return this.m_oLastFieldChecked.getFieldObject();
	}
	
	this.getFieldLabel = function() {
		
		return this.m_oLastFieldChecked.getFieldLabel();
	}
}

function MultiFieldsCheck (fields, labels, equalityChecking) {
	
	this.m_aFields = fields;
	this.m_aLabels = labels;
	this.m_iEqualityChecking = equalityChecking;
	this.m_iX = 0;
	this.m_jX = 0;
	
	this.checkForError = function() {
		
		var errorNo = NOT_ERROR;
		
		for (this.m_iX=0; this.m_iX < this.m_aFields.length; this.m_iX++) {
			for (this.m_jX=0; this.m_jX < this.m_aFields.length; this.m_jX++) {
				
				iValueToCheck = this.m_aFields[this.m_iX].value;
				jValueToCheck = this.m_aFields[this.m_jX].value;
				
				if ((this.m_iX != this.m_jX) && (iValueToCheck != -1) && (jValueToCheck != -1)) {
					
					if (this.m_iEqualityChecking == VALIDATE_MULTI_FIELDS_CAN_NOT_EQUAL) {
						
						if (iValueToCheck == jValueToCheck) {
							
							errorNo = VALIDATE_MULTI_FIELDS_CAN_NOT_EQUAL;
							break;
						}
					}
					else if (this.m_iEqualityChecking == VALIDATE_MULTI_FIELDS_MUST_EQUAL) {
						if (iValueToCheck != jValueToCheck) {
							
							errorNo = VALIDATE_MULTI_FIELDS_MUST_EQUAL;
							break;
						}
					}
				}
			}
			if (errorNo != NOT_ERROR) break;
		}
		return errorNo;
	}
	

	this.getFieldObject = function() {
		
		return this.m_aFields[this.m_jX];
	}
	
	this.getFieldLabel = function() {
		
		var sLabels = "";
		
		if (this.m_iEqualityChecking == VALIDATE_MULTI_FIELDS_CAN_NOT_EQUAL) {
			sLabels = this.m_aLabels[this.m_iX] + " and " + this.m_aLabels[this.m_jX];
		}
		else if (this.m_iEqualityChecking == VALIDATE_MULTI_FIELDS_MUST_EQUAL){
			sLabels = this.m_aLabels[0];
			for (var i = 1; i < this.m_aLabels.length; i++) {
				
				sLabels += ", " + this.m_aLabels[i];
			}
		}
		return sLabels;
	}
}
	