var AppUtil = function() {
	
	var error_mark_class = "error_input";
		
	return {
		
		showLoading : function() {
            return new Boxy('<table  style="width:150px;background-color: none;"><tr><td>Please wait....</td><td><img src="/js/boxy/images/boxy-loading.gif"></td></tr></table>', {modal: true, modalOpacity:0, plain: true});
        },			
		 
		getType : function(obj) {
			if ( typeof(obj) == 'object' ) {
				if (obj.length) {
					return 'array';
				} else {
					return 'object';
				}
			} else {
				return typeof(obj);
			}	
		},
		
		showMessages : function(messages, showTitle, title) {
			var msg = '';
			
			if (!showTitle && showTitle != false) {
				msg = "The following error(s) occurred:\n\n";
			}
			
			if (title) {
				msg = title;
			}
			
			if (this.getType(messages) == 'array') {
				for (var i = 0; i < messages.length; i++) {
					msg += "- " + messages[i] + "\n";  
				}
			} else {
				msg = messages;
			}

			alert(msg);	
		},
	
		getByName : function(name, parent) {				
			if (parent) {
				return jQuery('[name='+name+']', jQuery(parent));	
			} else {
				return jQuery('[name='+name+']');	
			}
		},
		
		isChecked : function(name, parent) {				
			return jQuery('[name='+name+']:checked', jQuery(parent)).size() > 0 ? true : false;
		},
		
		getChecked : function(name, parent) {				
			return jQuery('[name='+name+']:checked', jQuery(parent));
		},
		
		uncheck : function(name, parent) {				
			return jQuery('[name='+name+']', jQuery(parent)).attr("checked", false);
		},
		
		switchInputs : function(el, state, inputs) {
			var elObj = jQuery(el);
			var inputsArr = inputs.split(",");
			
			for (var i = 0; i < inputsArr.length; i++) {
				var input = AppUtil.getByName(inputsArr[i]);
				input.attr("disabled", !state);
				if (state == false) {
					input.val("");
				}
			}			
		},
		
		switchPanel : function(el, state, targetId) {
			var elObj = jQuery(el);
			var targetObj = jQuery(targetId);
			
			if (state == true) {
				targetObj.show();
			} else {
				targetObj.hide();
				jQuery("select", targetObj).val("");
				jQuery("input", targetObj).attr("checked", false);
			}
		},
		
		getValByName : function(name, parent) {				
			return this.getByName(name, parent).val();
		},
		
		errorMark : function(el, parent) {
			var el;			
			if (el) {
				el = jQuery(el, parent);
			} else {
				el = jQuery(el);
			}			
			if (el.hasClass(error_mark_class) == false) {
				el.addClass(error_mark_class);
				el.click(function(){jQuery(this).removeClass(error_mark_class).unbind('click');})
			}
		},
		
		unerrorMark : function(el) {
			var el;			
			if (el) {
				el = jQuery(el, parent);
			} else {
				el = jQuery(el);
			}
			el.removeClass(error_mark_class);
		},
		
		trimFormFields : function(form)
		{
			jQuery('input:text', jQuery(form)).each(function(){
				jQuery(this).val(jQuery.trim(jQuery(this).val()));	
			});
			jQuery('textarea', jQuery(form)).each(function(){
				jQuery(this).val(jQuery.trim(jQuery(this).val()));	
			});
		},
		
		unerrorMarkAll : function(el) {
			if (el) {
				jQuery('.' + error_mark_class, el).removeClass(error_mark_class);
			} else {
				jQuery('.' + error_mark_class).removeClass(error_mark_class);
			}
		},
		
		// validations
		isValidEmail: function(email)
		{
			var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
			return pattern.test(email);
		},	

		isValidAlphaNum: function(str)
		{			
			var oRegEx = new RegExp("^[a-zA-Z0-9]+$");
			return oRegEx.test(str);
		},	
		
		isValidCarRegNo: function(str)
		{			
			var oRegEx = new RegExp("^[a-zA-Z0-9\-]+$");
			return oRegEx.test(str);
		},
		
		isValidUsername: function(str)
		{			
			var oRegEx = new RegExp("^[a-zA-Z0-9\-\']+$");
			return oRegEx.test(str);
		},
		
		isValidRegExp: function(reg, str)
		{			
			var oRegEx = new RegExp(reg);
			return oRegEx.test(str);
		},	

		isValidPhone: function(str)
		{
			var oRegEx = new RegExp("^[0-9]{2,3}[-]{0,1}[0-9]{5,8}$");
			return oRegEx.test(str);
		},	
		
		isValidNumber: function(str)
		{
			var oRegEx = new RegExp("^[0-9]+$");
			return oRegEx.test(str);
		},
		
		isValidNRIC: function(str) {
			var oRegEx = new RegExp("^[a-zA-Z0-9\/]+$");
			return oRegEx.test(str);
		}
	}		
}();
