$(function(){
    
    $('uploader').livequery(function(){
        $(this).uploader();
    });

    $('.edit_media_item_form_vfolder').live('submit', function(e) {
        e.preventDefault();
        var $f = $(this),   
            data = $f.serialize();
        $.post('/ajax/media/save-item', data, function(json) {
           console.log(json); 
        });
    });


    $(".round-corners").corner("tr br bl tl 4px");
    $(".tabs ul li a,.tabs ul li").corner("top 4px");
});

function login_skybox(url,historyOff) {
    if (!url) url = window.location.href;
    skybox('/login/login-skybox?url='+url,500,null,focus_username,historyOff);
}
var focus_username = function () {
    document.getElementById('login_username').focus();
}
function login_submit(theform,url) {
    document.getElementById('login_loading').innerHTML = '<div align="center"><img src="/images/loading.gif"><br /><br />authenticating...</div>';
    theform.action = '/login/authenticate';
    theform.method = 'post';
    AjaxRequest.submit(theform,{
        'onSuccess' : function(req){
            //alert('*' + req.responseText + '*');
            if (trimString(req.responseText)=='true') {
                if ( !url ) url = window.location.href;
                tmp = url.indexOf('?logout=1');
                if ( tmp > -1 ) url = url.substring(0,tmp);
                window.location.href = url;
            } else if (trimString(req.responseText)=='false') {
                document.getElementById('login_password').value = '';
                document.getElementById('login_loading').innerHTML = '';
                document.getElementById('incorrect_login').innerHTML = '<font color="red">Incorrect login.  Try again.</font>';
            } else {
                document.getElementById('login_password').value = '';
                document.getElementById('login_loading').innerHTML = '';
                document.getElementById('incorrect_login').innerHTML = req.responseText;
            }
        }
    });
}

function login_skybox2(url,historyOff) {
    if (!url) url = window.location.href;
    skybox('/utility/login/login-skybox?url='+url,400,null,focus_username,historyOff);
}
function login_submit2(theform,url) {
    $('#login_loading').html('<img src="/images/loading.gif">');
    $.post(
        '/login/authenticate',
        $(theform).serialize(),
        function (data) {
            if (trimString(data)=='true') {
                if ( !url ) url = window.location.href;
                tmp = url.indexOf('?logout=1');
                if ( tmp > -1 ) url = url.substring(0,tmp);
                window.location.href = url;
            } else if (trimString(data)=='false') {
                $('#login_password').val('');
                $('#login_loading').html('');
                $('#incorrect_login').html('Incorrect login.  Try again.');
            } else {
                $('#login_password').val('');
                $('#login_loading').html('');
                $('#incorrect_login').html(data);
            }
        }
    );
}

function activation(ide) {
    AjaxRequest.post({
        'url' : '/login/activation_email?ide='+ide,
        'onSuccess':function(req){
            if (!req.responseText) {
                document.getElementById('incorrect_login').innerHTML = '<font color="green">Activation email sent.</font>';
            } else {
                document.getElementById('incorrect_login').innerHTML = req.responseText;
            }
        }
    });
}

function forgotpw_submit(theform) {
    theform.action = '/login/forgotpw';
    theform.method = 'post';
    AjaxRequest.submit(theform,{
        'onSuccess':function(req){
            document.getElementById('skybox').innerHTML = req.responseText;
        }
    });
}

function forgotpw() {
    AjaxRequest.post({
        'url' : '/login/forgotpw',
        'onSuccess':function(req){
            document.getElementById('skybox').innerHTML = req.responseText;
            focus_username();
        }
    });
}

function back_to_login() {
    AjaxRequest.post({
        'url' : '/login/login-skybox',
        'onSuccess':function(req){
             document.getElementById('skybox').innerHTML = req.responseText;
             focus_username();
        }
    });
}

function logout(url) {
    AjaxRequest.post({
        'url' : '/login/logout',
        'onSuccess':function(req){
            window.location.href = url;
        }
    });
}

function slideshow(media_vfolder_ide) {
    skybox("/slideshow/" + media_vfolder_ide,640);
}

