/**
* common javascript library for DRAGONFLY websites.
* wrote by jaNg. @ rootbox ( jangkw@dragonflygame.com )
**/

/*
* enable image cache for less than internet explorer 6
*/
try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {}


/*
* link blur to 'a' tags and input tags(type 'image' only)
*/
function allblur() {
	//var inputs = document.getElementsByTagName("input");
	var alinks = document.links;
	var tmp = []; var j = 0;

    /*
	for(i = 0; i < inputs.length; i ++) {
		if(inputs[i].type != "image") continue;
		tmp[j] = inputs[i];
		j ++;
	}
	inputs = tmp;
    */
	//for(i = 0; i < inputs.length; i ++) inputs[i].onfocus = function() { this.blur(); }
	for(i = 0; i < alinks.length; i ++) alinks[i].onfocus = function() { this.blur(); }
}

/*
* flash activation
*/
function flashActivate() {
	var object = new String;
	var params = new String;
	var objParams = new String;
	var embedParams = new String;

	this.init = function(objectID, flashURL, W, H) {
		object = "<object id='" +objectID+ "' width='" +W+ "' height='" +H+ "' classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0'>";
		object += "";
		objParams = "<param name='movie' value='" +flashURL+ "' />";
		embedParams = "src='" +flashURL+ "' ";
		embedParams += "name='" +objectID+ "' ";
		embedParams += "width='" + W + "' height='" + H + "' ";
	};
	this.param = function(param, value) {
		params += "";
		objParams += "<param name='" +param+ "' value='" +value+ "' />";
		embedParams += param + "='" +value+ "' ";
	};
	this.load = function() {
		var embedTag = "<embed " + embedParams + "pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' />";
		var objTag = object + objParams + embedTag + "</object>";
		//alert(objTag);
		document.write(objTag);
	};
};

/*
* favorite clan list initialize
*/
function initFavoriteClan(container, content) {
	if(!container && !content) return false;

	container.onclick = function() { content.style.display = (content.style.display != "block") ? "block" : "none"; };
};

/*
* initialize tabs
*/
var initTab = function(obj, link) {
	var tabs = [];
	var imgs = obj.getElementsByTagName("img");
	var regx = "\#[a-zA-Z0-9]+";
	var old = null;

	for(var i = 0; val = imgs[i]; i ++) {
		tabs.push(document.getElementById(val.parentNode.href.match(regx)[0].replace("#","")));
	}

	for(var i = 0; i < imgs.length; i ++) {
		imgs[i].onclick = function() {
			for(var i = 0; i < tabs.length; i ++) {
				tabs[i].style.display = "none";
				imgs[i].src = imgs[i].src.replace("On.gif", ".gif");
			}
			this.src = this.src.replace(".gif", "On.gif");
			tab = document.getElementById(this.parentNode.href.match(regx)[0].replace("#",""));
			tab.style.display = "block";
			if(link) link.href = tab.href;
			return false;
		};
	}
};

/*
* initialize board content preview on board list
*/
var boardPreview = {
	link:	 [],
	preview: [],
	board:   {},
	init: function(obj) {
		this.board.top = obj.offsetTop;
		this.board.left = obj.offsetLeft;
		this.link = this.getElements(obj.getElementsByTagName("a"));
		this.preview = this.getElements(obj.getElementsByTagName("blockquote"));

		for(i = 0; i < this.link.length; i ++) {
			this.link[i].id = "link-" + i;
			this.link[i].onmouseover = this.view;
			this.link[i].onmouseout  = this.hide;
		}

		for(i = 0; i < this.preview.length; i ++) {
			this.preview[i].id = "preview-" + i;
			this.preview[i].style.display = "none";
		}
	},
	view: function() {
		linkObj		= document.getElementById(this.id);
		previewObj  = document.getElementById(this.id.replace("link", "preview"));

		linkPos_x   = linkObj.parentNode.offsetLeft;
		linkPos_y   = linkObj.parentNode.offsetTop;

		previewObj.style.top     = boardPreview.board.top + linkPos_y + 30 +  "px";
		previewObj.style.left    = boardPreview.board.left + linkPos_x + 10 + "px";
		previewObj.style.display = "block";

		//var log = document.getElementById("log");
		//log.innerHTML = linkPos_x + " " + linkPos_y + " " + boardPreview.board.top + " " + boardPreview.board.left;
	},
	hide: function() {
		previewObj  = document.getElementById(this.id.replace("link", "preview"));
		previewObj.style.display = "none";
	},
	getElements: function(obj) {
		tmp = [];
		j = 0;

		for(i = 0; i < obj.length; i ++) {
			if(obj[i].className != "preview") continue;
			tmp[j] = obj[i];
			j ++;
		}

		return tmp;
	}
};

