/**********************************************
* ÆÄÀÏ¸í: lib.forms.js
* ¼³  ¸í: Æû °ü·Ã ÀÛ¾÷ ÀÚµ¿È­
* ³¯  Â¥: 2003-06-16
* ÀÛ¼ºÀÚ: °ÅÄ£¸¶·ç (comfuture@maniacamp.com) 
***********************************************/

/**
* mixed getValue(string name)
* ÇØ´ç ÀÌ¸§À» °¡Áø Ã¹¹øÂ° ¿¤¸®¸ÕÆ®ÀÇ °ªÀ» ¹ÝÈ¯ÇÑ´Ù
* 
* @param string name ¿¤¸®¸ÕÆ® ÀÌ¸§
* @return mixed value
*/
function getValue(name) {
	var arr = ["select","input","textarea"];
	for (k=0; k<arr.length; k++) {
		var el = document.getElementsByTagName(arr[k]);
		for (i = 0; i < el.length; i++) {
			if (el[i].name == name) {
				if (el[i].tagName == "SELECT") return el[i].options[el[i].selectedIndex].value;
				if (el[i].type == "radio" || el[i].type == "checkbox") {
					if (el[i].checked) return el[i].value;
				}
			}
		}
	}
	return null;
}

/**
* void setValue(string name, string value)
* ÇØ´ç ÀÌ¸§À» °¡Áø Ã¹¹øÂ° ¿¤¸®¸ÕÆ®ÀÇ °ªÀ» ¼¼ÆÃÇØÁØ´Ù
*
* @param string name ¿¤¸®¸ÕÆ® ÀÌ¸§
* @param mixed value ¼³Á¤ÇÒ °ª
*/
function setValue(name, value) {
	var scanElements = ['input','select','textarea'];
	for (var e in scanElements) {
		var el = document.getElementsByTagName(scanElements[e]);
		for (i = 0 ; i < el.length; i++) {
			if (el[i].type == "radio" || el[i].type == "checkbox") {
				if (el[i].name == name) {
					if (typeof(value) == 'object') {
						for (var v=0; v<value.length; v++) {
							if (el[i].value == value[v]) {
								el[i].checked = 'true';
								break;
							}
						}
					} else if (el[i].value == value) {
						el[i].checked = true;
					}
				}
			} else if (el[i].tagName == "SELECT") {
				if (el[i].name == name) {
					for (j = 0; j < el[i].options.length; j++ ) {
						if (el[i].options[j].value == value) el[i].selectedIndex = j;
					}
				}
			} else if (el[i].type == "text" || el[i].tagName == "textarea") {
				if (el[i].name == name) {
					if (typeof(value) == 'object') {
						for(var v=0,vc=value.length; v<vc; v++) {
							if (el[i].name == name) el[i+v].value = value[v];
						}
						i+=vc;
					} else {
						el[i].value = value;
					}
				}
			}
		}
	}
}

/**
* void formValue(string formname, object values)
* ÇØ´ç ÀÌ¸§À» °¡Áø ÆûÀÇ ¸ðµç ¿¤¸®¸ÕÆ®ÀÇ °ªÀ» ¼¼ÆÃÇØÁØ´Ù
*
* @param string name ¿¤¸®¸ÕÆ® ÀÌ¸§
* @param object value ¼³Á¤ÇÒ °ª
*/
function formValue(formname,values) {
	var form = document.forms[formname];
	for (var e = 0; e < form.elements.length; e++) {
		var el = form.elements[e];
		if (el.tagName == "FIELDSET") continue;
		var key = el.name.replace(/\[\]$/,'');
		var value = values[key];
		if (value) {
			switch (el.type) {
				case "radio":					// °ªÀÌ ¿©·¯°³ÀÏ°æ¿ì °¡Àå ¸¶Áö¸· °ªÀÌ ¼±ÅÃ
					if (el.value == value) {
						el.checked = true;
					}
					break;
				case "checkbox":				// °ªÀÌ ¿©·¯°³ÀÏ°æ¿ì ±×Áß ÇÑ°³¸¸ °°¾Æµµ ¼±ÅÃ
					if (typeof(value) == 'object') {
						for (var i = 0; i < value.length; i++) {
							if (el.value == value[i]) el.checked = true;
						}
					} else {
						if (el.value == value) el.checked = true;
					}
					break;
				default:
					switch (el.tagName) {
						case "SELECT":			// °ªÀÌ ¿©·¯°³ÀÏ°æ¿ì °¡Àå ¸¶Áö¸· °ª Ã¤ÅÃ
							if (typeof(value) == 'object') value = value.pop();
							for (var idx = 0; idx < el.options.length; idx++) {
								if (el.options[idx].value == value) el.selectedIndex = idx;
							}
							break;
						default:				// °ªÀÌ ¿©·¯°³ÀÏ°æ¿ì ,(comma)·Î joinÇÏ¿© ´ëÀÔ
							el.value = value;
					}
			}
		}
	}
}

