var Photo = new Object();

// php session id, для авторизации
Photo.session_id=null;

// Флаг режима редактирования фотографии
Photo.edit=false;

// закачалось ли фото
Photo.uploaded=false;

// id фотографии
Photo.id = null;

// выбранная категория в списке фото (начальный слайд Cycle)
Photo.subcategory_slide=null;

// функция инициализации аплоадера
Photo.uploaderInit = function (selector) {
    $("#alt_uploader").show();
    if(FlashDetect.installed)
    $(selector).fileUpload ({
            'uploader'  : '/js/uploadify/uploader.swf',
            'script'    : '/execplugin/',
            'cancelImg' : '/js/uploadify/cancel.png',
            'auto'      : true,
            'folder'    : 'karamba',
            'fileDataName' : 'photo_upload',
            'multi': false,
            'fileDesc' : 'JPEG файлы фотографий',
            'fileExt' : '*.jpg;*.jpeg;*.JPEG;*.JPG;',
            'buttonImg' : '/img/button.png',
            'width': 126,
            'height': 34,
            'sizeLimit' : 600*1024,
            'scriptData': {'plg':'photo', 'plugFunc': 'uploadPhoto', 'session_id':Photo.session_id},
            'onError': function(event, queueID, fileObj, errorObj) {
                alert("Произошла ошибка при загрузке фотографии.\n Тип ошибки: "+errorObj.type+"\nПроверьте, соблюдены ли Вами все требования к фотографии.\nОтключите прокси или воспользуйтесь альтернативным загрузчиком.");
            },
            'onComplete' : function (event,queueID,fileObj,response){
                Photo.uploaded=false;
                $("#upload_result").text('');
                $("#upload_preview").attr("src", "/img/pic_load.jpg");
                $(".upload_gostep2").hide();
                switch(parseInt(response))
                {
                    case 1:
                        // фото закачано, обновим превью
                        $("#upload_preview").attr("src", "/i/0_upload_preview.jpg?"+Math.random());
                        // покажем кнопку перехода к шагу 2
                        $(".upload_gostep2").show();
                        Photo.uploaded=true;
                    break;

                    case -1:
                        $("#upload_result").text('Размер фотографии превышает максимально допустимый.');
                    break;

                    case -2:
                        $("#upload_result").text('Фото, которое вы загрузили, не является панорамой!');
                    break;

                    case -3:
                        $("#upload_result").text('Не удалось идентифицировать вас как авторизированного пользователя. Попробуйте выйти и войти в систему.');
                    break;

                    case -4:
                        $("#upload_result").text('Фото слишком маленькое. Выберите что-нибудь по-больше.');
                    break;

                    case -5:
                        $("#upload_result").text('Вы не вошли в систему.');
                    break;

                    case -6:
                        $("#upload_result").text('Лимит закачки фотографий в день исчерпан');
                    break;
                }
            }
        });
}

// загрузка подкатегорий по ID в UL список
Photo.getSubcategroiesList = function (cat_id) {
    $("#upload_subcategory").empty();
    $.getJSON("/execplugin/?plg=photo&plugFunc=getSubcategories", {cat_id:cat_id}, function(cats){
        for(i in cats)
        {
            $("#upload_subcategory").append("<li rel='"+cats[i]['id']+"'><a href='#'>"+cats[i]['c_name']+"</a></li>");
        }
    });
}

// добавление альбома
Photo.addAlbum = function (name, desc) {
        $.getJSON("/execplugin/?plg=photo&plugFunc=addAlbum", {name:name, desc:desc}, function(id){
            $(".block3").hide();
            $("#upload_album").prepend("<option value='"+id+"' selected='true'>"+name+"</option>").focus();
        });
}

