/**
 * (C) Copyright 2007 Rits. All rights reserved.
 * Use is subject to license terms.
 */

if(typeof Rits == "undefined") {
	var Rits = {};
}

// Yahoo convenience vars
var $E = YAHOO.util.Event;
var $D = YAHOO.util.Dom;
var $  = YAHOO.util.Dom.get;

/**
 * Site
 *
 * @category   Rits
 * @package    Rits
 * @copyright  Copyright (c) 2007 Rits Comunicacao & Teconologia. (http://www.rits.com.br) 
 */
Rits.Ajax = {
	
	_isActive: false,
	
	/**
	 * Admin login
	 *
	 * @param string element
	 * @param string seed
	 */
	adminLogin: function(element, seed) {
		
		if(seed) {
			var handleSuccess = function(o) {				
				if(o.responseText == 'true') {
					Rits.Util.reload();
				} else {									
					alert('Não foi possível efetuar o login. Verifique seu e-mail e senha.');
					Rits.Ajax.hideOverlay(element);
				}				
			}
			var handleFailure = function(o) {								
				alert('Não foi possível efetuar o login. Por favor tente novamente.');
				Rits.Ajax.hideOverlay(element);
			}
			var callback = {
				success: handleSuccess,
				failure: handleFailure
			}
			
			var form = $('form_login');
			var login = form.LOGIN.value;			
			
			var password = Rits.Crypt.md5(Rits.Crypt.md5(form.PASSWORD.value)+seed);			
						
			var request = YAHOO.util.Connect.asyncRequest('GET', '/admin/user/login/?LOGIN='+login+'&PASSWORD='+password, callback);
			
		} else {			
						
			var handleSuccess = function(o) {
				if(o.responseText !== undefined) {										
					Rits.Ajax.adminLogin(element, o.responseText);
				}
			}
			var handleFailure = function(o) {
				alert('Não foi possível efetuar o login. Por favor tente novamente.');
			}
			var callback = {
				success: handleSuccess,
				failure: handleFailure
			}
			
			var form = $('form_login');
			var login = form.LOGIN.value;
			var password = form.PASSWORD.value;
			
			if(!(Rits.Validate.isEmail(login) && password.length)) {
				alert('Digite corretamente seu e-mail e senha.');
				return;
			}
			Rits.Ajax.displayOverlay(element);	
			
			var request = YAHOO.util.Connect.asyncRequest('GET', '/admin/user/login/seed/', callback);
		}
	},

	adminForget: function(element) {
		
		var handleSuccess = function(o) {
			if(o.responseText == 'true') {
				alert("Senha enviada com sucesso!\nVerifique sua caixa postal dentro de alguns minutos.");
			} else {				
				alert('Não foi possível enviar sua senha. Verifique se o e-mail digitado está correto.');				
			}			
			Rits.Ajax.hideOverlay(element);
		}
		var handleFailure = function(o) {			
			alert('Não foi possível efetuar o login. Por favor tente novamente.');
			Rits.Ajax.hideOverlay(element);
		}
		var callback = {
			success: handleSuccess,
			failure: handleFailure
		}

		var form = $('form_forget');
		var login = form.LOGIN.value;		

		if(!Rits.Validate.isEmail(login)) {
			alert('O e-mail digitado não está correto.');
			return;
		}
		Rits.Ajax.displayOverlay(element);	
		var request = YAHOO.util.Connect.asyncRequest('GET', '/admin/user/login/forget/?LOGIN='+login, callback);

	},
	
	changeStatus: function(element, url) {
		if(this._isActive == false) {
			this._isActive = true;
			
			var handleSuccess = function(o) {				
				if(o.responseText.length && o.responseText != 'false') {
					var image = element.innerHTML;
					if(o.responseText == 'on') {
						element.innerHTML = image.replace('_off.', '_on.');
					} else if(o.responseText == 'off') {
						element.innerHTML = image.replace('_on.', '_off.');
					} else if(o.responseText == 'noaccess') {
						alert('Acesso negado! Você não tem permissão para alterar este registro.');
					}					
				} else {
					alert('Não foi possível alterar o registro.');
				}				
				Rits.Ajax._isActive = false;
			}
			var handleFailure = function(o) {
				alert('Não foi possível alterar o registro.');
				Rits.Ajax._isActive = false;
			}
			var callback = {
				success: handleSuccess,
				failure: handleFailure
			}
			
			var image = element.innerHTML;
			
			var status = 'off';
			if(image.indexOf('_on.') != -1) {
				status = 'on';
			}
						
			var request = YAHOO.util.Connect.asyncRequest('GET', url+'&status='+status, callback);
		}
	},
	
	loadContent: function(element, url, dialog) {
		var handleSuccess = function(o) {
			if(o.responseText != 'false') {				
				$(element).innerHTML = o.responseText;
				if(dialog) {
					Rits.Dialog.center(dialog);
				}
			}
			Rits.Ajax.hideOverlay(element);
		}
		var handleFailure = function(o) {
			Rits.Ajax.hideOverlay(element);
		}
		var callback = {
			success: handleSuccess,
			failure: handleFailure
		}

		Rits.Ajax.displayOverlay(element);	
		var request = YAHOO.util.Connect.asyncRequest('GET', url, callback);		
	},
	
	sendMessage: function(form, element, url, element_load) {
		var handleSuccess = function(o) {
			form.MESSAGE.value = '';
			if(o.responseText != 'false') {				
				$(element_load).innerHTML = o.responseText;
			} else {
				alert('Não foi possível enviar a notificação. Por favor tente novamente');
			}
			Rits.Ajax.hideOverlay(element);
		}
		var handleFailure = function(o) {			
			alert('Não foi possível enviar a notificação. Por favor tente novamente.');
			Rits.Ajax.hideOverlay(element);
		}
		var callback = {
			success: handleSuccess,
			failure: handleFailure
		}
		
		var message = form.MESSAGE.value;

		if(!message.length) {
			alert('Por favor digite sua mensagem.');
			return;
		}
		
		Rits.Ajax.displayOverlay(element);
		
		var request = YAHOO.util.Connect.asyncRequest('GET', url+'&MES_DESCRIPTION='+escape(message), callback);
	},
	removeMessage: function(element, url) {
		var handleSuccess = function(o) {			
			if(o.responseText != 'false') {				
				$(element).innerHTML = o.responseText;
			} else {
				alert('Não foi possível remover a notificação. Por favor tente novamente');
			}
			Rits.Ajax.hideOverlay(element);
		}
		var handleFailure = function(o) {			
			alert('Não foi possível remover a notificação. Por favor tente novamente.');
			Rits.Ajax.hideOverlay(element);
		}
		var callback = {
			success: handleSuccess,
			failure: handleFailure
		}		

		Rits.Ajax.displayOverlay(element);
		
		var request = YAHOO.util.Connect.asyncRequest('GET', url, callback);
	},
	
	remove: function(element, url) {
		var handleSuccess = function(o) {			
			if(o.responseText == 'noaccess') {
				alert('Acesso negado! Você não tem permissão para efetuar essa operação.');
			} else if(o.responseText != 'false') {				
				$(element).innerHTML = o.responseText;			
			} else {
				alert('Não foi possível remover o registro. Por favor tente novamente');
			}
			Rits.Ajax.hideOverlay(element);
		}
		var handleFailure = function(o) {			
			alert('Não foi possível remover o registro. Por favor tente novamente.');
			Rits.Ajax.hideOverlay(element);
		}
		var callback = {
			success: handleSuccess,
			failure: handleFailure
		}		

		if(!confirm('Você tem certeza que deseja remover o registro?')) {
			return;
		}
		Rits.Ajax.displayOverlay(element);
		
		var request = YAHOO.util.Connect.asyncRequest('GET', url, callback);
	},
	
	saveFiles: function(form, callbackDiv, callbackUrl) {
		url = form.action;
		
		var uploadHandler = {
			upload: function(o) {				
				Rits.Ajax.hideOverlay('layFormFiles');
				if(o.responseText == 'true') {					
					Rits.Dialog.close('dialogFiles');
					Rits.Ajax.loadContent(callbackDiv, callbackUrl);
				} else {					
					alert('Não foi possível enviar o(s) arquivo(s). Por favor tente novamente.');
				}				
			}
		};		
		Rits.Ajax.displayOverlay('layFormFiles');
		Rits.Ajax.submitForm(form, url, uploadHandler);
	},

	saveForm: function(form, dialog, layer, callbackDiv, callbackUrl) {
		url = form.action;
		
		var uploadHandler = {
			upload: function(o) {				
				Rits.Ajax.hideOverlay(layer);
				if(o.responseText == 'true') {
					Rits.Dialog.close(dialog);
					Rits.Ajax.loadContent(callbackDiv, callbackUrl);
				} else if(o.responseText == 'false') {
					alert('Não foi possível salvar o registro. Por favor tente novamente.');
				} else {
					$(dialog+'Content').innerHTML = o.responseText;
				}
			}
		};
		Rits.Ajax.displayOverlay(layer);
		Rits.Ajax.submitForm(form, url, uploadHandler);
	},
	
	addFilesForm: function(father, element) {
		var f = $(father);
		var first = $(element+'1');
		var e;
		var div = document.createElement('div');		
		
		var i=1;		
		while(1) {
			if(!$(element+i)){
				break;
			}
			i++;
		}		
		
		div.id = element+i;
		div.innerHTML = first.innerHTML.replace(/_1/g, '_'+i);		
		f.appendChild(div);		
	},	
	
	submitForm: function(form, url, handler) {
		
		YAHOO.util.Connect.setForm(form, true);
		YAHOO.util.Connect.asyncRequest('POST', url, handler);
	},
	
	/**
	 * Visitor login
	 *
	 * @param string element
	 * @param string seed
	 */
	visitorLogin: function(element, seed) {
		
		if(seed) {
			var handleSuccess = function(o) {
				if(o.responseText == 'true') {
					Rits.Util.reload();
				} else {
					alert('Não foi possível efetuar o login. Verifique seu e-mail e senha.');
					Rits.Ajax.hideOverlay(element);
				}
			}
			var handleFailure = function(o) {
				alert('Não foi possível efetuar o login. Por favor tente novamente.');
				Rits.Ajax.hideOverlay(element);
			}
			var callback = {
				success: handleSuccess,
				failure: handleFailure
			}
			
			var form = $('form_login');
			var login = form.VIS_LOGIN.value;
			
			var password = Rits.Crypt.md5(Rits.Crypt.md5(form.VIS_PASSWORD.value)+seed);
						
			var request = YAHOO.util.Connect.asyncRequest('GET', '/login/?LOGIN='+login+'&PASSWORD='+password, callback);
			
		} else {
						
			var handleSuccess = function(o) {
				if(o.responseText !== undefined) {										
					Rits.Ajax.visitorLogin(element, o.responseText);
				}
			}
			var handleFailure = function(o) {
				alert('Não foi possível efetuar o login. Por favor tente novamente.');
			}
			var callback = {
				success: handleSuccess,
				failure: handleFailure
			}
			
			var form = $('form_login');
			var login = form.VIS_LOGIN.value;
			var password = form.VIS_PASSWORD.value;
			
			if(!(Rits.Validate.isEmail(login) && password.length)) {
				alert('Digite corretamente seu e-mail e senha.');
				return;
			}
			Rits.Ajax.displayOverlay(element);	
			
			var request = YAHOO.util.Connect.asyncRequest('GET', '/login/seed/', callback);
		}
	},	
	
	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();
	},

	hideOverlay: function(element) {		
		var layer = $('rits_overlay_'+element);		
		var content = $('rits_overlay_content_'+element);
		
		$D.setStyle(layer, 'display', 'none');
		$D.setStyle(content, 'display', 'none');		
	},
	
	displayLoading: 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, '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();
	},

	hideLoading: function(element) {		
		var layer = $('rits_overlay_'+element);		
		var content = $('rits_overlay_content_'+element);
		
		$D.setStyle(layer, 'display', 'none');
		$D.setStyle(content, 'display', 'none');		
	}	
	
}
