var oStateMessages = new Object();
// State Messages will be provided in page onload action
var oStrokeMessages = new Object();

function smcShowPartNumber() {
	var oCPNString = document.getElementById('cpn_partnumber');
	partNumberString = "";
	partCode = '';
	//partArray = oDomains.getPartNumber();
	partNumberString = oDomains.getPartNumber().join("");
	for (var i=0; i<oDomains.cpcarray.length; i++) {
		partBlock = '';
		partBackColor = 'FFFFFF';
		oDom = oDomains.cpcarray[i];
		switch (oDom.dtype) {
		case Domain.Constant:
			//It is a constant - user can't pick
			partBlock = oDom.label;
			partBackColor = 'FFFFFF';
			break;
		case Domain.List:
			//If oDom.label == 'dash' then user cannot pick it is autoset.
			//code will either be '-' or empty string.
			partBackColor = 'B8CCFF';
			if (oDom.label == '-')//optional dash fields
				partBackColor = 'FFFFFF';
			if (oDom.state == Domain.NotSet) {
				partBlock = '';
			} else {
				partBlock = oDom.selectionString();
			}
			break;
		case Domain.Mixed:
			partBackColor = 'B8CCFF';
			partBlock = (oDom.hasSelection()) ? oDom.inputval:'';
			break;
		case Domain.IntegerRange:
			partBackColor = 'B8CCFF';
			partBlock = (oDom.hasSelection()) ? oDom.inputval:'';
			break;
		case Domain.DecimalRange:
			partBackColor = 'B8CCFF';
			partBlock = (oDom.hasSelection()) ? oDom.inputval:'';
			break;
		default:
			alert('Domain ('+oDom.label+') is an unsupported datatype ('+oDom.dtype+')');
			break;
		}
		if(oDom.contype == Rule.HardConstraint)
			partBackColor = 'FF0000';
		if(partBlock == '')
			partCode = partCode + '<td nowrap bgcolor="' + partBackColor + '">' + '&nbsp;&nbsp;' + '</td>';
		else
			partCode = partCode + '<td nowrap bgcolor="' + partBackColor + '">' + partBlock + '</td>';
	}

	oCPNString.innerHTML = '<table border="0" cellpadding="3" cellspacing="1" bgcolor="000000"><tr style="font-family: arial; font-weight: bold;">' +
							partCode +
							'</tr></table>';
	var oCPNState = document.getElementById('cpn_state');
	var sState = oDomains.getConstraintEngineState();
	/*
	switch(sState) {
	case 'Partial':
		oCPNState.style.color = '#CCAA00';
		break;
	case 'Complete':
		oCPNState.style.color = '#00A000';
		break;
	case 'Invalid':
		oCPNState.style.color = '#AA0000';
		break;
	}
	*/
	oCPNState.innerHTML = oStateMessages[sState];
}

function customFormChange(nTriggerDomain) {
	stdFormChange(nTriggerDomain);
	for (var domid in oDomains.domains)  {
		if (oDomains.domains.hasOwnProperty(domid)) {
			oDom = oDomains.domains[domid];
			if (oDom.dtype != "D_CONSTANT" && oDom.dtype != "") {
				if (oDom.hasSelection()) {
					oStroke = document.getElementById('stroke_'+domid);

					if (oStroke) {
						switch (oDom.contype) {
						case Rule.NoConstraint:
							oStroke.style.color = gNoConstraintColor;
							break;
						case Rule.SoftConstraint:
							oStroke.style.color = gSoftConstraintColor;
							break;
						case Rule.HardConstraint:
							oStroke.style.color = gHardConstraintColor;
							break;
						}
					}
				}
				if (oDom.code.slice(0,6) == 'STROKE') {
					stroke_size = oDom.hasSelection()?DomInputValProcessor(oDom):"";

					// Calculate the current valid range(s).

					var elem = document.getElementById("stroke_" + domid + "_range");

					if (elem) {
						var endpoints = [];

						for (var key in oDom.members) {
							var member = oDom.members[key];

							if (member.state != Domain.ChoiceRestricted) {
								var sRange = member.value;
								if (sRange.charAt(0) == '['
									&& sRange.charAt(sRange.length-1) == ']') {
									var aRange = sRange.slice(1,-1).split(',');
									if (aRange.length > 0) {
										aRangeSpec = aRange[0].split('-',3);
										if (aRangeSpec.length >= 2) {
											var nMin = parseFloat(aRangeSpec[0]);
											var nMax = parseFloat(aRangeSpec[1]);
											if (!isNaN(nMin) && !isNaN(nMax)) {
												endpoints.push({num: nMin, isMin: true});
												endpoints.push({num: nMax, isMin: false});
											}
										}
									}
								}
							}
						}

						endpoints.sort(function(endpoint1, endpoint2) {
							var num1 = endpoint1.num;
							var num2 = endpoint2.num;

							if (num1 == num2) {
								if (num1.isMin && !num2.isMin) return -1;
								if (num2.isMin && !num1.isMin) return 1;

								return 0;
							}

							if (num1 < num2) return -1;
							return 1;
						});

						var ranges = [];
						var counter = 0;
						var currentRange = null;

						for (var i=0; i<endpoints.length; i++) {
							var endpoint = endpoints[i];

							if (endpoint.isMin) {
								if (currentRange == null) {
									currentRange = {min: endpoint.num};
								}

								counter = counter + 1;
							}
							else {
								counter = counter - 1;
							}

							if (counter == 0) {
								if ((i >= endpoints.length - 1) || (endpoints[i+1].num > endpoint.num + 1)) {
									currentRange.max = endpoint.num;
									ranges.push(currentRange);
									currentRange = null;
								}
							}
						}

						var oUnit = document.forms['form']["stroke_" + domid + '_unit'];
						var unit = (oUnit[0].checked)?"inch":"mm";

						var separator = ((typeof(oStrokeMessages) == "object") && ("config_valid_stroke_separator" in oStrokeMessages)) ? oStrokeMessages.config_valid_stroke_separator : "";
						if (!separator) separator = "-";
			
						var textRanges = [];

						for (var i=0; i<ranges.length; i++) {
							var minv = unit == "mm" ? formatStroke(ranges[i].min,4) : formatStroke(ranges[i].min/25.4,3);
							var maxv = unit == "mm" ? formatStroke(ranges[i].max,4) : formatStroke(ranges[i].max/25.4,3);

							textRanges.push(minv + " mm " + separator + " " + maxv + " mm");
						}

						elem.innerHTML = "[" + textRanges.join(", ") + "]";
					}
				}
			}
		}
	}
}

ShowPartNumber = smcShowPartNumber;