// голосование за фотографию
Photo.vote = function (vote, photo, elem) {
    $.getJSON('/execplugin/?plg=photo&plugFunc=vote', {vote:vote, photo:photo}, function(response){
        switch(parseInt(response['code']))
        {
            case 1:
                $(elem).closest("ul").children().remove(".vote").parent("ul").prepend("<li>Спасибо за мнение. Рейтинг: "+response['votes']+"</li>");
            break;

            case -1:
                $(elem).closest("ul").children().remove(".vote").parent("ul").prepend("<li>Ты уже голосовал! Ретинг: "+response['votes']+"</li>");
            break;
        }
        
    });
}

// рекомендовать
Photo.addFavorite = function (photo, elem) {
    $.getJSON('/execplugin/?plg=photo&plugFunc=addFavorite', {photo:photo}, function(response){
        switch(parseInt(response))
        {
            case -1:
                $(elem).replaceWith("<a>Эта фотография уже у тебя в избранном.</a>");
            break;

            case -2:
                $(elem).replaceWith("<a>Вы не можете добавить в избранное свою фотографию.</a>");
            break;

            case -3:
                $(elem).replaceWith("<a>Ты уже не рекомендовал эту фотографию.</a>");
            break;

            default:
                $(elem).replaceWith("<a>Спасибо за голос!</a>");
                $(".shachlo > h1 a:eq(1)").text(response);
                $("a.loved").addClass('fav');
            break;
        }
    });
}

// удаление из избранного
Photo.removeFavorite = function (photo, elem) {
    $.getJSON('/execplugin/?plg=photo&plugFunc=removeFavorite', {photo:photo}, function(response){
        switch(parseInt(response))
        {
            case -1:
                $(elem).replaceWith("<a>Этой фотографии нету у тебя в избранном.</a>");
            break;

            case 1:
                $(elem).replaceWith("<a>Удалено из избранного.</a>");//closest("li").text("Удалено из избранного.");
            break;
        }
    });
}

// не рекомендовать
Photo.addAbuse = function (photo, elem) {
    $.getJSON('/execplugin/?plg=photo&plugFunc=addAbuse', {photo:photo}, function(response){
        switch(parseInt(response))
        {
            case -1:
                $(elem).replaceWith("<a>Эта фотография уже у тебя в нерекомендованном.</a>");
            break;

            case -2:
                $(elem).replaceWith("<a>Вы не можете нерекомендовать свою фотографию.</a>");
            break;

            case -3:
                $(elem).replaceWith("<a>Ты уже рекомендовал(а) эту фотографию.</a>");
            break;

            default:
                $(elem).replaceWith("<a>Спасибо за мнение!</a>");
                $(".shachlo > h1 a:eq(0)").text('-'+response);
            break;
        }
    });
}

// удаление из избранного
Photo.removeAbuse = function (photo, elem) {
    $.getJSON('/execplugin/?plg=photo&plugFunc=removeAbuse', {photo:photo}, function(response){
        switch(parseInt(response))
        {
            case 1:
                $(elem).replaceWith("<a>Удалено из нерекомендованного.</a>");//closest("li").text("Удалено из избранного.");
                $(".shachlo > h1 a:eq(1)").text(response);
            break;

            case -1:
                $(elem).replaceWith("<a>Этой фотографии нету у тебя в нерекомендованном.</a>");
            break;
        }
    });
}

// добавить в избранное
Photo.addLoved = function (photo, elem) {
    $.getJSON('/execplugin/?plg=photo&plugFunc=addLoved', {photo:photo}, function(response){
        switch(parseInt(response))
        {
            case -1:
                $(elem).replaceWith("<a>Эта фотография уже в избранном.</a>");
            break;

            case -2:
                $(elem).replaceWith("<a>Вы не можете добавить в избранное свою фотографию.</a>");
            break;

            case -3:
                $(elem).replaceWith("<a>Вы уже рекомендовали эту фотографию.</a>");
            break;

            default:
                $(elem).text("Удалить из избранного").attr("rel", 'delete');
                $(".shachlo > h1 a:eq(0)").text(response.loved);
                $(".shachlo > h1 a:eq(1)").text(response.favorite);
                // скрываем кнопку "рекомендовать"
                $("a.favorite").closest("li").css('visibility', 'hidden');
            break;
        }
    });
}

