var DROPDOWN_TXT_BUT_DIV 					= "dropdownTxtButDiv";
var DROPDOWN_TXT_BUT_CONT_DIV 				= "dropdownTxtButContDiv";
var DROPDOWN_TXT_DROPDOWN_DIV				= "dropdownTxtDropdownDiv";
var DROPDOWN_TXT_DROPDOWN_TOOLBAR_DIV 		= "dropdownTxtDropdownToolbarDiv";
var DROPDOWN_TXT_DROPDOWN_TEXT_WRAPPER_DIV	= "dropdownTxtDropdownTextWrapperDiv"
var DROPDOWN_TXT_DROPDOWN_TEXT_DIV			= "dropdownTxtDropdownTextDiv";

function DropdownTextManager(){
	this.register = new Array();
	
	this.getDropdownTextById = function(id){
		for(var n=0;n<this.register.length;n++){
			if(this.register[n].id == id)
				return this.register[n];
		}
		
		return null;
	}
	
	this.registerDropdownText = function(dropdownText){
		if(dropdownText == null)
			return;
		dropdownText.id = this.register.length;
		
		this.register[this.register.length] = dropdownText;
	}
}

var dropdownTextManager = new DropdownTextManager();

var onDropDownTextShown = null;
var onDropDownTextHidden = null;

function DropdownText(buttonContent, text, toolbar, width){
	this.id = null;
	this.width = isNaN(width)?180:width;
	this.buttonContent = buttonContent != null ? buttonContent : "Click To View";
	this.text = text;
	this.popupMode = "onmouseover";
	this.toolbar = toolbar;
	this.events = new Array();
	
	/**
	 * event handling, supported events: onPopup,onClose
	 */ 
	this.attachEvent = function(eventType, eventFunc){
		this.events[this.events.length] = [eventType, eventFunc];
	}
	
	/* 触发事件 */
	this.fireEvent = function(eventType){
		if(eventType == null)
			return;
			
		for(var n=0;n<this.events.length;n++){
			if(this.events[n][0] == eventType){
				if(typeof(this.events[n][1]) == "string")
					eval(this.events[n][1]);
				else
					this.events[n][1](this);
			}
		}
	}
	
	/**
	 * 设置按钮内容
	 */
	this.setButtonContent = function(butCont){
		if(this.id != null)
			document.getElementById(DROPDOWN_TXT_BUT_CONT_DIV + "_" + this.id).innerHTML = butCont;
		else
			this.buttonContent = butCont;
	}
	/**
	 * 设置下拉内容
	 */
	this.setText = function(text){
		if(this.id != null)
			document.getElementById(DROPDOWN_TXT_DROPDOWN_TEXT_DIV + "_" + this.id).innerHTML = text;
		else
			this.text = text;
	}
	
	/**
	 * 设置下拉工具栏内容
	 */
	this.setToolbar = function(toolbar){
		if(this.id != null)
			document.getElementById(DROPDOWN_TXT_DROPDOWN_TOOLBAR_DIV + "_" + this.id).innerHTML = toolbar;
		else
			this.toolbar = toolbar;
	}
	
	this.create = function(){
		dropdownTextManager.registerDropdownText(this);
		this.generateHtml();
	}
	
	this.generateHtml = function(){
		var html = "";
		html += '<div id="dropdownTxtButDiv_' + this.id + '" style="cursor:pointer;width:' + this.width + 'px;height:20px;border:1px solid;border-color:#A0A0A0;background-color:#FFFFFF;font-size:12px" ' + this.popupMode + '="showContent(' + this.id + ')" >';
		html += '	<div style="width:' + (this.width - 22) + 'px;height:20px;border:0px solid;float:left">';
		html += '		<div id="dropdownTxtButContDiv_' + this.id + '" align="center" style="margin: 2 0 0 2;border:0px solid;color:blue">' + (this.buttonContent==null?"":this.buttonContent) + (this.text==null?'(None)':"") + '</div>';
		html += '	</div>';
		html += '	<div style="width:20px;height:20px;border:0px solid;float:left">';
		html += '		<img src="../../imgs/down.gif"  style="margin-top:8px;margin-left:5px">';
		html += '	</div>';
		html += '</div>';
		html += '<div id="dropdownTxtDropdownDiv_' + this.id + '" style="position:absolute;border:1px solid;border-top:0px;width:402px;display:none;border-color:#A0A0A0;font-size:12px" >';						
		html += '	<div id="dropdownTxtDropdownToolbarDiv_' + this.id + '" align="right" style="width:400px;height:18px;border-top:1px solid;border-color:#A0A0A0;background:url(../../imgs/dropdown_text_but_bg.gif)">';
		html += '		<div style="font-size:12px">'
		html += '		<a class="linklist" href="javascript:copyToClipBoard(document.getElementById(\'dropdownTxtDropdownTextDiv_' + this.id + '\').innerText)"><img alt="Copy To Clipboard" src="../../imgs/copy.gif" border="0">Copy To Clipboard</a>';
		html += '		' + (this.toolbar == null ? "" : this.toolbar);
		html += '		</div>';
		html += '	</div>'
		html += '	<div id="dropdownTxtDropdownTextWrapperDiv_' + this.id + '" style="width:400px;">';
		html += '		<div id="dropdownTxtDropdownTextDiv_' + this.id + '" style="margin:4px;margin-right:16px;">' + (this.text==null?"None":this.text) + '</div>';
		html += '	</div>';
		html += '</div>';
		
		document.write(html);
	}
}

