// JavaScript Document
//TagManager Class
//note: requires two css classes: tag, and hilitedTag

function TagManager(name, tags_arr, t, l, w, h){
	this.name = name;
	this.tags_arr = tags_arr;
	this.displayedTags_arr = new Array();
	this.taggedObj_arr = new Array();
	this.buildObjArray();
	this.onclickHandler = function(){};
	this.containerID = 'tagsContainer'
	this.tagRect = {top:t, left:l, right:l+w, bottom:t+h};
	//document.write("<div id='"+this.containerID+"' style='position:absolute; top:"+t+"px; left:"+l+"px; width:"+w+"px; z-index:1'></div>");

}
//
TagManager.prototype.buildObjArray = function(){
	for (var i=0;i<this.tags_arr.length;i++){
		for (var j=0;j<this.tags_arr[i].obj_arr.length;j++){
			newObject = true;
			for (var k=0;k<this.taggedObj_arr.length;k++){
				if (this.tags_arr[i].obj_arr[j]==this.taggedObj_arr[k].name){
					this.taggedObj_arr[k].tag_arr.push(this.tags_arr[i].name);
					newObject = false;
					break;
				}
			}
			if(newObject){
				this.taggedObj_arr.push({name:this.tags_arr[i].obj_arr[j], tag_arr:new Array(this.tags_arr[i].name)});
				
			}
		}
		
	}
}
//
TagManager.prototype.getTagRect = function(){
	this.tagRect.right = this.tagRect.left + document.getElementById(this.containerID).offsetWidth;
	this.tagRect.bottom = this.tagRect.top + document.getElementById(this.containerID).offsetHeight;
	return this.tagRect;
}
//
TagManager.prototype.addTag = function(tagName, objName){
	var tagObj = this.getTagObj(tagName);
	if(tagObj!=null){
		tagObj.obj_arr.push(objName);
	}else{
		this.tags_arr.push({name:tagName, obj_arr:new Array(objName)}); 
	}
	this.tags_arr.sort(function(a,b){
								return b.obj_arr.length - a.obj_arr.length;
								});
	this.addTaggedObject(objName, tagName);
}
//
TagManager.prototype.addTaggedObject = function(objName, tagName){
	var taggedObj = this.getTaggedObject(objName);
	if(taggedObj!=null){
		taggedObj.tag_arr.push(tagName);
	}else{
		this.taggedObj_arr.push({name:objName, tag_arr:new Array(tagName)});
	}
}
//
TagManager.prototype.getTagObj = function(tagName){
	for (var i=0;i<this.tags_arr.length;i++){
		if(tagName==this.tags_arr[i].name){			
			return this.tags_arr[i];				
		}
	}
	return null;
}
//
TagManager.prototype.getTaggedObject = function(objName){
	for (var i=0;i<this.taggedObj_arr.length;i++){
		if (objName==this.taggedObj_arr[i].name){
			return this.taggedObj_arr[i];
		}
	}
	return null;
}
//
TagManager.prototype.onTagClick = function(tagName){
	this.unhiliteTags();
	this.hiliteTags(Array(tagName));
	this.onclickHandler(this.getTagObj(tagName).obj_arr);
}
	
	
//
TagManager.prototype.hiliteTags = function(tagsNames_arr){
	if (tagsNames_arr!=null){
		document.getElementById('debug').innerHTML = "hiliteTags('"+tagsNames_arr.toString().replace(/\,/g, ', ')+"') "+document.getElementById('debug').innerHTML;

		this.unhiliteTags();
		for (var i =0;i<tagsNames_arr.length;i++){
			for (var j=0;j<this.displayedTags_arr.length;j++){
				if(tagsNames_arr[i]==this.displayedTags_arr[j].name){
					document.getElementById(this.displayedTags_arr[j].name).className = "hilitedTag";
					break;
				}
			}
		}
	}
}
TagManager.prototype.unhiliteTags = function(tagsNames_arr){
	if (tagsNames_arr==null){
		for (var i=0;i<this.displayedTags_arr.length;i++){			
				document.getElementById(this.displayedTags_arr[i].name).className = "tag";		
		}
	}else{

		for (var i=0;i<tagsNames_arr.length;i++){			
				document.getElementById(tagsNames_arr[i]).className = "tag";		
		}	
	}
}


//
TagManager.prototype.showTags = function(tagsNames_arr){
	html = "";
	if (tagsNames_arr == null||tagsNames_arr =="undefined"){
		this.displayedTags_arr = this.tags_arr;
	}else{
		this.displayedTags_arr = new Array();
		for (var i =0;i<tagsNames_arr.length;i++){
			for (var j=0;j<this.tags_arr.length;j++){
				if(tagsNames_arr[i]==this.tags_arr[j].name){
					this.displayedTags_arr.push(this.tags_arr[j]);
					break;
				}
			}
		}
	}
	/*
	for (var i=0;i<this.displayedTags_arr.length;i++){
		if (i >0){
			html +=", ";
		}
		var thisTag = this.displayedTags_arr[i].name;
		var onClickFunction = this.name+'.onTagClick("'+thisTag+'")';
		var tagHtml = "<a id='"+thisTag+"' href = '#' onclick = '"+onClickFunction+"';return false' class = 'tag'>"+thisTag+"</a>";
		html +=tagHtml;
	}*/
	//document.getElementById(this.containerID).innerHTML = html;
}
//
TagManager.prototype.getObjects = function(tag){
	for (var i=0;i<this.tags_arr.length;i++){
		if (this.tags_arr[i].name == tag){
			
			return this.tags_arr[i].obj_arr;
		}
	}
}
//
TagManager.prototype.getTags = function(objectName){
	for (var i=0;i<this.taggedObj_arr.length;i++){
		if (this.taggedObj_arr[i].name == objectName){
			return this.taggedObj_arr[i].tag_arr;
		}
	}
}
//
