// Javascript Ninja log function by John Resig
function log() { 
    try {
        console.log.apply( console, arguments ); 
    } catch(e) {
        try { 
            opera.postError.apply(opera, arguments);
        } catch(e){ 
        
        }
    }
}

// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
    var rest = this.slice((to || from) + 1 || this.length);
    this.length = from < 0 ? this.length + from : from;
    return this.push.apply(this, rest);
};

function isCarte() {
    return $('input:radio[name=menutype]:checked').val() == 2;
}

function destroyPlatesGroup($plateGroupElement) {
    $plateGroupElement.remove();
    
    var $groups = $('.plates-group');
    
    $groups.each(function (index) {
        
        $(this).find('input').each(function (idx) {
            
            if (idx == 0) {
                // label
                $(this).attr('name', 'fPlateGroups[' + index + '][label]');
                $(this).attr('value', 'group_' + (index + 1));
            } else {
                
                if (isCarte() && idx == 1) {
                    // nothing
                } else {
                    // plate
                    $(this).attr('name', 'fPlateGroups[' + index + '][plates][]');
                }
                
            }
        });
    });
}

function addDroppableSpace($listElement) {
    var $li = $('<li>');
    $li.droppable({
        activeClass: 'li-active',
        hoverClass: 'li-drophover',
        drop: function(event, ui) {
            onPlateDrop(event, ui);
        }
    });        
    $listElement.append($li);
}

function addPlateToPlateGroup($plateSpace, oPlate) {
    if (!$plateSpace.children().size()) {
        var $listElement = $plateSpace.parent();
        addDroppableSpace($listElement);
    }
    
    var $button = $('<button>X</button>');
    $button.click(function () {
        $plateSpace.remove();
    });
    
    var id = oPlate.id;
    var groupNumber = $plateSpace.parent().parent().data('group-number');
    
    var plateSpan = '<span>'+ oPlate.name +'</span>';
    var plateInputName = 'fPlateGroups[' + groupNumber + '][plates][]';
    var plateInput = '<input type="hidden" \
        name="'+plateInputName+'" value="'+id+'" />';
    
    $plateSpace.html(plateSpan + plateInput);
    
    if (isCarte()) {
        $plateSpace.prepend('<input type="text" class="fPrice" name="fPrice['+id+']" value="10" size="6" />');
    }
    $plateSpace.prepend($button);
    
}


function onPlateDrop(event, ui) {
    
    var $target = $(event.target);
    var $draggable = ui.draggable;
    
    var oPlate = {
        id: $draggable.data('plate-id'),
        name: $draggable.text()
    }
    
    addPlateToPlateGroup($target, oPlate);
}


function filterPlatesWithTag() {
    var ul = $('ul#tags');
    var tagsSelectedIds = ul.data('tags.selected.ids');
    
    $('#plates-list li').each(function () {
        
        var tags = $(this).data('plate').tags;
        $(this).css('display', 'block');
        
        for (var i = 0; i < tagsSelectedIds.length; i++) {
            
            var tagId = parseInt(tagsSelectedIds[i]);
            var index = $.inArray(tagId, tags);
            
            if (index == -1) {
                $(this).css('display', 'none');
                break;
            }
            
        }
            
    });
}






function buildPlateGroup(options) {

    // options
    var wrapperClass = options.wrapperClass;
    var platesListClass = options.platesListClass;
    var inputName = options.inputName;
    var groupNumber = options.groupNumber;
    var appendTo = options.appendTo;
    
    // wrapper
    var $divPlateGroup = $('<div>');
    $divPlateGroup.addClass(wrapperClass);
    $divPlateGroup.data('group-number', groupNumber);
    $divPlateGroup.click(function (event) {
        
        $('.'+wrapperClass).removeClass('selected');
        $(this).addClass('selected');
        
    });
    $divPlateGroup.trigger('click');
    
    // plate group label input
    var $inputLabel = $('<input>');
    $inputLabel.attr('type', 'text');
    $inputLabel.attr('name', inputName + '[' + groupNumber + '][label]');
    $inputLabel.attr('size', '20');
    $inputLabel.attr('value', 'groupe ' + (groupNumber + 1));
    
    // plates list
    var $ul = $('<ul>');
    $ul.addClass(platesListClass);
    addDroppableSpace($ul);
    
    // close button
    var $button = $('<button>');
    $button.text('X');
    $button.click(function (event) {
        event.preventDefault();
        destroyPlatesGroup($divPlateGroup);
    });
    
    // minimize button
    var $minimize = $('<button>');
    $minimize.text('_');
    $minimize.toggle(function () {
        $ul.css('display', 'none');
    }, function () {
        $ul.css('display', 'block');
    });
    
    
    $divPlateGroup.append($button);
    $divPlateGroup.append($minimize);
    
    $divPlateGroup.append($inputLabel);
    $divPlateGroup.append($ul);
    
    $divPlateGroup.appendTo(appendTo);
    
}

