function ColItem(value,text){this.value=value;this.text=text;}

function findIndexFromColumnArray(value,aColumn){for(var i=0;i<aColumn.length;i++){if(aColumn[i].value==value)return i;}if(i>=aColumn.length)return -1;}

function whereToInsert(value,list,aColumn){var length=list.options.length;var target=findIndexFromColumnArray(value,aColumn);if(target<0)return -1;var i;for(i=0;i<length-1;i++){var prev_index=findIndexFromColumnArray(list.options[i].value,aColumn);var next_index=findIndexFromColumnArray(list.options[i+1].value,aColumn);if(i==0 && prev_index>target)return i;if(prev_index<target && next_index>target)return i+1;}return length;}

function handlePlaceHolder(columnTo){var listTo=columnTo;if(listTo.options.length<=0){listTo.options.length=1;listTo.options[0]=new Option(placeHolder,placeHolderId);}else{var i=0;for(i=0;i<listTo.options.length;i++){if(listTo.options[i].text==placeHolder){listTo.options[i]=null;}}if(listTo.options.length<=0){listTo.options.length=1;listTo.options[0]=new Option(placeHolder,placeHolderId);}}}

function doAdd(mode,fieldname,columnFrom,columnTo){var listFrom=columnFrom;var len=listFrom.options.length;var i=0;if (mode=='mini')maxCols=nMiniMaxColumn;else maxCols=nMaxColumn;if(!checkMaxColumn(columnTo,false,maxCols))return;while(i<listFrom.options.length){if(listFrom.options[i].selected){handlePlaceHolder(columnTo);if (checkMaxColumn(columnTo,true,maxCols)){addItemAtTail(columnTo,listFrom.options[i]);listFrom.options[i]=null;}else break;}else i++;}handlePlaceHolder(columnTo);saveColumnIds(fieldname,columnTo);}

function doAddAll(mode,fieldname,columnFrom,columnTo){var listFrom=columnFrom;var len=listFrom.options.length;var i=0;while(listFrom.options.length>0){handlePlaceHolder(columnTo);addItemAtTail(columnTo,listFrom.options[i]);listFrom.options[i]=null;}handlePlaceHolder(columnTo);saveColumnIds(fieldname,columnTo);}

function doRemove(aColumn,fieldname,columnFrom,columnTo){var listTo=columnTo;var i=0;while(i<listTo.options.length){if (listTo.options[i].selected){var value=listTo.options[i].value;var at=columnFrom ? whereToInsert(value,columnFrom,aColumn) : -1;if (at>=0){addItemAt(columnFrom,listTo.options[i],at);listTo.options[i]=null;}else{if (confirm("Are you sure you want to remove it ?")){listTo.options[i]=null;continue;}else{i++;continue;}}}else{i++;}}handlePlaceHolder(columnTo);saveColumnIds(fieldname,columnTo);}

function doUp(fieldname,columnTo){var listTo=columnTo;var index_sel=listTo.selectedIndex;if(index_sel<=0)return;if(listTo.options[index_sel-1].text==placeHolder)return;var text_sel=listTo.options[index_sel].text;var value_sel=listTo.options[index_sel].value;var index_up=index_sel-1;var text_up=listTo.options[index_up].text;var value_up=listTo.options[index_up].value;listTo.options[index_up]=new Option(text_sel,value_sel,false,true);listTo.options[index_sel]=new Option(text_up,value_up,false,false);listTo.selectedIndex=index_up;saveColumnIds(fieldname,columnTo);}

function doDown(fieldname,columnTo){var listTo=columnTo;var index_sel=listTo.selectedIndex;if((index_sel<0) || (index_sel==listTo.length-1))return;if(listTo.options[index_sel].text==placeHolder)return;var text_sel=listTo.options[index_sel].text;var value_sel=listTo.options[index_sel].value;var index_down=index_sel+1;var text_down=listTo.options[index_down].text;var value_down=listTo.options[index_down].value;listTo.options[index_sel]=new Option(text_down,value_down,false,false);listTo.options[index_down]=new Option(text_sel,value_sel,false,true);listTo.selectedIndex=index_down;saveColumnIds(fieldname,columnTo);}

