var errorClass = 'error';
var successClass = 'success';
jQuery.fn.exists = function () {
    return jQuery(this).length > 0;
};
jQuery.fn.processingButton = function (param) {
    var stdParam = {
        'action': 'start'
    };
    var standardParam = new Array();
    jQuery.each(stdParam, function (key, value) {
        if (param === undefined || param[key] === undefined) {
            standardParam[key] = value
        } else {
            standardParam[key] = param[key]
        }
    });
    var pButtonClass = 'submitProcessingButton';
    var button;
    switch (standardParam['action']) {
    case 'stop':
        button = jQuery(this).text();
        break;
    default:
        if (jQuery(this + ' .' + pButtonClass).exists()) {
            return false
        }
        button = '<span class="submitProcessingButton">' + jQuery(this).html() + '</span>'
    }
    jQuery(this).html(button)
};
jQuery.fn.loading = function (param) {
    var stdParam = {
        'position': 'inside'
    };
    var standardParam = new Array();
    jQuery.each(stdParam, function (key, value) {
        if (param === undefined || param[key] === undefined) {
            standardParam[key] = value
        } else {
            standardParam[key] = param[key]
        }
    });
    var loaderContainer = '<div id="loader" style="text-align:center;"></div>';
    var loaderContent = '<img src="/style/imgs/processingLoader.gif" width="48px" />';
    switch (standardParam['position']) {
    case 'before':
        return jQuery(this).before(function () {
            jQuery(this).before(loaderContainer);
            jQuery('#loader').html(loaderContent);
            jQuery('#loader').fadeIn('slow')
        });
        break;
    case 'after':
        return jQuery(this).after(function () {
            jQuery(this).after(loaderContainer);
            jQuery('#loader').html(loaderContent);
            jQuery('#loader').fadeIn('slow')
        });
        break;
    default:
        return jQuery(this).html(function () {
            jQuery(this).html(loaderContainer);
            jQuery('#loader').html(loaderContent);
            jQuery('#loader').fadeIn('slow')
        })
    }
};
jQuery.fn.errorMessage = function (param) {
    var stdParam = {
        'position': 'after',
        'message': 'Error',
        'duration': 1500,
        'animation': 'fade',
        'dialog': false
    };
    var standardParam = new Array();
    jQuery.each(stdParam, function (key, value) {
        if (param === undefined || param[key] === undefined) {
            standardParam[key] = value
        } else {
            standardParam[key] = param[key]
        }
    });
    var errorPlaceHolder = '<div class="' + errorClass + '">' + standardParam['message'] + '</div>';
    if (jQuery('.' + errorClass).exists()) {
        return false
    }
    if (standardParam['dialog'] == true) {
        $.dialogMessage({
            'message': standardParam['message']
        });
        $('input[name=closedialog]').live('click', function () {
            $.dialogMessage({
                'close': true
            })
        });
        var closeIt = function () {
            $.dialogMessage({
                'close': true
            })
        };
        window.setTimeout(closeIt, standardParam['duration']);
        return false
    }
    var toggleError;
    switch (standardParam['animation']) {
    case 'slide':
        toggleError = function () {
            jQuery('div.' + errorClass).slideDown('slow').delay(standardParam['duration']).slideUp('fast', function () {
                $(this).remove()
            })
        };
        break;
    default:
        toggleError = function () {
            jQuery('div.' + errorClass).fadeIn('fast').delay(standardParam['duration']).fadeOut('fast', function () {
                $(this).remove()
            })
        }
    }
    switch (standardParam['position']) {
    case 'inside':
        jQuery(this).html(errorPlaceHolder);
        toggleError();
        break;
    case 'before':
        jQuery(this).before(errorPlaceHolder);
        toggleError();
        break;
    default:
        jQuery(this).after(errorPlaceHolder);
        toggleError()
    }
};
jQuery.dialogMessage = function (param) {
    var stdParam = {
        'message': null,
        'class': errorClass,
        'close': false
    },
        standardParam = new Array(),
        shadeClass = 'shade',
        dialogWindow = $('.' + shadeClass),
        closebutton = '<div class="closePopUp"><input name="closedialog" type="button" value="ok" style="float:right;" /></div>';
    jQuery.each(stdParam, function (key, value) {
        if (param === undefined || param[key] === undefined) {
            standardParam[key] = value
        } else {
            standardParam[key] = param[key]
        }
    });
    if (standardParam['close'] == true) {
        dialogWindow.remove();
        return false
    }
    $('body').append('<div class="' + shadeClass + '"><div class="' + standardParam['class'] + '"></div></div>');
    $('.' + standardParam['class']).html(standardParam['message'] + closebutton);
    $('.' + standardParam['class']).css({
        'position': 'absolute',
        'width': 534,
        'top': '10%',
        'left': '50%',
        'margin-left': -300
    });
    $('.' + standardParam['class']).show();
    $('input[name=closedialog]').focus()
};
jQuery.fn.successMessage = function (param) {
    var stdParam = {
        'position': 'before',
        'message': 'Success',
        'duration': 1500,
        'animation': 'slide',
        'dialog': false
    };
    var standardParam = new Array();
    jQuery.each(stdParam, function (key, value) {
        if (param === undefined || param[key] === undefined) {
            standardParam[key] = value
        } else {
            standardParam[key] = param[key]
        }
    });
    var successPlaceHolder = '<div class="' + successClass + '">' + standardParam['message'] + '</div>';
    var contentArea = $(this);
    if (jQuery('.' + successClass).exists()) {
        return false
    }
    if (standardParam['dialog'] == true) {
        $.dialogMessage({
            'message': standardParam['message'],
            'class': successClass
        });
        $('input[name=closedialog]').live('click', function () {
            $.dialogMessage({
                'close': true
            })
        });
        var closeIt = function () {
            $.dialogMessage({
                'close': true
            })
        };
        window.setTimeout(closeIt, standardParam['duration']);
        return false
    }
    var toggleSuccess;
    switch (standardParam['animation']) {
    case 'slide':
        toggleSuccess = function () {
            jQuery('div.' + successClass).slideDown('slow', function () {
                contentArea.slideUp('fast');
                contentArea.find('input,textarea').val('')
            }).delay(standardParam['duration']).slideUp('fast', function () {
                $(this).remove();
                contentArea.slideDown('fast')
            })
        };
        break;
    default:
        toggleSuccess = function () {
            jQuery('div.' + successClass).fadeIn('fast', function () {
                contentArea.fadeOut('fast');
                contentArea.find('input,textarea').val('')
            }).delay(standardParam['duration']).fadeOut('fast', function () {
                $(this).remove();
                contentArea.fadeIn('fast')
            })
        }
    }
    switch (standardParam['position']) {
    case 'inside':
        jQuery(this).html(successPlaceHolder);
        toggleSuccess();
        break;
    case 'after':
        jQuery(this).after(successPlaceHolder);
        toggleSuccess();
        break;
    default:
        jQuery(this).before(successPlaceHolder);
        toggleSuccess()
    }
};
jQuery.fn.dimensionToPX = function (dimension) {
    var objectWidth = $(this).width(),
        objectHeight = $(this).height();
    switch (dimension) {
    case 'height':
    case 'Height':
        return objectHeight;
        break;
    default:
        return objectWidth
    }
};
jQuery.fn.disableMultipleClicks = function (action) {
    switch (action) {
    case 'checked':
        if ($(this).attr('rel') == 'current') {
            return true
        }
        break;
    case 'enable':
        $(this).attr('rel', 'active');
        break;
    default:
        $(this).attr('rel', 'current')
    }
};
jQuery.hideMessages = function () {
    if (jQuery('.' + errorClass).exists()) {
        jQuery('.' + errorClass).hide()
    }
    if (jQuery('.' + successClass).exists()) {
        jQuery('.' + successClass).hide()
    }
}
