window.vbpas = new (function() {
    var tableClass = '.vbpas_tborder';
    var containerId = '#vbpas_auctioninfobit';
    var formClass = '.vbpas_form';
    var dialogClass = '.vbpas_dialog';
    var uiDialogClass = '.ui-dialog';
    var confirmButtonClass = '.vbpas_confirm';
    var cancelButtonClass = '.vbpas_cancel';
    var dialogPrefix = '_dialog';
    var bidInputId = '#bid';
    var bidFormId = 'vbpas_form_newbid';
    var lowBidDialogId = '#vbpas_form_newbid_lowbid';
    var messageBoxId = '#vbpas_message';
    var errorBoxId = '#vbpas_error';
    var messageContentClass = '.vbpas_message_content';
    var formContainer = '.left_deal_box, .right_deal_box';
    var unprivilegedUserAccountDialogId = '#dialog_useraccount';
    var newContentButtonClass = '.newcontent_textcontrol';
    var ajaxReplacements = {
        'currentpricephrase': '#currentpricephrase',
        'currentprice': '#currentprice',
        'timetillend': '#vbpas_time',
        'minimumbid': '.vbpas_minimum_bid',
        'bidscount': '#totalbids',
        'highestbidder': '#vbpas_highestbidder',
        'bin': '#bin',
        'bindialog': '#bin_dialog'
    };
    var dialogOptions = {
        autoOpen: false,
        width: 'auto',
        modal: true
    };
    var XMLMessage = 'message';
    var XMLError = 'error';
    var XMLSubmitText = 'submitvalue';
    var XMLDoValue = 'dovalue';
    var XMLClose = 'close';

    this.formLogic = function() {
        useUiButtons();
        registerDialogs();
        if(typeof this.ajax === 'undefined' || this.ajax == 1) {
            $(formClass + ' input[type="submit"]').click(function(event) {
                vbpas.formSubmitted(event);
            });
            $(confirmButtonClass).click(function(event) {
                vbpas.formConfirmed(event);
            });
            $(cancelButtonClass).click(function(event) {
                vbpas.formCancelled(event);
            });
            $(formClass).submit(function(event) {
                vbpas.processAjaxForm(event);
            });
        }
        $(newContentButtonClass).click(function(event) {
            vbpas.isAccountPrivileged(event);
        });
        $('.cp_content ' + tableClass + ' tr').hover(function() {$(this).addClass('hover')}, function() {$(this).removeClass('hover')});
    };
    
    this.processAjaxForm = function(event) {
        event.preventDefault();
        vbpas.hideMessage();
        vbpas.hideError();
        var formData = $(event.target).serialize();
        formData += '&ajax=1';
        $.ajax({
            url: $(event.target).attr('action'),
            type: "POST",
            async: true,
            cache: false,
            data: formData,
            dataType: "xml",
            context: event.target
        })
        .success(function(response) {
                vbpas.formSuccess(response, this);
            })
        .error(function(response) {
                vbpas.formError(response, this);
            });
    };
    
    this.formSuccess = function(response, form) {
        var message = $(response).find(XMLMessage).text();
        if(message) {
            vbpas.showMessage(message);
        }
        var error = $(response).find(XMLError).text();
        if(error) {
            vbpas.showError(error);
        }
        var submitText = $(response).find(XMLSubmitText).text();
        if(submitText) {
            var submitButton = $('input[type="submit"]', form);
            submitButton.val(submitText);
            // Fix bug in Opera 11
            // See http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/70e2657cd005b9a6
            submitButton.prop('type', 'submit');
        }
        var doValue = $(response).find(XMLDoValue).text();
        if(doValue) {
            $('input[name=do]', form).val(doValue);
        }
        var replacement;
        for(replacement in ajaxReplacements) {
            var value = $(response).find(replacement).text();
            if(value) {
                $(ajaxReplacements[replacement]).html(value);
            }
        }
        if($(form).attr('id') == bidFormId) {
            $(bidInputId).val('');
        }
        var closeDeal = $(response).find(XMLClose).text();
        if(closeDeal) {
            $(formContainer).hide();
        }
    }
    
    this.formError = function(response) {
        
    }
    
    this.isAccountPrivileged = function(event) {
        if($(unprivilegedUserAccountDialogId).length) {
            event.preventDefault();
            $(unprivilegedUserAccountDialogId).dialog('open');
            return false;
        }
        return true;
    }

    this.formSubmitted = function(event) {
        if( ! vbpas.isAccountPrivileged(event)) {
            return false;
        };
        var form = $(event.target).closest('form');
        var formId = $(form).attr('id');
        if(formId == bidFormId) {
            if( ! checkBid()) {
                event.preventDefault();
                return false;
            }
            var userBid = vbpas.getBid();
            $('#userbid').html(userBid);
        }
        if( ! formHasConfirmationDialog(form)) {
            return true;
        }
        event.preventDefault();
        hideDialogs();
        var dialogId = formToDialogId(formId);
        showDialog(dialogId);
        return true;
    }
    
    this.formConfirmed = function(event) {
        var dialogId = $(event.target).closest(uiDialogClass).find(dialogClass).attr('id');
        var formId = dialogToFormId(dialogId);
        $('#' + formId).submit();
        hideDialogs();
    }
    
    this.formCancelled = function(event) {
        hideDialogs();
        var dialogId = $(event.target).closest(uiDialogClass).find(dialogClass).attr('id');
        var formId = dialogToFormId(dialogId);
        if(formId == bidFormId) {
            $(bidInputId).focus();
        }
    }
    
    this.getBid = function() {
        var bid = $(bidInputId).val();
        bid = bid.replace(/\s/g, '');
        bid = bid.replace(/,/g, '.');
        bid = parseInt(bid, 10);
        if(isNaN(bid)) {
            bid = '';
        }
        $(bidInputId).val(bid);
        return bid;
    }
        
    var checkBid = function() {
        var bid = vbpas.getBid();
        if( ! bid || bid < vbpas.minimumBid) {
            $(lowBidDialogId).dialog('open');
            return false;
        }
        return true;
    }
    
    var registerDialogs = function() {
        $(dialogClass).each(function() {
            var confirmButtonText = $(confirmButtonClass, this).val();
            var cancelButtonText = $(cancelButtonClass, this).val();
            var buttons = {};
            if(confirmButtonText){
                buttons[confirmButtonText] = function(event) { vbpas.formConfirmed(event); };
            }
            if(cancelButtonText) {
                buttons[cancelButtonText] = function(event) { vbpas.formCancelled(event); };
            }
            var dialogId = '#' + $(this).attr('id');
            if(dialogId == unprivilegedUserAccountDialogId ) {
                var dialogLink = $('a', this).attr('href');
                if(dialogLink && dialogLink.length) {
                    buttons[confirmButtonText] = function() {
                        hideDialogs();
                        window.location = dialogLink;
                    };
                }
                dialogOptions.modal = false;
            }
            $(confirmButtonClass, this).remove();
            $(cancelButtonClass, this).remove();
            $(this).dialog(dialogOptions);
            $(this).dialog('option', 'buttons', buttons);
        });
    }
    
    var useUiButtons = function() {
        $(containerId + ' input[type!=hidden]').each(function() {
            $(this).button();
        });
        $('#vbpas_editdeal').button();
    }
    
    var hideDialogs = function() {
        $(dialogClass).dialog('close');
    }
    
    var showDialog = function(dialogId) {
        $('#' + dialogId).dialog('open');
    }
    
    this.showError = function(message) {
        $(errorBoxId + ' ' + messageContentClass).html(message);
        $(errorBoxId).show();
    }
    
    this.hideError = function() {
        $(errorBoxId).hide();
    }
    
    this.showMessage = function(message) {
        $(messageBoxId + ' ' + messageContentClass).html(message);
        $(messageBoxId).show();
    }
    
    this.hideMessage = function() {
        $(messageBoxId).hide();
    }
    
    var formHasConfirmationDialog = function(form) {
        var formId = $(form).attr('id');
        var dialogId = formToDialogId(formId);
        return ($('#' + dialogId).length > 0);
    }
    
    var formToDialogId = function(formId) {
        var dialogId = formId + dialogPrefix;
        return dialogId;
    }
    
    var dialogToFormId = function(dialogId) {
        var formId = dialogId.slice(0, -dialogPrefix.length);
        return formId;
    }
})();

