/*
 * Functions that support the common xslt library
 */
function ajaxButtonClick(service, form, callback, errorCallback, leaveForcefield){
    	var data = null;
    	if(form) {
	        if (form.substring(0, 1) != '#') {
	            form = '#' + form;
	        }
	        data = $(form).serialize();
    	}
    	return ajaxButtonRequest(service, data, callback, errorCallback, leaveForcefield);
}

function ajaxButtonRequest(service, data, callback, errorCallback, leaveForcefield, requestType){
    showForcefield();
    try {
    	if(!requestType) {
    		requestType = "POST";
    	}
    	logit(basepath + service);
        $.ajax({ 
            data: data,
            type: requestType,
            url: basepath + service,
            success: function(data, textStatus, XMLHttpRequest){
        		if(data && data.responseCode && data.responseCode == 401) {
        			document.location = basepath + data.responseObj;
        		}
                if(leaveForcefield) {
                    callback.call(this, data);
                    return;
                }
                clearForcefield(data, callback);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown){
                clearForcefield(errorThrown, errorCallback);
            }
        });
    } 
    catch (e) {
        alert(e);
    }
    return false;
}


function ajaxSelectLoader(service, action, el){
    showForcefield();
    try {
    	var data = {};
    	var form = el.parents('form');
    	if(form) {
	        data = $(form).serializeArray();
    	}
    	for(var i = 0; i < data.length; i++) {
    		if(data[i].name == 'action') {
    			data[i].value = action;
    		}
    	}
    	data[data.length] = {name: 'select_id', value: el.attr('id')};
        $.ajax({
            data: data,
            type: "GET",
            url: basepath + service,
            success: function(data, textStatus, XMLHttpRequest){
                clearForcefield(data, _ajaxSelectLoader);
            }
        });
    } 
    catch (e) {
        alert(e);
    }
    return false;
}

function _ajaxSelectLoader(data){
    if (!data) {
        console.log('no data returned');
        return;
    }
    if (data.responseCode && data.responseCode != '200') {
    	alertMessage(data.responseObj)
    	return;
    }
    
    		
    var html = "";
    var select = $('#' + data.select_id);
    for(var key in data.responseObj) {
    	html += "<option value='" + key + "'>" + data.responseObj[key] + "</option>"; 
    }
    select.html(html);    
}

function disableButtons(disable){
	if(!disable) {
		$(document).find("input:button").removeAttr('disabled');
		$(document).find("button").removeAttr('disabled');
		return;
	}
    $(document).find("input:button").attr('disabled', 'disabled');
    $(document).find("button").attr('disabled', 'disabled');
}

function showForcefield(){
    $('#pleaseWait').overlay({
        
        // some mask tweaks suitable for modal dialogs
        mask: {
            color: '#ffffff',
            loadSpeed: 200,
            opacity: 0.9
        },
        load: true,
        closeOnClick: false,
        autoOpen: false
    });
    if(!$('#pleaseWait').overlay().isOpened()) {
    	$('#pleaseWait').overlay().load();
	}
}

function clearForcefield(data, callback){
    $('#pleaseWait').overlay().close()
    disableButtons(false);
    
    if (callback) {
        try {
            callback.call(this, data);
        } 
        catch (e) {
            alert(e);
        }
    }
}

function clearErrors(parent){
	$(parent).find('.errored div.fieldError').detach();
}

function validate(parent){
    var isValid = true;
    var params;
    try {
        clearErrors(parent);
        var elements = $(parent).find("[v]");
        
        params = Object();
        for (var i = 0; i < elements.length; i++) {
            params[elements[i].id] = elements[i];
        }
        var response = _validate(parent, params);
        
        for (var i = 0; i < response.length; i++) {
            var r = response[i];
            if (!r.success) {
                isValid = false;
                addError(r.id, r.message)
            }
        }
    } 
    catch (e) {
        alert(e);
        logit(params);
        isValid = false;
    }
    switchTab();
    return isValid;
}

function switchTab(){
    var foundTab = false;
    $('fieldset.tab').each(function(index, element){
        if (foundTab) {
            return;
        }
        console.log(element);
        if ($(element).find("div.errored").size() > 0) {
            $('#editproduction_tabs').select(index);
            foundTab = true;
        }
    });
}