// удаление из избранного
Photo.removeLoved = function (photo, elem) {
    $.getJSON('/execplugin/?plg=photo&plugFunc=removeLoved', {photo:photo}, function(response){
        if(response=='no') {
            alert("Этой фотографии нет в избранном");
        } else {
            $(elem).text("В избранное").attr("rel", 'add');
            // показываем кнопку "рекомендовать"
            $("a.favorite").closest("li").css('visibility', 'visible');
            $(".shachlo > h1 a:eq(0)").text(response);
        }
    });
}

// добавление автора в избранное
Photo.addFavoriteAuthor = function (user, elem) {
    $.getJSON('/execplugin/?plg=photo&plugFunc=addFavoriteAuthor', {user:user}, function(response){
        var el=($(elem).attr("target")=="self")? $(elem) : $(elem).closest("p");
        switch(parseInt(response))
        {
            case 1:
                $(elem).attr("rel", "del");
                el.text(($(elem).attr("target")=="self")? "Удалить из избранного" : "Автор добавлен в избранное");
            break;

            case -1:
                $(elem).attr("rel", "del");
                el.text("Этот автор уже в избранном");
            break;

            case -2:
                el.text("Нельзя добавить в избранное самого себя :)");
            break;
        }
    });
}

// удаление автора из избранного
Photo.removeFavoriteAuthor = function (user, elem) {
    if(confirm('Действительно удалить из избранного?')) {
        $.getJSON('/execplugin/?plg=photo&plugFunc=removeFavoriteAuthor', {user:user}, function(response){
            var el=($(elem).attr("target")=="self")? $(elem) : $(elem).closest("p");
            switch(parseInt(response))
            {
                case 1:
                    $(elem).attr("rel", "add");
                    if($(elem).hasClass("inline")) {
                        $(elem).closest("li").fadeOut();
                        if($("ul.num li:visible").length<2) {
                            window.location.reload();
                        }
                    }
                    else
                        el.text(($(elem).attr("target")=="self")? "Добавить в избранное" : "Автор удалён из избранного");
                break;

                case -1:
                    el.text("Этого автора нету у тебя в избранном.");
                break;
            }
        });
    }
}

// подгруженные слайды
Photo.loadedPotd = new Array();

// фото дня (подгрузка при Cycle)
Photo.potd = function (slide, opts)
{
    $.getJSON('/execplugin/?plg=photo&plugFunc=get_potd_history', {slide:slide}, function(photos){
        if(photos.length>0)
        {
            var html=TrimPath.processDOMTemplate("potd_li_tpl", {photos:photos});
            Photo.loadedPotd.push(slide);
            opts.addSlide(html);
        }
    });
}

// подгрузка фото-дня за выбранный день
Photo.potd_photos = function (date)
{
    $.getJSON('/execplugin/?plg=photo&plugFunc=get_potd_photos', {date:date}, function(photos){
        if(photos.length>0)
        {
            var html=TrimPath.processDOMTemplate("potd_photos", {photos:photos});
            $("#major_p").cycle('destroy');
            $("#major_p").html(html);
            $('#major_p').cycle({
                fx:     'scrollHorz',
                speed:  700,
                timeout: 0,
                prev:   '#p_l_arrow',
                next:   '#p_r_arrow'
             });
        }
    });
}


// подгруженные слайды ленты добавленных фото
Photo.loadedPhotos = new Array();

// лента загруженных фотографий (подгрузка при Cycle)
Photo.photoHistory = function (slide, opts)
{
    $.getJSON('/execplugin/?plg=photo&plugFunc=get_photo_history', {slide:slide}, function(photos){
        if(photos.length>0)
        {
            var html=TrimPath.processDOMTemplate("photo_li_tpl", {photos:photos});
            Photo.loadedPhotos.push(slide);
            opts.addSlide(html);
        }
    });
}

