/*
* Filename	: form.js
* Function	:
* Comment		:
* History		: 2003/05/09, jerry, setup
*									2006/06/02, litlhope, modify
*						
* Version		:	1.0
* Author		:	Copyright (c) 2005 by JcomTech Corp. All Rights Reserved.
*/

/***************************************************
*	element
****************************************************/
 
/* is element */
function isElement(form) {
	var args = isElement.arguments;
	var elementCount = form.elements.length;
	var elementType = "checkbox";
	
	if (args.length == 2) {elementType = args[1];}
	
	for (inx = 0; inx < elementCount; inx++) {
		if (form.elements[inx].type == elementType) {return true;}
	}

	return false;
}

/* is checked */
function isChecked(obj) {
	var flag = false;
		
	if (obj.tagName == "FORM") {flag = isCheckedForm(obj);}
	else {flag = isCheckedElement(obj);}
	
	return flag;
}

function isCheckedForm(form) {
	var args = isChecked.arguments;
	var elementCount = form.elements.length;
	var elementType = "checkbox";
	
	if (args.length == 2) {elementType = args[1];}

	for (inx = 0; inx < elementCount; inx++) {
		if (form.elements[inx].type == elementType && form.elements[inx].checked) {return true;}
	}

	return false;
}

function isCheckedElement(obj) {
	if (obj.length > 0) {
		for (inx = 0; inx < obj.length; inx++) {
			if (obj[inx].checked) {return true;}
		}
	} else {
		if (obj.checked) {return true;}
	}

	return false;
}

/***************************************************
*	checkbox
****************************************************/

/* checked all checkbox */
function checkedAll(form, nm) {
	var elementCount = form.elements.length;

	for (inx = 0; inx < elementCount; inx++) {
		if (form.elements[inx].type == "checkbox" && form.elements[inx].name == nm) {form.elements[inx].checked = true;}
	}
}

/* unchecked all checkbox */
function uncheckedAll(form, nm) {
	var elementCount = form.elements.length;

	for (inx = 0; inx < elementCount; inx++) {
		if (form.elements[inx].type == "checkbox" && form.elements[inx].name == nm) {form.elements[inx].checked = false;}
	}
}

/* is checkbox element */
function isCheckbox(obj) {return isElement(obj, "checkbox");}

/* get checked values */
function getCheckedValues(form, elementName, div) {
	var elementCount = form.elements.length;
	var result = "";

	for (inx = 0; inx < elementCount; inx++) {
		if (form.elements[inx].name == elementName && form.elements[inx].checked) {
			result += form.elements[inx].value + div;
		}
	}
	
//	if (result.length > 0) {result = result.substring(0, result.length - 1);}
	
	return result;
}

/***************************************************
*	radio
****************************************************/

function isRadio(form) {return isElement(form, "radio");}

function isCheckedRadio(form) {return isChecked(form, "radio");}

function enabledRadio(radio) {
	for (i = 0; i < radio.length; i++) {radio[i].disabled = false;}	
}

function disabledRadio(radio) {
	for (i = 0; i < radio.length; i++) {radio[i].disabled = true;}	
}

/***************************************************
*	select(combo-box)
****************************************************/

/* select option */
function selectOption(combo, optVal) {
	for (i = 0; i < combo.length; i++) {
		if (combo.options[i].value == optVal)	{
			combo.options[i].selected = true;
			break;
		}
	}
}

/* selected all option(for multi) */
function selectedAll(combo) {
	for (i = 0; i < combo.length; i++) {combo.options[i].selected = true;}
}

/* unselected all option(for multi) */
function unselectedAll(combo) {
	for (i = 0; i < combo.length; i++) {combo.options[i].selected = false;}
}

/* option flag */
function isOption(combo, optVal) {
	for (i = 0; i < combo.length; i++) {
		if (combo.options[i].value == optVal)	{return true;}
	}
	return false;
}

/* add option */
function addOption(combo, option) {
	combo.options[combo.length] = option;
}

function addOptions(combo, options) {
	for (i = 0; i < options.length; i++) {combo.options[i] = options[i];}
}

/* remove option */
function removeSelectedOptions(combo) {	
	var size = combo.length;
	for (i = size - 1; i >= 0; i--) {
		if (combo.options[i].selected) {combo.options[i] = null;}
	}
}

function removeOptions(combo) {	
	var size = combo.length;
	for (i = size - 1; i >= 0; i--) {combo.options[i] = null;}
}

