var Admin_Vacancy_Edit_Widget = {
    dates: null,
    elsToManipulate : null,

    bindEvents: function (form_id, show_fetched_content) {

        var els = ['requirements', 'offer'];
        if (!show_fetched_content) {
            els = els.concat(['activity']);
        }
        Admin_Vacancy_Edit_Widget.elsToManipulate = els;

        var add_tooltip = function(el, content) {
            $(el).tipsy({
                title: function() { return $(content).html(); },
                gravity: "sw",
                fade: true,
                trigger: "hover"
            });
        };
        var add_url_tooltip = function(name) {
            var input_id = "#url" + name;
            var content_id = input_id + 'TooltipText';

            if ($(input_id).is("input")) {
                add_tooltip(input_id, content_id);
            }
        };
        var add_textarea_tooltip = function(name) {
            add_tooltip($('#' + name).parents(':first'), $('#' + name + 'TooltipText'))
        };

        this.dates = $(
            '#' + form_id + ' input[name=dateStart], #' + form_id + ' input[name=dateEnd]'
        ).datepicker({
            dateFormat: 'dd.mm.yy',

            beforeShow: function (input) {
                var otherDate = Admin_Vacancy_Edit_Widget.dates.not(input).datepicker('getDate');
                var option = (input.name == "dateEnd"? "minDate" : "maxDate");
                $(input).datepicker("option", option, otherDate);
            }
        });

        $('#' + form_id + ' .allow_html').ckeditor({
            customConfig: '/js/ckeditor_config.js',
            width: '700px',
			height:'200px'
        }).bind('getData.ckeditor', function (a, b, c) {
            c.dataValue = c.dataValue.replace(/^(&nbsp;)+$/, '');
        });

        add_url_tooltip("Application");
        add_url_tooltip("Description");
        add_textarea_tooltip('activity');
        add_textarea_tooltip('companyDescription');

        if (this._actualDisplayMode(form_id) != 'NORMAL') {
            Admin_Vacancy_Edit_Widget._displayModeChanged(
                form_id, this._actualDisplayMode(form_id), 'fast'
            );
        }
        Admin_Vacancy_Edit_Widget._bindDirectlinkReadingEvent(form_id);
        this._setupTimer(form_id);
    },

    destroyEditor : function (id) {
        $('#' + id + ' .allow_html').each(
            function(){
                var inputId = $(this).attr('id');
                if (CKEDITOR.instances[inputId]) CKEDITOR.instances[inputId].destroy();
            }
        );
    },

    _bindDirectlinkReadingEvent : function (form_id) {
        $('form#' + form_id + ' #urlDescription').unbind('AdminVacancyEditWidget')
        $('form#' + form_id + ' #urlDescription').bind(
                'blur.AdminVacancyEditWidget',
                function(){Admin_Vacancy_Edit_Widget._readDirectlinkIfActivityIsEmpty(form_id)}
        );
    },

    _displayMode : 'NORMAL',

    _timer : null,
    _setupTimer : function(formId) {
        if (this._timer) window.clearTimeout(this._timer);
        this._timer = window.setTimeout(function(){Admin_Vacancy_Edit_Widget.showHideElements(formId)}, 1000);
    },

    _actualDisplayMode :  function (formId) {
        if (this._isPdfLoaded(formId)) {
            return 'PDF';
        } else if (this._isDirectlinkEntered(formId)) {
            return 'URL';
        }
        return 'NORMAL';
    },

    showHideElements : function (id) {
        var actualDisplayMode = this._actualDisplayMode(id);
        if (this._displayMode != actualDisplayMode) {
            this._displayModeChanged(id, actualDisplayMode);
            if (actualDisplayMode == 'PDF') {
                Admin_Vacancy_Edit_Widget._readPdfIfActivityIsEmpty(id);
            }
        }
        this._setupTimer(id);
    },

    _isPdfLoaded : function (formId) {
        return $('#' + formId + ' img[src*="/images/pdf"]').length > 0;
    },

    _isDirectlinkEntered : function (formId) {
        return $('#' + formId + ' input[name=urlDescription]').val() > '';
    },

    _displayModeChanged : function (formId, mode, doFast) {
        this._displayMode = mode;

        var els = Admin_Vacancy_Edit_Widget.elsToManipulate;
        var elsToShow=[], elsToHide=[];
        switch(mode) {
            case 'PDF':
                elsToHide = elsToHide.concat(els).concat(['urlDescription', 'vacancy_directlink_fetch_link']);
                elsToShow = elsToShow.concat(['pdf', 'pdf_fetch_link']);
                break;
            case 'URL':
                elsToHide = elsToHide.concat(els).concat(['pdf', 'pdf_fetch_link']);
                elsToShow = elsToShow.concat(['urlDescription', 'vacancy_directlink_fetch_link']);
                break;
            default:
                elsToShow = elsToShow.concat(els).concat(['urlDescription', 'pdf']);
                elsToHide = ['vacancy_directlink_fetch_link', 'pdf_fetch_link'];
                break;
        }
        
        $('#' + formId + ' dl').each(
            function(i, val) {
                if ($.inArray(val.className, elsToHide) != -1) {
                    doFast ? $(val).hide() : $(val).slideUp();
                } if ($.inArray(val.className, elsToShow) != -1) {
                    doFast ? $(val).show() : $(val).slideDown();
                }
            }
        );
    },
    _isActivityFieldEmpty : function(formId) {
        return $('form#' + formId + ' #activity').val().length <= '<br />'.length;
    },
    _readPdfIfActivityIsEmpty : function (formId) {
        if (this._isActivityFieldEmpty(formId)) {
            var cmd = $('form#'+formId).attr('action')
                    .replace('submitForm', 'readPdf')
                    .substr('javascript:'.length);
            eval(cmd);
        }
    },
    _readDirectlinkIfActivityIsEmpty : function (formId) {
        if (this._isActivityFieldEmpty(formId)
                &&
            $('form#' + formId + ' #urlDescription').val().length  
        ) {
            var cmd = $('form#'+formId).attr('action')
                    .replace('submitForm', 'readDirectlink')
                    .substr('javascript:'.length);
            eval(cmd);
        }
    }
};
