/*
 * Class: Utils
 * @autor: Christian Benseler
 * @created: 01/06/2007
 * @requires: prototype.js
 * 
 */

var Utils = Class.create();

Utils.prototype = {
	/*
	 * construtor padrão;
	 */
	initialize: function() {
		this.allowScriptsAfterSubmit = false;
	},
	
	openUrl: function(thisObject) {
		//verifica se tem popup
		if(thisObject.hasPopup) {
			var divPopup = new Popup(thisObject.popup);
			divPopup.createCloseButton(thisObject.popupClose);
			divPopup.createMessageArea(thisObject.messageArea, thisObject.popup);
		}
	
		var url = thisObject.formUrl;
		var pars = "rnd=" + Math.random()*4;
		
		if(thisObject.getLoadingMessageId())
			$(thisObject.messageArea).innerHTML += thisObject.loadingMessage;
				
		var myAjax = new Ajax.Updater( 

			{}, 
			url, 
			{ 
				method: 'post',
				parameters: pars, 
				onSuccess: function(request) {
					//se tiver loadingMessageId, retira a mensagem
					if(thisObject.getLoadingMessageId())
						$(thisObject.getMessageArea()).removeChild($(thisObject.getLoadingMessageId())); //remove mensagem de aguarde...
					
					$(thisObject.messageArea).innerHTML = request.responseText;
					
					//verifica se deve mostrar alguma área que estava escondida
					
					if(thisObject.areaToShow!="")
						$(thisObject.areaToShow).style.display = "block";
					
					/*
					 * se for para mostrar em uma popup, abre a mesma...
					 */
					if(thisObject.hasPopup)
						divPopup.open();
					
					
				}, 
				onFailure: function(request) {
					if(thisObject.getLoadingMessageId())
						$(thisObject.getMessageArea()).removeChild($(thisObject.getLoadingMessageId())); //remove mensagem de aguarde...
					if(request.responseText.indexOf("<body>")>0)
						$(thisObject.getMessageArea()).innerHTML += request.responseText.substring(request.responseText.indexOf("<body>") + 6, request.responseText.indexOf("</body>"));
					else
						$(thisObject.getMessageArea()).innerHTML += request.responseText;
					/*
					 * se for para mostrar em uma popup, abre a mesma...
					 */
					if(thisObject.hasPopup)
						divPopup.open();
				}
			}
		);
	},
	
	submitAction:function (url, pars, messageArea, divPopup, height, thisObject) {
		var thisUtils = this;
		var myAjax = new Ajax.Updater( 
			{}, 
			url, 
			{ 
				method: 'post',
				parameters: pars, 
				onSuccess: function(request) {
					$(messageArea).innerHTML = request.responseText;
					if(thisObject.callAfterSend!=null) {
						var str = thisObject.callAfterSend;
						eval(thisObject.callAfterSend + "()");
					}
					/*
					 * verifica se tem popup
					 */
					if(thisObject.hasPopup)
						divPopup.open();						
					else
						/*
						 * seta altura auto, caso tenha sido setada antes fixa
						 */
						$(messageArea).style.height = "auto";
				},
				onFailure: function(request) {
					alert(request.responseText);
				},
				evalScripts:thisUtils.allowScriptsAfterSubmit
			}
		);	
	},
	
	setAllowScriptsAfterSubmit: function(status) {
		this.allowScriptsAfterSubmit = status;
	},
	
	catchSource: function(e) {
		if(typeof(e)=='undefined')
			var e=window.event;
		source=e.target?e.target:e.srcElement
		if(source.nodeType==3)
			source=source.parentNode;
		return source;
	},
	
	/*
	 * verifica se um item de um select tem valor igual ao que foi passado como parâmetro
	 */
	isInSelectByValue: function(list, value) {
		var opts = list.getElementsByTagName("option");
		var nodes = $A(opts);
		var breakThis = false;
		nodes.each(function(node){
			if(node.value==value) {
				breakThis = true;
			}
		});
		return breakThis;
	},
	
	/*
	 * verifica se elemento tem scrollbar
	 */
	hasVerticalScrollBar: function(element) {
		if(element.clientHeight >= element.scrollHeight)
			return false
		else
			return true;
	},
	
	copyToClipboard: function(elt) {
		var urlSwf = "/admin/images/clipboard.swf";
		var strMssgBoxId = "notifyTextCopied";
		var eltNotify = null;
	
		// Display Notifications
		if((eltNotify = $(strMssgBoxId)) == null){
			// Attach the notification to the DOM
			var eltBody = document.body;
	
			eltNotify = document.createElement('div');
			eltNotify.setAttribute('id', strMssgBoxId);
			eltNotify.style.display = 'none';
	
			eltNotify.innerHTML = 'copiado';
	
			eltBody.appendChild(eltNotify);
		}
		elt.onblur =
			function(e){
				Element.hide(eltNotify);
				return true;
			}
	
		var z = Position.cumulativeOffset(elt);
		var x = z[0];
		var y = z[1];
	
		Element.show(eltNotify);
	
		if(navigator.appName == 'Microsoft Internet Explorer'){
			if(x < 100){
				eltNotify.style.left = (x + (elt.offsetWidth - 23)) + 'px';
			}
			else{
				eltNotify.style.left = (x - (eltNotify.offsetWidth + 2)) + 'px';
			}
		}
		else{
			if(x < 100){
				eltNotify.style.left = (x + (elt.offsetWidth + 3)) + 'px';
			}
			else{
				eltNotify.style.left = (x - (eltNotify.offsetWidth + 2)) + 'px';
			}
		}
	
		eltNotify.style.top = y + 'px';
		var xEffect = Effect.Fade(eltNotify, { fps: 75, from: 1.9, to: 0.0, duration: 1.0, queue: 'front' } );
		//window.status = 'Copied text to clipboard';
	
		// Copy the text inside the text box to the user's clipboard
		var flashcopier = 'flashcopier';
		if(!$(flashcopier)){
			var divholder = document.createElement('div');
			divholder.id = flashcopier;
			document.body.appendChild(divholder);
		}
	
		$(flashcopier).innerHTML = '';
		var divinfo = '<embed src="' + urlSwf + '" FlashVars="clipboard='+escape(elt.value)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
		$(flashcopier).innerHTML = divinfo;
	
		elt.select();
	
		return true;
	},
	
	isBlank: function(value) {
		if(value=="")
			return true;
		else
			return false;
	},
	
	showDialogMessage: function(msg) {
		var aviso = $("aviso");
		var mensagem = $("mensagem-aviso");
		mensagem.innerHTML = msg;
	
		aviso.style.display = "block";
		generateBackground();
	},
	
	closeDialogMessage: function(msg) {
		setTimeout("fecharAviso()", 1000);
		$("mensagem-aviso").innerHTML = msg;
	},
	
	/*
	 * formata uma data do JS para dd/MM/yyyy
	 */
	formatJSDate: function(date) {
		var day = date.getDate();
		var month = date.getMonth() + 1;
		var year = date.getFullYear();
		return day + "/" + month + "/" + year;
	},
	
	/*
	 * formata uma data do JS para dd/MM/yyyy, adicionando 0 quando o dia ou o mes tiverem 1 caracter  
	 */
	formatDateComplete: function(date) {
		var day = date.getDate();
		var month = date.getMonth() + 1;
		var year = date.getFullYear();
		
		if(day < 10){
			day = "0"+day;
		}
		if(month < 10){
			month = "0"+month;
		}
		
		
		return day + "/" + month + "/" + year;
	},
	
	/*
	 * formata uma data do JS para dd/MM/yyyy
	 */
	formatJSFullDate: function(date) {
		var day = date.getDate();
		var month = date.getMonth() + 1;
		var year = date.getFullYear();
		
		var hours = date.getHours();
		var minutes = date.getMinutes();
		var seconds = date.getSeconds();
		
		if(minutes < 10) {
			minutes = "0" + minutes;
		}
		
		if(seconds < 10) {
			seconds = "0" + seconds;
		}
		
		return day + "/" + month + "/" + year + " - " + hours + ":" + minutes + ":" + seconds;
	}
	
}