var INVEN = window.INVEN || {};
INVEN.Db = window.INVEN.Db || {};
INVEN.Db.Tooltip = window.INVEN.Db.Tooltip || {};

INVEN.Db.Tooltip.objects = window.INVEN.Db.Tooltip.objects || new Array();

INVEN.Db.Tooltip.create = function(tooltipId, wrapObj, siteCode, xmlFile) {
	if (tooltipId) {
		var n = INVEN.Db.Tooltip.objects.length;
		INVEN.Db.Tooltip.objects[n] = new INVEN.Db.Tooltip.object();
		INVEN.Db.Tooltip.objects[n].init("INVEN.Db.Tooltip.objects["+n+"]", tooltipId, wrapObj, siteCode, xmlFile);
		return INVEN.Db.Tooltip.objects[n];
	} else {
		var temp = new INVEN.Db.Tooltip.emptyObject();
		return temp;
	}
}

INVEN.Db.Tooltip.object = function() {
	/* Attributes */
		var insName = null;
		var tooltipId = "";
		var wrapObj = null;
		var xmlFile = "";
		var siteCode = "";
		var initialised = false;
		
		var xmlObj = null;
		var requestDelay = 500;

		var preData = new Array();

	/* ÃÊ±âÈ­ */
		this.init = function(ins, tid, wrap, site, xml) {
			insName = ins;
			tooltipId = tid;
			xmlFile = xml;
			siteCode = site;
			xmlObj = INVEN.Xml.create("GET", "", true);

			if (wrap) {
				wrapObj = wrap;
				addEvent(window, "onload", initWrap);
			}
			INVEN.ReadyState.add(this.forceReady);
		}

	/* °­Á¦ È°¼º */
		this.forceReady = function() {
			removeEvent(window, "onload", initWrap);
			INVEN.Layer.forceReady();
			initWrap();
		}

	/* WRAP ÃÊ±âÈ­ */
		function initWrap() {
			var obj = getObj(wrapObj);
			if (obj) {
				wrapObj = obj;
				hasWrap = true;
				wrapObj.parentNode.removeChild(wrapObj);
				document.body.appendChild(wrapObj);
				wrapObj.style.position = "absolute";
				wrapObj.style.overflow = "visible";
				//wrapObj.style.zIndex = 100;
			} else if (wrapObj != "") {
				var divObj = document.createElement("DIV");
				divObj.id = wrapObj;
				divObj.style.position = "absolute";
				//divObj.style.zIndex = 100;
				divObj.style.overflow = "visible";
				document.body.appendChild(divObj);
				divObj.style.width = '0px';
				divObj.style.width = 'auto';
				hasWrap = true;
				wrapObj = divObj;
			} else {
				wrapObj = document.body;
			}
			initialised = true;
		}

	/* ³»ºÎ : ·¹ÀÌ¾î¸í °è»ê */
		function getLayerName(code, type) {
			var temp = tooltipId + "_" + code;
			if (type) { temp += "_" + type;  }
			return temp;
		}

	/* ³»ºÎ : ¼ø¼öÄÚµå¸í (ÄÚµå+Á¾·ù) °è»ê */
		function getCodeName(code, type) {
			var temp = code;
			if (type) { temp += "_" + type;  }
			return temp;
		}

	/* ·¹ÀÌ¾î º¸ÀÌ±â */
		this.show = function(code, type, delay) {
			if (!initialised) { return; }
			if (code <= 0) return;
			if (!type) type = "";
			if (delay == undefined) delay = requestDelay;

			var layerName = getLayerName(code, type);
			var layerObj = getObj(layerName);
			if (!layerObj) {
				// ¾ÆÀÌÅÛ ¿äÃ»
				layerObj = document.createElement("DIV");
				layerObj.className = tooltipId + "_loading";
				layerObj.id = layerName;
				wrapObj.appendChild(layerObj);
			}
			if (layerObj.className == (tooltipId + "_loading")) {
				var tempCode = getCodeName(code, type);
				if (preData[tempCode]) {
					write(preData[tempCode]['data1'], preData[tempCode]['data2']);
				} else {
					setTimeout(insName + ".request(" + code + ", '" + type + "')", delay);
				}
			}
			INVEN.Layer.show(layerObj,10,10, false, false);
		}

	/* ·¹ÀÌ¾î °¨Ãß±â */
		this.hide = function(code, type) {
			if (!initialised) { return; }
			var layerName = getLayerName(code, type);
			var layerObj = getObj(layerName);
			if (layerObj) {
				INVEN.Layer.hide(layerObj, false);
			}
		}

	/* ·¹ÀÌ¾î ºñ¿ì±â (ÃÊ±âÈ­) */
		this.clear = clear;
		function clear() {
			if (wrapObj) {
				var chs = wrapObj.childNodes;
				if (!chs) { return; }
				var n = chs.length;
				for (var i = n - 1; i >= 0; i--) {
					wrapObj.removeChild(chs.item(i));
				}
			}
		}

	/* ·¹ÀÌ¾î ¿äÃ» */
		this.request = function(code, type) {
			// ·¹ÀÌ¾î°¡ º¸ÀÌ´Â »óÅÂÀÏ °æ¿ì¸¸ ¿äÃ»
			var layerName = getLayerName(code, type);
			var layerObj = getObj(layerName);
			if ((!layerObj) || (layerObj.style.display != 'inline')) {
				return;
			}

			if (getDirPath() == siteCode) {
				var url = getSiteRootPath() + xmlFile;
			} else if (location.href.substr(0,23) == 'http://www.inven.co.kr/') {
				var url = "/" + siteCode + "/" + xmlFile;
			} else {
				return;
			}
			xmlObj.setAction(url);

			var data = new Array();
			data["code"] = code;
			data["type"] = type;
			
			xmlObj.print = process;
			xmlObj.request(data);
		}

	/* ³»ºÎ : XML ÀÚ·á ÇÚµé¸µ */
		function process(xmlObj) {
			// ÀÚ·á ¼öÁý
			var data1 = new Array();
			var data2 = new Array();
			
			var lists = xmlObj.responseXML.getElementsByTagName("resultdata")[0];
				
			var code = lists.getAttribute("code");
			var type = lists.getAttribute("type");
			var colon = lists.getAttribute("colon");
			if (!type) type = "";
			//if (!colon) colon = " : ";
			data1['code'] = code;
			data1['type'] = type;
			data1['colon'] = colon;

			var items = lists.childNodes;

			data2 = processOne(items, data1);

			// ÀÚ·á Ãâ·Â
			write(data1, data2);
		}

	/* ³»ºÎ : XML ÀÚ·á °³º° ÇÚµé¸µ */
		function processOne(items, data1) {
			var ltTag = /\&lt;/g;
			var gtTag = /\&gt;/g;
			var ampTag = /\&amp;/g;

			var n = items.length;
			var data2 = new Array();
			for (var i = 0; i < n; i++) {
				var item = items[i];
				try {
					var type = item.getAttribute('type');
					if (!type) type = 'text';

					data2[item.tagName] = new Array();
					data2[item.tagName]['type'] = type;
					if (item.getAttribute('caption')) {
						data2[item.tagName]['caption'] = item.getAttribute('caption');
						if (!item.getAttribute('nocolon')) {
							data2[item.tagName]['caption'] += data1['colon'];
						}
					}
					if (data2[item.tagName]['caption'] == undefined) data2[item.tagName]['caption'] = "";

					switch (type) {
						case 'list':
							var listChs = item.childNodes;
							var listChsN = listChs.length;
							data2[item.tagName]['list'] = new Array();
							for (var li = 0; li < listChsN; li++) {
								var listItem = listChs[li];
								if (listItem.firstChild) data2[item.tagName]['list'][li] = listItem.firstChild.nodeValue;
							}
							break;
						
						case 'group':
							data2[item.tagName]['value'] = processOne(item.childNodes, data1);
							break;
						case 'text':
						case 'image':
						default:
							if (item.firstChild && item.firstChild.nodeValue) {
								var str = item.firstChild.nodeValue;
								str = str.replace(ltTag, '<');
								str = str.replace(gtTag, '>');
								str = str.replace(ampTag, '&');
								data2[item.tagName]['value'] = str;
								break;
							} else {
								data2[item.tagName]['value'] = '';
							}
					}
				} catch (e) {
				}

			}
			return data2;
		}

	/* ³»ºÎ : ÀÚ·á Ãâ·Â (DOM »ý¼º) */
		function write(data1, data2) {
			var layerWrap = getObj(getLayerName(data1['code'], data1['type']));
			layerWrap.className = tooltipId;
			layerWrap.innerHTML = "";

			// ³»ºÎ ·¹ÀÌ¾Æ¿ô
			var layerWrap2 = document.createElement("DIV");
			layerWrap2.className = tooltipId + "_inner";

			// ¼¼ºÎ»çÇ× µî·Ï
			writeOne(layerWrap2, data2);

			if (layerWrap2.childNodes.length == 0) {
				layerWrap.style.display = 'none';
			} else {
				var divObj = document.createElement("DIV");
				divObj.className = "IEFix";
				divObj.innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
				layerWrap2.appendChild(divObj);
			}

			layerWrap.appendChild(layerWrap2);


			// À§Ä¡ Àç°è»ê
			if (layerWrap.style.display != 'none') {
				INVEN.Layer.show(layerWrap,10,10, false, false);
			}
		}

	/* ³»ºÎ : ÀÚ·á °³º° Ãâ·Â (DOM »ý¼º) */
		function writeOne(obj, data) {
			// ¼¼ºÎ»çÇ× µî·Ï
			for (var i in data) {
				var item = data[i];
				var dlObj = document.createElement("DL");
				var dtObj = document.createElement("DT");
				var ddObj = document.createElement("DD");
				dlObj.className = i;

				if (item['caption'] != '') {
					dtObj.innerHTML = item['caption'];
				}
				if (item['type'] == 'group') {
					dtObj.className = i;
					ddObj.className = i;
				}
				switch (item['type']) {
					case 'image':
						ddObj.innerHTML = '<img src="'+item['value']+'" alt=""/>';
						break;
					case 'group':
						writeOne(ddObj, item['value']);
						break;
					case 'list':
						var listText = '';
						listText += '<ul>';
						for (listI in item['list']) {
							listText += '<li>' + item['list'][listI] + '</li>';
						}
						listText += '</ul>';
						if (item['list'].length == 0) ddObj.className = 'empty';
						ddObj.innerHTML = listText;
						break;
					default:
						ddObj.innerHTML = item['value'];
				}

				dlObj.appendChild(dtObj);
				dlObj.appendChild(ddObj);
				obj.appendChild(dlObj);
			}
		}

	/* ¼öµ¿ ±âÁ¤º¸ µî·Ï */
		this.addPreData = function(data1, data2) {
			var keyName = getCodeName(data1['code'], data1['type']);
			preData[keyName] = new Array();
			preData[keyName]['data1'] = data1;
			preData[keyName]['data2'] = data2;
		}

	/* ¼öµ¿ ±âÁ¤º¸ »èÁ¦ */
		this.clearPreData = clearPreData;
		function clearPreData() {
			preData = new Array();
		}
}

INVEN.Db.Tooltip.emptyObject = function() {
	this.show = function() { }
	this.hide = function() { }
}