function addError(id, message){
    var el = $('#' + id).parent();
    el.addClass("errored");
    
    var errorDiv = document.createElement("div");
    errorDiv.className = "fieldError";
    errorDiv.setAttribute("title", message);
    errorDiv.innerHTML = message;
    el.append(errorDiv);
}

function _validate(parent, params){
    var response = Array();
    
    parent = $(parent);
    var v = parent.attr("v");
    if (v) {
        var vs = eval(v);
        for (var i = 0, il = vs.length; i < il; i++) {
            var f = validateFunction(vs[i]);
            if (window[f]) {
                response.push(window[f](params, parent.attr("id")));
            }
        }
    }
    parent.children().each(function(index){
        response = response.concat(_validate(this, params));
    });
    return response;
}

function validateFunction(name){
    if (name.length > 0) {
        return "validate" + camelCase(name);
    }
}

function camelCase(original){
    return original.substring(0, 1).toUpperCase() + original.substring(1);
}

function validateRequired(params, id){
	if(/_wrapper$/.test(id)) {
		// checkboxgroup or radiogroup make sure an input is checked
		if($(params[id]).find("input:checked").length > 0) {
			return new ValidationResponse(id, true);			
		}
	}
	else if (params[id]) {
		var el = $(params[id]);
        if (el.is(":hidden") || isNotEmpty(el.val())) {
            return new ValidationResponse(id, true);
        }
    }
    var fieldName = $(document).find('label[for=' + id + ']');
    if (fieldName.length > 0) {
        return new ValidationResponse(id, false, $(fieldName[0]).html() + " is required.");
        ;
    }
    return new ValidationResponse(id, false, "This field is required.");
}

function validatePositiveInteger(params, id){
    if (params[id]) {
        var val = $(params[id]).val();
        if (isNotEmpty(val) && val > 0) {
            return new ValidationResponse(id, true);
        }
    }
    return new ValidationResponse(id, false, "This field must be greater than 0.");
}

function validateInteger(params, id){
    if (params[id]) {
        var val = $(params[id]).val();
        if (String(val).match(/^\s*\d*\s*$/)) {
            return new ValidationResponse(id, true);
        }
    }
    return new ValidationResponse(id, false, "This field must be a number.");
}

function validateStripeCardNumber(params, id) {
    if (params[id]) {
        var val = $(params[id]).val();
        if (Stripe.validateCardNumber(val)) {
        	return new ValidationResponse(id, true);
        }
    }
    return new ValidationResponse(id, false, "Invalid credit card number.");
}

function validateStripeExpiry(params, id) {
    if (params[id]) {
        var exp_month = $('#card-expiry-month').val();
        var exp_year = $('#card-expiry-year').val();
        if (Stripe.validateExpiry(exp_month, exp_year)) {
        	return new ValidationResponse(id, true);
        }
    }
    return new ValidationResponse(id, false, "Card is expired.");
}

function validateStripeCvc(params, id) {
    if (params[id]) {
        var val = $(params[id]).val();
        if (Stripe.validateCVC(val)) {
        	return new ValidationResponse(id, true);
        }
    }
    return new ValidationResponse(id, false, "Invalid CVC.");
}

function validateStripeCardType(params, id) {
    if (params[id]) {
        var val = $(params[id]).val();
        if (Stripe.cardType(val) != 'Unknown') {
        	return new ValidationResponse(id, true);
        }
    }
    return new ValidationResponse(id, false, "Unknown credit card type.");
}




var warnedForms = new Object();

function validateOnlyOne(params, id){

    var links = $('div.onlyOne');
    
    var foundChecked = 0;
    for (i = 0; i < links.length; i++) {
    
        if($(links[i]).find("input:checkbox:checked").length > 0) {
        	foundChecked++;
        }
    }
    
    if (foundChecked == 0) {
        return new ValidationResponse(id, false, "You must select an option.");
    }
    
    if (foundChecked > 1) {
        return new ValidationResponse(id, false, "You must select only one option.");
    }
    
    return new ValidationResponse(id, true);
}

function validatePassword(params, id){

    var passwordFields = $(".password input:password");
    
    if (passwordFields.length != 2) {
        return new ValidationResponse(id, false, "Unable to find two password fields");
    }
    
    
    var password1 = passwordFields[0];
    var password2 = passwordFields[1];
    
    if (password1.value != password2.value) {
        return new ValidationResponse(id, false, "Passwords do not match");
    }
    
    return new ValidationResponse(id, true);
}