$(document).ready(function() {
    vbpas.formLogic();
    var nameWidth = $('#vbpas_won tr td:eq(2)').width();
    $('#vbpas_sold tr td:eq(2)').width(nameWidth);
});

function vbpas_correct_height(elemid)
{
    var div=YAHOO.util.Dom.getFirstChild(elemid);
    var node=YAHOO.util.Dom.getFirstChild(div);
    var max_height=0;
    var node_list=[];
    var max_i=0;
    while(node)
    {
        var region=YAHOO.util.Dom.getRegion(node);
        if(region.height)
        {
            if(max_height<region.height)
            {
                max_height=region.height;
                max_i=node_list.length;
            }
            node_list[node_list.length]=node;
        }
        node=YAHOO.util.Dom.getNextSibling(node);
    }
    //var total_width=0;
    for(var i=0; i<node_list.length; i++)
    {
        if(i==max_i)
        {
            continue;
        }        
        YAHOO.util.Dom.setStyle(node_list[i], 'height', (max_height-2*8.74)+'px');
    }
    //node_list[node_list.length-1].style.width=(100-total_width-0.4)+'%';
}
function vbpas_show_workflow_title(id)
{
    var obj=document.getElementById('workflow_id_'+id);
    if (obj.checked == true && obj.value == -1) 
    {
        document.getElementById('subject_div').style.display = "block";
    }
    else 
    {
        document.getElementById('subject_div').style.display = "none";
    }
    
    var desc=YAHOO.util.Dom.getElementsByClassName('workflow_title', 'div', obj.parentNode.parentNode);
    desc=desc[0];
    var descTitle=desc.title;
    vB_Editor['vB_Editor_001'].set_editor_contents(descTitle);
}

