function GetOffsetPos(element) {
	var flag = element.tagName.toUpperCase() == "INPUT" ? true : false;
	var posTop = 0, posLeft = 0;
	do {
		posTop += element.offsetTop || 0;
		posLeft += element.offsetLeft || 0;
		element = element.offsetParent;
	} while (element);
	if (navigator.appVersion.indexOf("MSIE 6.0") != -1 && flag) {
		posLeft++;
	}
	return [posLeft, posTop];
}

function getWindowSize() {
	var myWidth = 0, myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	return([myWidth,myHeight]);
} 

function hideSelects(zIndexNow) {
	if (navigator.appVersion.indexOf("MSIE 6.0") != -1) {
		var selects = document.getElementsByTagName("select");
		var length = selects.length;
		for (var i = 0; i < length; i++) {
			if (selects[i].zIndexNow != zIndexNow && selects[i].style.visibility != "hidden") {
				selects[i].style.visibility = "hidden";
				selects[i].zIndexNow = zIndexNow;
			}
		}
	}
}

function showSelects(zIndexNow) {
	if (navigator.appVersion.indexOf("MSIE 6.0") != -1) {
		var selects = document.getElementsByTagName("select");
		var length = selects.length;
		for (var i = 0; i < length; i++) {
			if (selects[i].zIndexNow == zIndexNow) {
				selects[i].style.visibility = "";
				selects[i].zIndexNow = -1;
			}
		}
	}
}

var Mask = function () {
	this.zIndexNow = 100;
	this.maskDiv = null;
	this.indexArr = [];
	this.show = function () {
		this.zIndexNow += 10;
		if (this.indexArr.length == 0){
			var maskHeight = document.documentElement.scrollHeight > getWindowSize()[1] ? document.documentElement.scrollHeight : getWindowSize()[1];
			this.maskDiv = createElement("div");
			this.maskDiv.onclick = function () {
				var event = arguments[0] || window.event;
				event.cancelBubble = true;
			};
			this.maskDiv.className = "mask";
			this.maskDiv.style.width = "100%";
			this.maskDiv.style.height = maskHeight + "px";
			document.body.appendChild(this.maskDiv);
		}
		this.maskDiv.style.zIndex = this.zIndexNow - 1;
		this.indexArr.push(this.zIndexNow - 1);
		hideSelects(this.zIndexNow);
	};
	this.clean = function () {
		showSelects(this.zIndexNow);
		this.indexArr.pop();
		if (this.indexArr.length > 0){
			this.maskDiv.style.zIndex = this.indexArr[this.indexArr.length - 1];
			this.zIndexNow = this.indexArr[this.indexArr.length - 1] + 1;
		}
		else {
			document.body.removeChild(this.maskDiv);
			this.zIndexNow = 100;
		}
	};
	this.booleanLoading = false;
	this.showLoading = function () {
		this.booleanLoading = true;
		this.zIndexNow += 10;
		if (this.indexArr.length == 0){
			var maskHeight = document.documentElement.scrollHeight > getWindowSize()[1] ? document.documentElement.scrollHeight : getWindowSize()[1];
			this.maskDiv = createElement("div");
			this.maskDiv.className = "loading";
			this.maskDiv.style.backgroundPositionY = (getWindowSize()[1] - 73) / 2 + document.documentElement.scrollTop + "px";
			this.maskDiv.style.width = "100%";
			this.maskDiv.style.height = maskHeight + "px";
			document.body.appendChild(this.maskDiv);
		}
		this.maskDiv.style.zIndex = this.zIndexNow - 1;
		this.indexArr.push(this.zIndexNow - 1);
		hideSelects(this.zIndexNow);
	};
	this.cleanLoading = function () {
		if (this.booleanLoading == true) {
			this.booleanLoading = false;
			showSelects(this.zIndexNow);
			this.indexArr.pop();
			if (this.indexArr.length > 0){
				this.maskDiv.style.zIndex = this.indexArr[this.indexArr.length - 1];
				this.zIndexNow = this.indexArr[this.indexArr.length - 1] + 1;
			}
			else {
				document.body.removeChild(this.maskDiv);
				this.zIndexNow = 100;
			}
			if (opts == "1") {
				opts = "0";
				HelpTips.Init();
			}
		}
	};
};