function validateCreditcard(params, id) {
	return new ValidationResponse(id, true);
	/*
	logit('here');
	logit(params);
	logit(id);
	var val = $(params[id]).val();
	if(val == '') {
		return new ValidationResponse(id, true);
	}
	var f = $.validator.methods['creditcard2'];
	if(f(val, params[id],$(params['card_type']).val())) {
		return new ValidationResponse(id, true);
	}
	//logit(el.validate({rules: {'x_card_num': {creditcard2: function(){ return $(params['cardType']).val(); }}}}));

	return new ValidationResponse(id, false, "Invalid Credit Card Number");
	*/
}


function isNotEmpty(val){
	if(val == undefined || val == null) {
		return false;
	} 
    if (String(val).match(/^\s*$/)) {
        return false;
    }
    return true;
}
function isEmpty(val) {
	return !isNotEmpty(val);
}

ValidationResponse = function(id, success, message){
    this.id = id;
    this.success = success;
    this.message = message;
};

function displayHelp(el){
    hideHelp();
    $(el).find('.hidden').css('left', 'auto');
}

function hideHelp(){
    $('.hidden').css('left', '-999em');
}

function S4(){
    return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}

function guid(){
    return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}

function addHashEditRow(hashedit){
    var id = guid();
    
    var tbody = $(hashedit).find("table tbody");
    var rows = tbody.find("tr");
    var index = rows.size();
    
  	var name = hashedit.replace('#', '');
    
    var tr = document.createElement("tr");
    tr.id = id;
    var td1 = document.createElement("td");
    var field0 = document.createElement("input");
    field0.name = name + "_0_" + index;
    td1.appendChild(field0);
    var td2 = document.createElement("td");
    var field1 = document.createElement("input");
    field1.name = name + "_1_" + index;
    td2.appendChild(field1);
    tr.appendChild(td1);
    tr.appendChild(td2);
    
    
    var td3 = document.createElement("td");
    var a = document.createElement("a");
    a.setAttribute("href", "#");
    a.setAttribute("onclick", "deleteHashEditRow('" + hashedit + "', '" + id + "'); return false;");
    var img = document.createElement("img");
    img.src = "images/delete.gif";
    a.appendChild(img);
    td3.appendChild(a);
    tr.appendChild(td3);
    
    tbody.append(tr);
}

function deleteHashEditRow(hashedit, uid){
    var el;
    if (!uid) {
        el = $(hashedit).find("table tbody tr:first-child");
    }
    else {
        el = $('#' + uid);
    }
    
    if ($(hashedit).find("table tbody tr").size() > 1) {
        el.detach();
    }
    else {
        var rows = el.find("td input").each(function(index){
            $(this).val("");
        });
    }
}

function editSelect(id, label, promptStart, overrideLabel, validator){
		if(isEmpty(promptStart)) {
			promptStart = "Override with new ";
		}
		if(isEmpty(validator)) {
			validator = function(id, val, overrideLabel) {
		        if(isNotEmpty(val)) {
		        	overrideSelect(id, val, overrideLabel);
		        }
		        return false;
			};
		}
        var value = prompt(promptStart + label + ": ");
        return validator.call(this, id, value, overrideLabel);
}

function overrideSelect(id, value, overrideLabel) {
    var select = document.getElementById(id);
    for(var i = 0; i < select.options.length; i++) {
    	if(select.options[i].value == value) {
    		select.options[i].selected = true;
    		return;
    	}
    }
    if(isEmpty(overrideLabel)) {
    	overrideLabel = " Override";
    }
    select.options[select.options.length] = new Option(value + " (" + overrideLabel + ")", value);
    select.options[select.options.length - 1].selected = true;
}

function filterPrompt(el, tableId, filterColumn){
    hideFilterPrompt();
    
    var div = document.createElement("DIV");
    div.setAttribute("class", "filter");
    div.setAttribute("id", "__filter");
    div.innerHTML = "<div class=\"titlebar\"><a onclick=\"hideFilterPrompt();\" href=\"#\"><img align=\"top\" alt=\"close window\" src=\"" + imagepath + "close.gif\" /></a></div><div class=\"filterText\"><input type=\"text\" id=\"__filter_input\" /><a href=\"#\" onclick=\"return filterAjaxTable('" + tableId + "', '" + filterColumn + "',$('#__filter_input').val())\"><img align=\"top\" alt=\"close window\" src=\"" + imagepath + "find.gif\" /></a></div></div>";
    el.parentNode.appendChild(div);
    return false;
}