/*
* initialize FAQ list
*/
var faqList = {
	faqListL: [],
	faqListA: [],
	faqListQ: [],
	init: function(obj, list, answer) {
		if(!obj || list.length <= 0 || answer.length <= 0) return;

		this.faqListQ = [];
		this.faqListL = list;
		this.faqListA = answer;

		var j = 0;
		for(i = 0; i < this.faqListL.length; i ++) {
			if(this.faqListL[i].className != "question") continue;
			this.faqListQ[j] = this.faqListL[i];
			j ++;
		}

		for(i = 0; i < this.faqListQ.length; i ++) {
			this.faqListQ[i].onclick = function() {
				faqList.show(this, list, answer);
				return false;
			}
			this.faqListQ[i].id = obj.id + i;
			this.faqListA[i].id = obj.id + i + "_a";
			this.faqListA[i].style.display = 'none';
		}
	},
	reset: function(list, answer) {
		for(i = 0; i < answer.length; i ++) {
			list[i].className = '';
			answer[i].style.display = 'none';
		}
	},
	show: function(obj, list, answer) {
		faqList.reset(list, answer);
		document.getElementById(obj.id + "_a").style.display = 'block';
		document.getElementById(obj.id).className = 'on';
	}
};

/*
* moveable layer popup
*/
var LayerMover = function(handler) {
	handler.onmouseup = onDrop;
	handler.onmousedown = function(e) {
		var e = e || event;
		absolute = { x: e.clientX, y: e.clientY };
		relative = { x: parseInt(handler.offsetLeft) - absolute.x, y: parseInt(handler.offsetTop) - absolute.y };
		prezIndex = parseInt(handler.style.zIndex);
		zIndex = parseInt(handler.style.zIndex) + 100;

		handler.style.left = handler.offsetLeft;
		handler.style.marginLeft = "0px";
		handler.style.zIndex = zIndex;

		document.onmouseup = onDrop;
		document.onmousemove = onMove;
		document.onselectstart = function() { return false; };
	};
	handler.ondragstart = function() { return false; };

	function onMove(e) {
		var e = e || event;
		handler.style.left = (e.clientX + relative.x) + "px";
		handler.style.top = (e.clientY + relative.y) + "px";
		handler.style.cursor = "move";

		if(parseInt(handler.style.left) <= 0) handler.style.left = "0px";
		if(parseInt(handler.style.top) <= 0) handler.style.top = "0px";
	};
	function onDrop(e) {
		document.onmousemove = null;
		document.onmouseup = null;
		document.onselectstart = null;
		handler.style.cursor = "default";
		handler.style.zIndex = prezIndex;
	};
};

/*
* pumping list
*/
var PumpingList = function(container, content, speed) {
	container.items = content.getElementsByTagName("li");

	if(container.items.length < 3) return false;
	if(container.pump) window.clearInterval(container.pump);
	setItems();

	container.onmouseover = function() { clearInterval(container.pump); };
	container.onmouseout = function() {
		container.pump = setInterval(function() {
			setItems();
			content.appendChild(container.items[0]);
		}, speed);
	};

	function setItems() {
		for(var i = 0; i < container.items.length; i ++) container.items[i].className = "";
		container.items[0].className = "first";
		container.items[1].className = "second";
		container.items[2].className = "third";
	};

	container.onmouseout();
};


