/*
 * Tooltip Plugin
 */
(function($) {
	$.widget("ui.reservation", {

        _init: function() {
            var self = this.element;
            
            this.button = $('<a>').attr({'class':'button buy_button'})
                    .bind('click.startreservation', function() { self.reservation('start'); })
                    .html('Reservar')
                    .appendTo(self);

            // Creating "Pop up" dialog
            this.popup = $('<div>').attr('id', 'message');
            this.popup.dialog({
                    autoOpen:false,
                    modal:true,
                    bgiframe: true,
                    width: 550,
                    resizable: false,
                    buttons: {
                        'Cerrar': function() {self.reservation('finish'); }
                    }
            });

        },

        start: function() {
            var self = this.element;

            this.popup.html('');
            $('<p>')
                .attr('class', 'message')
                .html('Proveedor: <b>'+this.options.name+'</b>')
                .appendTo(this.popup);
            $('<p>')
                .attr('class', 'message')
                .html('Página web: <b>'+this.options.url+'</b>')
                .appendTo(this.popup);
            $('<p>')
                .attr('class', 'message')
                .html('Teléfono: <b>'+this.options.phone+'</b>')
                .appendTo(this.popup);




            this.popup.dialog('open');
        },

        finish: function() {
            var self = this.element;
            this.popup.dialog('close');
        },

        destroy: function() {
            this.popup.remove();
            this.button.remove();
            this.element.unbind('.startreservation');
            $.widget.prototype.destroy.apply(this, arguments);
        }

    });

    $.extend($.ui.reservation, {
            version: "1.7.2",
            defaults: {
                name: '',
                url: '',
                phone: ''
            }
    });

})(jQuery);




/*
 * Tooltip Plugin
 */
(function($) {
	$.widget("ui.tooltip", {

		_init: function() {
            var self = this.element;
            self.css('cursor','help')
                .css('padding','2px 0 0 20px')
                .css({'height':'20px', 'width':'15px'})
                .css({'background-image':'url(http://www.disfrutalia.com/images/tooltip-001.gif)','background-position':'5px 5px','background-repeat':'no-repeat'});

            // Getting div child
            this.div = self.find('.tooltip');
            this.div
                .css({'display':'none'})
                .css({'position':'absolute','padding':'10px'})
                .css('width','300px')
                //.css({'-moz-border-radius':'4px', '-moz-border-radius-bottomleft':'0', '-webkit-border-radius':'4px', '-webkit-border-radius-bottom-left':'0'})
                //.css({'-webkit-box-shadow':'4px 4px 15px rgb(6,6,6)', '-moz-box-shadow':'4px 4px 15px rgb(6,6,6)', 'box-shadow':'4px 4px 15px rgb(6,6,6)'})
                .css({'background':'#FFF', 'border':'1px solid #333'});
                //.addClass('tooltip');
            
			self.bind('mouseover.tooltip', function() { self.tooltip('show'); });
		},

		show: function() {
            var self = this.element;

			self.unbind('.tooltip');


            var divtop = self.position().top - this.div.height() - 20;
            var divleft = self.position().left + 16;
            this.div.css({'left':divleft,'top':divtop});
            
            //this.div.show();
            this.div.css('display','block');

            self.bind('mouseout.tooltip', function() { self.tooltip('hide'); });
			//this.div.bind('mouseout.tooltip', function() { self.tooltip('hide'); });
		},
		
		hide: function() {
            var self = this.element;
            self.unbind('.tooltip');
            //this.div.unbind('.tooltip');
			this.div.hide();
            self.bind('mouseover.tooltip', function() { self.tooltip('show'); });
		},
		
		destroy: function() {
            this.div.remove();
			this.element.unbind('.unorderable');
			$.widget.prototype.destroy.apply(this, arguments);
		}

	});

	$.extend($.ui.tooltip, {
		version: "1.7.2",
		defaults: {
			text: ''
		}
	});

})(jQuery);


