var DELIMITER_TOKEN	  =String.fromCharCode(6);
var DELIMITER_OBJECT  =String.fromCharCode(7);
var DELIMITER_FIELD	  =String.fromCharCode(8);

function CmdWriter(method){
	this.ID= new Date().getTime();
	this.Method = method;
    this.setID = setID;
    this.getID = getID;
    this.setMethod = setMethod;
    this.getMethod = getMethod;
    this.appendStr = appendStr;
    this.endOfObject = endOfObject;

	this.Buffer = "m=" + this.ID + DELIMITER_TOKEN + (method) + DELIMITER_TOKEN;

	function appendStr(value){
		this.Buffer += value + DELIMITER_FIELD;
	}

	function endOfObject(){
		this.Buffer += DELIMITER_OBJECT;
	}

    function setID(id){
        this.ID = id;
    }

    function getID(){
        return this.ID;
    }

    function setMethod(method){
        this.Method = method;
    }

    function getMethod(){
        return this.Method;
    }
}

function CmdReader(text){
	this.ID=null;
	this.Method = null;
    this.setID = setID;
    this.getID = getID;
    this.setMethod = setMethod;
    this.getMethod = getMethod;
    this.parse = parse;
    this.hasObject = hasObject;
    this.advanceNextObject = advanceNextObject;
    this.getStr = getStr;

	var	elements = new Array();
	var cursor = 0;
	
	parse(text);

	function parse(text){
		// TODO: convert this thing to char array one time iteration form
		// TODO: add exception throwing then...^
		var tokens = text.split("" + DELIMITER_TOKEN);
		if(tokens==null || tokens.length != 3){
			dbg("error parsing the text => " + text);
			return;
		}
		this.ID=tokens[0];
		this.Method=tokens[1];

		var objects=tokens[2].split("" + DELIMITER_OBJECT);
		
		for(var i=0 ; i < objects.length-1 ; i++){
			var fields = objects[i].split("" + DELIMITER_FIELD);
			for(var j=0 ; j < fields.length-1 ; j++){
				elements.push(fields[j]);
			}
			elements.push(null);
			//objectCount++;
		}
		
	}

	function hasObject(){
		if(cursor==0)
			return true;
		return advanceNextObject();
	}

	function advanceNextObject(){
		for(var i = cursor ; i<elements.length; i++){
			if(elements[i]==null & i<elements.length-1){
				cursor = i+1;
				return true;
			}
		}
		return false;
	}

	function getStr(){
		return elements[cursor++];
	}

    function setID(id){
        this.ID = id;
    }

    function getID(){
        return ID;
    }

    function setMethod(method){
        this.Method = method;
    }

    function getMethod(){
        return Method;
    }
}
