/* licuit.com */
/* licuitCore.js */
/* Created Oct, 2011 */
/* Modified Oct, 2011
--------------------------------------- */

var licuitCore = {};

licuitCore.licuit = new Class({
        Implements: [Options, Events],
		
		initialize: function(options){}
});
	
licuitCore.appCore = new Class({
        Extends: licuitCore.licuit,
		
		layer : null,
		ajaxCalls : null,
		messages : null,
		
		initialize: function(options){},
		
		setup : function(){
			this.ajaxCalls = new licuitCore.ajaxCalls();
			this.messages = new licuitCore.messages();
			this.layer = new licuitCore.layer();
		},
		
		tween : function(element, time, property, value, transition){
			if(transition == undefined)
				var effect = Fx.Transitions.Quad.easeOut;
			else
				 var effect = transition;
				 
			element.set("tween",{duration: time, transition: effect});
			element.tween(property, value);
			
			return element.get("tween");
		}		
});

licuitCore.layer = new Class({
		
	layerArea : null,
	bg : null,
	content : null,
	closer : null,
	
	initialize : function(){},
	
	setup : function(){
		this.layerArea = new Element("div",{"class":"layerArea"});
		this.layerArea.setStyle("display","none");
		
		this.bg = new Element("div",{"class":"bg"});
		this.bg.inject(this.layerArea);
		//this.bg.addEvent("click",this.closeFromBg.bind(this));
		this.bg.addEvent("click",function(){
			self.location.hash="#home";
		});
		
		this.layerArea.inject($(document.body),"top");
		
		window.addEvent("resize",this.resize.bind(this));
	},
	
	show : function(){
		if(this.layerArea == null){
			this.setup();
		}
		
		if(this.content != null) this.content.dispose();
			
		this.layerArea.setStyle("display","block");
	
		var position = $(document.body).getScroll().y;
		$(document.body).setStyle("overflow-y","hidden");
		$(document.body).setStyle("margin-top",-position);
		$(document.body).setStyle("height",$(window).getSize().y+position);
	},
	
	hide : function(){
		var position = $(document.body).getStyle("margin-top").split("px")[0];
		$(document.body).setStyle("overflow-y","visible");
		$(document.body).setStyle("margin-top",0);
		window.scrollBy(0,-Number(position));
		$(document.body).setStyle("height","auto");
		
		this.clearContent();
			
		this.layerArea.setStyle("display","none");
		
		this.bg.removeClass("black");
	},
	
	resize : function(){
		if(this.content == null)
			return;
		var element = this.content.getChildren()[1];
		if(element == null)
			return;	
		var dimensions = element.getCoordinates();
		element.setStyle("margin-top",-Math.round(dimensions.height/2));
		element.setStyle("margin-left",-Math.round(dimensions.width/2));
		
		if(this.closer != null){
			this.closer.setStyle("top",-dimensions.height/2);
			this.closer.setStyle("left",dimensions.width/2);
		}
			
	},
	
	addContent : function(element){
		if(this.content != null) this.content.dispose();
			
		this.content = new Element("div",{"class":"content"});
		this.content.inject(this.layerArea,"bottom");
		
		element.inject(this.content);
		
		var dimensions = element.getCoordinates();
		element.setStyle("margin-top",-Math.round(dimensions.height/2));
		element.setStyle("margin-left",-Math.round(dimensions.width/2));
		
		window.addEvent("resize",function(){
			var dimensions =element.getCoordinates();
			element.setStyle("margin-top",-Math.round(dimensions.height/2));
			element.setStyle("margin-left",-Math.round(dimensions.width/2));
		}.bind(this));
	},
	
	clearContent : function(){
		if(this.content != null) this.content.dispose();
		if(this.closer != null) this.closer.dispose();
	},
	
	addCloser : function(){
		if(this.closer != null) this.closer.dispose();
			
		this.closer = new Element("div",{"class":"closer"});
		this.closer.setStyle("opacity",0);
		this.closer.inject(this.content,"top");
		//this.closer.addEvent("click",this.hideLayer.bind(this));
		this.closer.addEvent("click",function(){
			self.location.hash="#home";
		});
		
		appCore.tween(this.closer,500,"opacity",1);
		
		this.resize();
	},
	
	closeFromBg : function(){
		//if(this.closer != null)
			this.hide();
	}
	
});

licuitCore.messages = new Class({
	
	messagesLoaded : false,
	messagesClassWaiter : [],
	loading : false,
	
	initialize : function(){
		
	},
	
	show : function(type, title, message, callback, nokcallback){	
		
		if(callback == undefined)
			callback = function(){};
		if(nokcallback == undefined)
			nokcallback = function(){};
			
		if (this.messages == null) {
			this.messages = {};
			
			this.messages.enviando = new Message({
				iconPath: "resources/js/messages/images/",
				icon: "blackWaiter.gif",
				title: "Un segundo...",
				message: "...estamos enviando el mensaje...",
				centered: true
			});
			
			this.messages.formError = new Message({
				iconPath: "resources/js/messages/images/",
				icon: "cautionMedium.png",
				title: "Hay errores el formulario",
				message: "Revisa los campos en rojo.",
				centered: true,
				autoDismiss : true
			});
			
			this.messages.sendingError = new Message({
				iconPath: "resources/js/messages/images/",
				icon: "cautionMedium.png",
				title: "No hemos podido enviar el mensaje",
				message: "Intentalo más tarde.",
				centered: true
			});
			
			this.messages.sendingOk = new Message({
				iconPath: "resources/js/messages/images/",
				icon: "cautionMedium.png",
				title: "¡Mensaje enviado!",
				message: "Muchas gracias.",
				centered: true
			});
			
			//provides: [Message.say, Message.tell, Message.ask, Message.waiter, Messate.tip]
		}
			
		if(type == "customizedTell"){
			this.messages.customizedTell = new Message({
				iconPath: "resources/js/messages/images/",
				icon: "okMedium.png",
				"title": title,
				"message": message,
				centered: true,
				"onComplete":callback
			});
		}else if(type == "customizedSay"){
			this.messages.customizedSay = new Message({
				iconPath: "resources/js/messages/images/",
				icon: "cautionMedium.png",
				"title": title,
				"message": message,
				centered: true,
				autoDismiss : true
			});
		}else if(type == "customizedWaiter"){
			this.messages.customizedWaiter = new Message({
				iconPath: "resources/js/messages/images/",
				icon: "blackWaiter.gif",
				"title": title,
				"message": message,
				centered: true
			});
		}else if(type == "customizedAsk"){
			this.messages.customizedAsk = new Message({
				iconPath: "resources/js/messages/images/",
				icon: "cautionMedium.png",
				"title": title,
				"message": message,
				centered: true,
				"callback":callback,
				"nokcallback":nokcallback
			});
		}
		
		var message;
				
		switch(type){
			case "enviando" : message = this.messages.enviando; message.waiter(); break;
			case "formError" : message = this.messages.formError; message.say(); break;
			case "sendingError" : message = this.messages.sendingError; message.tell(); break;
			case "sendingOk" : message = this.messages.sendingOk; message.tell(); break;
			case "customizedTell" : message = this.messages.customizedTell; message.tell(); break;
			case "customizedSay" : message = this.messages.customizedSay; message.say(); break;
			case "customizedWaiter" : message = this.messages.customizedWaiter; message.waiter(); break;
			case "customizedAsk" : message = this.messages.customizedAsk; message.ask(); break;
		}
		
		return message;
	},
	
	hide : function(message){
		message.dismiss();
	}
});

var appCore  = new licuitCore.appCore();
window.addEvent("domready",function(){appCore.setup()});
