$(function(){
    // View selected image
    if ($('select.viewimage').length > 0) {
        $('select.viewimage').bind('change keyup', function(e) {
            if ($(this).val() != '') {
                $('.showimage').html('<img alt="" src="' + $(this).attr('data') + $(this).val() + '">');
            } else {
                $('.showimage').html('-');
            }
        });
    } 
});

$.extend({
    cncAdmin: function() {
        $('table').tablesorter({sortList: [[1,0]]});
        $('input.date').datepicker({
            changeMonth: true,
            changeYear: true,
            showOtherMonths: true,
            selectOtherMonths: true,
            dateFormat: 'mm/dd/yy'
        });
        var dateRange = $('input.date-range').datepicker({
            changeMonth: true,
            changeYear: true,
            showOtherMonths: true,
            selectOtherMonths: true,
            dateFormat: 'mm/dd/yy',
			onSelect: function(selectedDate) {
				var option = this.id == 'start' ? "minDate" : "maxDate",
                instance = $(this).data("datepicker"),
                date = $.datepicker.parseDate(
                    instance.settings.dateFormat ||$.datepicker._defaults.dateFormat,
                    selectedDate,
                    instance.settings
                );
				dateRange.not(this).datepicker( "option", option, date );
			}
        });
        $('.alert-message .close').click(function(e) {
            $(this).parent().slideUp();
            e.preventDefault();
        });
        if ($('input.sluggable').length > 0) {
            $('input.sluggable').blur(function() {
                if ($('input#slug').val() == '') {
                    $.getJSON(baseUrl + '/sluggable', {q: $(this).val()}, function(data) {
                        if (data['slug'] !== undefined) {
                            $('input#slug').val(data['slug']);
                        }
                    })
                }
            });
        }
        if ($('select.viewimage').length > 0) {
            $('select.viewimage').bind('change keyup', function(e) {
                if ($(this).val() != '') {
                    $(this).siblings('.showimage').html('<img alt="" src="' + $(this).attr('data') + $(this).val() + '">');
                } else {
                    $(this).siblings('.showimage').html('');
                }
            });
        }
    },
    triggerMessage: function (wrapper, message, type) {
        $.clearMessage(wrapper);
        $(wrapper).before('<div class="alert-message ' + type + '">' + message + '</div>');
    },
    clearMessage: function (wrapper) {
        $(wrapper).siblings('.alert-message').remove();
    },
    cncConfim: function() {
        return confirm('Are you sure you want to proceed?');
    },
    cncAddRow: function(source) {
        var obj = $(source).clone(true);
        obj.removeAttr('id').removeClass('hidden');
        obj.children('select, input').val('');
        obj.children('.showimage').html('');
        obj.prepend('<a class="ui-icon ui-icon-closethick right" onclick="$.cncRmvRow(this)"></a>');
        $(source).parent().append(obj);
    },
    cncRmvRow: function(source) {
        $(source).parent().remove();
    },

    cncUpload: function(source, dest, type) {
        if ($(source).length > 0) {
            var sizeLimit = 4194304;
            var fileExt = '*.jpg;*.jpeg;*.png;*.gif';
            var fileDesc = 'Image (.JPG, .JPEG, .PNG, .GIF)';

            $(source).uploadify({
                'uploader' : baseUrl + '/assets/swf/uploadify.swf',
                'script' : baseUrl + '/uploadify',
                'scriptData' : {
                    'session' : $('#session').val(),
                    'type' : type
                },
                'cancelImg' : baseUrl + '/assets/icons/cancel.png',
                'buttonText' : 'BROWSE FILES',
                'fileDataName' : 'Filedata',
                'fileExt' : fileExt,
                'fileDesc' : fileDesc,
                'multi' : true,
                'queueSizeLimit' : 5,
                'sizeLimit' : sizeLimit,
                'auto' : true,
                'onError'     : function (event,ID,fileObj,errorObj) {
                    triggerMessage('body', errorObj.type + ' Error: ' + errorObj.info, 'error');
                },
                'onSelectOnce': function(event,data) {
                    $(source + 'Uploader').after('<span class="waiting right">Please wait...</span>')
                },
                'onComplete': function(event, ID, fileObj, response, data) {
                    var obj = $.parseJSON(response);
                    if ((obj !== undefined) && (obj != '')) {
                        $(dest).append(obj);
                    }
                },
                'onAllComplete' : function(event,data) {
                    $(source + 'Uploader').next('.waiting').remove();
                    $.cncSortable(dest);
                }
            });

        }
    },
    cncSortable: function(source) {
        if (($(source).length > 0) && ($(source).children('.item').length > 0)) {
            $(source).sortable({
                opacity: 0.6,
                cursor: 'move',
                axis: 'x',
                helper: 'clone'
            });
        }
    },
    cncSortableDelete: function(source) {
        $(source).parents('.item').remove();
        return false;
    },
    cncSlides: function(base, group, selector) {
        if (($(base).length > 0) && ($(base + ' ' + group + ' ' + selector).length > 1)) {
            $(base).data('flag', 0);
            setInterval("cascadeFadeInOut('" + base + "', '" + group + "', '" + selector + "')", 5000);
        }
    }
});

// See: http://jonraasch.com/blog/a-simple-jquery-slideshow
function cascadeFadeInOut(base, group, selector) {
    var numChildren = $(base).children(group).length;
    var selected = $(base).children(group).eq(parseInt($(base).data('flag')) % numChildren);
    $(base).data('flag', parseInt($(base).data('flag')) + 1);

    var $active = selected.children(selector + '.active');
    if ( $active.length == 0 ) $active = selected.children(selector + ':last');
    var $next =  $active.next().length ? $active.next() : selected.children(selector + ':first');
    $active.addClass('last-active');
    $next.css({
        opacity: 0.0
    })
    .addClass('active')
    .animate({
        opacity: 1.0
    }, 1000, function() {
        $active.removeClass('active last-active');
    });
}
