﻿function changeFormAction(form, newAction) {
    var action = form.action;
    var lastSlash = action.lastIndexOf('/');
    if (lastSlash = action.length) { action = action.substring(0, action.length - 1); }
    
    form.action = action.substring(0, action.lastIndexOf('/')) + '/' + newAction;
}

function setCurrentSelectedRow() {
    var selId = $.query.get('selId'); 
    if (!selId) { return; }
    var row = $("table.entity-list tr#" + selId);
    if (!row) { return; }
    row.addClass('selected-row');    
    
}

function goToUrlWithId(prefix, ddlid) {
    var val = $('#' + ddlid + ' option:selected').val();
    if (val <= 0) return;
    var url = prefix + val;
    document.location = url;
}

function displayFieldsWithClass(className, ddlId) {
    var selectedOption = $('#' + ddlId + ' option:selected');
    var display = selectedOption.attr('is-project-portfolio');
    if (display == 'True') $('p.' + className).show();
    else $('p.' + className).hide();
}

var canChangeAddress = false;
function checkContactAddress(onload) {		
	var add = $('#CompanyID option:selected').attr('address');	
	if (onload) {
		var currentAdd = $('#ContactAddress').val();
		canChangeAddress = !currentAdd || currentAdd == add;
		$('#ContactAddress').change(function() { canChangeAddress = false; });
	}
	if (canChangeAddress) { $('#ContactAddress').val(add); }
}

function opportunityCompanyChanged() {
	$('#ContactID').val('0');
	addEmailLinkToContactSelect();
}

function addEmailLinkToContactSelect() {
    var selectedOption = $('#ContactID option:selected');
    var email = selectedOption == null ? null : selectedOption.attr('contact-email');

    var span = $('#ContactID').parent('span');
    span.children('.contact-email').remove();
    if (!email) { return; }

    var emailLink = $("<a class='contact-email'></a>");
    span.append(emailLink);
    emailLink.html(email);
    emailLink.attr('href', 'mailto:' + email);
}

var selidxJar;
function initialiseTabs() {
    var tabs = $('ul#menu li a');
    if (!tabs.length > 0) { return; }
    if (!selidxJar) { selidxJar = $.cookieJar('selidxJar'); } // Lazy Load
    setSelectedTab(tabs);
    recordTabClicks(tabs);
} 
function recordTabClicks(tabs) {
    tabs.click(function() {
        for (var i = 0; i < tabs.length; i++) {
            if ($(this).attr('href') == $(tabs[i]).attr('href')) {
                selidxJar.set('val', i);
                break;                
            }
        }
        return true;
    });
}

function setSelectedTab(tabs) {    
    var selidx = -1;
    for (var i = 0; i < tabs.length; i++) {
        if (location.href == tabs[i].href) {
            selidx = i;
            break;
        }
    }
    if (selidx < 0) {
        selidx = selidxJar.get('val');
        if (!(selidx >= 0)) {
            selidxJar.set('val', 0);
            selidx = 0;
        }
    }
    $(tabs[selidx]).addClass('current');
}

function focusFirstEditField() {
    var control = $(':text,textarea').eq(0);
    control.focus();
}

var initialControlStates;
function initialiseDirtyChecking() {
    if ($('#mainform').length == 0) { return; }
    initialControlStates = getCurrentControlStates();
}

function getCurrentControlStates() {
    var controlStates = new Array();
    var controls = $('#mainform :input');
    for (var i = 0; i < controls.length; i++) {
        var control = controls[i];
        if (!control.id) { continue; }
        controlStates[controlStates.length] = { "ID": control.id, "Value": $(control).val() };
    }
    return controlStates;
}

function checkDirtyStates() {
    if (!initialControlStates || !haveControlStatesChanged()) { return true; } // Not a dirtiable page
    return window.confirm("Are you sure you want to navigate away from this page?\n\n"
	    + "Leaving this page will lose unsaved changes."
	    + "\n\nPress OK to continue, or Cancel to stay on the current page.");
}

function haveControlStatesChanged() {
    var currentControlStates = getCurrentControlStates();
    if (currentControlStates.length != initialControlStates.length) return true;
    for (var i = 0; i < initialControlStates.length; i++) {
        var initial = initialControlStates[i];
        var current = currentControlStates[i];
        if (initial.ID != current.ID) { return true; }
        if (initial.Value != current.Value) { return true; }
    }
    return false;
}