function updateContent(dropdownControlId, content){
	var dropdownControl = dropdownTextManager.getDropdownTextById(dropdownControlId);
	var innerContDiv = document.getElementById(DROPDOWN_TXT_DROPDOWN_TEXT_WRAPPER_DIV + "_" + dropdownControlId);
	var contDiv = document.getElementById(DROPDOWN_TXT_DROPDOWN_TEXT_DIV + "_" + dropdownControlId);
	
	if(dropdownControl != null && contDiv != null){
		if(content == null || content.length <= 0){
			dropdownControl.text = "None";
			contDiv.align="left";
			contDiv.innerHTML = "None";
		}
		else{
			dropdownControl.text = content;
			contDiv.align="left";
			contDiv.innerHTML = content;
		}
	}
	
	if(innerContDiv.offsetHeight > 400){
		innerContDiv.style.height = "400px";
		innerContDiv.style.overflow = "scroll";
	}
}

var curDropdownTextId = null;

function showContent(dropdownControlId){
	if(curDropdownTextId != null)
		hideContent(curDropdownTextId);

	var butDiv = document.getElementById(DROPDOWN_TXT_BUT_DIV + "_" + dropdownControlId);
	var contDiv = document.getElementById(DROPDOWN_TXT_DROPDOWN_DIV + "_" + dropdownControlId);
	var innerContDiv = document.getElementById(DROPDOWN_TXT_DROPDOWN_TEXT_WRAPPER_DIV + "_" + dropdownControlId);
	contDiv.style.display = "";
	
	if(innerContDiv.offsetHeight > 400){
		innerContDiv.style.height = "400px";
		innerContDiv.style.overflow = "scroll";
	}
	var pos = getRelativePosition(butDiv, contDiv);
	
	butDiv.style.backgroundColor = "#FFFFFF";
	//butDiv.style.borderBottom = "1px solid";

	contDiv.style.backgroundColor = "#FFFFFF";
	
	contDiv.style.left = (pos.x) + "px";
	contDiv.style.top = (pos.y - 1) + "px";
	
	var dropdownControl = dropdownTextManager.getDropdownTextById(dropdownControlId);
	dropdownControl.fireEvent("onPopup");
	
	//如果是点击弹出,立即置当前对象id会导致出发关闭动作,所以延时10ms
	if(dropdownControl.popupMode == "onclick")
		setTimeout("setCurDropdownTextId(" + dropdownControlId + ")",10);
	else{
		setCurDropdownTextId(dropdownControlId);
	}
	if(onDropDownTextShown != null){
		onDropDownTextShown(innerContDiv);
	}
}

function setCurDropdownTextId(dropdownControlId){
	curDropdownTextId = dropdownControlId;
}

function hideContent(dropdownControlId){
	var butDiv = document.getElementById(DROPDOWN_TXT_BUT_DIV + "_" + dropdownControlId);
	var contDiv = document.getElementById(DROPDOWN_TXT_DROPDOWN_DIV + "_" + dropdownControlId);
	
	contDiv.style.display = "none";
	butDiv.style.borderBottom = "1px solid";
	butDiv.style.borderColor = "#A0A0A0";
	butDiv.style.backgroundColor = "#FFFFFF";
	
	curDropdownTextId = null;
	
	if(onDropDownTextHidden != null){
		onDropDownTextHidden();
	}
}

function listenClickOutOfObject(e){
	var evt = window.event?window.event:e;
	if(curDropdownTextId != null){
		var curDropdownText = document.getElementById(DROPDOWN_TXT_DROPDOWN_DIV + "_" + curDropdownTextId);
		if(isEventOutOfObject(evt, curDropdownText)){
			hideContent(curDropdownTextId);
		}
	}
}

addEvent(document,"click",listenClickOutOfObject);