function hideFilterPrompt(){
    var div = $('#__filter');
    if (div) {
        div.detach();
    }
}

function filterAjaxTable(tableId, filterColumn, filter){
    hideFilterPrompt();
    
    var table = $(tableId);
    var service = table.attr("service");
    var sort = table.attr("sort");
    var direction = table.attr("direction");
    
    var form = '#' + table.attr("form");
    var paramString = $(form).serialize();
    var params = parseQueryString(paramString);
    
    params["action"] = "populateTable";
    params["tableId"] = tableId;
    params["currentPage"] = 1;
    params["filterColumn"] = filterColumn;
    params["filter"] = filter;
    if (!sort) {
        sort = 1;
    }
    if (!direction) {
        direction = "asc";
    }
    params["sort"] = sort;
    params["direction"] = direction;
    
    table.attr("currentPage", 1);
    table.attr("sort", sort);
    table.attr("direction", direction);
    table.attr("filterColumn", filterColumn);
    table.attr("filter", filter);
    
    $.ajax({
        data: params,
        type: "POST",
        url: basepath + service,
        success: function(data, textStatus, XMLHttpRequest){
            logit(XMLHttpRequest);
            _sortAjaxTable(data);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            alertError(errorThrown);
        }
    });
    return false;
}

function parseQueryString(queryString){
    var params = Object();
    var pairs = queryString.split("&");
    for (var i = 0; i < pairs.length; i++) {
        var tuple = pairs[i].split("=");
        params[tuple[0]] = tuple[1];
    }
    return params;
}

function pageAjaxTable(tableId, page){
    var table = $(tableId);
    var service = table.attr("service");
    var sort = table.attr("sort");
    var direction = table.attr("direction");
    var filter = table.attr("filter");
    var filterColumn = table.attr("filterColumn");
    
    var form = '#' + table.attr("form");
    var paramString = $(form).serialize();
    var params = parseQueryString(paramString);
    params["action"] = "populateTable";
    params["tableId"] = tableId;
    params["currentPage"] = page;
    params["filter"] = filter;
    params["filterColumn"] = filterColumn;
    if (!sort) {
        sort = 1;
    }
    if (!direction) {
        direction = "asc";
    }
    params["sort"] = sort;
    params["direction"] = direction;
    
    table.attr("currentPage", page);
    table.attr("sort", sort);
    table.attr("direction", direction);
    
    $.ajax({
        data: params,
        type: "POST",
        url: basepath + service,
        success: function(data, textStatus, XMLHttpRequest){
            logit(XMLHttpRequest);
            _sortAjaxTable(data);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            alertError(errorThrown);
        }
    });
    return false;
}

function sortAjaxTable(tableId, sort){

    var table = $(tableId);
    var service = table.attr("service");
    var oldSort = table.attr("sort");
    var direction = table.attr("direction");
    var filter = table.attr("filter");
    var filterColumn = table.attr("filterColumn");
    var form = '#' + table.attr("form");
    var paramString = $(form).serialize();
    var params = parseQueryString(paramString);
    
    params["action"] = "populateTable";
    params["tableId"] = tableId;
    params["currentPage"] = table.attr("currentPage");
    params["sort"] = sort;
    params["filter"] = filter;
    params["filterColumn"] = filterColumn;
    if (sort == oldSort) {
        direction = (direction == "asc" ? "desc" : "asc");
    }
    else {
        direction = "asc";
    }
    params["direction"] = direction;
    
    table.attr("sort", sort);
    table.attr("direction", direction);
    
    $.ajax({
        data: params,
        type: "POST",
        url: basepath + service,
        success: function(data, textStatus, XMLHttpRequest){
            logit(XMLHttpRequest);
            _sortAjaxTable(data);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            alertError(errorThrown);
        }
    });
    return false;
}