/*
* scroll content direction up
*/
var ScrollingList = function(container, content, speed, gap, delay) {
	if(container.offsetHeight >= content.offsetHeight) return false;
	if(container.scroll) window.clearInterval(container.scroll);

	container.posY = 0;
	content.innerHTML += content.innerHTML;

	container.onmouseover = function() { clearInterval(container.scroll); clearInterval(container.timer); };
	container.onmouseout = function() {
		container.scroll = setInterval(function() {
			container.posY --;

			if(gap && delay && !((container.posY * -1) % gap)) {
				clearInterval(container.scroll);
				container.timer = setInterval(function() {
					container.posY --;
					container.onmouseout();
					clearInterval(container.timer);
				}, delay);
			}

			content.style.top = container.posY + "px";
			if(container.posY * -1 > content.offsetHeight / 2) container.posY = 0;
		}, speed);
	};

	container.onmouseout();
};

/*
* set image rollover
*/
var initRollOver = function(handler) {
	handler.imgs = handler.getElementsByTagName("img");
	for(var i = 0; i < handler.imgs.length; i ++) {
		if(handler.imgs[i].src.match("On.gif")) continue;
		handler.imgs[i].onmouseover = function() { this.src = this.src.replace(".gif", "On.gif"); };
		handler.imgs[i].onmouseout = function() { this.src = this.src.replace("On.gif", ".gif"); };
	}
};

/*
* image slider
*/
var ImageSlider = {
	current: 0,
	imgList: null,
	imgLength: 0,
	option: null,
	timer: null,
	start: 0,
	end: 0,
	dir: "",

	init: function(obj, option) {
		var tmp = obj.getElementsByTagName("div");
		this.option = option;

		for(var i = 0; val = tmp[i]; i ++) {
			switch(val.id) {
				case "screenWrap":
					this.imgList = val.getElementsByTagName("ul")[0];
					this.imgLength = this.imgList.getElementsByTagName("li").length;
					break;
				case "screenControl": this.control = val.getElementsByTagName("a"); break;
				default: return false;
			}
		}

		for(var i = 0; val = this.control[i]; i ++) {
			switch(val.className) {
				case "prev": val.onclick = function() { ImageSlider.move("prev"); return false; }; break;
				case "next": val.onclick = function() { ImageSlider.move("next"); return false; }; break;
				default: return false;
			}
		}
	},
	move: function(direction) {
		this.start = 0; this.end = 0;
		clearTimeout(this.timer);

		var offsetLeft = (!this.imgList.style.left) ? 0 : parseInt(this.imgList.style.left);
		var moveTo = this.option.width + this.option.margin + (this.option.border) * 2;

		switch(direction) {
			case "prev":
				if(this.current <= 0) {
					this.imgList.style.left = "0"
				} else {
					this.action(offsetLeft, offsetLeft + moveTo, direction);
					this.current--;
				}
				break;
			case "next":
				if((this.current + this.option.views) >= this.imgLength) {
					this.imgList.style.left = offsetLeft + "px"
				} else {
					this.action(offsetLeft, offsetLeft - moveTo, direction);
					this.current++;
				}
				break;
			default: return false;
		}

		//document.getElementById("log").value += "offsetLeft = " + offsetLeft + " | moveTo = " + moveTo + " | current = " + this.current + "\n";
	},
	action: function(s, e, d) {
		this.start = (!s) ? this.start : s;
		this.end = (!e) ? this.end : e;
		this.dir = (!d) ? this.dir : d;

		if(this.start != this.end) {
			this.timer = setTimeout('ImageSlider.action()', 5);

			switch(this.dir) {
				case "prev":
					if(this.start >= this.end) {
						this.start = this.end;
						clearTimeout(this.timer);
					}
					break;
				case "next":
					if(this.start <= this.end) {
						this.start = this.end;
						clearTimeout(this.timer);
					}
					break;
				case "default": return false;
			}
			this.imgList.style.left = this.start + "px";
			this.start = (this.dir == "prev") ? this.start + 5 : this.start - 5;
		}

		if(this.start == this.end) clearTimeout(this.timer);

		//document.getElementById("log").value = this.start + " " + this.end + " " + this.timer + "\n";
	}
};