var DragAble = function (dragable,handler) {
	this.iDiffX = 0;
	this.iDiffY = 0;
	this.oDragable = dragable;
	this.oHandler = handler;
	
	this.mouseDown = function(){
		document.body.onselectstart = function () {return false;};
		document.body.style.userSelect = "none";
		document.body.style.MozUserSelect = "none";
		var object = arguments.callee.object;
		var event = arguments[0] || window.event;
		object.iDiffX = event.clientX - object.oDragable.offsetLeft;
		object.iDiffY = event.clientY - object.oDragable.offsetTop;
		document.body.onmousemove = object.mouseMove;
		document.body.onmouseup = object.mouseUp;
		object.oHandler.style.cursor = "move";
	};
	this.mouseDown.object = this;
	
	this.oHandler.onmousedown = this.mouseDown;
	
	this.mouseMove = function() {
		var object = arguments.callee.object;
		var event = arguments[0] || window.event;
		var wWidth = getWindowSize()[0];
		if ((event.clientX - object.iDiffX) >= 0 && (event.clientX - object.iDiffX + object.oDragable.clientWidth) <= wWidth - 20){
			object.oDragable.style.left = event.clientX - object.iDiffX + "px";
		}
		else {
			if ((event.clientX - object.iDiffX) < 0){
				object.oDragable.style.left = 0 + "px";
			}
			else {
				object.oDragable.style.left = wWidth - object.oDragable.clientWidth - 20 + "px";
			}
		}
		//obj.style.left = tempLeft + "px";
		if ((event.clientY - object.iDiffY) >= 0){
			object.oDragable.style.top = event.clientY - object.iDiffY + "px";
		}
		else {
			object.oDragable.style.top = 0 + "px";
		}
		
	};
	this.mouseMove.object = this;
	
	this.mouseUp = function() {
		var object = arguments.callee.object;
		document.body.onselectstart = "";
		document.body.style.userSelect = "";
		document.body.style.MozUserSelect = "";
		document.body.onmousemove = "";
		document.body.onmouseup = "";
		object.oHandler.style.cursor = "";
	};
	this.mouseUp.object = this;
};

/**
  * 弹出式窗口
  */ 
