/*
 * Copyright (C) 2009 Experiencias Ocentu. All rights reserved.
 *
 * Proprietary code. No modification, distribution or reproduction without
 * written permission.
 * 
 * @author: jesus.rodriguez
 * $Id$
 */

var _userbox_status = 1;

(function($) {

// Constants...
var REGISTER = 5;
var LOGIN_FORM = '#popup_form';
var REGISTER_FORM = '#register_form';
var CLOSE = 0;

var _self = this.element;
var _state = CLOSE;
//var _has_session = '';
//var _user_level = '1';
var _login_form = '<form id="popup_form" enctype="application/x-www-form-urlencoded" action="none()" method="post"><p class="hint">Accede con tu cuenta de usuario</p><dl class="popup_form"><li class="element-group"><label for="email" class="required">Email</label> <input type="text" name="email" id="email" value=""></li><li class="element-group"><label for="password" class="required">Contraseña</label> <input type="password" name="password" id="password" value=""></li></dl></form>';
var _register_form = '<form id="register_form" enctype="application/x-www-form-urlencoded" action="none()" method="post"><p class="hint">Introduzca sus datos</p><dl class="zend_form"><li class="element-group"><label for="firstname" class="required">Nombre</label> <input type="text" name="firstname" id="firstname" value=""></li><li class="element-group"><label for="lastnamename" class="required">Apellidos</label> <input type="text" name="lastnamename" id="lastnamename" value=""></li><li class="element-group"><label for="email" class="required">Email</label> <input type="text" name="email" id="email" value=""></li><li class="element-group"><label for="password" class="required">Contraseña</label> <input type="password" name="password" id="password" value=""></li><li class="element-group"><label for="repassword" class="required">Confirmar Contraseña</label> <input type="password" name="repassword" id="repassword" value=""></li></dl></form>';
var _baseurl = 'http://api.disfrutalia.com/';

var _num_items = 0;
var _items_data = null;

$.widget("ui.userbox", {

	_init: function() {
		var self = this.element;
		// Global user DIV
		this.userSpace = $('<div>').attr('class', 'user_zone');
		var span = $('<span>').html('Zona usuario:').appendTo(this.userSpace);

		// User account related DIV
		this.accountSpace = $('<a>').attr({'href':'javascript:none();', 'class':'accountspace'});
		// login/out related DIV
		this.logSpace = $('<a>').attr({'href':'javascript:none();', 'class':'logspace'});

		// Attaching links to user space
		this.accountSpace
			.appendTo(this.userSpace);
		
		// Set unloged by default, updated later
		self.userbox('setUnLogged');
		
		$('<span>').attr().html('|').appendTo(this.userSpace);
		this.logSpace.appendTo(this.userSpace);
		
		// Attaching user space to element
		this.userSpace.appendTo(this.element);
		$('<div>').attr('class', 'clear').appendTo(this.element);
		
		this.cartmessage = $('<div>')
			.attr('id', 'shopping_cart')
            .css('height','23')
			.html('<em>Cargando ..</em>')
			.bind('mouseover.showorders', function(){ self.userbox('showorders'); });
		
		this.cartmessage.appendTo(this.element);
		
		// Creating and attaching cart space
		this.cart = $('#cart_num_orders');
		
		// Creating "Pop up" dialog
		this.popup = $('<div>').attr('id', 'user_dialog');
		this.popup.dialog({
			autoOpen:false,
			modal:true,
			bgiframe: true,
			width: 550,
			resizable: false,
			buttons: {
                'Acceder': function() {self.userbox('send'); }
			}
		});
		
		// Cache bug
		//if(_has_session) {
		self.userbox('updateorders');
		//}
		
	this.content = $('<div>');
	this.content
		.attr('id', 'order_float_content')
		.appendTo(this.element);
	},

    clean: function() {
        _num_items = 0;
        _items_data = null;
        _user_level = 0;
    },

    disable: function() {
        _userbox_status = 0;
        if(this.button) {
            this.button.remove();
        }
        this.cartmessage.html('<div style="text-align:center;color:#CCC;padding-top:3px;">Inactivo durante la compra</div>');
    },
	
	updateorders: function() {
		var self = this.element;
		var url = _baseurl + 'order/get/?callback=?';

        self.userbox('clean');
		$.getJSON(url, function(data) {
			if(data.status == 1){
				_num_items = data.items;
				_items_data = data.data;
				_user_level = data.userlevel;
				if(_user_level >= REGISTER) {
					self.userbox('setLogged');
				}
			} else {
				// @TODO
			}
            // In any case, refresh the content
            self.userbox('updatecontent');
		});		
	},
	
	updatecontent: function() {
		this.cartmessage.html('<span>Tiene '+_num_items+' artículos</span>');


        // Bug:: Don't put the button if no items selected
        if(_num_items == 0) {
            this.element.userbox('hideorders');
            this.content.html('');
            return;
        }

        this.button = $('<a>')
                .attr({'id':'buy', 'class':'button buy_button'})
                .html('Comprar')
                .css({'float':'right', 'margin-right':'10px'})
                .attr('href', 'http://www.disfrutalia.com/purchase/order/')
                .appendTo(this.cartmessage);

		var ul = $('<ul>')
			.attr('id', 'order_list_container')
            .css('margin-top','10');

		$.each(_items_data, function(index, item) {
			var li = $('<li>').attr({'id':'item_'+item['ID'],'class':'order_list_element'});

			var a = $('<a>')
				.attr({'id':'unorder_button_'+item.ID, 'class':'button button_cancel'})
				.html('Borrar')
				.cancelorder({value:item.ID});
			
			$('<div>')
				.attr('class', 'order_list_options')
				.append(a)
				.appendTo(li);
            /*
			$('<div>')
				.attr('class', 'order_list_units')
				.html(item['UNITS'])
				.appendTo(li);
            */
			$('<div>')
				.attr('class', 'order_list_name')
				.html('<a href="http://www.disfrutalia.com/experiencia/?id='+item.EXP_ID+'">'+item['NAME']+'</a>')
				.appendTo(li);
			ul.append(li);
		});
		//var li = $('<li>').attr({'id':'buy_item','class':'order_list_element buy'});
		/*
        var ab = $('<a>')
			.attr({'id':'buy', 'class':'button buy_button'})
			.html('Comprar')
			.attr('href', 'http://www.disfrutalia.com/purchase/order/')
			.appendTo(li);
        */
		//ul.append(li);
		
		

        if(_userbox_status != 0) {
            this.content.html(ul);
        } else {
            this.element.userbox('disable');
        }
	},
	
	showorders: function() {
		var self = this.element;
        if(_userbox_status != 0) {
            this.cartmessage
                .unbind('.showorders');
            this.content.bind('mouseleave.hideorders', function(){ self.userbox('hideorders'); });
            this.content.show(150);
        } else {
            this.element.userbox('disable');
        }
	},
	
	hideorders: function() {
		var self = this.element;
		this.cartmessage
			.unbind('.hideorders')
			.bind('mouseover.showorders', function(){ self.userbox('showorders'); });
		this.content.hide(300);
	},
	
	send: function() {
        var self = this.element;

        self.userbox('setLoginWorking');

		var outdata = '';
		// iterate form elements
		$(':input', _state).each(function(index, item) {
			outdata += item.id + '=' + item.value + '&';
		});
		
		var resource = 'register/';
		if(_state == LOGIN_FORM) {
			resource = 'login/';
		}
		
		var popup = this.popup;
		var url = _baseurl + resource + 'submit/?' + outdata + '&callback=?';
		$.getJSON(url, function(data) {
			if(data.status == 2){
				self.userbox('setLogged');
                self.userbox('updateorders');
				self.userbox('close');
                //self.userbox('redir');
			} else {
				if(_state == LOGIN_FORM) {
					_login_form = data.html;
					popup.html('<div id="popup_window">'+data.html+'</div>');
					$('#login_form .hint').html('El usuario o la contraseña no son correctos');
				} else {
					_register_form = data.html;
					popup.html('<div id="popup_window">'+data.html+'</div>');
					$('#register_form .hint').html('Error, revise los datos por favor');
				}
                self.userbox('unsetLoginWorking');
			}
		});
	},
	
	logout: function() {
		var self = this.element;
		var url = _baseurl + 'login/out/?callback=?';
		$.getJSON(url, function(data) {
			if(data.status == 1){
				self.userbox('setUnLogged');
                self.userbox('updateorders');
			} else {
				// @TODO!!
			}
		});
	},

    setWorking: function() {

    },

    unsetWorking: function () {

    },

	openLogin: function(from) {
        this.options.from = from;
        _state = LOGIN_FORM;
        this.popup.html('<div id="popup_window">'+_login_form+'</div>');
        this.popup.dialog('open');

        this.buttons = $(':button');
	},
	
	openRegister: function() {
        window.location = 'http://www.disfrutalia.com/register/';
        return;
	},

    setLoginWorking: function() {
        this.buttons
            .html('enviando ..')
            .addClass('disabled');
    },

    unsetLoginWorking: function() {
        this.buttons.removeClass('disabled')
            .html('Acceder');
    },

	setLogged: function() {
            var self = this.element;
            this.accountSpace
                    .unbind('.accountspace')
                    .attr({'href':'http://www.disfrutalia.com/user/account/'})
                    .html('Tu cuenta');
            this.logSpace
                    .unbind('.logspace')
                    .html('Salir')
                    .bind('click.logspace', function(){ self.userbox('logout'); });

            if(this.options.from) {
                window.location = this.options.from;
            }
	},
	
	setUnLogged: function() {
		var self = this.element;
		this.accountSpace
			.unbind('.accountspace')
			.html('Registro')
			.attr({'href':'http://www.disfrutalia.com/register/'});
		this.logSpace
			.unbind('.logspace')
			.html('Accede')
			.bind('click.logspace', function(){ self.userbox('openLogin'); });
	},
	
	close: function() {
		_state = CLOSE;
		this.popup.dialog('close');
	},
	
	value: function(newValue) {
		if (newValue === undefined) {
			return this._value();
		}
		
		this._setData('value', newValue);
		return this;
	},

	_setData: function(key, value) {

		switch (key) {
			case 'value':
				this.options.value = value;
				this._trigger('change', null, {});
				break;
                        case 'callback':
                                this.options.callback = value;
                                break;
		}

		$.widget.prototype._setData.apply(this, arguments);

	},

	_callback: function() {
                return this.options.callback;
	},

        callback: function() {
                alert(this.options.callback);
        },
	
	destroy: function() {
		this.element
			.unbind('.accountspace')
			.unbind('.logspace');
		
		this.cart.unbind('.orders');
		
		this.accountSpace.remove();
		this.userSpace.remove();
		this.popup.remove();
	}
});

// Widget definition
$.extend($.ui.userbox, {
	version: "1.7.2",
	defaults: {
        disable: 0,
		value: 0,
        callback: null,
        from : ''
	}
});

//Auto load
$(document).ready(function() {
	$('#user_menu').userbox();
});

})(jQuery);

// Small hack
function none() { return; }