//////////////////
//Trim function
//////////////////
function trim(txt)
{
    return txt.replace(/(^\s+)|(\s+$)/g,"");
}

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//Quick Sort Utility
////////////////////////////////////////////////////////////////////////
function qsort2(list,l,r)
{
    var si=false;
    var sj=false;
    i=l;j=r;
    x=list.options[Math.round((l+r)/2)].text;
    do
    {
        while(list.options[i].text < x){i++;}
        while(x < list.options[j].text){j--;}
        if(i<=j)
        {
            if(list.options[i].selected==true){si=true;}else{si=false;}
            if(list.options[j].selected==true){sj=true;}else{sj=false;}
            tmp_txt =list.options[i].text;
            tmp_val =list.options[i].value;
            list.options[i].text  =list.options[j].text;
            list.options[i].value =list.options[j].value;
            list.options[j].text  =tmp_txt;
            list.options[j].value =tmp_val;
            if(si){list.options[j].selected=true;}else{list.options[j].selected=false;}
            if(sj){list.options[i].selected=true;}else{list.options[i].selected=false;}
            i++;j--;
        }
    }while(i<j)
    if(l<j){qsort2(list,l,j);}
    if(i<r){qsort2(list,i,r);}
}
function myjs_qsort(list)
{
	if(list.options.length>1){
    	qsort2(list,0,list.options.length-1)
    }
}
///////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////
//Some javascript utilities
///////////////////////////////////////////////////////////////////////
function myjs_move_list_item(f,t)
{
	///////////////////////////////////////
    //Move selected items in
    //list to another one
    //
    //f: from list
    //t: to list
    ///////////////////////////////////////
    if(f.selectedIndex>-1)
    {
        for(n=0;n<=f.options.length-1;n++){
            if(f.options[n].selected==true){
                txt=f.options[n].text;
                val=f.options[n].value;
                var opt=new Option(txt,val);
                t.add(opt);
            }
        }
        while(f.selectedIndex>-1){
            f.remove(f.selectedIndex);
        }
    }
}

function myjs_list_select_all(list,state)
{
	///////////////////////////////////////
    //list: (select option) name
    //state: boolean (select ot deselect)
    ///////////////////////////////////////
	var n;
	var l=list.options.length;
	list.multiple=true;
	for(n=0;n<=l-1;n++){
    	list.options[n].selected=state;
    }
}

function myjs_subtract_list_from_another(list_main,list_sub)
{
	//////////////////////////////////////////////////
    //list_main: list 1 (normal load)
    //list_sub: the list wich will subtract from it
    //////////////////////////////////////////////////
	var i;
    var j;
    var flag=true;
    l_sub = list_sub.options.length;

	for(i=0 ; i < list_sub.options.length ; i++)
    {
        for(j=0 ; j < list_main.options.length ; j++)
        {
    		if(list_sub.options[i].value==list_main.options[j].value){
				list_sub.remove(i);
            }
        }
    }
}


function myjs_replace(Expression, Find, Replace) {
	var temp = Expression;
	var a = 0;
	for (var i = 0; i < Expression.length; i++) {
		a = temp.indexOf(Find);
		if (a == -1)
			break
		else
			temp = temp.substring(0, a) + Replace + temp.substring((a + Find.length));
	}
	return temp;
}