var Popups = function (stringContainerId) {
	this.containerElement = getElement(stringContainerId);
	this.containerElement.onclick = function () {
		var event = arguments[0] || window.event;
		event.cancelBubble = true;
	};
	this.bindElement = function (stringTagName, stringClassName, objectContainerElement, objectContainer) {
		var element = createElement(stringTagName);
		if (stringClassName!="")
			element.className = stringClassName;
		if (objectContainerElement) {
			objectContainerElement.appendChild(element);
		}
		if (objectContainer){
			element.container = objectContainer;
		}
		return element;
	};
	this.simpleInitializeElement = function (stringTitleIconClassName,stringTitle, stringBody,buttonText) {
		var textOK = "确定";
		var textCancel = "取消";
		
		if (buttonText) {
			textOK = buttonText[0];
			if (buttonText[1]) {
				textCancel = buttonText[1];
			}
		}
		
		var container = this.bindElement("div", "popup");
		container.bindElement = this.bindElement;
		var shadow = this.bindElement("div", "shadow", container, container);
		var main = this.bindElement("div", "main", container, container);
		var head = this.bindElement("div", "head", main, container);
		container.head = head;
		var titleIcon = this.bindElement("div", stringTitleIconClassName, head, container);
		titleIcon.innerHTML=stringTitle;
		container.titleIcon = titleIcon;
		/*
		var tail = this.bindElement("div", "tail", head, container);
		var closeIcon = this.bindElement("div", "closeIcon", tail, container);
		closeIcon.backgroundElement = tail;
		closeIcon.onmouseover = function () {
			this.backgroundElement.className = "tailH";
		};
		closeIcon.onmouseout = function () {
			this.backgroundElement.className = "tail";
		};
		closeIcon.onclick = function () {
			this.container.remove();
		};
		*/
		var body = this.bindElement("div", "body", main, container);
		var element = this.bindElement("div", "", body, container);
		element.innerHTML=stringBody;
		container.element=element;
		
		var buttons = this.bindElement("div", "buttons", body, container);
		container.buttons = buttons;
		var buttonOk = this.bindElement("input", "button");
		buttonOk.type = "button";
		buttonOk.value = textOK;
		buttonOk.className="commonbtn";
		buttonOk.container = container;
		buttonOk.onclick = function () {
			this.container.remove();
		};
		container.buttonOk = buttonOk;
		buttons.appendChild(buttonOk);
		
		var buttonCancel = this.bindElement("input", "button");
		buttonCancel.type = "button";
		buttonCancel.value = textCancel;
		//buttonCancel.style="margin-left:50px";
		buttonCancel.className="commonbtn";
		buttonCancel.container = container;
		buttonCancel.onclick = function () {
			this.container.remove();
		};
		container.buttonCancel = buttonCancel;
		buttons.appendChild(buttonCancel);
			
		this.containerElement.appendChild(container);
		hideElement(container);
		container.show = function () {
			this.style.left = (getWindowSize()[0] - 489) / 2 + document.documentElement.scrollLeft + "px";
			this.style.top = (getWindowSize()[1] - 192) / 2 + document.documentElement.scrollTop + "px";
			mask.show();
			this.style.zIndex = mask.zIndexNow;
			showElement(this);
			var dragAble = new DragAble(this, this.head);
			if (this.input) {
				var setTimeoutFocus = function () {
					arguments.callee.input.select();
				};
				setTimeoutFocus.input = this.input;
				setTimeout(setTimeoutFocus, 1);
				//~ this.input.select();
			}
			else {
				this.buttonOk.focus();
			}
		};
		container.remove = function () {
			mask.clean();
			removeElement(this);
		};
		container.hide = function () {
			hideElement(this);
		};
		return container;
	}
	this.initializeElement = function (stringTitleIconClassName, stringIconClassName, booleanButtons, functionCallback, buttonText) {
		var textOK = "确定";
		var textCancel = "取消";
		
		if (buttonText) {
			textOK = buttonText[0];
			if (buttonText[1]) {
				textCancel = buttonText[1];
			}
		}
		
		var container = this.bindElement("div", "popup");
		container.bindElement = this.bindElement;
		var shadow = this.bindElement("div", "shadow", container, container);
		var main = this.bindElement("div", "main", container, container);
		var head = this.bindElement("div", "head", main, container);
		container.head = head;
		var titleIcon = this.bindElement("div", stringTitleIconClassName, head, container);
		titleIcon.innerHTML="操作提示"
		container.titleIcon = titleIcon;
		var tail = this.bindElement("div", "tail", head, container);
		var closeIcon = this.bindElement("div", "closeIcon", tail, container);
		closeIcon.backgroundElement = tail;
		/*
		closeIcon.onmouseover = function () {
			this.backgroundElement.className = "tailH";
		};
		closeIcon.onmouseout = function () {
			this.backgroundElement.className = "tail";
		};
		*/

		closeIcon.onclick = function () {
			this.container.remove();
		};
		var body = this.bindElement("div", "body", main, container);
		var icon = this.bindElement("div", stringIconClassName, body, container);
		container.icon = icon;
		var element = this.bindElement("div", "element", body, container);
		var elementTable = createElement("table");
		elementTableTrTd = elementTable.insertRow(0).insertCell(0);
		elementTableTrTd.className = "elementEntity";
		element.appendChild(elementTable);
		container.element = elementTableTrTd;
		
		var buttons = this.bindElement("div", "buttons", body, container);
		container.buttons = buttons;
		var buttonOk = this.bindElement("input", "button");
		buttonOk.type = "button";
		buttonOk.value = textOK;
		buttonOk.container = container;
		buttonOk.onclick = function () {
			if (this.container.input) {
				if (this.container.input.value == "") {
					popups.createPopup("AlertError", "输入不能为空。").show();
					this.container.input.focus;
				}
				else {
					functionCallback(this.container.input.value);
					this.container.remove();
				}
			}
			else {
				functionCallback(this.container);
				this.container.remove();
			}
		};
		container.buttonOk = buttonOk;
		buttons.appendChild(buttonOk);
		if (booleanButtons) {
			var buttonCancel = this.bindElement("input", "button");
			buttonCancel.type = "button";
			buttonCancel.value = textCancel;
			buttonCancel.container = container;
			buttonCancel.onclick = function () {
				this.container.remove();
			};
			container.buttonCancel = buttonCancel;
			buttons.appendChild(buttonCancel);
		}
		
		this.containerElement.appendChild(container);
		hideElement(container);
		container.show = function () {
			this.style.left = (getWindowSize()[0] - 489) / 2 + document.documentElement.scrollLeft + "px";
			this.style.top = (getWindowSize()[1] - 192) / 2 + document.documentElement.scrollTop + "px";
			mask.show();
			this.style.zIndex = mask.zIndexNow;
			showElement(this);
			var dragAble = new DragAble(this, this.head);
			if (this.input) {
				var setTimeoutFocus = function () {
					arguments.callee.input.select();
				};
				setTimeoutFocus.input = this.input;
				setTimeout(setTimeoutFocus, 1);
				//~ this.input.select();
			}
			else {
				this.buttonOk.focus();
			}
		};
		container.remove = function () {
			mask.clean();
			removeElement(this);
		};
		container.hide = function () {
			hideElement(this);
		};
		return container;
	};
	
	this.bindText = function (stringText, stringClassName, objectContainerElement) {
		var element = createElement("label");
		element.className = stringClassName;
		element.innerHTML = stringText;
		if (objectContainerElement) {
			objectContainerElement.appendChild(element);
		}
		return element;
	};
	this.createPopup = function (stringType, stringNote, functionCallback) {
		switch (stringType) {
			case "AlertErrorRelogin":
				var popup = this.initializeElement("titleAlert", "iconWarning", false, function () {window.location.href = "login.php";});
				popup.element.innerHTML = '<div class="title">' + convertHTML(stringNote) + '</div>';
				return popup;
				break;
			case "AlertError":
				
				var popup = this.initializeElement("titleAlert", "iconWarning", false, new Function());
				
				popup.element.innerHTML = '<div class="title">' + stringNote + '</div>';
				return popup;
				break;
			case "AlertSuccess":
				var popup = this.initializeElement("titleAlert", "iconSuccess", false, new Function());
				popup.element.innerHTML = '<div class="title">' + stringNote + '</div>';
				return popup;
				break;
			case "ConfirmDeleteMyfund":
				//var combination = stringNote;
				//var arrayNote = stringNote.split("|");
				//functionCallback.id = arrayNote[0];
				var popup = this.initializeElement("titleConfirm", "iconWarning", true, functionCallback);
				var line = createElement("div");
				line.innerHTML = '<div class="title">确认删除基金:<label>' + stringNote + '</label>？<br />'  + '<div>';
				popup.element.appendChild(line);
				return popup;
				break;
			case "Confirm":
				var popup = this.initializeElement("titleConfirm", "iconWarning", true, functionCallback);
				var line = createElement("div");
				line.innerHTML = '<div class="title"><label>' + stringNote + '</label>？<br />'  + '<div>';
				popup.element.appendChild(line);
				return popup;
				break;
			case "ConfirmAttendStock":
				var popup = this.initializeElement("titleConfirm", "iconWarning", true, functionCallback, ["继续添加"]);
				var line = createElement("div");
				line.innerHTML = stringNote;
				popup.element.appendChild(line);
				return popup;
				break;
			case "ConfirmDeleteStock":
				var stock = stringNote;
				functionCallback.stock = stock;
				var popup = this.initializeElement("titleConfirm", "iconWarning", true, functionCallback);
				var line = createElement("div");
				var arrayNote = stringNote;
				var result = '<div class="title">确认删除<label>' + stock[80] + '</label>？';
				if (window.combinations.combinationSelected.stocks[stock[50]][150].length > 1 || window.combinations.combinationSelected.stocks[stock[50]][101] != "0") {
						result += '<br />该基金下共有 ' + window.combinations.combinationSelected.stocks[stock[50]][150].length + ' 条交易记录。<div>';
				}
				line.innerHTML = result;
				popup.element.appendChild(line);
				return popup;
				break;
			case "ConfirmDeleteStockT":
				var row = stringNote;
				functionCallback.row = row;
				var popup = this.initializeElement("titleConfirm", "iconWarning", true, functionCallback);
				var line = createElement("div");
				var arrayNote = stringNote;
				var stringTdType = "";
				switch (row.tdType.value) {
					case "buy":
						stringTdType = "买入";
						break;
					case "sell":
						stringTdType = "卖出";
						break;
					case "attend":
						stringTdType = "关注";
						break;
				}
				line.innerHTML = '<div class="title">确认删除以下的交易记录？<div><br /><span>' + convertHTML(row.tdDate.value) + ' ' + convertHTML(stringTdType) + ' ' + convertHTML(row.tdNumber.value) + '股 价格:' + convertHTML(row.tdPrice.value) + '</span>';
				popup.element.appendChild(line);
				return popup;
				break;
			case "PromptCorpus":
				var combination = stringNote;
				functionCallback.combination = combination;
				var popup = this.initializeElement("titlePrompt", "iconEditing", true, functionCallback);
				var line = createElement("div");
				var arrayNote = stringNote;
				line.innerHTML = '<div class="title">请输入<label>' + convertHTML(combination.stringCombinationName) + '</label>的<label>本金</label>:<div>';
				var input = createElement("input");
				input.type = "text";
				input.className = "input";
				input.value = combination.numberCombinationCorpus;
				popup.input = input;
				input.container = popup;
				input.onkeydown = function () {
					var event = arguments[0] || window.event;
					switch (event.keyCode) {
						case 13: //Enter
							this.container.buttonOk.click();
							break;
						case 27: //Escape
							this.container.remove();
							break;
						default:
							break;
					}
				};
				line.appendChild(input);
				popup.element.appendChild(line);
				return popup;
				break;
			case "PromptUpdateCombinationName":
				var combination = stringNote;
				functionCallback.combination = combination;
				var popup = this.initializeElement("titlePrompt", "iconEditing", true, functionCallback);
				var line = createElement("div");
				line.innerHTML = '<div class="title">请输入组合 <label>' + convertHTML(combination.stringCombinationName) + '</label> 的<label>新名称</label>:<div>';
				var input = createElement("input");
				input.type = "text";
				input.className = "input";
				input.value = combination.stringCombinationName;
				popup.input = input;
				input.container = popup;
				input.onkeydown = function () {
					var event = arguments[0] || window.event;
					switch (event.keyCode) {
						case 13: //Enter
							this.container.buttonOk.click();
							break;
						case 27: //Escape
							this.container.remove();
							break;
						default:
							break;
					}
				};
				line.appendChild(input);
				popup.element.appendChild(line);
				return popup;
				break;
			case "PromptCreateCombination":
				var popup = this.initializeElement("titlePrompt", "iconEditing", true, functionCallback);
				var line = createElement("div");
				var arrayNote = stringNote;
				line.innerHTML = '<div class="title">请输入新建投资组合的名称：</div><div>(长度不得超过4个汉字或8个字符)</div>';
				var input = createElement("input");
				input.type = "text";
				input.className = "input";
				popup.input = input;
				input.container = popup;
				input.onkeydown = function () {
					var event = arguments[0] || window.event;
					switch (event.keyCode) {
						case 13: //Enter
							this.container.buttonOk.click();
							break;
						case 27: //Escape
							this.container.remove();
							break;
						default:
							break;
					}
				};
				line.appendChild(input);
				popup.element.appendChild(line);
				return popup;
				break;
		}
	};
};