/**
 * Rits Framework
 *
 * LICENSE
 * 
 * This source file is subject to the Rits Commercial license.
 * 
 * @copyright  2008 Rits Comunicação & Tecnologia. (http://www.rits.com.br)
 * @license    Rits Commercial License 1.0
 * @version    $Id:$
 */

/**
 * Ajax 
 *
 * @category   Rits
 * @package    Rits
 * @copyright  2008 Rits Comunicação & Tecnologia. (http://www.rits.com.br)
 * @license    Rits Commercial License 1.0
 */
Rits.Ajax = {
	
	/**
	 * Loads url content into element
	 *
	 * @param string element
	 * @param string url
	 */
	loadContent: function(element, url, config) {		
		if(config == undefined) {
			config = {messageFailure: false, messageSuccess: false, overlay: true};
		} else {
			if(config.messageFailure == undefined) {
				config.messageFailure = false;
			}
			if(config.messageSuccess == undefined) {
				config.messageSuccess = false;
			}
			if(config.overlay == undefined) {
				config.overlay = true;
			}			
		}
		var handleSuccess = function(o) {
			if(o.responseText == 'noaccess') {				
				
			} else if(o.responseText == 'false') {
				if(config.messageFailure) {
					alert(config.messageFailure);
				}
			} else {
				$(element).innerHTML = o.responseText;
				
				if(config.messageSuccess) {
					alert(config.messageSuccess);
				}
			}
			if(config.overlay) {
				Rits.Ajax.hideOverlay(element);
			}
		}
		var handleFailure = function(o) {
			if(config.messageFailure) {
				alert(config.messageFailure);
			}
			if(config.overlay) {
				Rits.Ajax.hideOverlay(element);
			}
		}
		var callback = {
			success: handleSuccess,
			failure: handleFailure
		}

		if(config.overlay) {
			Rits.Ajax.displayOverlay(element);
		}	
		var request = YAHOO.util.Connect.asyncRequest('GET', url, callback);		
	},
	
	/**
	 * Submit a form assynchronous
	 *
	 * @param string form
	 * @param string url
	 * @param Object handler
	 */
	submitForm: function(form, url, handler) {		
		YAHOO.util.Connect.setForm(form, true);
		YAHOO.util.Connect.asyncRequest('POST', url, handler);
	},
	
	/**
	 * Display a loading overlay
	 * 
	 * @param string element
	 */
	displayOverlay: function(element) {	
		
		var layer = $('rits_overlay_'+element);		
		var content = $('rits_overlay_content_'+element);
		
		if(!(layer && content)) {
			var b = document.body;
			
			layer = document.createElement('div');
			layer.setAttribute('id', 'rits_overlay_'+element);
						
			$D.setStyle(layer, 'position', 'absolute');
			$D.setStyle(layer, 'background', '#000000');
			$D.setStyle(layer, 'zIndex', '10');			
			
			b.appendChild(layer);
			
			content = document.createElement('div');
			content.setAttribute('id', 'rits_overlay_content_'+element);
			
			content.innerHTML = '<table width="100%" height="100%" border="0"><tr><td style="text-align: center;"><img src="/_resources/media/img/ajax-loader.gif" width="16" height="16" /></td></tr></table>';			
			$D.setStyle(content, 'position', 'absolute');			
			$D.setStyle(content, 'zIndex', '11');			
			
			b.appendChild(content);
		}	
		
		var region = $D.getRegion(element);
		var elementWidth = region.right - region.left;
		var elementHeight = region.bottom - region.top;

		$D.setStyle(layer, 'top', region.top+'px');
		$D.setStyle(layer, 'left', region.left+'px');
		
		$D.setStyle(content, 'top', region.top+'px');		
		$D.setStyle(content, 'left', region.left+'px');
		
		$D.setStyle(layer, 'display', '');
		$D.setStyle(layer, 'width', elementWidth+'px');
		$D.setStyle(layer, 'height', elementHeight+'px');
		$D.setStyle(layer, 'opacity', '0');
		
		$D.setStyle(content, 'display', '');
		$D.setStyle(content, 'width', elementWidth+'px');
		$D.setStyle(content, 'height', elementHeight+'px');
		$D.setStyle(content, 'opacity', '0');		
						
		var layerAnim = new YAHOO.util.Anim(layer, { opacity: { from : 0, to: 0.3} }, 0.5, YAHOO.util.Easing.easeOut);
		var contentAnim = new YAHOO.util.Anim(content, { opacity: { from : 0, to: 1} }, 0.5, YAHOO.util.Easing.easeOut);
		
		layerAnim.animate();
		contentAnim.animate();
	},

	/**
	 * Hide a loading overlay
	 *
	 * @param string element
	 */
	hideOverlay: function(element) {		
		var layer = $('rits_overlay_'+element);		
		var content = $('rits_overlay_content_'+element);
		
		$D.setStyle(layer, 'display', 'none');
		$D.setStyle(content, 'display', 'none');		
	}	
};