function addPlateGroupAction(event) {
    event.preventDefault();
    
    var plateGroupSelector = 'plates-group';
    
    var nb = $('.' + plateGroupSelector).length;
    buildPlateGroup({
        wrapperClass: plateGroupSelector,
        platesListClass: 'plates',
        inputName: 'fPlateGroups',
        groupNumber: nb,
        appendTo: $('#plate-groups-wrapper')
    });
    
}


$(document).ready(function() {
    
    // create/modify menu
    $('#btn-add-group').click(addPlateGroupAction);
    
    $('#plates-list li').draggable({ 
        revert: true, 
        helper: function( event ) {
            return $("<div class=\"ui-widget-header\">I'm a custom helper</div>");
        },
        cursor: 'crosshair'
    });
    
    if ($('#plates-list').size() == 1) {
        
        
        $.getJSON('/admin/plates/list', function (data) {
            
            $.each(data.plates, function(index, obj) {
                
                var li = $('<li>' + obj.name + '</li>');
                li.data('plate-id', obj.id);
                li.data('plate', obj);
                

                $('#plates-list').append(li);
            });
            
            $('#plates-list li').draggable({ 
                revert: true, 
                helper: function( event ) {
                    
                    var id = $(this).data('plate-id');
                    
                    var helper = $(this).clone();
                    
                    return helper;
                },
                cursor: 'crosshair'
            });
            
            $('#plates-list li').dblclick(function (event) {
                
                $plateSpace = $('.plates-group.selected').find('.plates').children().last();
                var oPlate = {
                    id: $(this).data('plate-id'),
                    name: $(this).text()
                }
                addPlateToPlateGroup($plateSpace, oPlate);
            });
            
        });
    }
    
    
    
    
    $('#tags button').toggle(
        function () {
            $(this).addClass('selected');
            var ul = $(this).parents('ul#tags');
            var tagsSelectedIds = ul.data('tags.selected.ids');
            
            
            var id = $(this).attr('id').split('-')[1];
            
            
            if (tagsSelectedIds == undefined) {
                ul.data('tags.selected.ids', [id]);
            } else {
                
                tagsSelectedIds.push(id);
                ul.data('tags.selected.ids', tagsSelectedIds);
            }
            
            filterPlatesWithTag();
        }, 
        function () {
            $(this).removeClass('selected');
            var id = $(this).attr('id').split('-')[1];
            var ul = $(this).parents('ul#tags');
            var tagsSelectedIds = ul.data('tags.selected.ids');
            var index = $.inArray(id, tagsSelectedIds);
            
            if (index != -1) {
                tagsSelectedIds.remove(index);
                ul.data('tags.selected.ids', tagsSelectedIds);
            }
            filterPlatesWithTag();
        }
        );
    
    
    $('#btn-unselect-tags').click(function () {
        $('#tags button.selected').trigger('click');
    });
    
    
    
    /*
    $('#color-element').ColorPicker({
        color: '#ffffff',
        onShow: function (colpkr) {
            $(colpkr).fadeIn(200);
            return false;
        },
        onHide: function (colpkr) {
            $(colpkr).fadeOut(200);
            return false;
        },
        onChange: function (hsb, hex, rgb) {
            $('#color-element').val(hex);
        }
    });
    */
    
    $('#toggle').toggle(
        function () {
            $div = $(this).parents('.subform').find('div').first();
            $div.css('display', 'none');
            
            $(this).text('>');
        },
        function () {
            $div = $(this).parents('.subform').find('div').first();
            $div.css('display', 'block');
            
            $(this).text('v');
        }
        );
        
    $('.menu-groups-list-item h4').toggle(
        function () {
            $(this).siblings('.menus-list').css('display', 'none');
            $(this).find('span').text('+');
        }, 
        function () {
            $(this).siblings('.menus-list').css('display', 'block');
            $(this).find('span').text('-');
        }
        );
    $('.menu-groups-list-item h4').trigger('click');
    
    
    
   
    if ($('#menuid').size() != 0 && $('#menuid').val() != '') {
        
        var menuid = $('#menuid').val();
        
        $.getJSON('/admin/menus/getmenu/id/' + menuid, function (data) {
            
            $.each(data.plategs, function (index, plateg) {
                
                var plateGroupSelector = 'plates-group';
    
                var nb = $('.' + plateGroupSelector).length;
                buildPlateGroup({
                    wrapperClass: plateGroupSelector,
                    platesListClass: 'plates',
                    inputName: 'fPlateGroups',
                    groupNumber: nb,
                    appendTo: $('#plate-groups-wrapper')
                });
                
                $.each(plateg.plates, function (ind, plate) {
                    $plateSpace = $('.plates-group.selected').find('.plates').children().last();
                    addPlateToPlateGroup($plateSpace, plate);
                });
                
            });
            
        });
        
    }
   
   
   
    $('select[name=datetype]').change(function (event) {
        
        var value = $(this).val();
        var $input = $(this).siblings('input[name=datecustom]').eq(0);
        $input.datepicker({dateFormat: 'yy-mm-dd'});
        if (value == 4) {
            $input.css('display', 'inline');
        } else {
            $input.css('display', 'none');
        }
        
    });
    
    
    var moveSide = function (startPosition, duration, easing) {
        var scrollTop = $(window).scrollTop();
        var navOffset = $("#side-navigation").position();
        var offsetTop = $("#side-navigation").offset().top;
        
        var tolerance = 20;
        
        var newTop = 0;
        
        if (scrollTop > offsetTop) {
            // too high
            newTop = navOffset.top + scrollTop - offsetTop;
            $('#side-navigation').stop().animate({top: newTop + tolerance + "px"}, duration, easing);
        }
        
        if (scrollTop < offsetTop) {
            // too low
            newTop = navOffset.top - offsetTop + scrollTop;
            
            if (newTop > startPosition.top) {
                // move up
                $('#side-navigation').stop().animate({top: newTop + tolerance + "px"}, duration, easing);
            } else {
                // move up to the top (re-position if we scrolled too fast)
                $('#side-navigation').stop().animate({top: startPosition.top + "px"}, duration, 'easeOutBack');
            }
        }
    };
    
    if ($("#side-navigation").size() == 1) {
        var navPosition = $("#side-navigation").position();
        $(window).scroll(function() {
        
            moveSide(navPosition, 1000, 'easeInOutSine');

        });
    }
    
    
    
    $('#btn-menus-banquet, #btn-menus-restaurant, .nav-to, .sub-nav a').click(function (event) {
    	event.preventDefault();
    	if ($(this).attr('id') == 'nav-to-bottom') {return;}
    	var href = $(this).attr('href');
    	
    	var $element = $(href);
    	var scroll = $element.offset().top;
    	
    	$('html,body').stop().animate({scrollTop: scroll}, 1000, 'easeInOutSine');
    });
    
    
    $('#side-navigation li').hover(
    	function (event) {
    		var $ul = $(this).find('ul').eq(0);
    		
    		$ul.width(0);
    		$ul.css('left', '0px');
    		$ul.css('display', 'block');
    		
    		$ul.stop().animate({width: 231, left: '-175px'}, 300, 'easeInOutCubic');
    		
    	},
    	function (event) {
	    	var $ul = $(this).find('ul').eq(0);
    		$ul.stop().animate({width: 0, left: '5px'}, 400, 'easeInOutCubic');
    	
    	
    	}
    );
    
    var interval = 0;
    
    $('#nav-to-bottom').click(function (event) {
    	var scroll = $(window).scrollTop();
    	$('html,body').stop().animate({scrollTop: scroll + 400}, 1000, 'easeInOutSine');
        
        return event.preventDefault();
    });
    
    var first = true;
    
    $('#btn-diaporama').overlay({
        mask: {
            color: '#000',
            loadSpeed: 200,
            opacity: 0.8
	},

	closeOnClick: true,
        onLoad: function() {
            $('#diaporama').insertAfter('#exposeMask');
            if (first) {
                $('#diaporama').galleria({
                
                });
                first = false;
            }
            
            //var gallery = Galleria.get(0);
            
	}
    });
    
    
    $('#btn-diaporama').click(function (event) {
        event.preventDefault();
        
        
        $('#btn-diaporama').overlay().load();
        
    });
    
    Galleria.loadTheme('/js/themes/classic/galleria.classic.min.js');
    
    
   
});














