/****************************txc add Map******************************/
/*
 * MAP对象，实现MAP功能
 * written by txc, 2009-05-19
 *
 * 接口：
 * size()     获取MAP元素个数
 * isEmpty()    判断MAP是否为空
 * clear()     删除MAP所有元素
 * put(key, value)   向MAP中增加元素（key, value) 
 * remove(key)    删除指定KEY的元素，成功返回True，失败返回False
 * get(key)    获取指定KEY的元素值VALUE，失败返回NULL
 * element(index)   获取指定索引的元素（使用element.key，element.value获取KEY和VALUE），失败返回NULL
 * containsKey(key)  判断MAP中是否含有指定KEY的元素
 * containsValue(value) 判断MAP中是否含有指定VALUE的元素
 * values()    获取MAP中所有VALUE的数组（ARRAY）
 * keys()     获取MAP中所有KEY的数组（ARRAY）
 *
 * 例子：
 * var map = new Map();
 *
 * map.put("key", "value");
 * var val = map.get("key")
 */
function Map()
{
 this.elements = new Array();
 
 //获取MAP元素个数
 this.size = function() {
  return this.elements.length;
 }
 
 //判断MAP是否为空
 this.isEmpty = function() {
  return (this.elements.length < 1);
 }
 
 //删除MAP所有元素
 this.clear = function() {
  this.elements = new Array();
 }
 
 //向MAP中增加元素（key, value) 
 this.put = function(_key, _value) {
  this.elements.push({key:_key, value:_value});
 }
 
 //删除指定KEY的元素，成功返回True，失败返回False
 this.remove = function(_key) {
  var bln = false;
  try  {   
   for (i = 0; i < this.elements.length; i++) {  
    if (this.elements[i].key == _key){
     this.elements.splice(i, 1);
     return true;
    }
   }
  }catch(e){
   bln = false;    
  }
  return bln;
 }
 
 //获取指定KEY的元素值VALUE，失败返回NULL
 this.get = function(_key) {
  	var value=null;
  	try{   
   		for (i = 0; i < this.elements.length; i++) {
    		if (this.elements[i].key == _key) {
     			value = this.elements[i].value;
    		}
   		}
  	}catch(e) {
   		value = null;   
  	}
  	return value;
 }
 
 //获取指定索引的元素（使用element.key，element.value获取KEY和VALUE），失败返回NULL
 this.element = function(_index) {
  if (_index < 0 || _index >= this.elements.length)
  {
   return null;
  }
  return this.elements[_index];
 }
 
 //判断MAP中是否含有指定KEY的元素
 this.containsKey = function(_key) {
  var bln = false;
  try {
   for (i = 0; i < this.elements.length; i++) {  
    if (this.elements[i].key == _key){
     bln = true;
    }
   }
  }catch(e) {
   bln = false;    
  }
  return bln;
 }
    
 //判断MAP中是否含有指定VALUE的元素
 this.containsValue = function(_value) {
  var bln = false;
  try {
   for (i = 0; i < this.elements.length; i++) {  
    if (this.elements[i].value == _value){
     bln = true;
    }
   }
  }catch(e) {
   bln = false;    
  }
  return bln;
 }
 
 //获取MAP中所有VALUE的数组（ARRAY）
 this.values = function() {
  var arr = new Array();
  for (i = 0; i < this.elements.length; i++) {  
   arr.push(this.elements[i].value);
  }
  return arr;
 }
 
 //获取MAP中所有KEY的数组（ARRAY）
 this.keys = function() {
  var arr = new Array();
  for (i = 0; i < this.elements.length; i++) {  
   arr.push(this.elements[i].key);
  }
  return arr;
 }
}

/*****************txc add for maptoarr************************/
function mapToArr(map){
	var items = map.elements;
	items.sort(function compare(a,b){return a.key-b.key;});
	var arr = [];
	for(var i=0;i<items.length;i++){
		var els = [];
		els.push(items[i].key);
		els.push(items[i].value);
		arr.push(els);
	}
	return arr;
}
 /*
   *  方法:Array.remove(dx)
   *  功能:删除数组元素.
   *  参数:dx删除元素的下标.
   *  返回:在原数组上修改数组
   */

  //经常用的是通过遍历,重构数组.
  Array.prototype.remove=function(dx)
  {
    if(isNaN(dx)||dx>this.length){return false;}
    for(var i=0,n=0;i<this.length;i++)
    {
        if(this[i]!=this[dx])
        {
            this[n++]=this[i]
        }
    }
    this.length-=1
  }
