﻿function initialiseConfirmDialog(dialogSelector, dialogClass, confirmDialogOptions) {
    options = { height: 35, width: $j(window).width(), modal: false, position: 'top', autohide: true };
    $j.extend(options, confirmDialogOptions);
    $j(dialogSelector).dialog({
    bgiframe: options.bgiframe ? options.bgiframe : false,  /*Set bgi frame to true to fix ie6 zindex issue with selects http://groups.google.com/group/jquery-ui/browse_thread/thread/d7403d64bec13665*/
        autoOpen: false,
        draggable: false,
        resizable: false,
        zIndex: 600000,
        height: options.height,
        minHeight: options.height,
        width: options.width,
        modal: options.modal,
        position: options.position,
        dialogClass: dialogClass,
        buttons: { 'Ok': function() {
            $j(this).dialog('close');
        }
        }
    })
}


function initialiseLoadDialog(dialogSelector, dialogClass) {
    $j(dialogSelector).dialog({
        autoOpen: false,
        draggable: false,
        resizable: false,
        zIndex: 600000,
        height: 50,
        minHeight: 50,
        width: 140,
        modal: true,
        dialogClass: dialogClass
    })
}

function openDialog(dialogSelector, formSelector, autoHide, closeOptions) {
    if (formSelector && formSelector.length > 0) {
        $j(dialogSelector).dialog('open').parent().appendTo($j(formSelector));
    } else {
        $j(dialogSelector).dialog('open');
    }
    if (autoHide) {
        setTimeout(function() {
        hideDialog(dialogSelector, false, closeOptions);
        }, 2000);
    }
}

//Hides a dialog using the specified effects
function hideDialog(dialogSelector, destroyDialog, closeOptions) {
    var options = {effect:'slide',direction:'up', duration:500};
    $j.extend(options, closeOptions);
    $j(dialogSelector).
        parent().
        hide(options.effect, 
            { direction: options.direction}, 
             options.duration, 
             function() { closeDialog(dialogSelector, destroyDialog); })
}

function closeDialog(dialogSelector, destroyDialog) {
     $j(dialogSelector).dialog('close');    
     if (destroyDialog) {
         $j(dialogSelector).dialog('destroy');
      }
}

function checkRegexp(dialogSelector, field, regexp, msg) {
    if (field.val().length > 0 && !(regexp.test(field.val()))) {
        field.addClass('ui-state-error');
        updateTips(dialogSelector, msg);
        return false;
    } else {
        return true;
    }
}

function insertLoadingImage(dialogSelector) {
    $j(dialogSelector + " .submitButton").attr("disabled", "disabled");
    $j(dialogSelector + " div.ui-dialog-buttonpane").append("<div id='loadingImage'></div>");
}

function removeLoadingImage(dialogSelector) {
    $j(dialogSelector + " .submitButton").removeAttr("disabled");
    $j(dialogSelector + " div.ui-dialog-buttonpane div#loadingImage").remove();
}

function updateTips(dialogSelector, msg) {
    tips = $j(dialogSelector + " div.validateTips");
    tips.text(msg).
             addClass("ui-state-highlight");
    setTimeout(function() {
        tips.removeClass('ui-state-highlight', 1500);
    }, 500);
}

function getFirstServerValidationError(data) {
    for (var j in data) {
        return data[j];
    }
}

function processServerValidation(dialogPlaceHolder, dialogSelector, dialogContentSelector, confirmDialogSelector, confirmDialogClass, confirmDialogOptions, data) {
    removeLoadingImage(dialogSelector);
    var valError = getFirstServerValidationError(data);
    if (valError) {
        updateTips(dialogSelector, valError);
        return false;
    }
    confirmSuccessfulDialogSubmit(dialogPlaceHolder, dialogSelector, dialogContentSelector, confirmDialogSelector, confirmDialogClass, confirmDialogOptions);
}

function confirmSuccessfulDialogSubmit(dialogPlaceHolder, dialogSelector, dialogContentSelector, confirmDialogSelector, confirmDialogClass, confirmDialogOptions) {
    initialiseConfirmDialog(confirmDialogSelector, confirmDialogClass, confirmDialogOptions);
    closeDialogForm(dialogContentSelector);
    openDialog(confirmDialogSelector, null, true);
}

function closeDialogForm(dialogContentSelector) {
    closeDialog(dialogContentSelector, true);
}

function cleanupDialogForm(dialogPlaceHolder, dialogContentSelector) {
    $j(dialogPlaceHolder).empty();
    $j(dialogContentSelector).remove();
    $j("div.ui-widget-overlay").remove();
}

function addDialogFormButtonClasses(dialogSelector) {
    $j(dialogSelector + ' div.ui-dialog-buttonpane :last-child').addClass('submitButton');
    $j(dialogSelector + ' div.ui-dialog-buttonpane :first-child').addClass('cancelButton');
}

function openDialogForm(dialogPlaceHolder, dialogSelector, dialogContentSelector, loadDialogSelector, loadDialogClass, fnInitialiseDialog, errMsg, pageLoadUrl, formSelector) {
    initialiseLoadDialog(loadDialogSelector, loadDialogClass);
    openDialog(loadDialogSelector);
    $j(dialogPlaceHolder).load(pageLoadUrl + "&callback=load", function(response, status, xhr) {
        if (status == "error") {
            closeDialog(loadDialogSelector);
            var msg = errMsg;
            alert(msg);
        } else {
            closeDialog(loadDialogSelector);
            $j(dialogPlaceHolder + " title").remove();
            fnInitialiseDialog();
            addDialogFormButtonClasses(dialogSelector);
            $j(dialogContentSelector).dialog('open').parent().appendTo($j(formSelector));
        }
    });
}

function submitDialogForm(dialogPlaceHolder, dialogSelector, dialogContentSelector, confirmDialogSelector, confirmDialogClass, confirmDialogOptions, errMsg, targetUrl, formSelector) {
    var form = $j(formSelector);
    var dialogData = form.serialize();
    $j.ajax({
        type: 'POST',
        url: targetUrl + "&callback=submit",
        data: dialogData,
        success: function(data) {
            processServerValidation(dialogPlaceHolder, dialogSelector, dialogContentSelector, confirmDialogSelector, confirmDialogClass, confirmDialogOptions, data );
        },
        dataType: "json",
        error: function(xhr, status, error) {
            removeLoadingImage(dialogSelector);
            updateTips(dialogSelector, errMsg);
        }
    });
}