var fsShadowBox = null;

	// фикс на функцию substr
    (function(){
        if (! $.browser.msie) return;
        var substr = String.prototype.substr;
        String.prototype.substr = function() {
            return arguments[0] < 0 ? substr.call(this,this.length + arguments[0],this.length + (arguments[1] || 0)) : substr.apply(this,arguments)
        };
    })();

    var oldvalue = [];

    $(function() {

        // создаем для всех полей "типа" password ...
        $("form.togglable input.password").each(function() {
            var id = $(this).attr("id");
            if (! id) {
                do {
                    id = "randomId" + Math.round(Math.random() * 100);
                } while ($("#" + id).get(0));
            }
            // создаем клоны полей-паролей

            $('<input type="password" id="' + id
                + '" name="' + $(this).attr("name")
                + '" class="' + $(this).attr("class")
                + '" />').css({
                    display: "none",
                    width : $(this).css("width")
                }).insertAfter(this);
        });

        // вешаем тогглер на инпуты форм с классом togglable
        var allInputs = $("form.togglable :text, form.togglable :password, form.togglable textarea").not(".toggleoff");
        for (var i=0; i < allInputs.length; i++) {
            //console.log($(allInputs[i]).parents('form').attr('id'));
            formId = $(allInputs[i]).parents('form').eq(0).attr('id');
            if (! oldvalue[formId]) {
                oldvalue[formId] = new Array();
            }
            oldvalue[formId][$(allInputs[i]).attr('name')] = $(allInputs[i]).val();
        }

        function toggleVal(event) {
            var target = $(event.target);
            var formId = $(target).parents('form').eq(0).attr('id');
            switch(event.type) {
                case "focus" :
                    if(target.val() == oldvalue[formId][target.attr('name')]) target.val('');
                    break;
                case "blur"	:
                    if ( !target.val() ) {
                        target.val(oldvalue[formId][target.attr('name')]);
                    }
                    break;
            };
        }
        $("form.togglable :text, form.togglable :password, form.togglable textarea").not(".toggleoff").bind('focus', toggleVal);
        $("form.togglable :text, form.togglable :password, form.togglable textarea").not(".toggleoff").bind('blur', toggleVal);
        // автозаполняющиеся поля

        // заменяем все текстовые поля с классом password на текст, и делаем типом password при фокусе и вводе текста

        $("form.togglable input.password").focus(onPasswordFieldFocus).blur(onPasswordFieldBlur).keypress(onEnterPress);

        function onPasswordFieldFocus (e)
        {
            if ($(this).attr("type") == "text") {
                $(this).hide();
                $(this).next().show().focus();
            }
        }

        function onPasswordFieldBlur (e)
        {
            if ($(this).attr("type") == "password" && (! $(this).val().replace(/\s/g, "") || $(this).val() == oldvalue[$(this).parents("form").eq(0).attr("id")][$(this).attr("name")])) {
                $(this).hide();
                $(this).prev().eq(0).show();
            }
        }

        $.fn.extend({
            activate: function() {
                return this.focus().select();
            }
        });

        //биндим клик по кнопке открыть форму
        $(".openDialogForm").live("click", function (e) {
            closeDialogForm('fs_dialogForm');
            closeDialogForm('fs_login');
            var sizes = $(this).attr('rel').split(",");
            var width = (parseInt(sizes[0]) != 0) ? parseInt(sizes[0]): 100;
            var height = (parseInt(sizes[1]) != 0) ? parseInt(sizes[1]): 100;
            var comment_editor = $(this).hasClass("comment_editor");
            $.post(
                $(this).attr('href'),
                {},
                function(data) {
                    //$(data).appendTo("body");
                    //script stack space quota is exhausted
                    //[Break on this error] var match = quickExpr.exec( selector );
                    // the solution

                    if (comment_editor) {
                        tinyMCE.execCommand('mceRemoveControl', false, 'commentTextArea2');
                    }

                    $('body').append(data);
                    showDialogForm('fs_dialogForm', width, height);

                    // натягиваем редактор
                    if (comment_editor) {
                        bindSimpleAjaxForm();
                        tinyMCE.execCommand('mceAddControl', false, 'commentTextArea2');
                    }
                }
            );
            return false;
        });

        //биндим клик по кнопке закрыть
        $(".closeDialogForm").live("click", function (e) {
            closeDialogForm('fs_dialogForm');
            closeDialogForm('fs_login');
        }).live("keyup",function(e) {
            if ( (e.keyCode == 0xA) || (e.keyCode == 0xD) ) {
                closeDialogForm('fs_login');
            }
        });

        // биндим simple ajax form
        bindSimpleAjaxForm();

        // ограничение максимальной длины текста в textarea, если установлен атрибут maxlength
        $("form textarea").keypress(function( e ) {
            if ($(this).attr("maxlength") && e.keyCode != 8 && e.keyCode != 22) {
                var maxlength = parseInt( $(this).attr("maxlength") );
                return ($(this).val().length <= maxlength);
            } else {
                return true;
            }
        }).live("keyup", function( e ) {
            if ($(this).attr("maxlength") && e.keyCode != 8 && e.keyCode != 22) {
                var maxlength = parseInt( $(this).attr("maxlength") );
                if ($(this).val().length > maxlength) {
                    $(this).val( $(this).val().substr(0, maxlength) );
                    e.preventDefault();
                }
            }
        });

        var cssObj = null;
        if($.browser.msie) {
        	cssObj = {
        		left : '-20px'
        	};
    	};
        fsShadowBox = new rShadowBox(cssObj);

        $(document.body).keypress(function(e) {
            // убираем форму по нажатию escape
            if (e.keyCode == 27) {
                $('div[id^="fs_"]').each(function() {
                    closeDialogForm($(this).attr('id'));
                });
            }
        });

        // инициализируем mp3players
        initMp3Player();
        initFlvPlayer();

        // вешаем тогглеры на странице /collection/
        initCollectionTogglers();

        // инициализируем флеш-слайдшоу
        initXMLSlideShow();

        // показываем флешки photo
        insertFlashPhoto1();
        insertFlashPhoto2();
        insertFlash3d();
    });

    function initCollectionTogglers ()
    {
        if ($("#lastLink").length && $("#popularLink").length) {
            // вешаем тогглеры
            $("#lastLink").click(function( e ) {
                e.preventDefault();
                $("#lastList").show();
                $(this).addClass("notUnderline");
                $("#popularList").hide();
                $("#popularLink").removeClass("notUnderline");
            });

            $("#popularLink").click(function( e ) {
                e.preventDefault();
                $("#popularList").show();
                $(this).addClass("notUnderline");
                $("#lastList").hide();
                $("#lastLink").removeClass("notUnderline");
            });
        }
    }

    /**
     * Инициализация флеш-слайдшоу
     */
    function initXMLSlideShow ()
    {
        if (! $('#flashcontent').length || ! $('#flashcontent').attr('class').match(/^flashbox[\d]$/)) {
            return false;
        }
        var flag = parseInt($('#flashcontent').attr('class').substr(-1));

        var params = {
            menu: "false",
            wmode: "transparent"
        };
        var flashvars = {};

        if (0 == flag) {
            // главная страница русская /
            //flashvars.pathXML = "/collection/xmlshow/";
            flashvars.pathXML = "/images.xml";
            params.wmode = "opaque";
            swfobject.embedSWF("/flash/ErartaMainPageNew.swf", "flashcontent", "100%", "100%", "9.0.28", "/flash/expressInstall.swf", flashvars, params, null);
        } else if (1 == flag) {
            // страница /eng/
            flashvars.pathXML = "/eng/collection/xmlshow/";
            params.wmode = "opaque";
            swfobject.embedSWF("/flash/ErartaMainPageNew.swf", "flashcontent", "100%", "100%", "9.0.28", "/flash/expressInstall.swf", flashvars, params, null);
        } else if (2 == flag) {
            // страница /collection/
            flashvars.pathXML = "/collection/xmlslideshow/";
            swfobject.embedSWF("/flash/ErartaCollection.swf", "flashcontent", "590", "405", "9.0.28", "/flash/expressInstall.swf", flashvars, params, null);
        } else if (5 == flag) {
            // страница /eng/collection/
            flashvars.pathXML = "/eng/collection/xmlslideshow/";
            swfobject.embedSWF("/flash/ErartaCollection.swf", "flashcontent", "590", "405", "9.0.28", "/flash/expressInstall.swf", flashvars, params, null);
        } else if (3 == flag) {
            swfobject.embedSWF("/flash/arbat.swf", "flashcontent", "100%", "100%", "9.0.28", "/flash/expressInstall.swf", null, params, null);
        } else if (4 == flag) {
            // флешка на странице просмотра картины
            swfobject.embedSWF("/flash/ErartaShowPicture.swf", "flashcontent", "100%", "100%", "9.0.28", "/flash/expressInstall.swf", _flashvars, params, null);
        } else if (6 == flag) {
            // флешка на странице просмотра картины
            swfobject.embedSWF("/flash/ErartaGalleryShop.swf", "flashcontent", "100%", "100%", "9.0.28", "/flash/expressInstall.swf", _flashvars, params, null);
        }
    }

    /**
     * Вставка флешки на страницу Выставки 2
     */
    function insertFlashPhoto2 ()
    {

        var params = {
            menu: "false",
            wmode: "transparent"
        };
        var flashvars = {};

        swfobject.embedSWF("/flash/photo2.swf", "flashphoto2", "100%", "320", "9.0.28", "/flash/expressInstall.swf", flashvars, params, null);
    }

    /**
     * Вставка флешки на страницу Галереи
     */
    function insertFlashPhoto1 ()
    {

        var params = {
            menu: "false",
            wmode: "transparent"
        };
        var flashvars = {};

        swfobject.embedSWF("/flash/photo1.swf", "flashphoto1", "100%", "400", "9.0.28", "/flash/expressInstall.swf", flashvars, params, null);
    }

    /**
     * Вставка флешки на страницу Менины
     */
    function insertFlash3d ()
    {

        var params = {
            menu: "false",
            wmode: "transparent"
        };

        var flashvars = {
			img_path: "/flash/3d/images/",
			img_num: "8",
			img_name: "meniny_"
		};


        swfobject.embedSWF("/flash/3d/3d.swf", "flash3d", "1000", "300", "9.0.28", "/flash/expressInstall.swf", flashvars, params, null);
    }

    /**
     * Инициализация mp3-плеера
     */
    function initMp3Player()
    {
        // подгузка аудиоплееров
        $("img.tinymce_audio_player").each(function() {
            if ($(this).attr("title").replace(/\s/gi, "")) {
                // ищем рандомный id
                var i = 0;
                do {
                    randomId = "tinymce_audio_player_" + Math.round((Math.random(1, 1000) * 10));
                    i++;
                } while ($("#" + randomId).get(0) || i > 10);

                // устанавливаем рандомный id объекту
                $(this).attr('id', randomId).css({
                    zIndex : 100
                });

                // параметры для плей-листа
                var filename = $(this).attr('title');

                // если это не mp3-файл, удаляем его
                if (! filename.match(/\.mp3$/i)) {
                    $(this).remove();
                }

                var title = $(this).attr('alt').replace(/\s/g, '').length ? $(this).attr('alt') : filename;

                var flashvars = {
                    file: filename,
                    loadingMessage: "Загрузка...",
                    loadingErrorMessage: "Загрузка не удалась... :(",
                    titleText: title,
                    useID3: "false"
                }
                var params = {
                  menu: "false",
                  wmode: "transparent"
                }
                swfobject.embedSWF("/flash/audio/ErartaPlayer.swf", randomId, "400", "28", "9.0.0", "/flash/expressInstall.swf", flashvars, params, null);

            } else {
                $(this).remove();
            }
        });
    }

    /**
     * Инициализация flv-players
     */
    function initFlvPlayer ()
    {
        var randomId = "";
        var params = {};
        var flashparams = {
            menu: "false",
            wmode: "transparent",
            allowfullscreen: "true"
        };
        var flashvars = {};
        $("img[class=tinymce_flv_player]").each(function() {
            // создаем уникальный id
            do {
                randomId = "randomId" + Math.round(Math.random() * 100);
            } while ($("#" + randomId).length);

            params = $(this).attr('title').split(',');

            url = params[0];

            _width = $(this).attr('width');
            _height = $(this).attr('height');

            // создаем контейнер
            $('<div id="' + randomId + '" />').css({
                display: "block",
                width: _width,
                height: _height
            }).insertAfter(this);

            $(this).remove();
            // параметры флешки
            flashvars = {
                file: url,
                autostart: false
            };
            swfobject.embedSWF("/flash/mediaplayer/player2.swf", randomId, _width, _height, "9.0.115", "/i/flash/mediaplayer/expressInstall.swf", flashvars, flashparams, null);
        });
    }

    function bindSimpleAjaxForm ()
    {
        var options = {
            success:   onAjaxSubmitForm,  // post-submit callback
            dataType:  'json',
            //timeout:   10000000000000,
            beforeSubmit: function (formdata, form) {
                if (typeof validateFormVars == 'function') {
                    return validateFormVars(formdata, form);
                } else {
                    return true;
                }
            }
        };
        // вешаем ajax form submit
        $('form.simpleform').ajaxForm(options);
    }

    function validateFormVars(formdata, form)
    {
        var formId = $(form).attr('id');

        // обработка tinymce comment-editor
        for (var i=0; i < formdata.length; i++) {
            // если текущий элемент - textarea и класс comment-editor
            element = $("#" + formId).find("[name=" + formdata[i].name + "]");

            if ($(element).is("textarea") && $(element).hasClass("comment-editor")) {
                textareaId = $(element).attr("id");
                if (tinyMCE.getInstanceById( textareaId ) != null) {
                    content = tinyMCE.get( textareaId ).getContent();
                    if (content.replace(/&nbsp;/g, '')) {
                        formdata[i].value = tinyMCE.get( textareaId ).getContent();
                    } else {
                        formdata[i].value = '';
                    }
                }
            }
        }

        // если форма является тогглабл
        if ($(form).hasClass('togglable')) {
            for (var i=0; i < formdata.length; i++) {
                if (oldvalue[formId][formdata[i].name]) {
                    if ( oldvalue[formId][formdata[i].name] == formdata[i].value) {
                        formdata[i].value = '';
                    }
                }
            }
        }
        return true;
    }

    function onEnterPress (event, formElem)
    {
        if ( (event.keyCode == 0xA) || (event.keyCode == 0xD) ) {
            $(formElem).parents('form').submit();
        }
    }

    //функция открытия диалоговой формв
    function showDialogForm(formId, width, height, z_index)
    {
        if (! z_index) {
            z_index = 10000;
        }

        var f = $('#' + formId);

        // считаем left и top координаты
        var top = $(window).scrollTop() + ($(window).height()/2 - f.outerHeight()/2);
        if (top < 0) {
            top = 0;
        }
        var left = $(window).scrollLeft() + ($(document.body).outerWidth(true)/2 - width/2);
        if (left < 0) {
            left = 0;
        }

        f.css({
            top:  top + 'px',
            left:  left + 'px',
            width: width + 'px',
            height: height + 'px',
            display: "block",
            zIndex: z_index,
            position: "absolute"
        });

        // отображаем затемнение
        fsShadowBox.show();

        // опции для ajax submit form
        var options = {
            success: onAjaxSubmitForm,  // post-submit callback
            dataType: 'json'
        };

        // инициализация progress_bar загрузчика
        if ( typeof formSwfOptions != "undefined" ) {
            initSwfFormUpload( formSwfOptions );
        }

        // вешаем ajax form submit
        $('form.dialogform').ajaxForm(options);
    }

    /**
     * Инициализация progress_bar загрузчика
     */
    function initSwfFormUpload ( formSwfOptions )
    {
        swfu = new SWFUpload({
            // Backend settings
            upload_url: formSwfOptions.swfUploadUrl,
            file_post_name: "imageFile",
            post_params: formSwfOptions.swfUploadPostParams,

            // Flash file settings
            file_size_limit : "100 MB",
            file_types : "*.jpg",			// or you could use something like: "*.doc;*.wpd;*.pdf",
            file_types_description : "JPG, BMP, TIFF, RAW files",
            file_upload_limit : "0", // можно грузить всего 9 файлов
            file_queue_limit : "9",

            // Event handler settings
            swfupload_loaded_handler : swfUploadLoaded,

            file_dialog_start_handler: fileDialogStart,
            file_queued_handler : fileQueued,
            file_queue_error_handler : fileQueueError,
            file_dialog_complete_handler : fileDialogComplete,

            //upload_start_handler : uploadStart,	// I could do some client/JavaScript validation here, but I don't need to.
            upload_progress_handler : uploadProgress,
            upload_error_handler : uploadError,
            upload_success_handler : uploadSuccess,
            upload_complete_handler : uploadComplete,

            // Button Settings
            button_image_url : "/i/swfupload/XPButtonUploadText_61x22.png",
            button_placeholder_id : "spanButtonPlaceholder",
            button_width: 61,
            button_height: 22,

            // Flash Settings
            flash_url : "/flash/swfupload/swfupload.swf",

            custom_settings : {
                progress_target : "formUploadProgress",
                upload_successful : false
            },

            // Debug settings
            debug: true
        });
    }


    //функция закрытия диалоговой формв
    function closeDialogForm(formId)
    {
        $('#' + formId).removeShadow();
        $('#' + formId).remove();

        fsShadowBox.hide();

        if ($("#commentTextArea2").get(0)) {
            // отцепляем редактор, если он был прикручен
            tinyMCE.execCommand('mceRemoveControl', false, 'commentTextArea2');
        }
        return false;
    }

    // смена капчи
    var changeCapture = function(formId)
    {
        var capcha = $("#" + formId + "_randomImage");
        if (capcha.length) {
            if (capcha.attr('src').indexOf('?') != -1) {
                var arr = capcha.attr('src').split('?');
                if (arr[1].indexOf('&') != -1) {
                    var arr2 = arr[1].split('&');
                    var phpsessid = arr2[0];
                } else {
                    var phpsessid = arr[1];
                }
                capcha.attr('src', '/antibot.php?' + phpsessid + '&u=' + Math.random());
            } else {
                capcha.attr('src', '/antibot.php?u=' + Math.random());
            }
        }
    }

    function onAjaxSubmitForm(response, statusText, form) {
        $('p.error').empty();
        $('p.error').hide();
        $('span.error').empty();
        $('span.error').hide();
        if (statusText == 'success') {
            if (response.submitOn) {
                closeDialogForm('fs_dialogForm');
                var func = $(form).attr('postaction');
                if( func ) {
                    switch(func) {
	                	case 'afterLogin1':
	                		return afterLogin1();
	                	case 'afterLogin2':
	                		return afterLogin2();
	                	case 'afterAddTenderItem':
	                		return afterAddTenderItem(response)
	                	case 'afterAddCommentItem':
	                		return afterAddCommentItem(response)
	                	case 'afterAddCommentNews':
	                		return afterAddCommentNews(response)
	                	case 'afterRegister':
	                		return afterRegister();
	                	case 'cAfterReg':
	                		return cAfterReg();
	                	case 'cAfterAuth':
	                		return cAfterAuth();
	                	case 'cAfterRecall':
	                		return cAfterRecall();
                    }
                } else if (response.forceReload) {
                    // принудительная перегрузка страницы
                    window.location.reload();
                } else if (response.reloadOn) {
                    if (response.redirectUrl) {
                        window.location = response.redirectUrl;
                    } else {
                    	window.location.reload();
                    }
                } else {
                    if (response.redirectUrl) {
                        if (response.openerOn) {
                            window.opener.location = response.redirectUrl;
                            window.opener.location.reload();
                            window.close();
                        } else {
                            window.location = response.redirectUrl;
                        }
                    }
                }
                if (response.dirsTree) {
                    dirsTree = response.dirsTree;
                    buildDirsTree();
                }
            }
            else if (response.errors) {
                if ( $('#' + $(form).attr('id') + '_randomImage') && response.errors[ 'randomImage' ] ) {
                    changeCapture($(form).attr('id'));
                }
                $(form).find('.fs_error').empty();
                $(form).find('input, textarea').removeClass('error');
                for (var ctrlErr in response.errors) {
                	if ($('[name=' + ctrlErr + ']').hasClass('error_title')) {
                		$('[name=' + ctrlErr + ']').attr('title', response.errors[ctrlErr]);
                	}
            		$('#err_' + $(form).attr('id') + '_' + ctrlErr).html(response.errors[ctrlErr]).show();
                    $(form).find('textarea[name=' + ctrlErr + '], input[name=' + ctrlErr + ']').not('.fs_field').not('.fs_textarea').addClass('error');
                }
                if ($('#fs_dialogForm').length > 0) {
                    f = $('#fs_dialogForm');

                    h = f.height();
                    $(f).children().each(function() {
                        if ($(this).height() > h) {
                            h = $(this).height();
                        }
                    });

                    // считаем left и top координаты
                    var top = $(window).scrollTop() + ($(window).height()/2 - h/2);
                    if (top < 0) {
                        top = 0;
                    }
                    f.css('top', top + 'px');
                }

                var func = $(form).attr('posterror');
                if( func ) {
                    switch(func) {
	                	case 'errorAddCommentNews':
	                		return errorAddCommentNews();
	                	case 'errorAddCommentItem':
	                		return errorAddCommentItem();
                    }
                }
            }
        }
    }
    //функция показа формы выбора узла
    function showDirTreeForm(data) {
      $(data).appendTo("body");
      showDialogForm('fs_dirsTreeForm', 250, 400, 2000);
      for (var node in dirsTree) {
        $('<p><a href="' + dirsTree[node].dirBuilderUrl + '" class="fs_index_active" rel="treeform">' + dirsTree[node].dirSubject +'</a></p>').appendTo("#dirsTree");
        $('<div id="fs_tree"><ul>' + buildTreeNodeForm(dirsTree[node].dirsMenuTree, dirsTree[node].dirId) +'</ul></div>').appendTo("#dirsTree");
      }
      //биндим клик по кнопке выбрать
      $("a.selectTreeDialogForm").click( function (e) {
        redirUrl = redirUrl.replace('builder.html', '');
        if ($('#editFormFlag').attr('value') == 1) {
          $('form#editDirForm input[name="redirUrl"]').attr("value", redirUrl);
        } else {
          $('form.dialogform input[name="redirUrl"]').attr("value", redirUrl);
        }
        redirUrl = '';
        closeDialogForm('fs_dirsTreeForm');
        });
      //биндим клик по кнопке закрыть
      $("a.closeTreeDialogForm").click( function (e) {
        closeDialogForm('fs_dirsTreeForm');
        });
    }
    //функция показа формы авторизации
    function showAuthForm(data) {
      $(data).appendTo("body");
      showDialogForm('fs_login', 459, 310);
    }

    function openAuthForm(url) {
      $.post(
        url,
        {t: (new Date).getTime()},
        showAuthForm
      );
    }

    function doRedirect (url)
    {
        window.location.href = url;
    }

    // открывает ссылку в попапе
    function openPopup (url, width, height)
    {
        width = width || 980;
        height = height || 640;
        var winobj=open(url,"popup","width=" + width + ",height=" + height + ",left=20,top=20,scrollbars=1,location=0,menubar=0,resizable=1");
        winobj.focus();
    }

    function jump ( dirUrl, pageNo )
    {
        var concat = dirUrl.indexOf('?') != -1 ? '&' : '?';
        var redirectUrl = dirUrl + concat + 'paging=' + pageNo;
        doRedirect(redirectUrl);
    }


    function toggleLoginForgotForms ()
    {
        $("#fs-login-form").toggle();
        $("#fs-forgot-form").toggle();
        return false;
    }

