/**
 * Copyright (c) 2005 Absolutely Training Limited
 *  	
 * Created on 08-Feb-2005
 *
 * @author roberto, fritzd
 */

//init
new SCORMArray();

//constructor
function SCORMArray(object){
	this.objectType = object;
	this.objectArray = new Array();
}
 
SCORMArray.prototype.set = function (variable, value){
	
	var index = variable.substring(0, variable.indexOf("."));
	var remainder = variable.substring(variable.indexOf(".")+1, variable.length);
	var objectFromArray = this.objectArray[index];
	
	if (remainder=="_count" || remainder=="_children" ){
		return VariableInfo.ERROR_404;
	}
	if (objectFromArray != null){
		return this.objectArray[index].set(remainder, value);
	} 
	else if (this.objectArray.length == index ){
		var anString = variable.substring(0, variable.indexOf(".id"));
		if (variable.indexOf(".id") > 0 && variable.indexOf(".id") < 3){
			return this.setId(remainder, value, index);				
		}
		var interaction = new Interactions();
		var objective = new Objectives();
//		if (this.objectType.constructor == interaction.constructor && variable.indexOf(".type")<0 ) 
//		{
//			return VariableInfo.ERROR_408;
//		}			
		this.objectArray[index] = new this.objectType.constructor;			
		return this.objectArray[index].set(remainder, value);
	}
	else {			
		return VariableInfo.SET_401;			
	}		
};


SCORMArray.prototype.setDirect = function (variable, value){
	
	var index = variable.substring(0, variable.indexOf("."));
	var remainder = variable.substring(variable.indexOf(".")+1, variable.length);
	var objectFromArray = this.objectArray[index];
	
	if (remainder=="_count" || remainder=="_children" ){
		return VariableInfo.ERROR_404;
	}
	if (objectFromArray != null){
		return this.objectArray[index].setDirect(remainder, value);
	} 
	else if (this.objectArray.length == index ){
		var anString = variable.substring(0, variable.indexOf(".id"));
		if (variable.indexOf(".id") > 0 && variable.indexOf(".id") < 3){
			return this.setId(remainder, value, index);				
		}
		var interaction = new Interactions();
		var objective = new Objectives();
//		if (this.objectType.constructor == interaction.constructor && variable.indexOf(".type")<0 ) 
//		{
//			return VariableInfo.ERROR_408;
//		}			
		this.objectArray[index] = new this.objectType.constructor;			
		return this.objectArray[index].setDirect(remainder, value);
	}
	else {			
		return VariableInfo.SET_401;			
	}		
};

SCORMArray.prototype.get = function (variable){	
	var index = variable.substring(0, variable.indexOf("."));			
	variable = variable.substring(variable.indexOf(".") + 1, variable.length);
	if (variable.indexOf(".") > 0){
		localProperty = variable.substring(0, variable.indexOf("."));
	}
	else {
		localProperty = variable.substring(0, variable.length);
	}		
	var remainder = variable.substring(variable.indexOf(".") + 1, variable.length);
	var objectFromArray = this.objectArray[index];
			
	if (objectFromArray != null){			
		return	objectFromArray.get(variable);			
	} else {	
		var args = new Array();
		if (remainder!=null && this["get"+remainder]!=null){
			return this["get"+remainder].apply(this, args);
		}						
		return VariableInfo.GET_401;			
	}				
};

SCORMArray.prototype.get_children = function() {
	return new VariableInfo("0", "", this.objectType._children);
};
 
SCORMArray.prototype.get_count = function() {
	return new VariableInfo("0", "", this.objectArray.length);
};
 
SCORMArray.prototype.setId = function(variable, value, index){
	for (var i = 0; i < this.objectArray.length; i++) {
		var objecto = this.objectArray[i];
		if (objecto.id==value){
			return VariableInfo.ERROR_351;	
		}
	}
	this.objectArray[index] = new this.objectType.constructor;
	return this.objectArray[index].set(variable, value);
 };

/**
 * print attributes for this object, those which are not null
 */
SCORMArray.prototype.printMe = function(type){
	var valuePairs = "";

	for (var i2 = 0; i2 < this.objectArray.length; i2++){
		var newType = type + i2 + ".";
		valuePairs += this.objectArray[i2].printMe(newType) + VALUE_PAIR_STRING_DELIMITER;
	}
	//strips out trailing VALUE_PAIR_STRING_DELIMITER
	valuePairs = valuePairs.substring(0, valuePairs.length - VALUE_PAIR_STRING_DELIMITER.length);
	return valuePairs;
};

