var xform = {
    bindEvents: function (id) {
        $('#xform-popup').hide();
        xform._bindEvents($('form#'+id+' ul.errors').parent().children('input:visible'));
    },

    bindEventsInDiv: function (divSelector) {
        $('#xform-popup').hide();
        xform._bindEvents($(divSelector + ' ul.errors').parent().children('input:visible'));
    },

    _bindEvents:function (jquery_set) {
        jquery_set.focus(
            function() { xform._attachMsg(this);}
        ).blur(function() { $('#xform-popup').hide(); });

        jquery_set.addClass('error');
        $set = jquery_set.filter(':first');
        if ($set.length) {
            window.setTimeout('$set.focus()',500);
            xform._notifyIsDirty();
        }
    },

    _attachMsg: function (input) {
        msg = $(input).siblings().find('li:first').html();
        if (!msg || !msg.replace(/^\s+/, '').replace(/\s+$/, '')) return;

        xform._attachMsgContainer();

        var offset_err = $(input).offset();

        $('#xform-popup-content').html(msg);
        var height= $('#xform-popup').innerHeight()+5;

        $('#xform-popup').addClass('error');
        $('#xform-popup').css({
            'top' : offset_err.top-0 - height,
            'left' : offset_err.left+50
        }).fadeIn('fast');
    },

    _attachMsgContainer: function () {
        if (!$('#xform-popup').length) {
            $("body").append('<div class="xform-info-popup" id="xform-popup"><div id="xform-popup-content"></div><span class="xform-popup-corner"></span></div>');
        }
    },

    _notifyIsDirty : function () {
        if (window.formGuard) {
            formGuard.makeDirty();
        }
    },

    control_uri: '',

    submitUpload: function (file_input, target) {
        var n = 'f' + Math.floor(Math.random() * 99999);
        xform.control_uri = jQuery.ajaxSettings.url;
        $('<iframe frameborder="0" width="1" height="1" src="javascript:void(0)" id="'+n+'" name="'+n+'" onload="xform.onFrameLoad(\''+n+'\')"></iframe>').appendTo('body');
        form = $(
            '<form style="display:none" action="'+xform.control_uri+'" target="'+n+'" method="post" enctype="multipart/form-data">\
                <input type="Hidden" name="t" value="'+target+'">\
                <input type="Hidden" name="c" value="submit">\
                <input type="Hidden" name="__afu" value="1">\
            </form>');
        cloned = $(file_input).replaceWith('<input type="file">');
        $(cloned).appendTo(form);
        form.appendTo('body');
        form.submit();
        xform._notifyIsDirty();
    },

    onFrameLoad: function (id){
        var i = document.getElementById(id);
        var d;

        if (i.contentDocument) {
            d = i.contentDocument;
        } else if (i.contentWindow) {
            d = i.contentWindow.document;
        } else {
            d = window.frames[id].document;
        }

        if (d.location.href.indexOf(xform.control_uri) == -1) {
            return;
        }

        window.setTimeout(function () {
            $('iframe[name='+id+']').remove();
            $('form[target='+id+']').remove();
        }, 50);
    },

    delay_timer: null,

    delaySubmit: function (theForm, e) {
        if(e['keyCode'] == 40 || e['keyCode'] == 38 || e['keyCode'] == 13 || e['keyCode'] == 27) return;
        if (this.delay_timer) clearTimeout(this.delay_timer);
        this.delay_timer = window.setTimeout(function () {theForm.submit();}, 500);
    }
};