/* change option */
function changeOptions(combo, options) {
	removeOptions(combo);
	addOptions(combo, options);
}

/* move option(for multi) */
function moveOptions(srcCombo, targetCombo) {
	var size = srcCombo.length;
	
	for (i = size - 1; i >= 0; i--)	{
		if (srcCombo.options[i].selected)	{
			targetCombo.options[targetCombo.length] = new Option(srcCombo.options[i].text, srcCombo.options[i].value);
			srcCombo.options[i] = null;
		}
	}
}

/* exchange option(for multi) */
function exchangeOptions(combo1, combo2) {
	moveOptions(combo1, combo2);
	moveOptions(combo2, combo1);
}

/* submit */
function submitSelectedOption(combo) {
	combo.form.rows.value = combo.options[combo.selectedIndex].value;
	combo.form.submit();
}

/***************************************************
*	select BOX's item add/delete/changeOrder
****************************************************/
function _swap(selectedOption, index, targetIndex) {
  var onetext = selectedOption.options[targetIndex].text;
  var onevalue = selectedOption.options[targetIndex].value;

  selectedOption.options[targetIndex].text = selectedOption.options[index].text;
  selectedOption.options[targetIndex].value = selectedOption.options[index].value;
  selectedOption.options[index].text = onetext;
  selectedOption.options[index].value = onevalue;
  selectedOption.options.selectedIndex = targetIndex;

  selectedOption.options[targetIndex].selected = true;
}

function _changeOrderList(obj, type) {
  var index = obj.selectedIndex;
	var position = 1;

  if ( index > -1 ) {
    if (type.indexOf("U") == 0) {
    	if (type.length > 1) {
    		try {
    		position = eval(type.substr(1));
    	} catch (e) {}
    	}
      if(index > 0 && index - position >= 0) {
        _swap(obj, index, index - position);
      }
    } else if (type.indexOf("D") == 0) {
    	if (type.length > 1) {
    		position = eval(type.substr(1));
    	}
      if(index < obj.options.length - position) {
        _swap(obj, index, index + position);
    	}
    } else if (type == "T") {
      for (var i = index; i > 0; i--) {
        _swap(obj, i, i - 1);
      }
    } else if (type == "B") {
      for (var i = index; i < obj.options.length - 1; i++) {
        _swap(obj, i, i + 1);
      }
    }
  }
  return true;
}

function _deleteItem(obj) {
	var size = obj.length;
	var arrSel = new Array();
	var j = 0;

  if (obj.selectedIndex < 0) {
    alert("除外するフィールドを選択してください。");
    return false;
  }

	for (i = size - 1; i >= 0; i--)	{
		if (obj.options[i].selected)	{
			obj.options[i] = null;
		}
	}
	for (i = (arrSel.length - 1); i >= 0; i--)	{
		obj.options[obj.length] = new Option(arrSel[i][0], arrSel[i][1]);
	}
	return true;
}

function _addItem(obj, txt, val) {
	if (txt == "") {
		alert("入力されたデータがないです。");
		return false;
	}
	obj.options[obj.length] = new Option('', '');
	var size = obj.length;
	var arrSel = new Array();
	if (obj.selectedIndex < 0) {obj.options[obj.length - 1].selected = true;}

	for (i = size - 1; i >= 0; i--)	{
		if (i < obj.selectedIndex)	{
			arrSel[i] = new Array(obj.options[i].text, obj.options[i].value);
		} else if (i == obj.selectedIndex) {
			arrSel[i] = new Array(txt, val);
		} else {
			arrSel[i] = new Array(obj.options[i - 1].text, obj.options[i - 1].value);
		}
	}
	for (i = (arrSel.length - 1); i >= 0; i--)	{
		obj.options[i] = new Option(arrSel[i][0], arrSel[i][1]);
	}
	return true;
}

function _updateItem(obj, inx, txt, val) {
	if (txt == "") {
		alert("入力されたデータがないです。");
		return false;
	}
	var size = obj.length;
	var arrSel = new Array();
	if (inx == null) {obj.options[obj.length - 1].selected = true;}

	for (i = size - 1; i >= 0; i--)	{
		if (i == inx) {
			arrSel[i] = new Array(txt, val);
		} else {
			arrSel[i] = new Array(obj.options[i].text, obj.options[i].value);
		}
	}
	for (i = (arrSel.length - 1); i >= 0; i--)	{
		obj.options[i] = new Option(arrSel[i][0], arrSel[i][1]);
	}
	return true;
}
