

// NameValueCollectionConverter
qnsoft.registNamespace("qnsoft.objects.nameValueCollection");

qnsoft.objects.nameValueCollection = function(items) {
	this.__type = "System.Collections.Specialized.NameValueCollection";
	this.keys = [];
	this.values = [];

	if(items != null && !isNaN(items.length)) {
		for(var i=0; i<items.length; i++)
			this.add(items[i][0], items[i][1]);
	}
};

$.extend(qnsoft.objects.nameValueCollection, {
	add: function(k, v) {
		if(k == null || k.constructor != String || v == null || v.constructor != String)
			return -1;
		this.keys.push(k);
		this.values.push(v);
		return this.values.length -1;
	},
	containsKey: function(key) {
		for(var i=0; i<this.keys.length; i++) {
			if(this.keys[i] == key) return true;
		}
		return false;
	},
	getKeys: function() {
		return this.keys;
	},
	getValue: function(k) {
		for(var i=0; i<this.keys.length && i<this.values.length; i++) {
			if(this.keys[i] == k) return this.values[i];
		}
		return null;
	},
	setValue: function(k, v) {
		if(k == null || k.constructor != String || v == null || v.constructor != String)
			return -1;
		for(var i=0; i<this.keys.length && i<this.values.length; i++) {
			if(this.keys[i] == k) this.values[i] = v;
			return i;
		}
		return this.add(k, v);
	},
	toJSON: function() {
		return qnsoft.toJSON({__type:this.__type,keys:this.keys,values:this.values});
	}
});

// DataSetConverter
qnsoft.registNamespace("qnsoft.objects.dataSet");

qnsoft.objects.dataSet = function(t) {
	this.__type = "System.Data.DataSet,System.Data";
	this.tables = [];
	this.addTable = function(t) {
		this.tables.push(t);
	};
	if(t != null) {
		for(var i=0; i<t.length; i++) {
			this.addTable(t[i]);
		}
	}
};

// DataTableConverter
qnsoft.registNamespace("qnsoft.objects.dataTable");

qnsoft.objects.dataTable = function(c, r) {
	this.__type = "System.Data.DataTable,System.Data";
	this.columns = [];
	this.rows = [];
	this.addColumn = function(name, type) {
		this.columns.push({name:name,__type:type});
	};
	this.toJSON = function() {
		var dt = {};
		var i;
		dt.columns = [];
		for(i=0; i<this.columns.length; i++)
			dt.columns.push([this.columns[i].name, this.columns[i].__type]);
		dt.rows = [];
		for(i=0; i<this.rows.length; i++) {
			var row = [];
			for(var j=0; j<this.columns.length; j++)
				row.push(this.rows[i][this.columns[j].name]);
			dt.rows.push(row);
		}
		return qnsoft.toJSON(dt);
	};
	this.addRow = function(row) {
		this.rows.push(row);
	};
	if(c != null) {
		for(var i=0; i<c.length; i++)
			this.addColumn(c[i][0], c[i][1]);
	}
	if(r != null) {
		for(var y=0; y<r.length; y++) {
			var row = {};
			for(var z=0; z<this.columns.length && z<r[y].length; z++)
				row[this.columns[z].name] = r[y][z];
			this.addRow(row);
		}
	}
};

// IDictionaryConverter
qnsoft.registNamespace("qnsoft.objects.dictionary");

qnsoft.objects.dictionary = function(type,items) {
	this.__type = type;
	this.keys = [];
	this.values = [];

	if(items != null && !isNaN(items.length)) {
		for(var i=0; i<items.length; i++)
			this.add(items[i][0], items[i][1]);
	}
};
$.extend(qnsoft.objects.dictionary, {
	add: function(k, v) {
		this.keys.push(k);
		this.values.push(v);
		return this.values.length -1;
	},
	containsKey: function(key) {
		for(var i=0; i<this.keys.length; i++) {
			if(this.keys[i] == key) return true;
		}
		return false;
	},
	getKeys: function() {
		return this.keys;
	},
	getValue: function(key) {
		for(var i=0; i<this.keys.length && i<this.values.length; i++) {
			if(this.keys[i] == key){ return this.values[i]; }
		}
		return null;
	},
	setValue: function(k, v) {
		for(var i=0; i<this.keys.length && i<this.values.length; i++) {
			if(this.keys[i] == k){ this.values[i] = v; }
			return i;
		}
		return this.add(k, v);
	},
	toJSON: function() {
		return qnsoft.toJSON({__type:this.__type,keys:this.keys,values:this.values});
	}
}, true);

