/**
 * JQuery UIComposer plugin
 *
 * Plugin Dependencies:
 * 	jQuery Facebox plugin
 * 	jQuery Form plugin
 * 	jQuery Tokeninput plugin
 * 	jQuery Timer plugin
 * 	jQuery Auto-Grow plugin
 *
 */
(function($) {

	function UIComposer() {
		var _this = this;
		_this.init();
	};
	
	$.extend(UIComposer.prototype, {
		init: function() {
		},
		GeneralActionSendMessage: function(_uid) {
			var _this = this;
			
			$(document)
				.unbind('init.facebox') 
				.unbind('loading.facebox') 
				.unbind('beforeReveal.facebox') 
				.unbind('afterReveal.facebox')
				.bind('init.facebox', function() {
					$.extend($.facebox.settings, {
						opacity : .5,
						overlay      : false,
						loadingImage : '/js/jquery/plugins/facebox/loading.gif'
					});
				})
				.bind('loading.facebox', function() {
					$("#facebox .body").css('width', '540px');
					$('#facebox').css('left', $(window).width() / 2 - ($('#facebox .body').width() / 2))
				})
				.bind('beforeReveal.facebox', function() {
					// Remove footer part.
					$("#facebox .footer").remove();
				})
				.bind('afterReveal.facebox', function() {
					// Create title area.
					if ($("#facebox h2.dialog_title").is("h2.dialog_title")) {
						$("#facebox h2.dialog_title").remove();
					}
					var _insert = $(document.createElement('h2')).insertBefore('#facebox .content');
					var _span = $(document.createElement('span'));
					_span.text($(".dialogTitle").text());
					$(".dialogTitle").remove();
					_insert.addClass('dialog_title').append(_span);				
				});
			
			// Facebox
			$.facebox(function() {
				$.get(ecotti.app.webroot + 'ajax/messages/compose', {uid: _uid}, afterReveal, 'html');
				
				// Facebox callback.
				function afterReveal(data, status) {
					$.facebox(data);
	
					$(".tokenize").tokenInput(ecotti.app.webroot + "ajax/messages/tokenize", {
						hintText: "Type the nickname of a friend, username or email address",
						noResultsText: "No results",
						searchingText: "Searching...",
						searchDelay: 300,
						minChars: 1,
						tokenLimit: null,
						onResult: function(results) {
							//console.info(results);
							return results;
						},
						classes: {
							tokenList: "token-input-list-facebook",
							token: "token-input-token-facebook",
							tokenDelete: "token-input-delete-token-facebook",
							selectedToken: "token-input-selected-token-facebook",
							highlightedToken: "token-input-highlighted-token-facebook",
							dropdown: "token-input-dropdown-facebook",
							dropdownItem: "token-input-dropdown-item-facebook",
							dropdownItem2: "token-input-dropdown-item2-facebook",
							selectedDropdownItem: "token-input-selected-dropdown-item-facebook",
							inputToken: "token-input-input-token-facebook"
						}
					});
					
					// jQuery textarea auto-grow, auto-height 
					$('.UIComposer .DOMControl_autogrow').autogrow({
						maxHeight: 1000, minHeight: 30, lineHeight: 15
					});
	
					
					/*$(".UIConnectControls_AddMessageLink").click(function(){
						$(this).hide();
						$(".UIConnectControls_Message").slideDown('fast');	
						return false;
					});*/
					
					$("#UIComposer_SubmitButton").click(function(){

						$("#MessageComposerForm").ajaxSubmit({
							url: ecotti.app.webroot + 'ajax/messages/send_message',
							type: 'post',
							dataType: 'json',
							beforeSubmit: function(formData, jqForm, options){
								//$(this).attr('disabled', 'disabled');
							},
							success: function(data, status){
								//$(this).removeAttr('disabled');
								
								//$(".message").remove();
								$(".UIComposer_Error").hide();
								$(".error-message").remove();
						
								if (data.errors) {
									//_this.flashMessage(data.errors.message, _this.flashMessageDiv);
									
									$(".ErrorMessage", ".UIComposer_Error").text(data.errors.message);
									$(".UIComposer_Error").show();
									_this.validationErrors(data.errors);
									
								} else if (data.success) {
									
									//$(".dialog_title").remove();
									$(".dialog_body .UIComposer_Fieldset").remove();
									$(".dialog_buttons").remove();
									
									$(".StatusMessage", ".UIComposer_Standard_Status").text(data.success.message);
									$(".UIComposer_Standard_Status").show();
									
									window.setTimeout(function() {
										$(document).trigger('close.facebox');
									}, 1000);
	
								}							
							}
						});
																			  
						return false;
					});

					$(".close", "#facebox").click(function() {
						$(document).trigger('close.facebox');
						return false;
					});
				}
				return false;	
			});
			// END of facebox
		},
		flashMessage: function(data, target) { // Not being used.
			$(target).css('display', 'none');
			var _insert = $(document.createElement('div'));
			_insert.attr('id', 'flashMessage').addClass('message').text(data);
			$(target).append(_insert).fadeIn();
		},
		validationErrors: function(data, target) {
			//flashMessage(data.message);
			var _this = this;
			$.each(data.data, function(model, errors) {
				for (fieldName in this) {
					//console.info(data);
					if (target) {
						var element = $(target);
						var _insert = $(document.createElement('div')).appendTo(element);
					} else {
						if (fieldName == 'to') {
							var element = $(".token-input-list-facebook");
						} else {
							var element = $("#" + _this.camelize(model + '_' + fieldName));
						}
						var _insert = $(document.createElement('div')).insertAfter(element);
					}
					_insert.addClass('error-message').text(this[fieldName]);
				}
				//_loadingDiv.hide();
			});
		},
		camelize: function(string) {
			var a = string.split('_'), i;
			s = [];
			for (i=0; i<a.length; i++){
				s.push(a[i].charAt(0).toUpperCase() + a[i].substring(1));
			}
			s = s.join('');
			return s;
		}
	});

	$(function() {
		$.UIComposer = new UIComposer(); // singleton instance
	});

})(jQuery);
