var Css = {
	init: function() {
		this.assignDisplay()
		this.align()		
	},
	assignDisplay: function() {
		var elements = FindEl.getButtonLikeElementsByClassName(document.body, "Display")
		if (elements) {
			for (var i=0; i < elements.length; i++) {
				elements[i].style.display = (elements[i].className.indexOf("DisplayNone") != -1) ? "none" : "block"
			}
		}
	},
	align: function() {
		var elements = FindEl.getButtonLikeElementsByClassName(document.body, "Align-")
		if (elements) {
			var container, children;
			for (var i=0; i < elements.length; i++) {
				container = document.createElement("div")
				
				children = elements[i].childNodes
				AppendEl.moveChildrenInto(container, children)
				AppendEl.moveChildInto(elements[i], container)
				container.style.cssFloat = "left"
				container.style.styleFloat = "left"
				container.style.width = container.offsetWidth + "px"
				container.style.cssFloat = "none"
				container.style.styleFloat = "none"
			
				if (elements[i].className.split("Align-")[1] == "Left") {
					container.style.margin = "0 auto 0 0"
				} else if (elements[i].className.split("Align-")[1] == "Right") {
					container.style.margin = "0 0 0 auto"
				} else {
					container.style.margin = "0 auto"
				}
			}
		}
	},
	absoluteLayout: function(element, property, hi) {
		var container = element.parentNode
		if (property == "width") {	
			var borderWidth = element.offsetWidth - element.clientWidth			
			var result = container.clientWidth - borderWidth - (parseInt(Css.getStyle(element, "left")) + parseInt(Css.getStyle(element, "right")))
			
		} else {
			var borderWidth = element.offsetHeight - element.clientHeight
			var result = container.clientHeight - borderWidth - (parseInt(Css.getStyle(element, "top")) + parseInt(Css.getStyle(element, "bottom")))
		}				
		return (result > 0)? result : '0' + "px"
	},
	getStyle: function(element, style) {
		if (element.currentStyle) {
			var css = element.currentStyle
		} else {
		    var css = document.defaultView.getComputedStyle(element, null);	
		}
	    value = css ? css[style] : null;	
	    return value == 'auto' ? null : value;
	}
}
var Button = {
	init: function(targetWrapper) {
		var targetElWrapper = targetWrapper
		var targetEl = FindEl.getButtonLikeElementsByClassName(document.getElementById(targetElWrapper), "CommonButton")	
		var length = targetEl.length;
		var defaultSubmit = false;
		
		var target, button;
		for (var i=0; i < targetEl.length; i++) {
			target = targetEl[i]
			if (target.className.indexOf("Round") != -1) this.makeRound(target)
			target.className = target.className.replace("CommonButton", "").replace("Round", "")
			if (target.tagName == "INPUT") {
				if (target.type == "submit" || target.type == "reset" || target.type == "button") {
					button = document.createElement("a")
					button.href = "#"
					button.innerHTML = target.value
				} else if (target.type == "image") {
					button = document.createElement("img")
					button.alt = target.alt
					button.src = target.src
					button.style.cursor = "pointer"
				}
				if (target.id) button.id = target.id
				if (target.className) button.className = target.className
				button.className += " name-" + target.name
				AppendEl.insertNodeAt(button, target, "after");
				
				if (target.onclick) {
					/**
					 * 스프링노트용 땜빵 코드. input type="submit|reset" 에 onclick이 있는 경우 아래 코드는 문제 있음:
					 *
					 * button.onclick = target.onclick;
					 */
					button._target = target;
					button._onclick = target.onclick;
					button._form = FindEl.parentForm(button);
					button.onclick = function(e) {
						if(this._onclick(e)) {
							var hiddenInput = this._form.ownerDocument.createElement("INPUT");
							this._form.appendChild(hiddenInput);
							hiddenInput.type = "hidden";
							hiddenInput.name = this._target.name;
							hiddenInput.value = this._target.value;
							this._form.submit();
						}
						return false;
					}
				} else {
					if (target.type == "reset") {
						button.onclick = this.parentFormReset
					} else if (target.type == "submit" || target.type == "image") {
						button.onclick = this.parentFormSubmit
					} else if (target.type == "button") {
						button.onclick = function() { return false }
					}
				}
				
				if (!defaultSubmit) {
					if (target.type == "submit") defaultSubmit = true
					var parentForm = FindEl.parentForm(target)
					if (parentForm) {
						AppendEl.moveChildInto(parentForm, target)					
						if (parentForm.id == "formEditTags") {						
							parentForm.style.height = "100%"	
						} else {
							parentForm.style.width = "100%"							
						}
						parentForm.style.overFlow = "hidden"
						target.style.position = "absolute"
						target.style.top = "-1000px"
						target.style.left = "-1000px"
						target.className = ""
					} else {
						target.parentNode.removeChild(target)
					}
				} else {
					target.parentNode.removeChild(target)
				}
			}			
		}
	},
	makeRound: function(target) {
		var container = document.createElement("div")
		container.className = "RoundButton style-" + target.className.split("style-")[1]
		container.innerHTML = '<div class="RI1"><div class="RI2"><div class="RI3"><div class="RI4"></div></div></div></div>'
		var wrap = FindEl.byClass(container.getElementsByTagName('div'), "RI4")[0]
		AppendEl.insertNodeAt(container, target, "after")
		AppendEl.moveChildInto(wrap, target)
	},
	parentFormSubmit: function() {
		var parentForm = FindEl.parentForm(this);

		if (!parentForm.onsubmit || parentForm.onsubmit() != false) {
			var currentField = FindEl.byClass(parentForm.getElementsByTagName('input'), "scriptField")[0]
			if (currentField) {
				currentField.name = this.className.split("name-")[1]
				currentField.value = this.innerHTML
			} else {
				var hiddenField = document.createElement("input")
				hiddenField.type = "hidden"
				hiddenField.name = this.className.split("name-")[1]
				hiddenField.value = (this.innerHTML) ? this.innerHTML : this.alt
				hiddenField.className = "scriptField"
				AppendEl.moveChildInto(parentForm, hiddenField)
			}
			if (document.createEvent) {
				var e = parentForm;
				var evt = document.createEvent("HTMLEvents");
				evt.initEvent("submit", true, false);
												
				var isSafari = e.dispatchEvent(evt)
				if (isSafari == true) {
					e.submit();
				};
			} else {
				parentForm.fireEvent('onsubmit');
				parentForm.submit();
			}
		}
		return false;
	},
	parentFormReset: function() {
		var parentForm = FindEl.parentForm(this);		
		parentForm.reset()
		return false;
	},
	inputIeHack: function() {
		var input = document.createElement("div")
		input.innerHTML = '<input type="submit" value="ie 18" />'
	}
}
var AppendEl = {
	moveChildInto: function(el, child) {
		el.appendChild(child)
	},
	moveChildrenInto: function(el, children) {
		var a = 0;
		while (children.length > 0) {
			if (a == children.length) break;
			else {
				a = children.length;
				this.moveChildInto(el, children[0]);
			}
		}
	},
	insertNodeAt: function(node, dest, where) {
		if(where == "before") {
			dest.parentNode.insertBefore(node, dest);
		} else { // "after"
			var next = dest.nextSibling;
			if(next) {
				next.parentNode.insertBefore(node, next);
			} else {
				dest.parentNode.appendChild(node);
			}
		}
	}
	/*moveChildInto: function(el, child) {
		el.appendChild(child)
	},
	moveChildrenInto: function(el, children) {
		for (var i=0; i < children.length; i++) {
			this.moveChildInto(el, children[i])
		}
	},
	insertNodeAt: function(node, dest, where) {
		if(where == "before") {
			dest.parentNode.insertBefore(node, dest);
		} else { // "after"
			var next = dest.nextSibling;
			if(next) {
				next.parentNode.insertBefore(node, dest);
			} else {
				dest.parentNode.appendChild(node);
			}
		}
	}*/
}
var RemoveEl = {
	child: function(child) {
		child.parentNode.removeChild(child)
	},
	children: function(children) {
		for (var i=0; i < children.length; i++) {
			this.child(children[i])
		}
	}	
}
var FindEl = {
	getButtonLikeElementsByClassName: function(element, className) {
		if(element.select) {
			return element.select("." + className);
		} else {
			var anchors = element.getElementsByTagName("a");
			var inputs = element.getElementsByTagName("input");
			var result = [];
			FindEl.byClass(anchors, className, result);
			FindEl.byClass(inputs, className, result);
			return result;
		}
	},
	byClass: function(el, className, array) {
		var elements = array || []
		var pattern = new RegExp("(^|\\s)" + className + "($|\\s)")
		
		for (var i = 0; i < el.length; i++) {
			if (pattern.test(el[i].className)) {
				elements.push(el[i])
			}
		}
		return elements
	},
	byNodeType: function(el, nodeType) {
		var elements = []

		for (var i=0; i < el.length; i++) {
			if (el[i].nodeType == nodeType ) {
				elements.push(el[i])
			}
		}
		return elements
	},
	parentForm: function(el) {
		var tempEl = el
		var parentForm
		do { 
			tempEl = tempEl.parentNode
			if (!tempEl) break
		}
		while (tempEl.tagName != "FORM")
		parentForm = tempEl
		return parentForm
	},
	parentNodeByClass: function(el, className) {
		var tempEl = el
		var parentEl
		do { tempEl = tempEl.parentNode }
		while (tempEl.className.indexOf(className) == -1)
		parentEl = tempEl
		return parentEl
	},
	fromChildNodesByNodeName: function (container, nodeName) {
		var elements = [];
		var childNodes = container.childNodes
		for (var i=0; i < childNodes.length; i++) {
			if (childNodes[i].nodeName === nodeName) elements.push(childNodes[i]);
		};
		return elements;
	}
}
var FontSize = {
	init: function() {
		this.cookieName = 'saveLastFontSize';
		this.expdate = new Date();
		this.expdate.setTime(this.expdate.getTime() + 1000 * 3600 * 24 * 30);
		this.defaultFontSize = 12;
		this.defaultLineHeight = 24;
		this.currentFontSize = (Cookies.get(this.cookieName)) ? Cookies.get(this.cookieName) : this.defaultFontSize;

		this.fontSizeSample = document.getElementById('fontSizeSample');
		this.lineHeightSample = document.getElementById('lineHeightSample');
		this.increaseButton = document.getElementById('increaseFontSize');
		this.decreaseButton = document.getElementById('decreaseFontSize');
		this.defaultButton = document.getElementById('defaultFontSize');
			
			
		FontSize.changeFontSize()

	},
	changeFontSize: function() {		
		if ((FontSize.currentFontSize < this.defaultFontSize)) return;
		FontSize.lineHeightSample.style.fontSize = FontSize.currentFontSize + 'px';
		xed.getBody().style.fontSize = FontSize.currentFontSize + 'px';
		if (xed.getBody().id == 'xhtmlEditorContainer') FontSize.changeLineHeight();
		Cookies.set(FontSize.cookieName, FontSize.currentFontSize, FontSize.expdate, "/");
	},
	plus: function() {	
		FontSize.currentFontSize++;
		FontSize.changeFontSize()
	},
	minus: function() {
		FontSize.currentFontSize--;
		FontSize.changeFontSize()		
	},
	makeDefaultSize: function() {
		FontSize.currentFontSize = FontSize.defaultFontSize;
		FontSize.changeFontSize()
	},
	changeLineHeight: function() {
		if (FontSize.lineHeightSample.offsetHeight < FontSize.defaultLineHeight) {
			var lineHeight = FontSize.defaultLineHeight;
		} else {
			var lineHeight = FontSize.lineHeightSample.offsetHeight;				
		}
		xed.getBody().style.backgroundImage  = 'url(/images/bg/xhtmlcontentbg/bg_content' + lineHeight + '.gif)';
	}
}

