if (typeof ecnext == "undefined") {
	ecnext = {};
}
if (!("uecp" in ecnext)) {
	ecnext.uecp = {};
}

ecnext.connect = function(kwArgs) {
	kwArgs.target["on" + kwArgs.eventName.toLowerCase()] = kwArgs.handler;
	if (kwArgs.target.captureEvents)
		kwArgs.target.captureEvents(Event[kwArgs.eventName.toupperCase()]);
};


ecnext.getFormFields = function (element_or_id) {
	var form = ecnext.byId(element_or_id);
	var fields = {};
	for (var i=0; i< form.elements.length; ++i) {
		var e = form.elements[i];

		if (!e.disabled && (e.type != "radio" || e.checked)) {
			fields[e.name] = e.value;
		}
	}

	return fields;
};

ecnext.copyObject = function (src, dst) {
	dst = dst || {};
	var emptyObj = {};
	for (var key in src) {
		if (!(key in emptyObj)) {
			if (typeof src[key] == "object") {
				dst[key] = ecnext.copyObject(src[key]);
			}
			else {
				dst[key] = src[key];
			}
		}
	}
	return dst;
};

ecnext._compareObjectsOneWay = function (obj1, obj2, kwArgs) {
	var mismatchedFields = [];
	for (var key in obj1) {
		var value1 = obj1[key] || '';
		if (!("fieldsRe" in kwArgs) || key.match(kwArgs.fieldsRe))
		{
			var value2 = '';;
			if (key in obj2) {
				value2 = obj2[key] || '';
			}

			/* Avoid dups. */
			if (!kwArgs._secondTime || !(key in obj2)) {
				if (value1 != value2) {
					mismatchedFields.push(key);
				}
			}
		}
	}

	return mismatchedFields;
};

ecnext.compareObjects = function (obj1, obj2, kwArgs) {
	var _kwArgs = ecnext.copyObject(kwArgs, {_secondTime: false});
	var mismatchedFields1 = ecnext._compareObjectsOneWay(obj1, obj2, _kwArgs);
	_kwArgs._secondTime = true;
	var mismatchedFields2 = ecnext._compareObjectsOneWay(obj2, obj1, _kwArgs);
	return mismatchedFields1.concat(mismatchedFields2);
};

ecnext.uecp.focused = {
	contributor_first: false,
	contributor_last: false,
	contact_name_first: false,
	contact_name_last: false
};

ecnext.uecp.preInitFocused = function(fieldName, msg) {
	var form = document.form1;
	if (!(fieldName in form) || form[fieldName].value) {
		ecnext.uecp.focused[fieldName] = true;
	}
	else {
		form[fieldName].value = msg;
	}
};

ecnext.uecp.initOnFocus = function(fieldName) {
	var form = document.form1;
	if (!ecnext.uecp.focused[fieldName]) {
		ecnext.uecp.focused[fieldName] = true;
		form[fieldName].value = '';
	}
};

ecnext.uecp.clearUnfocused = function() {
	var form = document.form1;
	for (var key in ecnext.uecp.focused) {
		if (key in form && !ecnext.uecp.focused[key]) {
			form[key].value = '';
		}
	}
};

ecnext.uecp.onLoad = function(kwArgs) {
	var relationshipInputs = document.form1.relationship;
	for (i=0; i<relationshipInputs.length; ++i) {
		var connectArgs = { target: relationshipInputs[i], handler: ecnext.uecp.updateuecpformstate, eventName: "click" };
		ecnext.connect(connectArgs);
		//connectArgs.eventName = "change";
		//ecnext.connect(connectArgs);
	}

	var sicDropdown = document.form1.industry2digit;
	ecnext.connect({
		target: sicDropdown,
		handler: ecnext.uecp.updateSicDropdown,
		eventName: "change"
	});

	ecnext.connect({
		target: document.form1.contact_name_first,
		handler: ecnext.uecp.updateuecpformstate,
		eventName: "blur"
	});

	ecnext.connect({
		target: document.form1.contact_name_last,
		handler: ecnext.uecp.updateuecpformstate,
		eventName: "blur"
	});

	ecnext.uecp.preInitFocused('contributor_first', 'First Name');
	ecnext.uecp.preInitFocused('contributor_last', 'Last Name');

	ecnext.uecp.preInitFocused('contact_name_first', 'First Name');
	ecnext.uecp.preInitFocused('contact_name_last', 'Last Name');

	ecnext.uecp.updateuecpformstate();
};

ecnext.uecp.getTwoDigitSic = function() {
	var twoDigitSicCode = '';
	var selectedInfo = ecnext.getSelected(document.form1.industry2digit);
	var matches = selectedInfo.value.match(/(\d{2})00\)$/);
	if (matches) {
		twoDigitSicCode = matches[1];
	}
	return twoDigitSicCode;
};

ecnext.uecp.updateSicDropdown = function() {
	var newTwoDigitSic = ecnext.uecp.getTwoDigitSic();
	if (newTwoDigitSic) {
		var sicApi = new ecnext.JsonService({uri: '/api/siccodes'});
		var dResult = sicApi.sendMessage({
			msg: {
				action: 'getOptions',
				sic2: newTwoDigitSic
			}
		});

		var sicDropdown = document.form1.industry;
		var sicDropdownContainer = sicDropdown.parentNode;
		sicDropdownContainer.innerHTML = '<select name="industry" disabled="disabled"><option value="">Filtering industry list...</option></select>';

		dResult.addCallback(function(result) {
			var currentTwoDigitSic = ecnext.uecp.getTwoDigitSic();

			if (currentTwoDigitSic == newTwoDigitSic) {
				var sicDropdownContainer = document.form1.industry.parentNode;
				sicDropdownContainer.innerHTML = '<select name="industry">' + result.html + '</select>';
			}

			return result;
		});

		dResult.addErrback(function(error) {
			console.debug("error filtering sics");
			return error;
		});
	}
};