/*
 * Location autocompleter
 */
(function($) {

	$.widget("ui.autocomplete", {

		_init: function() {
            var self = this.element;
			this.element.bind('keyup.autocomplete', function() { self.autocomplete('check'); });
		},

		check: function() {
            if(this.element.length >= 3) {
                alert('Starting');
            }

		},

		destroy: function() {
			this.element.unbind('.autocomplete');
			$.widget.prototype.destroy.apply(this, arguments);
		}

	});

	$.extend($.ui.autocomplete, {
		version: "1.7.2",
		defaults: {
			text: ''
		}
	});

})(jQuery);




/*
 * Edit in place!!
 *
 * id="user_set__firstname"
 */
(function($) {

	$.widget("ui.editinplace", {

		_init: function() {
            var self = this.element;
            var o = this.options;

            var id = self.attr('id').split('__');
            o.item = id[1];
            var control = id[0].split('_');
            o.controller = control[0];
            o.action = control[1];

            this.editor = $('<span>');

            // Content
            this.text = $('<input>')
                .attr({'type':'text','class':'editinplace_input', 'value':'0'})
                .appendTo(this.editor);

            // Submit button
            this.sender = $('<a>')
                .attr({'id':'submitvalue', 'class':'button buy_button editinplace_button'})
                .html('Enviar')
                .appendTo(this.editor);
            
            this.element.bind('click.seteditable', function() { self.unbind('.iseditable'); self.editinplace('setEditable'); });
            this.element.bind('mouseover.iseditable', function() { self.editinplace('isOver'); });

            if(self.html() == '') {
                self.html('...');
            }
		},

        isOver: function() {
            var self = this.element;
            self.unbind('.iseditable');
            self.addClass('editinplace_over');
            self.bind('mouseout.isnoteditable', function() { self.editinplace('isOut'); });
        },

        isOut: function() {
            var self = this.element;
            self.unbind('.isnoteditable');
            self.removeClass('editinplace_over');
            self.bind('mouseover.iseditable', function() { self.editinplace('isOver'); });
        },

        /* *** *** Events *** *** */

        /*
         * Change the color!
         */
        setEditable: function() {
            // Close rest of editable elements
            $('.editinplace').editinplace('unsetEditable');
            
            this.options.isediting = true;
            var self = this.element;
            this.text.val(self.html());
            self.unbind('.seteditable');

            self.html('');
            self.append(this.editor);
            this.sender.bind('click.sendvalue', function() { self.editinplace('sendValue'); })
            this.text.focus();
        },

        unsetEditable: function() {
            var self = this.element;
            if(this.options.isediting) {
                this.sender.unbind('.sendvalue');
                self.bind('click.seteditable', function() { self.editinplace('setEditable'); });
                self.bind('mouseover.iseditable', function() { self.editinplace('isOver'); });
                self.html(this.text.val());
                this.options.isediting = false;
            }
            if(self.html() == '') {
                self.html('...');
            }
        },

        sendValue: function() {
            var self = this.element;
            var o = this.options;
            if(this.text.val() != '') {
                var url = o.baseurl + o.controller + '/' + o.action + '/?id=' + o.uid + '&' + o.item + '=' + encodeURI(this.text.val()) + '&callback=?';
                $.getJSON(url, function(data) {
                    if(data.status == 1){
                        self.editinplace('unsetEditable');
                    } else {
                        // @TODO
                        alert('Error guardando los datos');
                    }
                });
            }
        },


		destroy: function() {
			this.element.unbind('.autocomplete');
			$.widget.prototype.destroy.apply(this, arguments);
		}

	});

	$.extend($.ui.editinplace, {
		version: "1.7.2",
		defaults: {
            baseurl : 'http://api.disfrutalia.com/',
            uid : '',
            item : '',
            controller : '',
            action : '',
            isediting : false
		}
	});

})(jQuery);