// 2005/12/2, Jalen: Implemented as SCORM 1.3, but used as v1.2 for now.

function CMIScore(vsData) {
	this.init = init;
	this.toString = toString;
	this._UnitTestError = _UnitTestError;

	var sDelimiter = "^";

	this.init(vsData);

	function init(vsData) {
		this._children = new Array("scaled", "raw", "min", "max");
		this.scaled = "";
		this.raw = "";
		this.min = "";
		this.max = "";

		if (vsData != null && vsData.length > 0) {
			var aData = vsData.split(sDelimiter);
			if (aData.length == this._children.length) {
				this.scaled = (aData[0] == "" || isNaN(aData[0])) ? aData[0] : parseFloat(aData[0], 10);
				this.raw = (aData[1] == "" || isNaN(aData[1])) ? aData[1] : parseFloat(aData[1], 10);
				this.min = (aData[2] == "" || isNaN(aData[2])) ? aData[2] : parseFloat(aData[2], 10);
				this.max = (aData[3] == "" || isNaN(aData[3])) ? aData[3] : parseFloat(aData[3], 10);
			}
		}
	}
	
	function toString() {
		var arr = new Array(String(this.scaled), String(this.raw), String(this.min), String(this.max));
		return arr.join(sDelimiter);
	}

	function _UnitTestError() {
		var sData = "0.84^^0^200";
		var obj = new CMIScore(sData);

		if (obj.raw != "") return "error 1.1";
		obj.raw = 168;
		if (obj.raw != 168) return "error 1.2";
		if (obj.scaled != 0.84) return "error 1.3";
		if (obj.max != 200) return "error 1.4";

		obj.raw = "";
		if (obj.toString() != sData) return "error 2";
		
		return false;
	}
	
}
;