function _sortAjaxTable(response){
    try {
        var data = response["data"];
        var table = $(response["tableId"]);
        clearTable(response["tableId"]);
        
        var body = table.find("tbody").first();
        for (i = 0; i < data.length; i++) {
            var row = data[i];
            var tr = document.createElement("TR");
            tr.setAttribute("class", "transRow" + (i % 2 ? 1 : 2));
            for (j = 0; j < row.length; j++) {
                var td = document.createElement("TD");
                if (row[j].match(/<img/)) {
                    td.className = "centeredImg";
                }
                td.innerHTML = row[j];
                tr.appendChild(td);
            }
            body.append(tr);
        }
        table.attr("totalPages", response["totalPages"]);
        redrawPager(response["tableId"])
        hideFilterPrompt();
    } 
    catch (e) {
        logit(response);
        alertError(e);
    }
}

function redrawPager(tableId){
    var table = $(tableId);
    var currentPage = Number(table.attr("currentPage"));
    var totalPages = Number(table.attr("totalPages"));
    logit(table.attr("currentPage"));
    
    var pagerCell = table.find(".pager").first();
    
    // first we determine the page numbers we need
    var pages = Array();
    var start = currentPage - 2;
    if (totalPages <= 5) {
        start = 1;
    }
    for (i = start; i < currentPage; i++) {
        // so count down to zero, add all pages greater than 0 and greater than
		// currentPAge - 2
        if (i > 0) {
            pages[pages.length] = i;
        }
    }
    for (i = currentPage; i <= new Number(currentPage) + 2; i++) {
        if (i <= totalPages) {
            pages[pages.length] = i;
        }
    }
    
    if (totalPages <= 5) {
        for (i = pages.length + 1; i <= totalPages; i++) {
            pages[pages.length] = i;
        }
    }
    else 
        if (pages.length != 5 && (pages[0] == 1 || pages[0] == 2)) {
            for (i = pages.length + 1; i <= 5; i++) {
                if (i <= totalPages) {
                    pages[pages.length] = i;
                }
            }
        }
        else 
            if (pages.length != 5 && (pages[pages.length - 1] == totalPages || pages[pages.length - 1] == (totalPages - 1))) {
                var max = pages[0];
                var start = max - (5 - pages.length);
                for (i = start; i < max; i++) {
                    pages[pages.length] = i;
                }
            }
    pages.sort(function(a, b){
        return a - b
    });
    var output = "";
    if (table.attr("filter") && table.attr("filter").length > 0) {
        output += "<div class=\"clearFilter\"><a href=\"#\" onclick=\"$('" + tableId + "').attr('filter', ''); return pageAjaxTable('" + tableId + "', '" + currentPage + "');\"><img align=\"top\" alt=\"start\" title=\"start\" src=\"" + imagepath + "/delete.gif\" />Clear Filter</a></div>";
    }
    if (currentPage > 0 && currentPage != 1) {
        output += "<a href=\"#\" onclick=\"return pageAjaxTable('" + tableId + "', '1');\" class=\"pager_first\">&laquo; First</a>";
        output += "<a href=\"#\" onclick=\"return pageAjaxTable('" + tableId + "', '" + (new Number(currentPage) - 1) + "');\" class=\"pager_prev\">&laquo; Prev</a>";
    }
    for (i = 0; i < pages.length; i++) {
        output += "<a " + (pages[i] == currentPage ? "class=\"pager_selected ui-corner-all\"" : "class=\"pager_unselected ui-corner-all\"") + " href=\"#\" onclick=\"return pageAjaxTable('" + tableId + "', '" + pages[i] + "');\">" + pages[i] + "</a>";
    }
    if (totalPages > 0 && currentPage != totalPages) {
        output += "<a href=\"#\" onclick=\"return pageAjaxTable('" + tableId + "', '" + (new Number(currentPage) + 1) + "');\" class=\"pager_next\">Next &raquo;</a>";
        output += "<a href=\"#\" onclick=\"return pageAjaxTable('" + tableId + "', '" + totalPages + "');\" class=\"pager_last\">Last &raquo;</a>";
    }
    pagerCell.html(output);
}

function clearTable(tableId){
    var table = $(tableId);
    var body = table.find("tbody").first();
    var rows = body.find("tr");
    for (i = rows.length; i > 0; i--) {
        $(rows[i - 1]).detach();
    }
}

