function tamingselect() {
    if (!document.getElementById && !document.createTextNode) {
        return;
    }

    // Classes for the link and the visible dropdown
    var ts_selectclass = 'turnintodropdown'; // class to identify selects
    var ts_listclass = 'turnintoselect'; // class to identify ULs
    var ts_boxclass = 'dropcontainer'; // parent element
    var ts_triggeron = 'activetrigger'; // class for the active trigger link
    var ts_triggeroff = 'trigger'; // class for the inactive trigger link
    var ts_dropdownclosed = 'dropdownhidden'; // closed dropdown
    var ts_dropdownopen = 'dropdownvisible'; // open dropdown
/*
Turn all selects into DOM dropdowns
*/

    var count = 0;
    var toreplace = new Array();
    var sels = document.getElementsByTagName('select');
    for (var i = 0; i < sels.length; i++) {
       
        if (ts_check(sels[i], ts_selectclass)) {
       
            var hiddenfield = document.createElement('input');
            hiddenfield.name = sels[i].name;
            hiddenfield.type = 'hidden';
            hiddenfield.id = sels[i].id;
            hiddenfield.value = sels[i].options[0].value; //the value of the related hidden dfeault field
       		
            sels[i].parentNode.insertBefore(hiddenfield, sels[i]) //sels[i].parentNode is the drop down element
       
            var trigger = document.createElement('a');
       
            ts_addclass(trigger, ts_triggeroff);
       
            trigger.href = '#';

            if (sels[i].className.indexOf('required') != -1) {
                if (sels[i].selectedIndex === 0) {
                    trigger.id = 'invalid';
                }
            } else {
                trigger.id = 'valid';
            }

            trigger.onclick = function() {
                forceCloseSelects(this.parentNode.getElementsByTagName('ul')[0]);
                ts_swapclass(this, ts_triggeroff, ts_triggeron)
                ts_swapclass(this.parentNode.getElementsByTagName('ul')[0], ts_dropdownclosed, ts_dropdownopen);
                return false;
            }
            

			function gup( name ) {
			  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
			  var regexS = "[\\?&]"+name+"=([^&#]*)";
			  var regex = new RegExp( regexS );
			  var results = regex.exec( window.location.href );
			  if( results == null )
			    return "";
			  else
			    return results[1];
			}

			//if we're taking a backward step on a form
			if (((sels[i].options[sels[i].options.selectedIndex].text) != hiddenfield.value) && (gup('usesession') == 1)){
				trigger.appendChild(document.createTextNode(sels[i].options[sels[i].options.selectedIndex].text));
				trigger.id = 'valid';
				formObjectArray[sels[i].id].setValid(true); 
				//console.log(formObjectArray[sels[i].id].isValid());
				//console.log(hiddenfield.value);
				//console.log("if");
			} else {
				//console.log("else");
				trigger.appendChild(document.createTextNode(sels[i].options[0].text)); //writes in the hidden default value
			}


            sels[i].parentNode.insertBefore(trigger, sels[i]);
            
            var replaceUL = document.createElement('ul');
           

            for (var j = 0; j < sels[i].getElementsByTagName('option').length; j++) {
                var newli = document.createElement('li');
                var newa = document.createElement('a');
               
                newli.v = sels[i].getElementsByTagName('option')[j].value;
                newli.elm = hiddenfield;
                newli.istrigger = trigger;
                
                newa.href = '#';
                newa.appendChild(document.createTextNode(sels[i].getElementsByTagName('option')[j].text));
                
                
                newli.onclick = function() {
                    this.elm.value = this.v;
                    
                    ts_swapclass(this.istrigger, ts_triggeron, ts_triggeroff);
                    ts_swapclass(this.parentNode, ts_dropdownopen, ts_dropdownclosed);
                    
                    var isValid = selectedOption(this.elm, this.v, trigger);
                    
                    this.istrigger.firstChild.nodeValue = this.firstChild.firstChild.nodeValue;
                   
					if (isValid) {
                        this.istrigger.setAttribute('id', 'valid');
                    } else {
                        this.istrigger.setAttribute('id', 'invalid');
                    }
                    
                    validateForm();
                    return false;
                }
                
                newli.appendChild(newa);
                replaceUL.appendChild(newli);
            }

            
            
            ts_addclass(replaceUL, ts_dropdownclosed);

            var div = document.createElement('div');

            div.appendChild(replaceUL);
            ts_addclass(div, ts_boxclass);
                        
            sels[i].parentNode.insertBefore(div, sels[i])
            
            toreplace[count] = sels[i];
            
            count++;
        }
    }

/*
Turn all ULs with the class defined above into dropdown navigations
*/

    var uls = document.getElementsByTagName('ul');
    for (var i = 0; i < uls.length; i++) {
        if (ts_check(uls[i], ts_listclass)) {
            var newform = document.createElement('form');
            var newselect = document.createElement('select');
            for (j = 0; j < uls[i].getElementsByTagName('a').length; j++) {
                var newopt = document.createElement('option');
                newopt.value = uls[i].getElementsByTagName('a')[j].href;
                newopt.appendChild(document.createTextNode(uls[i].getElementsByTagName('a')[j].innerHTML));
                newselect.appendChild(newopt);
            }
            newselect.onchange = function() {
                window.location = this.options[this.selectedIndex].value;
            }
            newform.appendChild(newselect);
            uls[i].parentNode.insertBefore(newform, uls[i]);
            toreplace[count] = uls[i];
            count++;
        }
    }
    for (i = 0; i < count; i++) {
        toreplace[i].parentNode.removeChild(toreplace[i]);
    }

    function ts_check(o, c) {
        return new RegExp('\\b' + c + '\\b').test(o.className);
    }

    function ts_swapclass(o, c1, c2) {
        var cn = o.className
        o.className = !ts_check(o, c1) ? cn.replace(c2, c1) : cn.replace(c1, c2);
    }

    function ts_addclass(o, c) {
        if (!ts_check(o, c)) {
            o.className += o.className == '' ? c : ' ' + c;
        }
    }
}