function doReverse(fieldname,columnTo){elements=getElements(columnTo);elements.reverse();putElements(elements,columnTo);saveColumnIds(fieldname,columnTo);}

function doAlpha(fieldname,columnTo){elements=getElements(columnTo);elements.sort(sortElements);putElements(elements,columnTo);saveColumnIds(fieldname,columnTo);}

function getElements(columnTo){var listTo=columnTo;var elements=new Array(listTo.options.length);var i=0;for(i=0;i<listTo.options.length;i++){elements[i]=new Array(listTo.options[i].text,listTo.options[i].value);}return elements;}

function putElements(elements,columnTo){var listTo=columnTo;for(i=0;i<listTo.options.length;i++){listTo.options[i]=new Option(elements[i][0],elements[i][1],false,false);}}

function sortElements(a,b){if (a[0].toLowerCase()<b[0].toLowerCase()) return -1;if (a[0].toLowerCase()>b[0].toLowerCase()) return 1;return 0;}

function addItemAtTail(list,item){var total=list.length;var i=0;if(item.text=='')return;for(i=0;i<total;i++){if(item.text==list.options[i].text)return;}if(i==total){list.options.length=total+1;list.options[i]=new Option(item.text,item.value);}}

function addItemAt(list,item,index){var total=list.length;var i=0;if(index>total){addTextAtTail(window.document.frmmain,list,item);return;}total=total+1;list.options.length=total;for(i=total-1;i>index;i--){list.options[i]=new Option(list.options[i-1].text,list.options[i-1].value);}list.options[i]=new Option(item.text,item.value);}

function saveColumnIds(fieldname,columnTo){listTo=columnTo;var str='';var i;str='';for(i=0;i<listTo.options.length;i++){str=str+listTo.options[i].value;if(i<listTo.options.length-1)str=str+'|';}fieldname.value=str;}

function clearColumns(mode,aColumn,fieldname,columnFrom,columnTo){var vtype='cust';var listFrom=columnFrom;var listTo=columnTo;listTo.options.length=0;view_in='';if (listFrom){listFrom.options.length=0;view_out=getOtherColumn(view_in,aColumn);buildOptionList(listFrom,view_out,aColumn);}buildOptionList(listTo,view_in,aColumn);saveColumnIds(fieldname,columnTo);}

function checkMaxColumn(list,plusOne,nMaxColumn){var nNumColumn=list.options.length;if(plusOne)nNumColumn=nNumColumn+1;if(nNumColumn>nMaxColumn){alert("You've selected the maximum number of columns.");return false;}else return true;}

function buildOptionList(list,strColumnValues,aColumn){if(strColumnValues!=''){var strRemain=strColumnValues;var c=strRemain.indexOf('|');var i=-1;var id;if(c<=0){id=findIndexFromColumnArray(strRemain,aColumn);i++;list.options[i]=new Option(aColumn[id].text,aColumn[id].value);}else{while(c>0){var strValue=strRemain.substring(0,c);id=findIndexFromColumnArray(strValue,aColumn);i++;list.options[i]=new Option(aColumn[id].text,aColumn[id].value);strRemain=strRemain.substring(c+1);c=strRemain.indexOf('|');}if(c<=0){id=findIndexFromColumnArray(strRemain,aColumn);i++;list.options[i]=new Option(aColumn[id].text,aColumn[id].value);}}}}

function getOtherColumn(string_in,aColumn){var string_out='';var array_in=new Array();var count_in;var flg=1;if(string_in!=''){var strRemain=string_in;var c=strRemain.indexOf('|');count_in=0;var id;if(c<=0){array_in[count_in]=strRemain;count_in++;}else{while(c>0){var strValue=strRemain.substring(0,c);array_in[count_in]=strValue;count_in++;strRemain=strRemain.substring(c+1);c=strRemain.indexOf('|');}if(c<=0){array_in[count_in]=strRemain;count_in++;}}}var i,j;for(i=0;i<aColumn.length;i++){var found=-1;for(j=0;j<count_in;j++){if(aColumn[i].value==array_in[j]){found=j;break;}}if(found<0){if (flg==1)flg=0;else string_out+='|';string_out+=aColumn[i].value;}}return string_out;}