function toggleToggle(name, formField, value){
    // $(formField).value = value;
    //    
    // var links = $(document).getElementsByClassName("toggle");
    // for(i = 0; i < links.length; i++) {
    // if(links[i].getAttribute("formField") == formField) {
    // if(links[i].getAttribute("toggleId") != name) {
    // $(links[i].getAttribute("toggleId") + "_checkbox").checked = false;
    // }
    // }
    // }
    // $(name + "_checkbox").checked = true;
    return true;
}

function prefix(value, prefixChar){
    if (!prefixChar) {
        prefixChar = "0";
    }
    value = String(value);
    if (value.length == 1) {
        return prefixChar + value;
    }
    return value;
}

function formatMoney(value) {
	value = Math.ceil(value * 100) / 100;
	var stringValue = String(value);
	if(stringValue.lastIndexOf('.') == -1) {
		stringValue += '.';
	}
	if(stringValue.lastIndexOf('.') + 3 != stringValue.length) {
		var additionalZeros = stringValue.lastIndexOf('.') + 3 - stringValue.length;
		for(i = 0; i < additionalZeros; i++) {
			stringValue += '0';
		}
	}
	return stringValue;
}

var validatedElements = Array();
function addPollingValidation(el){
    validatedElements[validatedElements.length] = $(el);
}

function pollValidation(){
}

function _pollValidation(transport){
}

function updateColor(elName){
    var el = $(elName);
    var currentValue = jQuery.trim(el.val());
    if (currentValue.length == 4) {
        var newCurrentValue = "#";
        for (var i = 1, il = currentValue.length; i < il; i++) {
            newCurrentValue += prefix(currentValue.charAt(i), currentValue.charAt(i));
        }
        currentValue = newCurrentValue;
        el.val(currentValue);
    }
    if (currentValue.length == 7) {
        el.css("background-color", currentValue);
        var red = parseInt(currentValue.substring(1, 3), 16);
        var green = parseInt(currentValue.substring(3, 5), 16);
        var blue = parseInt(currentValue.substring(5, 7), 16);
        
        var textColor = "#" + prefix((255 - Number(red)).toString(16)) + prefix((255 - Number(green)).toString(16)) + prefix((255 - Number(blue)).toString(16));
        el.css("color", textColor);
    }
}

function alertMessage(msg, callback){
	smoke.alert(msg, {}, function() {
		logit("In Callback");
		if(callback) {
			callback.call();
		}
	});
}

function promptMessage(title, msg, callback, cancelCallback){
    try {
        return $('<div>' + msg + '</div>').dialog({
            autoOpen: true,
            title: title,
            buttons: {
        		"Cancel": function(){
		            if(cancelCallback) {
		            	cancelCallback(this);
		            }
        	
                    $(this).dialog("close");
            		dialog.dialog('distroy');
            		dialog.detach();
                },
        		"Ok": function(){
                    
                    if(callback) {
                    	if(callback(this)) {
                    		$(this).dialog("close");
                    		dialog.dialog('distroy');
                    		dialog.detach();
                    	}
                    } else {
                    	$(this).dialog("close");
                    	dialog.dialog('distroy');
                		dialog.detach();
                    	
                    }
                }
            }
        });
    } 
    catch (e) {
        alert(e);
    }
}


function alertError(msg, callback){
	try {
		logit(msg);
		smoke.alert(msg);
		if(callback) {
			callback.call();
		}
	} catch(e) {
		alert(e);
	}
}

function logit(msg){
    if (window.console) {
        window.console.log(msg);
    }
}

function openModal(modalId, title, callback){
    var dialog = $('#' + modalId).dialog({
        modal: true,
        title: title,
        height: 'auto',
        width: 'auto',
        autoOpen: true,
        open: function(){
            if (callback) {
                callback($('#' + modalId).find('form').attr('id'))
            }
        }
    });
    return false;
}

function openSigninModal(modalId, title){
    var dialog = $('#' + modalId).dialog({
        modal: true,
        title: title,
        height: 'auto',
        width: 'auto',
        autoOpen: true,
        position: ['top', 'right']
    });
    return false;
}

function clearModal(formId){
    $('#' + formId).find("input:hidden[name != 'modalId']").val("");
    $('#' + formId).find("input:text").val("");
}

function showHelp(className, index){
    $('.' + className).hide();
    if ($('#' + className + "-" + index).length) {
        $('#' + className + "-" + index).show();
    }
}