function replace_with_load($div, w, h) {
    var id = Math.floor(Math.random()*101);
    var id_attr = 'id="'+ id +'"';
    if (w) w = ' width="' + w + '" ';
    if (h) h = ' height="' + h + '" ';
    $div.html('<div class="loading" ' + id_attr + '><img src="/images/loading2.gif" ' + w + h + '/></div>');
    return id;
}

(function($) {

    // UPLOADER
    $.fn.uploader = function ( method ) {
        var settings = {
            'vfolder' : '',
            'width' : 100,
            'height' : '',
            'limit' : 0,
            'empty' : '',
            'sort' : false,
            'db_field' : '',
            'db_row_ide' : '',
            'media_item_ide' : '',
            'crop' : '',
            'crop-gravity' : ''
        }
        var methods = {
            init : function(options) {
                return this.each(function() {
                    var up = this,
                        $this = $(up),
                        opts = {},
                        curr_sets = settings,
                        attrs = $this[0].attributes,
                        load_id = replace_with_load($this);
                    
                    var i = attrs.length - 1;
                    while (i >= 0) {
                        var name = attrs[i].nodeName,  val = attrs[i].nodeValue;
                        opts[name] = val;
                        i--;
                    }

                    $.extend(curr_sets, opts);
                    $.extend(curr_sets, options);

                    if (settings.width == 'auto') settings.width = $this.parent().width() - 8; // border is 4px
                    if (!settings.vfolder) {
                        $this.html('<p><strong>Uploader Error: No vfolder set.</strong></p>');
                        return;
                    };
                    methods.setContextMenu();
                    $.ajax({
                        type: 'POST', 
                        url: '/ajax/media/uploader-gallery', 
                        data: curr_sets, 
                        context: up,
                        success:function(data) {
                            var $up = $(up);
                            $('.loading', $up).remove();
                            $up.prepend(data);
                            methods.bindContextMenu($up);
                            methods.bindUploader($up);
                        }
                    });
                    var id = Math.floor(Math.random()*1110);
                    $this.append('<div class="upload_button_cont"><button class="choose_file small" type="button" id="choose_' + id + '">Upload Files</button></div>');
                    $this.append('<div class="upload_status"></div>');
                    if (curr_sets.sort) methods.doSort($this);
                });
            },
            bindUploader: function($up) {
                var $input = $('.choose_file', $up),
                    id = $input.attr('id'),
                    $status = $('.upload_status', $up),
                    data = {
                        vfolder: $up.attr('vfolder'),
                        db_field: $up.attr('db_field'),
                        db_row_ide: $up.attr('db_row_ide')
                    },
                    browse_button = id,
                    upload_button = 'upload_' + id.split('_')[1],
                    container = $input.closest('.upload_button_cont'),
                    container_id = 'uploader_container_' + browse_button;
                
                container.attr('id', container_id);
		
		for (var i in $input.get(0)) {
			if (i.match(/Plupload/)) return;
		}
	
                var uploader = new plupload.Uploader({
                    runtimes: 'html5,flash,html4',
                    browse_button: browse_button,
                    container: container_id,
                    url: '/ajax/media/upload',
                    flash_swf_url: '/lib/plupload/js/plupload.flash.swf'
                });

                uploader.bind('FilesRemoved', function(up, files){
                    $.each(files, function(i, file) {
                        var $f = $('#' + file.id);
                        if ($f.length) $f.remove();
                    });
                });
                uploader.bind('UploadFile', function(up, files) {
                    up.settings.multipart_params = data;
                });
                uploader.bind('UploadProgress', function(up, file) {
                    $('#' + file.id + ' .ui-icon').removeClass('ui-icon-minus').addClass('ui-icon-transfer-e-w');
                });
                uploader.bind('FileUploaded', function(up, file, info) {
                    var r = $.parseJSON(info.response);
                    var $ic = $('#' + file.id + ' .ui-icon');
                    var $file = $('#' + file.id);
                    if (r.status != 'OK') {
                        up.stop();
                        alert(r.errors);
                        // $ic.removeClass('ui-icon-transfer-e-w').addClass('ui-icon-alert');
                    } else {
                        // $ic.removeClass('ui-icon-transfer-e-w').addClass('ui-icon-check');
                        $file.css('backgroundColor', 'lime');
                        setTimeout(function() {
                            $file.fadeOut('fast', function() {
                                $file.remove();
                            });
                        }, 100);
                    }
                });
                uploader.bind('UploadComplete', function(up) {
                    $up.uploader(); 
                });
                uploader.init();
                uploader.bind('FilesAdded', function(up, files) {
                    var do_upload = false;
                    $.each(files, function(i, file) {
                        $status.append('<div id="' + file.id + '" class="pluploadUploadFile"><a class="ui-icon ui-icon-minus"></a>' + file.name + '</div>');
                        do_upload = true;
                    });
                    if (do_upload) uploader.start();
                });
                $('.ui-icon', $up).live('click', function() {
                    if ($(this).hasClass('ui-icon-minus')) {
                        var id = $(this).closest('.pluploadUploadFile').attr('id');
                        uploader.removeFile(uploader.getFile(id));
                    }
                    return false; 
                });
            },
            setContextMenu : function() {
                if (!$('#mediaItemContextMenu').length) {
                    var contextMenu = '<ul id="mediaItemContextMenu" class="contextMenu">';
                    contextMenu += '<li class="properties"><a href="#view">View Image</a></li>';
                    // contextMenu += '<li class="edit"><a href="#properties">Properties</a></li>';
                    contextMenu += '<li class="delete"><a href="#delete">Delete Image</a></li>';
                    contextMenu += '</ul>';
                    $('body').append(contextMenu);
                }
            },
            doSort : function($uploader) {
                if ($.isFunction($.ui.sortable)) {
                    $uploader.append('<p class="small mediaSortEnabled"><strong>Sort Enabled:</strong> You can drag the image and re-order their them.</p>');
                    var $gallery =  $('.mediaItemGallery', $uploader);
                    if ($gallery.length) {
                        $gallery.sortable({
                            items: 'li.mediaItem',
                            update: function() {
                                var order = $gallery.sortable('serialize');
                                $.post('/ajax/media/set-items', order, function(json) {
                                    if (json.status != 'OK') {
                                        alert(json.errors);
                                    }
                                });
                            }
                        });
                    }
                } else {
                    $.error('Sortable in jQuery UI not loaded. Sort disabled.');
                }
            },
        bindContextMenu : function($uploader) {
            $('.mediaItem[ide]', $uploader).contextMenu( {menu: 'mediaItemContextMenu'}, 
                function(action, el, pos) {
                    if ($('html').hasClass('ie7')) action = action.split('#')[1]; // otherwise the action is the full URL
                    var contextFunctions = {
                        'properties' : function(el) {
                            skybox('/ajax/media/edit-item', { media_item_ide : $(el).attr('ide') });
                            return false;
                        },
                        'view' : function(el) {
                            var ide = $(el).attr('ide');
                            if (!!ide) {
                                window.open('/ajax/media/full-view/' + ide, 'new-window');
                            } else {
                                alert('Currently unavailable. The image is on a different server.');
                            }
                        },
                        'delete' : function(el) {
                            var ide = $(el).attr('ide'),
                                $el = $('.mediaItem[ide=' + ide + ']:visible');
                            if (!ide || !$el.length) return;
                            if (!confirm('Are you sure you want to delete this image?')) return;
                            var $up = $el.closest('uploader'),
                                data = {
                                    'db_row_ide' : $up.attr('db_row_ide'),
                                    'db_field' : $up.attr('db_field')
                                };
                            $.post('/ajax/media/delete-media-item/' + ide, data, function(json) {
                                if (json.status != 'OK') {
                                    alert(json.errors);
                                } else {
                                    if ($up.length) $up.uploader();
                                    else $el.remove();
                                }
                            });
                        }
                    };
                    if (!!contextFunctions[action]) contextFunctions[action](el);
                });
            }
        }

        if (methods[method]) {
            return methods[method].apply(Array.prototype.slice.call( arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + 'does not exist in UPLOADER');
        }
    }

}) (jQuery);