if (typeof(vB_Text_Editor_Events) !== undefined && typeof(vB_Editor) !== undefined && vB_Editor['vB_Editor_001']) 
{
    vB_Text_Editor_Events.prototype.editdoc_onkeypress_vbpas = function(C)
    {
        console.log('new called -');
        
        // handle case of tab swtiching ourself and pass to old event listener for over events
        if (!C) 
        {
            C = window.event;
            
            if(!C)
            {
                return;
            }
        }
        
        if (C.ctrlKey && !C.altKey) 
        {
            // stuff will be handled in original listener
        }
        else 
        {
            
            if (C.keyCode == 9) 
            {
                
                // switching with tab
                // no action required, leave as is - browsers will use tabindex attribute
                return;
            }
        }
        // call original event listener
        vB_Text_Editor_Events.prototype.editdoc_onkeypress.call(vB_Editor['vB_Editor_001'], C);
    };
}

function register_editor_event()
{
    console.log('setting custom listener');
    if(typeof(vB_Text_Editor_Events)!==undefined && typeof(vB_Editor)!==undefined && vB_Editor['vB_Editor_001'])
    {
        var editdoc=vB_Editor['vB_Editor_001'].editdoc;
        
        if (editdoc.addEventListener)
        {
            if(vB_Editor['vB_Editor_001'].wysiwyg_mode)
            {
                try
                {
                    editdoc.removeEventListener("keypress", vB_Text_Editor_Events.prototype.editdoc_onkeypress, true);
                
                    editdoc.removeEventListener("keypress", vB_Text_Editor_Events.prototype.editdoc_onkeypress_vbpas, true);
                }
                catch(e)
                {
                    
                }
            
                editdoc.addEventListener("keypress", vB_Text_Editor_Events.prototype.editdoc_onkeypress_vbpas, true);
            }
            else
            {
                try
                {
                    YAHOO.util.Event.removeListener(editdoc, "keypress", vB_Text_Editor_Events.prototype.editdoc_onkeypress);
                
                    YAHOO.util.Event.removeListener(editdoc, "keypress", vB_Text_Editor_Events.prototype.editdoc_onkeypress_vbpas);
                }
                catch(e)
                {
                    
                }
                
                YAHOO.util.Event.on(editdoc, "keypress", vB_Text_Editor_Events.prototype.editdoc_onkeypress_vbpas, this, true);
            }
            
        } else {
            if (is_ie) 
            {
                editdoc.onkeydown = null;
                editdoc.onkeydown = vB_Text_Editor_Events.prototype.editdoc_onkeypress_vbpas;
            }
            else
            {
                YAHOO.util.Event.on(editdoc, "keypress", vB_Text_Editor_Events.prototype.editdoc_onkeypress_vbpas, this, true);
            }
        }
    }
}
try
{
    custom_editor_events.editor_switch.subscribe(register_editor_event);

    register_editor_event();
}
catch(e)
{
    
}