/*
* image slider - array control version
*/
var GallerySlider = function(container, content, cropItems, btns, isMoving) {
	container.ul = content;
	container.li = content.getElementsByTagName("li");
	container.cropItems = cropItems;
	container.btns = btns;
	container.isMoving = isMoving;
	container.target = null;

	if(container.isMoving || container.cropItems >= container.li.length) return;
	container.isMoving = true;

	container.btns[1].onclick = function() {
		if(/^-/.test(container.ul.style.marginLeft)) {
			container.ul.appendChild(container.li[0]);
		}
		container.ul.style.marginLeft = "0px";
		container.target = - container.li[0].offsetWidth;
		action();
		return false;
	};
	container.btns[0].onclick = function() {
		if(!/^-/.test(container.ul.style.marginLeft)) {
			container.ul.insertBefore(container.li[container.li.length - 1], container.li[0]);
		}
		container.ul.style.marginLeft = - container.li[0].offsetWidth + "px";
		container.target = 0;
		action();
		return false;
	};

	function action() {
		var marginLeft = parseInt(container.ul.style.marginLeft),
			moveLength = parseInt((container.target - marginLeft) * .2);
		if (moveLength) {
			container.ul.style.marginLeft = marginLeft + moveLength + "px";
			setTimeout(arguments.callee, 20);
		} else {
			container.ul.style.marginLeft = container.target + "px";
			container.isMoving = 0;
		}
	};
};

/*
* game grade
*/
function setGrade(grade) {
	document.getElementById("grade-15").style.zIndex = 0;
	document.getElementById("grade-18").style.zIndex = 0;
	document.getElementById(grade.match("\grade\-[0-9]+")[0]).style.zIndex = 1;
	return false;
};

/*
* mainpage gm tab
*/
function gmTab(o) {
	var t = o.getAttribute("rel");
	document.getElementById((t == "gm01") ? "gm02" : "gm01").style.display = "none";
	document.getElementById(t).style.display = "block";
};

/*
* subpage ranking info
*/
function setRankingInfo(o, i) {
	var el = getElementsByClassName("info", "dl", o);
	if(!i || !el || el.length < 1) return false;
	el[0].onmouseover = function() { i.style.display = "block"; };
	el[0].onmouseout = function() { i.style.display = "none"; };
};

/*
* id / pw background setting
*/
function setBackground(o) {
	if(o.value) return;
	o.className = o.className.replace(" onfocus", "");
};
function removeBackground(o) {
	o.className = o.className + " onfocus";
};

/*
* file search
*/
function setFileSearch(obj) {
	if(obj.length <= 0) return;

	for(i = 0; i < obj.length; i ++) {
		document.getElementById(obj[i]).onchange = function() {
			document.getElementById(this.id.replace("-field", "-search")).value = this.value;
		}
	}
};

/*
* attach event
*/
function addEvent(elm, evType, fn, useCapture) {
	if(elm.addEventListener) {
		elm.addEventListener(evType,fn,useCapture);
		return true;	
	} else if(elm.attachEvent) {
		var r = elm.attachEvent('on'+evType,fn);
		return r;
	} else {
		alert("Browser Does Not Full Support Event Handling");
		return true;
	}
};

/*
* get elements by class name.
* return - array object
*/
function getElementsByClassName(className, tag, elm) {
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++) {
		current = elements[i];
		if(testClass.test(current.className)) {
			returnElements.push(current);
		}
	}
	return returnElements;
};