ecnext.uecp.uecpshowmore = 0;

ecnext.uecp.checkUecp = true;
ecnext.uecp.setCheckUecp = function (val) {
	ecnext.uecp.checkUecp = val;
	return true;
};

ecnext.uecp.updatestatedropdown = function () {
	var stateInput = ecnext.byId('uecp-state-textinput');
	var stateDropdown = ecnext.byId('uecp-state-dropdown');
	if (stateInput && stateDropdown) {
		var selectedCountry = ecnext.getSelected('uecp-country-dropdown');
		if (selectedCountry && selectedCountry.value == "US") {
			stateInput.style.display = 'none';
			stateInput.disabled = true;
			stateDropdown.style.display = '';
			stateDropdown.disabled = false;
		}
		else {
			stateInput.style.display = '';
			stateInput.disabled = false;
			stateDropdown.style.display = 'none';
			stateDropdown.disabled = true;
		}
	}
};

ecnext.uecp.updateuecpformstate_admin = function () {
	ecnext.uecp.updatestatedropdown();
};

ecnext.uecp.setuecpformdisplay = function (newVal) {
	document.getElementById('uecpformcontainer-01').style.display = newVal;
	document.getElementById('uecpformcontainer-02').style.display = newVal;
	document.getElementById('uecpformcontainer-03').style.display = newVal;
	document.getElementById('uecpformcontainer-showmore').style.display = 'none';
	document.getElementById('uecpformcontainer-padding').style.display = 'none';
	ecnext.uecp.updateuecpformstate();
};

ecnext.uecp.showuecpform = function () { ecnext.uecp.setuecpformdisplay(''); };
ecnext.uecp.hideuecpform = function () { ecnext.uecp.setuecpformdisplay('none'); };
ecnext.uecp.toggleuecpform = function () {
	var newVal =
		('none' == document.getElementById('uecpformcontainer-01').style.display)
		? '' : 'none';
	ecnext.uecp.setuecpformdisplay(newVal);
};

ecnext.uecp.updateuecpformstate_normal = function () {
	if (document.getElementById('uecpformcontainer-01').style.display != 'none') {
		var relationshipInputs = document.form1.relationship;
		var relationship = '';
		for (i=0; i<relationshipInputs.length; ++i) {
			var input = relationshipInputs[i];
			if (input.checked) {
				relationship = input.value;
			}
		}

		if (relationship == 'affiliated' || relationship == 'owner' || ecnext.uecp.uecpshowmore) {
			document.getElementById('uecpformcontainer-padding').style.display = 'none';
			document.getElementById('uecpformcontainer-02').style.display = '';
			document.getElementById('uecpformcontainer-03').style.display = '';
			document.getElementById('uecpformcontainer-showmore').style.display = 'none';
		}
		else if (relationship == 'other') {
			document.getElementById('uecpformcontainer-padding').style.display = 'none';
			document.getElementById('uecpformcontainer-02').style.display = '';
			document.getElementById('uecpformcontainer-03').style.display = '';
			document.getElementById('uecpformcontainer-showmore').style.display = 'none';
/*
			document.getElementById('uecpformcontainer-02').style.display = 'none';
			document.getElementById('uecpformcontainer-03').style.display = '';
			document.getElementById('uecpformcontainer-showmore').style.display = '';
*/
		}
		else {
			document.getElementById('uecpformcontainer-padding').style.display = '';
			document.getElementById('uecpformcontainer-02').style.display = 'none';
			document.getElementById('uecpformcontainer-03').style.display = 'none';
			document.getElementById('uecpformcontainer-showmore').style.display = 'none';
		}

		if (relationship) {
			document.getElementById('uecpformcontainer-norelationshipmsg').style.display = 'none';
		}
		else {
			document.getElementById('uecpformcontainer-norelationshipmsg').style.display = '';
		}
	}

	var disable_this_is_me = true;
	if ((ecnext.uecp.focused.contact_name_first && document.form1.contact_name_first.value)
		|| (ecnext.uecp.focused.contact_name_last && document.form1.contact_name_last.value)) {
			disable_this_is_me = false;
	}
	document.form1.this_is_me.disabled = disable_this_is_me;

	ecnext.uecp.updatestatedropdown();
};

ecnext.uecp.showmore = function () {
	ecnext.uecp.uecpshowmore = 1;
	ecnext.uecp.showuecpform();
};

ecnext.uecp.fixStateAbbrev = function() {
	var country = ecnext.getSelected('uecp-country-dropdown');
	if (country.value == 'US') {
		ecnext.byId('uecp-state-textinput').value = "";
	}
	else {
		ecnext.setSelected('uecp-state-dropdown', '');
	}
};

ecnext.uecp.checkUecpForm = function () {
	ecnext.uecp.clearUnfocused();
	ecnext.uecp.fixStateAbbrev();

	if (ecnext.uecp.checkUecp) {
		var uecp = ecnext.getFormFields(document.form1);
		var mismatches = ecnext.compareObjects(uecp, ecnext.uecp.currentUecp, {
			fieldsRe: ecnext.uecp.fieldsRe,
			valuesRe: /./
		});
		if (!mismatches.length) {
			alert("No changes from your current uecp or from the default values were detected.  Please provide additional information by filling in this form.");
			return false;
		}
	}

	return true;
};
