
document.loaded = false;
addLoadEvent = (function(){
    // create event function stack
    var load_events = [],
		timer;
	
	function fireContentLoadedEvent() {
		if (document.loaded) {
			return;
		}
		if (timer) {
			window.clearInterval(timer);
		}
		
		while (exec = load_events.shift()){
			exec();
		}
			
		document.loaded = true;
	};

    return function (func) {
        // if the init function was already ran, just run this function now and stop
        if (document.loaded) {
			return func();
		}
		
		oldonload = window.onload;
        if (!load_events[0]) {
            if (document.addEventListener) {
				if (navigator.userAgent.indexOf('AppleWebKit/') > -1) {
					timer = window.setInterval(function() {
						if (/loaded|complete/.test(document.readyState))
							fireContentLoadedEvent();
					}, 0);
					
					if (typeof(window.onload) != 'function') {
						window.onload = fireContentLoadedEvent;
					} else {
						window.onload = function() {
							fireContentLoadedEvent();
							if(oldonload){
								oldonload();
							}
						}
					}
					
				} else {
					document.addEventListener("DOMContentLoaded", fireContentLoadedEvent, false);
				}
			
			} else {
				document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
				document.getElementById("__onDOMContentLoaded").onreadystatechange = function() {
					if (this.readyState == "complete") {
						this.onreadystatechange = null;
						fireContentLoadedEvent();
						document.getElementById("__onDOMContentLoaded").parentNode.removeChild(document.getElementById("__onDOMContentLoaded"))
					}
				};
			}
        }
        load_events.push(func);
    }
})();

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}

function schedSort() {
	var orig = document.getElementById("orig") || document.getElementsByName("orig")[0];
	var dest = document.getElementById("dest") || document.getElementsByName("dest")[0];
	var prevIndex = orig.selectedIndex;
	var Index = dest.selectedIndex;
	var sel_value;
	
	if(Index != -1) {
		sel_value = dest.options[Index].value;
	}
	
	var sched = ""; 
	if (prevIndex != -1) {
		sched = getbits(prevIndex); 
	} else {
		for (var x=0; x<orig.length; ++x) {
			sched += 1;
		}
	}
	
	var oGroup = orig.getElementsByTagName("optgroup")
	
	for(var g=0; g<oGroup.length; g++){
		dest.removeChild(dest.getElementsByTagName("optgroup")[g]);
	}
	dest.options.length = null;
	
	for (i=0; i < orig.length; ++i) {
		if (sched.charAt(i) == 1) {	
			var option = new Option(orig.options[i].text, orig.options[i].value);
			if(oGroup.length > 1){
				var option = document.createElement("option");
				if (typeof(option.textContent) != "undefined"){
					option.textContent = orig.options[i].text;
				} else if (typeof(option.text) != "undefined"){
					option.text = orig.options[i].text
				} else {
					option.innerText = orig.options[i].text;
				}
				option.value = orig.options[i].value;
				for(var g=0; g<oGroup.length; g++){
					if(orig.options[i].parentNode.label == oGroup[g].label){
						if(!dest.getElementsByTagName("optgroup")[g]){
							var group = document.createElement("optgroup")
							group.label = oGroup[g].label
							dest.appendChild(group)
						}
						if(option.text){
							option.innerText = option.text;
						}
						dest.getElementsByTagName("optgroup")[g].appendChild(option)
					} else {
						dest.options[dest.options.length] = option;
					}
				}
			} else {
				dest.options[dest.options.length] = option;
			}
		}
	}
	if(sel_value){
		dest.value = sel_value
	}
}

function getbits(numIn) {
  var hexstring = fsched[numIn]
  var allbits="";
  for (var i=0; i < hexstring.length; ++i) {
          var num=parseInt(hexstring.charAt(i),16);
          var bits=dec2bin(num);
          allbits+=bits;
  }
  return allbits;
};

function dec2bin(dec) {
  var bits=dec.toString(2);
  while (bits.length <4) {
       bits=0+bits;
  } 
  return bits;
};

addLoadEvent(function() {
	if(document.getElementById("orig")){
		document.getElementById("orig").onchange = function () {schedSort();};
		if(document.getElementById("orig").offsetWidth){
			document.getElementById("dest").style.width = document.getElementById("orig").offsetWidth+"px";
		}
	} else {
		document.getElementsByName("orig")[0].onchange = function () {schedSort();};
		document.getElementsByName("dest")[0].style.width = document.getElementsByName("orig")[0].offsetWidth+"px";
	}
	schedSort();
});