function addSorterToTable(table) {
    $.tablesorter.addParser({
        id: 'date',
        is: function(s) { return false; }, // return false so this parser is not auto detected
        format: function(s) { // format your data for normalization
            s = trim(s);
            if (!s || s == '&nbsp;' || s.length == 0) return 0;
            return getDateFromFormat(s, "d/NNN/y");
        },
        type: 'numeric' // set type, either numeric or text
    });
    $.tablesorter.addParser({
        id: 'ordercolumn',
        is: function(s) { return false; }, // return false so this parser is not auto detected
        format: function(s) { // format your data for normalization            
            if (!s || s == '&nbsp;' || s.length == 0) return 0;
            var teststr = "order-hint";
            var idx = s.indexOf(teststr);
            if (idx < 0) { return 0; }            
            idx = idx + teststr.length + 2;
            var endidx = s.indexOf('<', idx);
            var parsedHint = s.substring(idx, endidx);
            return parsedHint;
        },
        type: 'numeric' // set type, either numeric or text
    });
    table.tablesorter({ widgets: ['cookie'] });
}

function trim(string) {
    if (!string) { return string; }
    return string.replace(/^\s+|\s+$|\"/g, ""); // Trim and remove spaces
}

function addOnTheFly(mainPageEntityType, aofEntityType, maxlen, edit) {    
    var aofDynamicDivId = aofEntityType + 'IDAofDiv';
    var aofDynamicDiv = $('#' + aofDynamicDivId);
    var selectedOption = edit ? $('#' + aofEntityType + 'ID option:selected') : null;
    var editId = selectedOption ? selectedOption.val() : 0;
    var currentValue = selectedOption && editId != 0 ? selectedOption.text() : '';
    var saveHtml = "addOnTheFlySave('" + mainPageEntityType + "', '" + aofEntityType + "', " + editId + ");";
    var popupHtml = "<table class='aof-popup'><tr><td><input id='" + aofEntityType + "AofInput' type='text' maxlength=" + maxlen + " onkeypress=\"if (window.event && window.event.keyCode == 13) { " + saveHtml + "; return false;} \" value='" + currentValue + "'/></td>";    
    popupHtml += "<td><a class=\"aof-save\" onclick=\"" + saveHtml + " return false;\"><img src='../../resources/Icons/disk.png' title='Save'/></a></td></tr>";
    popupHtml += "</table>";
    var popup = $(popupHtml);
    
    aofDynamicDiv.empty();
    aofDynamicDiv.append(popup);
    aofDynamicDiv.stop().animate({
        width: "515px",
        height: "20px"
    }, 400, null, function() { popup.find('#' + aofEntityType + 'AofInput')[0].focus(); });
}

function addOnTheFlySave(mainPageEntityType, aofEntityType, aofEditId) {
	var input = $('#' + aofEntityType + 'AofInput');
    var newName = trim(input.val());
    var select = $('#' + aofEntityType + 'ID');
    var additionalDataFields = select.attr('additionalFields');
    var additionalData = [];
    if (additionalDataFields) {
		additionalDataFields = additionalDataFields.split(',');
		for (var i = 0; i < additionalDataFields.length; i++) {
			additionalData.push(additionalDataFields[i] + ':' + $('#' + additionalDataFields[i]).val());
		}
    }
    clearAddOnTheFlyEditControl(aofEntityType);
    if (!newName) { return; }    
    $.ajax({
        type: "POST",
        url: "../../EntityEditCreate.mvc/AddOnTheFlySave",        
        data: "mainPageEntityType=" + mainPageEntityType + "&aofEntityType=" + aofEntityType + "&aofEditId=" + aofEditId  + "&newName=" + newName + "&additionalData=" + additionalData.join(','),
        success: function(newSelectOptions) {
            select.empty();
            select.append($(newSelectOptions));            
        },
        error: function(msg) { alert("Error: " + msg); }
    });
}

function clearAddOnTheFlyEditControl(aofEntityType) {
    var aofDynamicDivId = aofEntityType + 'IDAofDiv';
    var aofDynamicDiv = $('#' + aofDynamicDivId);
    aofDynamicDiv.empty();
    aofDynamicDiv.hide();
}

$(document).ready(function() {
    initialiseTabs();
    focusFirstEditField();
    initialiseDirtyChecking();
});