var Cagi_ItemActions = {

    options: {
        currentItemContainer: '#currentItem',
        selectboxInput: '.select-my-items-container',
        selectboxWrapper: '.selectbox-wrapper-custom'
    },

    actions: {
        share: {
            element: '#shareItem',
            handler: function() {Cagi_ItemActions.share()}
        },
        cancelShare: {
            element: '.cancelShare',
            handler: function() {Cagi_ItemActions.cancelShare(this)}
        },
        prepareRemove: {
            element: '#prepareRemove',
            handler: function() {Cagi_ItemActions.prepareRemove(this)}
        },
        cancelRemove: {
            element: '.cancelRemove',
            handler: function() {Cagi_ItemActions.cancelRemove(this)}
        },
        remove: {
            element: '.removeItem',
            handler: function() {Cagi_ItemActions.remove(this)}
        },
        renew: {
            element: '#renewItem',
            handler: function() {Cagi_ItemActions.renew()}
        },
        draft: {
            element: '#draftItem',
            handler: function() {Cagi_ItemActions.draft()}
        },
        edit: {
            element: '#editItem',
            handler: function() {Cagi_ItemActions.edit()}
        }
    },


    currentWrapperId: 0,

    init: function(options) {
        this.initCorners();
        this.initCustomSelectbox();
        this.bindEvents();
		this.trackOuterClick();
    },

    initCorners: function() {
        // corner support
		$('.cornered-delete').wrap('<div class="delete-item-outer"></div>')
                             .corner("round 5px").parent().corner("round 5px");
		$('.cornered-link-to').wrap('<div class="link-to-item-outer"></div>')
                              .corner("round 5px").parent().corner("round 5px");
    },

    initCustomSelectbox: function() {
        $(Cagi_ItemActions.options.selectboxInput).click(function () {
            var itemId = $(this).children(".selectbox-custom").attr('tabindex'); // XXX change tabindex to another attr
            $(Cagi_ItemActions.options.currentItemContainer).val(itemId);
            var position = $(this).offset();
			var wrapper = $('#container').offset();
            var selectbox = $(Cagi_ItemActions.options.selectboxWrapper);

            if (selectbox.is(":visible") && itemId == Cagi_ItemActions.currentWrapperId) {
				$(Cagi_ItemActions.options.selectboxWrapper).css({
					'display' : 'none'
				});
                return;
            }
			if ($(Cagi_ItemActions.options.selectboxWrapper).is(':hidden') || Cagi_ItemActions.currentWrapperId != itemId)  {
                Cagi_ItemActions.currentWrapperId = itemId;
				$(Cagi_ItemActions.options.selectboxWrapper).css({
					'display' : 'block',
					'left' : position.left-wrapper.left,
					'top' : position.top-wrapper.top + parseInt($(Cagi_ItemActions.options.selectboxInput).css('height'))
				});
			} else {
				$(Cagi_ItemActions.options.selectboxWrapper).css({
					'display' : 'none'
				});
			}
		});
    },
	
//	trackOuterClick : function() {
//		$(document).click( function(event){			
//			if( $(event.target).closest(Cagi_ItemActions.options.selectboxWrapper).length) {			
//				if($(Cagi_ItemActions.options.selectboxWrapper).is(':visible')) {
//					//alert('visible');
//					$(Cagi_ItemActions.options.selectboxWrapper).toggle();
//				} else {
//					$(Cagi_ItemActions.options.selectboxWrapper).toggle();
//					//alert('hiding');
//				}
//				event.stopPropagation();
//			} else {
//				$(Cagi_ItemActions.options.selectboxWrapper).toggle();
//				//alert('hiding2');
//			}
//			event.stopPropagation();
//		});
//	},

	trackOuterClick : function() {
		$(document).click(function(event){			
			if($(event.target).closest(Cagi_ItemActions.options.selectboxWrapper).length || $(event.target).closest(Cagi_ItemActions.options.selectboxInput).length) {
					//alert('wrapper');
					return;
				}
			//alert('nowrapper');
			$(Cagi_ItemActions.options.selectboxWrapper).hide();
			event.stopPropagation();
		});
	},
	
    bindEvents: function() {
        for (var k in Cagi_ItemActions.actions) {
            $(Cagi_ItemActions.actions[k].element).click(Cagi_ItemActions.actions[k].handler)
        }
    },

    share: function(scope) {
        var id = $(this.options.currentItemContainer).val();
        var item = $("#item" + id);

        if ($(".is-item-active", item).val() != 1) {
            alert("You can't share not active item.");
            return false;
        }

        item.wrap('<div class="link-to-item-outer"></div>')
            .addClass('link-to-item')
            .addClass('cornered-link-to')
            .corner("round 5px").parent().corner("round 5px");
        
        $(this.options.selectboxWrapper).hide();
    },

    remove: function(scope) {
        var id = $(scope).parents("a").attr('rel');
        location.href = '/user/item/delete/id/' + id;
        return false;
    },

    renew: function() {
        var id = $(this.options.currentItemContainer).val();
        location.href = '/user/item/renew/id/' + id;
        return false;
    },

    draft: function() {
        var id = $(this.options.currentItemContainer).val();
        location.href = '/user/item/draft/id/' + id;
        return false;
    },

    edit: function() {
        var id = $(this.options.currentItemContainer).val();
        location.href = '/user/item/edit/id/' + id;
        return false;
    },

    prepareRemove: function(scope) {
        var id = $(this.options.currentItemContainer).val();
        var item = $("#item" + id);
        if (item.hasClass('link-to-item')) {
            $("#item" + id + " .cancelShare").trigger("click");
        }
        item.wrap('<div class="delete-item-outer"></div>')
            .addClass('cornered-delete')
            .addClass('delete-item')
            .corner("round 5px").parent().corner("round 5px")

        $(this.options.selectboxWrapper).hide();
    },

    cancelRemove: function(scope) {
        var id = $(scope).parents("a").attr('rel');
        var item = $("#item" + id);

        item.unwrap()
            .removeClass('cornered-delete')
            .removeClass('delete-item')
            .corner("round 5px").parent().corner("round 5px");
        
        return false;
    },

    cancelShare: function(scope) {
        var id = $(scope).parents("a").attr('rel');
        var item = $("#item" + id);

        item.unwrap()
            .removeClass('link-to-item')
            .removeClass('cornered-link-to');
        
        return false;
    }
}