/**
* void setDisable(string name, boolean how)
* ÇØ´ç ÀÌ¸§À» °¡Áø Ã¹¹øÂ° ¿¤¸®¸ÕÆ®¸¦ »ç¿ë ¸øÇÏ°Å³ª ´Ù½Ã »ç¿ëÇÒ ¼ö ÀÖ°Ô ¸¸µç´Ù.
* 
* @param string name ¿¤¸®¸ÕÆ® ÀÌ¸§
* @param boolean how {default: true}
*/
function setDisable(name,how) {
	if (!how) how = true;
	var scanElements = ['input','select','textarea'];
	for (var e in scanElements) {
		var el = document.all.tags(scanElements[e]);
		for (i = 0 ; i < el.length; i++) {
			if (el[i].name == name) {
				el[i].disabled = how;
			}
		}
	}
}

/**
* void disableValue(string name, mixed value)
* ÇØ´ç ¿¤¸®¸ÕÆ®ÀÇ Æ¯Á¤ °ªÀ» ¼±ÅÃÇÏÁö ¸øÇÏ°Ô ÇÑ´Ù.
* <!> ÁÖÀÇ: ¼±ÅÃÇÏÁö ¸øÇÏ´Â ¿¤¸®¸ÕÆ® Ç¥ÇöÀ» À§ÇØ ½ºÅ¸ÀÏ½ÃÆ®¸¦ »ç¿ëÇÏ¹Ç·Î ½ºÅ¸ÀÏ½ÃÆ®¸¦ À§Ä¡¿¡ ÁØºñÇØ¾ß ÇÑ´Ù.
* 
* @param string name ¿¤¸®¸ÕÆ® ÀÌ¸§
* @param mixed value »ç¿ëÇÏÁö ¸øÇÏ°Ô ÇÒ °ª
*/
function disableValue(name,value) {
	var css = document.createElement("LINK");
	css.rel = "stylesheet";
	css.href = "/css/forms.css";
	document.all.tags("HEAD")[0].insertAdjacentElement("beforeEnd", css);

	var scanElements = ['input','select'];
	for (var e in scanElements) {
		var el = document.getElementsByTagName(scanElements[e]);
		for (var i = 0; i < el.length; i++) {
			switch (el[i].tagName) {
				case "SELECT":
					if (el[i].name == name) {
						el[i].attachEvent("onchange",_isDisabledOption);
						for (var j=0; j<el[i].options.length; j++) {
							if (el[i].options[j].value == value) {
								el[i].options[j].style.color = '#c0c0c0';
								el[i].options[j].style.textDecoration = 'line-through';
								el[i].options[j].setAttribute('STATUS','disabled');
							}
						}
					}
				break;
				case "INPUT":
					if (el[i].name == name && el[i].value == value) {
						alert(el[i].value);
						el[i].attachEvent("onclick",_isDisabledElement);
						el[i].className = "disabled";
						alert(el[i].nextSibling.outerText);
//						.className = "disabled";
					}
				break;
			}
		}
	}
}

function _isDisabledElement() {
	return false;
}

function _isDisabledOption() {
	var el = event.srcElement;
	var notice = el.getAttribute("NOSEL");
	if (el.options[el.selectedIndex].getAttribute('STATUS') == 'disabled') {
		if (notice != null) alert(notice);
		return false;  // XXX: ¿¡·¯ ¿øÀÎÀ» ¾Ë¼ö¾øÀ½
		for (var i=el.selectedIndex; i>=0; i--) {
			if (el.options[i].getAttribute('STATUS') != "disabled") {
				el.options[i].selected = true;
				return;
			}
		}
		for (oc=el.options.length; i<oc; i++) {
			if (el.options[i].getAttribute('STATUS') != "disabled") {
				alert(i);
				el.options[i].selected = true;
				return;
			}
		}	
	}
}
