/**********************************************************
/*      셀렉트 박스 컨트롤 모듈
/*      by Hamt   2008. 5. 26
/* 
 >> 모듈 설명

	var sc = new SelectControl(); //셀렉트박스(이하 SB) 컨트롤 개체 생성



	+ 컨트롤할 sb아이디와 옮길 두개의 인덱스를 받아 위치를 이동한다
	  네번째 인자에 selectedIndex값을 넘겨주면 그값으로 선택되어진다.
	  안넘기면 그냥 바꾸기만 함
	  인자 : (sb아이디, 바꿀 아템 인덱스, 옮기고자 하는 인덱스, [옮긴 후 선택되어질 인덱스])
	sc.ChangeIndex('subcate', 1, 3, 3); 


	+ sb아이디와 text1:value1|text2:value2 식의 텍스트별 값 문자열, 아이템별 구분자, 아템-값 구분자를 받아서
	 sb내부 내용을 모조리 바꾼다.
	 인자 : (sb아이디, 셀렉트박스에 새로 채울 데이타문자열, 아이템 구분자, 아이템별 값 구분자)
	sc.ChangeAll('subcate', 'aa:aaaa|bb:bbbb|ccc:ccccc', '|', ':');


	+ sb아이디와 인덱스 번호를 받아서 내부적으로 sc.ChangeIndex()를 호출하여 한칸씩 위(Up), 아래(Down)로 이동시킨다
	sc.ChangeOrderUp('subcate', 1);
	sc.ChangeOrderDown('subcate', 0);


	+ sb아이디와 text, value값을 받아 해당뉴sb에 추가시킨다.
	  네번째 인자는 안쓰면 맨 마지막에 추가되며, 특정 인덱스를 쓰면 해당 위치에 추가된다
	  (내부적으로 sc.ChangeIndex() 호출)
	sc.Add('subcate', 'hamt', '1', '0');
	

	+ 해당 인덱스의 아이템 삭제
	sc.Del('subcate', 3);

	+ 해당 인덱스의 텍스트 수정
	sc.ChangeText('subcate', 1, 'aaaaaaaa');


	+ 해당 인덱스의 값 수정
	sc.ChangeValue('subcate', 1, '1')

**********************************************************/


var SelectControl = function()
{
	this.ChangeIndex = function(id, fromIndex, toIndex, selectedindex)
	{
		var obj = this.GetObj(id);

		if(!this.IndexCheck(obj, fromIndex))
		{
			alert('이동 인덱스 범위가 벗어났습니다.');
			return;
		}
		if(!this.IndexCheck(obj, toIndex))
		{
			alert('목적지 인덱스 범위가 벗어났습니다.');
			return;
		}

		var tempOption = obj[fromIndex];
		obj[fromIndex] = new Option(obj[toIndex].text, obj[toIndex].value);
		obj[toIndex] = tempOption;



		if(selectedindex)
			obj.selectedIndex = selectedindex;
		else
			obj.blur();
	}
	this.ChangeOrderDown = function(id, index)
	{
		if(!index)
		    index = this.GetObj(id).selectedIndex;
		if(index == -1)
		{
		    alert('내릴 아이템을 선택하세요');
		    return;
		}   
		this.ChangeIndex(id, index, index+1, index+1);
	}
	this.ChangeOrderUp = function(id, index)
	{
		if(!index)
		    index = this.GetObj(id).selectedIndex;
		if(index == -1)
		{
		    alert('올릴 아이템을 선택하세요');
		    return;
		}
		this.ChangeIndex(id, index, index-1, index-1);
	}
	this.ChangeText = function(id, index, text)
	{
		var obj = this.GetObj(id);
		obj[index].text = text;
	}
	this.ChangeValue = function(id, index, value)
	{
		var obj = this.GetObj(id);
		obj[index].value = text;
	}
	this.ChangeAll = function(id, optionStr, itemCutChar, valueCutChar)
	{
		var obj = this.GetObj(id);
		var items = optionStr.split(itemCutChar);
		/*
		if(!itemCutChar)
		    itemCutChar = '|';
		else alert(itemCutChar);
		if(!valueCutChar)
		    valueCutChar = ':';
		*/

		obj.length = 0;

		for(var i = 0 ; i < items.length ; i++)
		{
			var item = items[i].split(valueCutChar);
			obj[obj.length] = new Option(item[0], item[1]);
		}
	}
	this.Add = function(id, text, value, index)
	{
		var obj = this.GetObj(id);
		obj[obj.length] = new Option(text, value);

		if(index)
		{
			this.ChangeIndex(id, obj.length-1, index);
		}
	}
	this.Del = function(id, index)
	{
		if(!index)
		    index = this.GetObj(id).selectedIndex;
		if(index == -1)
		{
		    alert('삭제할 아이템을 선택하세요');
		    return;
		}
		var obj = this.GetObj(id);
		obj[index] = null;
	}
	this.DelAll = function(id)
	{
		var obj = this.GetObj(id);
		obj.length = 0;
	}




/////////////////////////////////////////////////////////
	//private

	this.IndexCheck = function(obj, index)
	{
		if(index < 0 || index > obj.length-1)
		{
			return false;
		}
		return true;
	}
	this.GetObj = function(id)
	{
		return document.getElementById(id);
	}
}