function showTooltip(checkBoxId) {
	var tooltipEl = document.getElementById("tooltip-" + checkBoxId)
	var checkbox = document.getElementById(checkBoxId);
	if (checkbox.checked == true) {
		tooltipEl.style.display = 'block';
	} else {
		tooltipEl.style.display = 'none';
	}
}
/* creatElement */
function wrapInside(idOrElement, tag, className) {
	var target = typeof idOrElement == "string" ? document.getElementById(idOrElement) : idOrElement
	target.innerHTML = "<" + tag + " class='" + className + "'>" + target.innerHTML + "</" + tag + ">"
}
function insertFirstChild(idOrElement, tag, className) {
	var target = typeof idOrElement == "string" ? document.getElementById(idOrElement) : idOrElement
	//target.innerHTML = "<" + tag + " class='" + className + "'></" + tag + ">" + target.innerHTML

	var newNode = document.createElement(tag)
	newNode.className = className
	target.insertBefore(newNode, target.firstChild)
}
function wrapOutside(idOrElement, tag, className) {
	var target = typeof idOrElement == "string" ? document.getElementById(idOrElement) : idOrElement

	// make wrapper and set className
	var wrapper = document.createElement(tag)
	wrapper.className = className

	// replace target with wrapper
	target.parentNode.replaceChild(wrapper, target)

	// and move target into the wrapper
	wrapper.appendChild(target)

	return wrapper
}

function inputChange() {
	var emailInput = document.getElementById('user_email')
	if (!emailInput) {
		emailInput = document.getElementById('email')
		if (!emailInput) {
			emailInput = document.getElementById('sreg_email')
		}
	}
	var emailValue = document.getElementById('email-value')
	var thisValue;

	thisValue = emailInput.value.split("@")[0]

	emailValue.firstChild.nodeValue = thisValue;

	if (((emailValue.offsetWidth + 55) / 12) < 17) {
		document.getElementById('email_suggest').style.left = ((emailValue.offsetWidth + 55) / 12) + "em";
	}
}
function selectText(objStr,str,start,size) {
	var o = document.getElementById(objStr);
	o.value = str;
	if (window.ActiveXObject) {
		try {
			var tr = o.createTextRange();
			tr.collapse(true);
			tr.moveStart('character', start);
			tr.moveEnd('character', size);
			tr.select();
		}
			catch (e) {
		}
	} else {
		o.setSelectionRange(start,start+size);
	}
	o.focus();
}
function submitLoginForm() {
	var frm = document.getElementById('frmLogin');
	if(!frm) return;
	frm.submit();	
}