// Image Annotation
Photo.annotationObj = null;

// Путь получения и сохранения заметок
Photo.get_notes_url='/execplugin/?plg=photo&plugFunc=getImageNotes&photo=';
Photo.save_notes_url='/execplugin/?plg=photo&plugFunc=saveImageNotes&photo=';

// инициализация заметок на фото (при просмотре фото)
Photo.annotationInit = function(photo)
{
    // Notes для фото
    
        Photo.annotationObj = $("#photo_image").annotateImage({
            getUrl: Photo.get_notes_url+photo,
            saveUrl: Photo.save_notes_url+photo,
//            deleteUrl: '/execplugin/?plg=photo&plugFunc=deleteImageNotes&photo='+photo,
            useAjax: true,
            editable: true,
            deletable: false
        });
}

// удаление фото
Photo.deletePhoto = function(photo, elem) {
    $.getJSON('/execplugin/?plg=photo&plugFunc=delete_photo', {photo:photo}, function(code){
        switch(parseInt(code)) {
            case 1:
                $(elem).closest("div").fadeOut();
            break;

            case -1:
                alert('Нужно войти в систему');
            break;

            case -2:
                alert('Это не твоя фотография');
            break;

            case -3:
                alert('Возникли ошибки при удалении фото');
            break;

            default:
                alert('Ошибка при удалении');
        }
    });
}

// удаление альбома
Photo.deleteAlbum = function(album, elem) {
    $.getJSON('/execplugin/?plg=photo&plugFunc=delete_album', {album:album}, function(code){
        switch(parseInt(code)) {
            case 1:
                $(elem).closest(".dl3").fadeOut();
                var count=parseInt($("#albums_count").text());
                count--;
                $("#albums_count").text(count);
            break;

            case -1:
                alert('Нужно войти в систему');
            break;

            case -2:
                alert('Вы не можете удалить этот альбом.');
            break;

            case -3:
                alert('Сначала удалите все фотографии из альбома.');
            break;

            default:
                alert('Ошибка при удалении');
        }
    });
}

// откуда пришлии на эту страницу
Photo.referer = null;
// подгруженные слайды
Photo.loadedSlides = new Array();
Photo.noNext = false;
Photo.noPrev = false;
Photo.first = 0;
Photo.last = 0;
// подгружаем слайды в слайдер фоток
Photo.loadSlide = function (photo, dir, opts, next)
{
    // прячем нужную стрелку до тех пор пока не прогрузится следующий слайд
    if(dir=="next") {
        $(".sl_r").hide();
    } else {
        $(".sl_l").hide();
    }
    $.getJSON('/execplugin/?plg=photo&plugFunc=get_photo_slide', {photo:photo, from:Photo.from, dir:dir, referer:Photo.referer}, function(photos){
        $(".sl_r, .sl_l").fadeIn();
        if(photos.length>0)
        {
            var html=TrimPath.processDOMTemplate("photo_slide_tpl", {photos:photos, dir:dir});
            Photo.loadedSlides.push(parseInt(photo));
            if(dir=="next") {
                Photo.loadedSlides.push(parseInt(photos[0]['id']));
            } else {
                if(photos[1])
                    Photo.loadedSlides.push(parseInt(photos[1]['id']));
                else
                    Photo.loadedSlides.push(parseInt(photos[0]['id']));
            }
            opts.addSlide(html, dir=="prev");
        } else {
            if(dir=="next") {
                Photo.noNext = true;
                $(".sl_r").hide();
                $(next).addClass("last_next");
            }
            if(dir=="prev") {
                $(".sl_l").hide();
                $(next).addClass("last_prev");
                Photo.noPrev = true;
            }
            
        }
    });

}
Photo.reload_upload_thumb = function() {
    window.opener.document.getElementById("upload_preview").src="/i/0_upload_preview.jpg?"+Math.random();
    window.opener.document.getElementById("upload_gostep2").style.display='block';
    window.close();
}
