function findId(arr, key) {
	for(var i=0; i<arr.length; i++) {
		if(arr[i] == key) return i;
	}
	return -1;
}

function MapArray() {
	this.data = [];
	this.indices = [];
	this.length = 0;
}

MapArray.prototype.data = [];
MapArray.prototype.indices = [];
MapArray.prototype.length = 0;

MapArray.prototype.add = function(key, value) {
	this.data[key] = value;
	if(findId(this.indices, key) == -1) {
		this.indices.push(key);
		this.length++;
	}
};

MapArray.prototype.remove = function(key) {
	var id = findId(this.indices, key);
	if(id == -1) return;
	this.data[key] = null;
	this.indices.splice(id, 1);
	this.length--;
};

MapArray.prototype.get = function(key) { 
	if(findId(this.indices, key) == -1) return -1;
	return this.data[key];
};

MapArray.prototype.it = function(id) { return this.data[this.indices[id]]; };

MapArray.prototype.getItemId = function(key) { return findId(this.indices, key); };

MapArray.prototype.release = function() { this.indices.length = 0; this.length = 0; };



// SOAP Utils.

function SOAPUtils() {}

SOAPUtils.ArrayBuilder = function(soap_data, split_data) { // out: array ( key: split_data, value: soap_data)
        var tmp = [];

        for(var i=0; i<split_data.length; i++) {
                if(soap_data[split_data[i]] instanceof Object) {
                        tmp[split_data[i]] = soap_data[split_data[i]]["#text"].split('|');
		}
		else {
			tmp[split_data[i]] = soap_data[split_data[i]].split('|');
		}
                tmp[split_data[i]].length = tmp[split_data[i]].length-1;
        }
        var arr = [];
	for(var i=0; i<tmp[split_data[0]].length; i++) {
		var item = [];
                for(j=0; j<split_data.length; j++)
                	item[split_data[j]] = tmp[split_data[j]][i];
                arr.push(item);
        }
        return arr;
};

SOAPUtils.html2safehtml = function(data) {
	var exception = 'elmtTags';
	for(var i in data) {
                if(data[i] instanceof Object) {
			data[i]["#text"] = data[i]["#text"] + '';
			data[i]["#text"] = data[i]["#text"].replace(/</gi, '[');
			data[i]["#text"] = data[i]["#text"].replace(/>/gi, ']');
		} else {
			data[i] = data[i] + '';
			data[i] = data[i].replace(/</gi, '[');
			data[i] = data[i].replace(/>/gi, ']');
		}
	}
	return data;
};

SOAPUtils.safehtml2html = function(data) {
	var exception = 'elmtTags';
	var tags = [ 'div', 'span', 'br', 'b', 'i', 'u', 'p', 'sub', 'sup', 'img', 'a', 'blockquote', 'font',
		'strong', 'em', 'iframe', 'object', 'embed', 'param', 'table', 'tr', 'td', 'tbody' ];
	var reg, rule = '';
	for(var i=0; i<tags.length; i++) {
		rule = '\\[(\\/{0,1}\\b' + tags[i] + '\\b[^\\]]*)\\]';
		reg = new RegExp(rule, 'gi');
		for(var j in data) {
			if(data[j] instanceof Object) {
				data[j]["#text"] = (data[j]["#text"] + '').replace(reg, '<$1>');
			} else {
				data[j] = (data[j] + '').replace(reg, '<$1>');
			}
		}
	}
	return data;
};

function getElementPosition(elem) {
    	var w = elem.offsetWidth;
    	var h = elem.offsetHeight;
    	var l = 0;
    	var t = 0;
    	while(elem) {
        	l += elem.offsetLeft;
        	t += elem.offsetTop;
        	elem = elem.offsetParent;
    	}
    	return { left : l, top : t, width : w, height : h };
}
