  	Object.extend(Event, {
		wheel:function (event){
			var delta = 0;
			if (!event) event = window.event;
			if (event.wheelDelta) {
				delta = event.wheelDelta/120; 
				if (window.opera) delta = -delta;
			} else if (event.detail) { delta = -event.detail/3;	}
			return Math.round(delta); //Safari Round
		}
	});
	
	var model = new Object();
	var ss = {};
	var sp = {};
	var sig = {};
	var view = {};
	var l = {};
	var sdd = {};
	var sorter = {};
	var shiftPressed = false;
	var mousedown = false;
	
	Element.observe(document, "dom:loaded", function() {
		var targH = $('content_right').getDimensions().height;
		var leftH = $('content_left').getDimensions().height;
		var offset = targH - leftH; 
		var trueH = leftH + offset - 4;
		var leftFooterH = $('content_left_bot').getDimensions.height;
		if (targH > leftH) {
			$('content_left').setStyle({ height: targH + 'px' });
			$('content_left_mid').setStyle({ height: trueH + 'px' });
			$('content_left_bot').setStyle({ PaddingTop: offset + 'px' });
		}
	}, false);
	
	Element.observe(window, "load", function() {
		var targH = $('content_right').getDimensions().height;
		var leftH = $('content_left').getDimensions().height;
		var offset = targH - leftH; 
		var trueH = leftH + offset - 4;
		var leftFooterH = $('content_left_bot').getDimensions.height;
		if (targH > leftH) {
			$('content_left').setStyle({ height: targH + 'px' });
			$('content_left_mid').setStyle({ height: trueH + 'px' });
			$('content_left_bot').setStyle({ PaddingTop: offset + 'px' });
		}

		model = new ViewPaneModel();
		
		var ss_obj = {
			elem: $("txt_box_company"),
			view: $("select_companies")
		};
		ss = new SugestSearch(ss_obj);
		
		var els = [];
		els.push($$("#left_mid_left input")[0]);
		
		var sbs = $$(".selectBox");
		for(var i=0; i<sbs.length; i++) {
			var sb = new SelectBox(sbs[i]);
			els.push(sb);		
		}
		
		var obj = {
			elements: els,
			view: $("select_companies")
		}
		sig = new SingleInputGroup(obj);

		
		Event.observe(document, "click", function(e) {
			if(mousedown == 0) {
				sig.closeAll();
				sdd.shut();
			}
			mousedown = 0;
			if(curEl && curEl.style) {
				curEl.style.backgroundColor = "";
				curEl.style.color = "";
			}
		}, true);
		
		Event.observe("show_all", "click", function(e) {
			new Event.stop(e);
			showLoader();
			
			
			
			setTimeout(function() {
				sig.selectedId = null;
				ss.getElementsByRange();
				sig.clearAll();
				sig.closeAll();
			}, 100);
			
			
		}, false);
		
		viewObj = {
			view: $("select_companies"),
			members: $("numMembers")
		}
		view = new View(viewObj);
		
		sdd = new SortDropdown($("sortBy_right"));
		
		sorter = new Sorter();
		
		Event.observe(document, "keyup", function(e) { if(e.keyCode == 16) { shiftPressed = false} }, false);
		Event.observe(document, "keydown", function(e) { if(e.keyCode == 16) { shiftPressed = true} }, false);
		
		
	});
	
	var View = Class.create();
	View.prototype = {
		initialize: function(params) {
			this.view = params.view;
			this.members = params.members;
			this.numMembers = this.members.select("#number")[0];
			this.membersText = this.members.select("#membersOnly")[0];
			
			var obj = {
				knob: $$("#companyScroller .knob")[0],
				upArrow: $$("#companyScroller .uArrow")[0],
				downArrow: $$("#companyScroller .dArrow")[0],
				bar: $$("#companyScroller .bar")[0],
				viewportHeight: 250,
				scrollArea: $("select_companies")
			}
			this.scrollbar = new ScrollPane(obj);	
		},
		populate: function(output, members, sortable, fromSort) {
			this.view.innerHTML = output; 	
			this.scrollbar.adjust();
			this.scrollbar.slider.setValue(0);
			this.updateMembers(members);
			if(sortable && members > 0) {
				sdd.clear();
				sdd.setState("enabled");
				if(fromSort == 1) {
					setTimeout(function() {
						for(var i = 0; i<openItems.length; i++) {
								if($$("#" + openItems[i] + " a")[0]) {
									onclicked($$("#" + openItems[i] + " a")[0]) 
								}
						}
					}, 500);
				}
			} else {
				sdd.setState("disabled");
			}
			if(curEl && curEl.style) { curEl.style.backgroundColor = "" }
			if(members > 0) {
				curEl = $$("#select_companies li a")[0];
				$("left_mid_right_top").className = "active";
			} else {
				curEl = "";	
				$("left_mid_right_top").className = "";				
			}
		},
		updateMembers: function(members) {
			if(members == 1) {
				this.numMembers.innerHTML = 1;
				this.membersText.innerHTML = "&nbsp;Member";
				this.members.className = "visible";
			} else if(members > 1) {
				this.numMembers.innerHTML = members;
				this.membersText.innerHTML = "&nbsp;Members";
				this.members.className = "visible";
			} else {
				this.members.className = "invisible";	
				this.view.innerHTML = "<li id='no_results' class='no_results'><span class='red'>No results found</span></li>";
			}
		}
	}
	
	var SelectBox = Class.create();
	SelectBox.prototype = {
		selectedItem: new String(),
		items: new Object(),
		selected: new Object(),
		opts: new Array(),
		prevElement: new Object(),
		
		initialize: function(sb) {
			this.selectedIndex = 0;
			
			this.selectBox = sb;
			this.items = this.selectBox.select('.items')[0];
			this.selected = this.selectBox.select('.selectedItem')[0];
			this.id = this.selectBox.id;
			this.shadow = this.selectBox.select('.shadow')[0];
			this.curEl = null;
			
			Event.observe(this.selected, "mouseover", this.setState.bindAsEventListener(this, "hover"), false);
			Event.observe(this.selectBox, "mouseout", this.setState.bindAsEventListener(this, "activated"), false);
			Event.observe(this.selected, "click", this.toggleMenu.bindAsEventListener(this, "heading"), false);		
			
			var obj = {
				knob: this.items.select(".knob")[0],
				upArrow: this.items.select(".uArrow")[0],
				downArrow: this.items.select(".dArrow")[0],
				bar: this.items.select(".bar")[0],
				scrollArea: this.items.select("ul")[0]
			}
			this.scrollbar = new ScrollPane(obj);
			
			this.opts = this.items.select('li a');
			for(var i=0; i<this.opts.length; i++) {	
				Event.observe(this.opts[i], "click", this.setSelected.bindAsEventListener(this), false);
				Event.observe(this.opts[i], "focus", this.focuseEl.bindAsEventListener(this), false);								
				Event.observe(this.opts[i], "keydown", this.tab.bindAsEventListener(this), false);
			}
			Event.observe(this.opts[this.opts.length - 1], "focus", this.lastOneFocused.bindAsEventListener(this), false);								
		},
		lastOneFocused: function(e) {
			new Event.stop(e);
			if(this.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {	
				this.scrollbar.slider.setValue(1);
			}
		},
		focuseEl: function(e) {
			new Event.stop(e);
			if(this.items.style.left == "-999em" || this.items.style.left == "") {
					this.toggleMenu(e);
					this.selected.style.backgroundPosition = "0 23px";
			}
		},
		activate: function() {
			var el = this.curEl;
			el.style.backgroundColor = "#ccc";
			el.style.color = "cc0000";
		},
		deactivate: function() {
			var el = this.curEl;
			el.style.backgroundColor = "";
			el.style.color = "";
		},
		tab: function(e) {		
			if(e.keyCode == 9 || e.keyCode == 38 || e.keyCode == 40) {
				
				var el = new Event.element(e);
				if(this.items.style.left == "-999em" || this.items.style.left == "") {
					this.toggleMenu(e);
					this.selected.style.backgroundPosition = "0 23px";
				}
				if(shiftPressed || e.keyCode == 38) {
					// back tab
					if(this.curEl == null) {
						// last item
						this.curEl = el;
						this.activate();
						new Event.stop(e);
						
					} else if(this.curEl.up("li").previous("li")) {
						// any item in between
						this.deactivate();
						this.curEl = this.curEl.up("li").previous("li").down("a");
						this.activate();
						if(this.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {		
							this.scrollbar.slider.setValue(Math.abs(this.curEl.parentNode.offsetTop / this.scrollbar.offset));
						}
						new Event.stop(e);
					} else {
						// first item
						if(e.keyCode == 38) {
							new Event.stop(e);	
						} else {
							this.selected.style.backgroundPosition = "0 0";
							this.items.style.left = "-999em";
							this.shadow.style.display = "none";
							this.curEl.focus();
							
							this.deactivate();
							this.curEl = null;
						}
					}
				} else if(!shiftPressed || e.keyCode == 40) {
					// forward tab
					if(this.curEl == null) {
						// first item
						this.curEl = el;
						this.activate();
						new Event.stop(e);
						
						
					} else if(this.curEl.up("li").next("li")) {
						// any item in between
						this.deactivate();
						this.curEl = this.curEl.up("li").next("li").down("a");
						this.activate();
						if(this.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {		
							this.scrollbar.slider.setValue(Math.abs(this.curEl.parentNode.offsetTop / this.scrollbar.offset));
						}
						new Event.stop(e);
					} else {
						// last item	
						if(e.keyCode == 40) {
							new Event.stop(e);	
						} else {
							this.items.style.left = "-999em";
							this.shadow.style.display = "none";
							this.curEl.focus();
	
							this.deactivate();
							this.curEl = null;
						}
					}
				}
			} else if(e.keyCode == 13) {
				if(this.curEl != null) {
					//this.keySetSelected();
					this.curEl.focus()
				}
			}
		},
		tabout: function(e) {
			//new Event.stop(e);
			 var el = new Event.element(e);
			if(!el.up("li").next("li") && e.keyCode == 9 && shiftPressed == false) {
				this.items.style.left = "-999em";
				this.shadow.style.display = "none";
			} else if(!el.up("li").previous("li") && e.keyCode == 9 && shiftPressed == true) {
				this.items.style.left = "-999em";
				this.shadow.style.display = "none";
			}
		},
		clear: function() {
			this.selected.getElementsByTagName("div")[0].innerHTML = "Select";
			this.selected.getElementsByTagName("div")[0].className = "";
			this.setState(null, "clear");
		},
		setSelected: function(e) {
			new Event.stop(e);
			var el = new Event.element(e);
			this.selected.getElementsByTagName("div")[0].innerHTML = el.innerHTML;
			this.selected.getElementsByTagName("div")[0].className = "activeItem";
			this.toggleMenu(e);
			this.setState(e, "activated");
			
			showLoader();
			
			setTimeout(function() {
				model.getSection(el.id);
				sig.selectedId = el.id;	
			}, 100);
			sig.doUpdate(null, this);
		},
		setState: function(e, state) {
			if(state != "hover" && this.selected.getElementsByTagName("div")[0].innerHTML == "Select") { state = "clear" }
			if((state == "activated" && this.value != "Select") || this.shadow.style.display == "block") {
				this.selected.style.backgroundPosition = "0 23px";				
			} else if(state == "hover") {
				this.selected.style.backgroundPosition = "0 -23px";
			} else {
				this.selected.style.backgroundPosition = "0 0";
			}
		},
		toggleMenu: function(e, whereFrom) {
			new Event.stop(e);
			
			this.setState(e, "hover");
			if(this.items.style.left != "-999em" && this.items.style.left != "") {
				this.items.style.left = "-999em";
				this.shadow.style.display = "none";
			} else {
				sig.closeAll();
				this.items.style.left = "0";
				this.shadow.style.display = "block";			
			}
			if(whereFrom == "heading") {
				this.setState(e, "active");	
			}
		}
	}
	
	var ViewPaneModel = Class.create();
	ViewPaneModel.prototype = {
		data: {0:[], 1:[], 2:[], 3:[], 4:[], 5:[], 6:[], 7:[], 8:[], 9:[], a:[], b:[], c:[], d:[], e:[], f:[], g:[], h:[], i:[], j:[], k:[], l:[], m:[], n:[], o:[], p:[], q:[], r:[], s:[], t:[], u:[], v:[], w:[], x:[], y:[], z:[]},
		loaded: 0,
		initialize: function() {
		    /*
			url = "/_includes/scripts/eco/xml/all.xml";
			new Ajax.Request(
			url, 
			{
				method: 'get', 
				onComplete: this.parseData.bindAsEventListener(this)
			});
			*/
			this.parseData();
		},
		parseData: function(response) {
		    var CompanyCount = 0;
	        //Loop through all the companies
	        for (i=1;i<CompanyArray.length;i++) {
	            var company = CompanyArray[i][0];
	            var cid = CompanyArray[i][5];
	            
	            //if the company name is empty do not add it to the list.
	            if (company == "") {continue;}
	            
	            var indsecs = "";
	            for (a=0;a<CompanyArray[i][2][1].length;a++) {
	                if (CompanyArray[i][2][1][a] != "") {
	                    if (indsecs != "") {
	                        indsecs = indsecs + "|";
	                    }
	                    indsecs = indsecs + "industry_" + CompanyArray[i][2][1][a];
	                }
	            }
	            var prdsecs = "";
	            for (a=0;a<CompanyArray[i][3][1].length;a++) {
	                if (CompanyArray[i][3][1][a] != "") {
	                    if (prdsecs != "") {
	                        prdsecs = prdsecs + "|";
	                    }
	                    prdsecs = prdsecs + "product_" + CompanyArray[i][3][1][a];
	                }
	            }
	            var regsecs = "";
	            for (a=0;a<CompanyArray[i][4][1].length;a++) {
	                if (CompanyArray[i][4][1][a] != "") {
	                    if (regsecs != "") {
	                        regsecs = regsecs + "|";
	                    }
	                    regsecs = regsecs + "region_" + CompanyArray[i][4][1][a];
	                }
	            }
	            
	            var secs = "";
	            if (indsecs != "") {
	                secs = secs + indsecs;
	            }
	            if (prdsecs != "") {
	                if (secs != "") {
	                    secs = secs + "|";
	                }
	                secs = secs + prdsecs;
	            }
	            if (regsecs != "") {
	                if (secs != "") {
	                    secs = secs + "|";
	                }
	                secs = secs + regsecs;
	            }
	            //alert(secs);
	            
				var fChar = company.charAt(0).toString().toLowerCase();
				
				if(!this.data[fChar]) { this.data[fChar] = []; }
				this.data[fChar].push({name: company, id: cid, sections: secs});
	        }
	        for(var k in this.data) {
				this.data[k].sort(byName);
			}
			this.loaded = 1;
			$("loader").hide();
		    /*
			var r = response.responseXML;
			var items = r.getElementsByTagName("xmlDoc");

			for(var i=0; i<items.length; i++) {
				var company = items[i].getElementsByTagName("companyName")[0].firstChild.nodeValue;
				var cid = items[i].getElementsByTagName("id")[0].firstChild.nodeValue;
				var secs = items[i].getAttribute("sections");
				var fChar = company.charAt(0).toString().toLowerCase();
				
				if(!this.data[fChar]) { this.data[fChar] = []; }
				this.data[fChar].push({name: company, id: cid, sections: secs});	
			}
			for(var k in this.data) {
				this.data[k].sort(byName);
			}
			this.loaded = 1;
			$("loader").hide();
			*/
		},
		getSection: function(sectionID) {
			var sectionID = sectionID;
			
			var data = "";
			var members = 0;
			var sortable = 1;
			
			for(var i in this.data) {
				for(var k = 0; k < model.data[i].length; k++) {
					if(model.data[i][k].sections && model.data[i][k].sections.search(sectionID) != -1) {
						data += "<li class='off' id='"+model.data[i][k].id+"'><a href='javascript:void(0)' onclick='onclicked(this)' onfocus='focused(this); return false;' >" + model.data[i][k].name + "</a></li>";
						members++;
					}
				}
			}
			view.populate(data, members, sortable);	
		}
	}
	function byName(a, b) {
		var x = a.name.toLowerCase();
		var y = b.name.toLowerCase();
		return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	}
	
	var SugestSearch = Class.create();
	SugestSearch.prototype = {
		queue: [],
		elem: new Object(),
		timer: new Object(),
		
		initialize: function(params) {
			if(params.elem && params.view) {
				this.elem = params.elem;
				this.elem.blur();
				this.elem.value = this.elem.title;
				Event.observe(this.elem, "focus", this.clear.bindAsEventListener(this), false);
				Event.observe(this.elem, "keyup", this.manageTimeout.bindAsEventListener(this), false);
				Event.observe(this.elem, "keydown", this.setLoading.bindAsEventListener(this), false);
			}
		},
		clear: function(e) {	
			if(this.elem.value == this.elem.title) {
				this.elem.value = "";
			}	
			$("txt_companies").className = "active";
			sig.doUpdateSelect(e);
			sdd.clear();
			sig.closeAll();
		},
		setLoading: function(e) {
			if(e.keyCode != 9) {
				view.view.innerHTML = "<li id='no_results' class='no_results'><span class='red'>Loading...</span></li>";	
			}
		},
		manageTimeout: function(e) {
			if(e.keyCode != 9) {
				
				sig.clearElementValues("skip");
				
				clearTimeout(this.timer);
				this.timer = window.setTimeout(function(){
					view.view.innerHTML = "<li id='no_results' class='no_results'><span class='red'>Loading...</span></li>";	
					setTimeout(function() {
						ss.getElements();
					}, 100)
				}, 500);
			}
		},
		getElements: function() {
			if(model.loaded == 1) {
				
				var letterGroup = model.data[this.elem.value.charAt(0).toLowerCase()];
				var elmtVal = this.elem.value.toLowerCase();		
				var data = "";
				var members = 0;
				var sortable = 0;
				
				if(letterGroup) {
					for(var i=0; i<letterGroup.length; i++) {
						var cname = letterGroup[i].name;
						var id = letterGroup[i].id;
						
						if(cname.toLowerCase().startsWith(elmtVal) == 1) {
							data += "<li class='off' id='"+id+"'><a href='javascript:void(0)' onclick='onclicked(this)' onfocus='focused(this); return false;'>" + cname + "</a></li>";
							members++;
						}
					}
				}
				view.populate(data, members, sortable);
			}
		},
		getElementsByRange: function() {			
			var data = "";
			var members = 0;
			var sortable = 1;
			
			for(var i in model.data) {
				for(var k = 0; k < model.data[i].length; k++) {
					data += "<li class='off' id='"+model.data[i][k].id+"'><a href='javascript:void(0)' onclick='onclicked(this)' onfocus='focused(this); return false;'>" + model.data[i][k].name + "</a></li>";
					members++;
				}
			}
			view.populate(data, members, sortable);
		}
	};	
	var mousedown = 0;
	var ScrollPane = Class.create();
	ScrollPane.prototype = {
		initialize: function(params) {	
			this.hidden = false;
			this.knob = params.knob;
			this.upArrow = params.upArrow;
			this.downArrow = params.downArrow;
			this.bar = params.bar;
			if(params.viewportHeight) { this.viewportHeight = params.viewportHeight } else { this.viewportHeight = 110 }
			this.scrollArea = params.scrollArea;
			this.timer = null; // for scroll up/down 
			this.startTimer = null;
			this.adjust();
			
			
			Event.observe(this.downArrow, "click", function(e) {
						new Event.stop(e);  
			}, false);
			Event.observe(this.downArrow, "mousedown", this.downClick.bindAsEventListener(this, "down"), false);
			Event.observe(this.downArrow, "mouseup", this.upClick.bindAsEventListener(this), false);
			Event.observe(this.downArrow, "mouseout", this.upClick.bindAsEventListener(this), false);
			Event.observe(this.downArrow, "mouseup", this.scrollDown.bindAsEventListener(this), false);
			
			
			Event.observe(this.upArrow, "click", function(e) {
						  new Event.stop(e);
			}, false);
			Event.observe(this.upArrow, "mousedown", this.downClick.bindAsEventListener(this, "up"), false);
			Event.observe(this.upArrow, "mouseup", this.upClick.bindAsEventListener(this), false);
			Event.observe(this.upArrow, "mouseout", this.upClick.bindAsEventListener(this), false);
			Event.observe(this.upArrow, "mouseup", this.scrollUp.bindAsEventListener(this), false);

			Event.observe(this.knob, "click", function(e) { new Event.stop(e);}, false);
			Event.observe(this.knob, "mousedown", function(e) { if(Prototype.Browser.IE) { mousedown = 1; } }, false);
			Event.observe(this.knob, "mouseup", function(e) { mousedown = 0; }, false);
			
			Event.observe(this.bar, "click", function(e) { new Event.stop(e); }, false);
			Event.observe(this.bar, "mousedown", function(e) { if(Prototype.Browser.IE) { mousedown = 1; } }, false);
			Event.observe(this.bar, "mouseup", function(e) { mousedown = 0; }, false);
			
			Event.observe(this.scrollArea, "mousewheel", this.scrollWheel.bindAsEventListener(this), false);
			Event.observe(this.scrollArea, "DOMMouseScroll", this.scrollWheel.bindAsEventListener(this), false); // Firefox
		},
		adjust: function() {
			var knobHeight = (this.viewportHeight * this.bar.getDimensions().height) / this.scrollArea.getDimensions().height;	

			if(this.scrollArea.getDimensions().height < this.viewportHeight) {
				this.knob.parentNode.parentNode.style.visibility = "hidden";
				this.hidden = true;
			} else {
				this.knob.parentNode.parentNode.style.visibility = "visible";
				this.hidden = false;
			}
			
			if(knobHeight > 20 && (this.scrollArea.getDimensions().height > this.viewportHeight)) {
				this.knob.style.height = knobHeight + "px";
			} else {
				this.knob.style.height = 20 + "px";
			}
			
			var offsetToMultiply = - (Math.floor(this.scrollArea.getDimensions().height - this.viewportHeight));
			this.offset = offsetToMultiply;
			
			var scrollArea = this.scrollArea;
			
			if(this.slider) {
				for(var i in this.slider) {
					this.slider[i] = function(){};						
				}
				this.slider = null;
			}
			this.slider = new Control.Slider(this.knob.identify(), this.bar.identify(), {
				axis: "vertical",
				onSlide: function(val) {
					scrollArea.style.top = (offsetToMultiply * val) + "px";
				},
				onChange: function(val) {
					scrollArea.style.top = (offsetToMultiply * val) + "px";
				}
			}); 
			
		},
		scrollWheel: function(e) {
			new Event.stop(e);
			if(this.hidden == false) {
				var scrollInc = Event.wheel(e);
				if(scrollInc < 0) {
					this.scrollDown(e, scrollInc);
				} else {
					this.scrollUp(e, scrollInc);
				}
			}
		},
		downClick: function(e, type) {
			var me = this;
			this.startTimer = setInterval(function() {
				me.autoScroll(type);
				clearInterval(me.startTimer)
			}, 300);
		},
		autoScroll: function(type) {
			if(type == "down") {
				this.timer = setInterval(this.scrollDown.bind(this), 100);	
			} else if(type == "up") {
				this.timer = setInterval(this.scrollUp.bind(this), 100);
			}
		},	
		upClick: function(e) {
			if(e) { try { new Event.stop(e); } catch (e) { } }
			clearInterval(this.timer);
			clearInterval(this.startTimer);
		},
		scrollDown: function(e) {
			if(e) { try { new Event.stop(e); } catch (e) { } }
			this.slider.endDrag(e);
			this.slider.setValue(Math.abs((this.scrollArea.style.top.replace("px", "") - 100) / this.offset));
		},
		scrollUp: function(e, inc) {
			if (e) { try { new Event.stop(e); } catch (e) { } }
			this.slider.endDrag(e);
			this.slider.setValue((parseFloat(this.scrollArea.style.top.replace("px", "")) + 100) / this.offset);
		}
	};

	var SingleInputGroup = Class.create();
	SingleInputGroup.prototype = {
		elements: [],
		curElement: new String(),
		loadingMsg: "loading...",
		selectedId: null,
		
		initialize: function(params) {
			if(params.elements) {
				this.elements = params.elements;

				for(var i=0; i<this.elements.length; i++) {
					if(this.elements[i].inspect && this.elements[i].inspect() == "<input>") {
						var obj = {};
						obj.type = "input";
						Event.observe(this.elements[i], "focus", this.doUpdate.bindAsEventListener(this, obj), false);
					}
				}
				if(params.loadingMsg) {
					this.loadingMsg = params.loadingMsg;
				}
			}
		},
		closeMenus: function() {
			for(var i=0; i<this.elements.length; i++) {
				if(this.elements[i].id != this.curElement && this.elements[i].items) {
					this.elements[i].items.style.left = "-999em";
					this.elements[i].shadow.style.display = "none";
					this.elements[i].setState(null, "close");
				}
			}
		},
		clearElementValues: function(val) {
			for(var i=0; i<this.elements.length; i++) {
				if(this.elements[i].id != this.curElement) {
					// TODO: fix the if condition
					this.elements[i].clear();
					if(this.elements[i].className == "selectBox") {
						
					} else if(val != "skip"){
						if(this.elements[i].title) { 
							this.elements[i].value = this.elements[i].title;
							$("txt_companies").className = "";
						} else {
							this.elements[i].value = "";
						}
					}
				}
			}
		},
		closeAll: function() {
			for(var i=0; i<this.elements.length; i++) {
				if(this.elements[i].items) {
					this.elements[i].items.style.left = "-999em";
					this.elements[i].shadow.style.display = "none";
					if(this.elements[i].selected.select("div")[0].innerHTML == "Select") {
						this.elements[i].setState(null, "close");
					}
				}
			}			
		},
		clearAll: function() {
			for(var i=0; i<this.elements.length; i++) {
				this.elements[i].clear();
				if(this.elements[i].title) { 
					this.elements[i].value = this.elements[i].title;
					$("txt_companies").className = "";
				} else {
					this.elements[i].value = "";
				}
			}
		},	
		doUpdate: function(e, params) {				
			if(e != null) { 
				var element = Event.element(e);	
				this.curElement = element.id;	
			} else {
				this.curElement = params.selectBox.id;	
			}				
			this.clearElementValues();			
			openItems.clear();
		},
		doUpdateSelect: function(e, params) {
			if(e != null) { 
				var element = Event.element(e);	
				this.curElement = element.id;	
			} else {
				this.curElement = params.selectBox.id;	
			}				
			//this.clearElementValues();			
			openItems.clear();
		},
		fixFocus: function() {
			/*for(var i=0; i<this.elements.length; i++) {
				if(!this.elements[i].title) { 
					if(console && console.log) {
						console.log(this.elements[i]);	
					}
					if(this.elements[i].scrollbar && this.elements[i].scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {	
						this.elements[i].scrollbar.slider.setValue(1);
						alert('visible');
					}
					this.elements[i].opts[this.elements[i].opts.length - 1].focus();
				}
			}*/
				
		}
	};	
	
	var lastViewed = "";
	var openItems = [];
	function onclicked(el, type) {
		if(el) {
			var elParent = el.parentNode;
			if(elParent.className == "off") {
				elParent.className = "on";
				elParent.appendChild(document.createElement('ul'));
				elParent.getElementsByTagName("ul")[0].innerHTML = "<li>loading...</li>";
				var obj = {
					element: elParent.getElementsByTagName("ul")[0],
					id: elParent.id,
					type: type
				}
				curEl = el;
				getCompanyInfo(obj)
				lastViewed = elParent.id;
				if(openItems.indexOf(lastViewed) == -1) {
					openItems.push(lastViewed);
				}
			} else if(elParent.className == "on") {
				elParent.className = "off";
				elParent.removeChild(el.parentNode.getElementsByTagName("ul")[0]);
				lastViewed = "";
				openItems = openItems.without(elParent.id)
				var curScrollVal = view.scrollbar.slider.value;
				view.scrollbar.adjust();
	
				if(view.scrollbar.hidden) {
					view.scrollbar.slider.setValue(0);
				} else {
					view.scrollbar.slider.setValue(curScrollVal);	
				}
			}
		}
		if(type == null) {
			if(curEl.style) { curEl.style.backgroundColor = "" }
			curEl = el;
		}
	}
	function getCompanyInfo(params) {
	    var companyid = params.id;
	    for (cmp=0;cmp<CompanyArray.length;cmp++) {
	        if (CompanyArray[cmp][5] == companyid) {
	            cmpurl = CompanyArray[cmp][1];
	        }
	    }
	    if (cmpurl == '') {return;}
	    
		url = "xml/companies/" + params.id + ".xml";
		var url = cmpurl + "&Wrapper=PartnerEcosystemInnovationsDetails&View=PartnerEcosystemInnovationDetails&ForceXmlTransform=yes";
		
		new Ajax.Request(
		url, 
		{
			method: 'get', 
			onComplete: function(response) {
				params.element.innerHTML = "";
				
				if(response.responseText != null && (response.status=="304" || response.status=="200")) {
					
					var xmlResponse = response.responseText;
					if (xmlResponse.indexOf("<Company>") > 0) {
		                var start = xmlResponse.indexOf("<Company>");
		                var end = xmlResponse.indexOf("</Company>");
		                var companyinfo = xmlResponse.substr(start+9,end-start-9);
		                params.element.innerHTML += "<li>"+companyinfo+"</li>";
		            }
		            if (xmlResponse.indexOf("<PDF>") > 0) {
		                var start = xmlResponse.indexOf("<PDFTitle>");
		                var end = xmlResponse.indexOf("</PDFTitle>");
		                var PDFTitle = xmlResponse.substr(start+10,end-start-10);
        		        
		                start = xmlResponse.indexOf("<PDFLink>");
		                end = xmlResponse.indexOf("</PDFLink>");
		                start = xmlResponse.indexOf("href=",start);
		                end = xmlResponse.indexOf("\"",start+7);
		                var PDFLink = xmlResponse.substr(start+6,end-start-6);
		                
		                params.element.innerHTML += ("<li><a target='_blank' href='"+PDFLink+"'>"+PDFTitle+"</a></li>");
		            }
		            if (xmlResponse.indexOf("<Info>") > 0) {
		                var start = xmlResponse.indexOf("<InfoTitle>");
		                var end = xmlResponse.indexOf("</InfoTitle>");
		                var InfoTitle = xmlResponse.substr(start+11,end-start-11);
        		        
		                start  = xmlResponse.indexOf("<InfoLink>");
		                end = xmlResponse.indexOf("</InfoLink>");
		                start = xmlResponse.indexOf("href=",start);
		                end = xmlResponse.indexOf("\"",start+7);
		                var InfoLink = xmlResponse.substr(start+6,end-start-6);
		                params.element.innerHTML += ("<li><a target='_blank' href='"+InfoLink+"'>"+InfoTitle+"</a></li>");
		            }
					
					/*
					var company = r.getElementsByTagName("company")[0];
					var nodeValue = company.getElementsByTagName("copy")[0].firstChild.nodeValue.strip();
					var copy = "";
					
					if(nodeValue.length == 0) {
						copy = company.getElementsByTagName("copy")[0].firstChild.nextSibling.data ;
					} else {
						copy = 	company.getElementsByTagName("copy")[0].firstChild.nodeValue;
					}
					params.element.innerHTML += "<li>"+copy+"</li>";
					
					var pdf = company.getElementsByTagName("pdf")[0];
					var pdfLinkTitle = pdf.getElementsByTagName("linkTitle")[0].firstChild.nodeValue;
					var pdfLinkURL = pdf.getElementsByTagName("linkUrl")[0].firstChild.nodeValue;
					params.element.innerHTML += ("<li><a href='"+pdfLinkURL+"'>"+pdfLinkTitle+"</a></li>");
					
					var info = company.getElementsByTagName("info")[0];
					var infoLinkTitle = info.getElementsByTagName("linkTitle")[0].firstChild.nodeValue;
					var infoLinkUrl = info.getElementsByTagName("linkUrl")[0].firstChild.nodeValue;				
					params.element.innerHTML += ("<li><a href='"+infoLinkUrl+"'>"+infoLinkTitle+"</a></li>");
					*/
				} else {
					params.element.innerHTML = "<li><span class='red'>Sorry, there is no information for this company</span></li>";
				}
				if(params.type != "arrows") {
					var curScrollVal = view.scrollbar.slider.value;
					view.scrollbar.adjust();		
					view.scrollbar.slider.setValue(curScrollVal);
					
					var distFromViewportTop = curEl.up("li").offsetTop + parseFloat(view.scrollbar.scrollArea.style.top.replace("px", ""));
					var elHeight = curEl.up("li").getHeight();
					
					if((elHeight + distFromViewportTop) > 250) {
						var nudge = (elHeight + distFromViewportTop) - 250;
						view.scrollbar.slider.setValue(Math.abs(((view.scrollbar.slider.value * view.scrollbar.offset) - nudge) / view.scrollbar.offset));	
					} else if(distFromViewportTop < 0) {
						view.scrollbar.slider.setValue(Math.abs(curEl.parentNode.offsetTop / view.scrollbar.offset));	
					} 
				} else {	
					view.scrollbar.adjust();	
					if(view.scrollbar.hidden) {
						view.scrollbar.slider.setValue(0);						
					} else {
						view.scrollbar.slider.setValue(Math.abs(curEl.parentNode.offsetTop / view.scrollbar.offset));	
					}
				}
			}
		});
	}
	
	var Sorter = Class.create();
	Sorter.prototype = {
		a_e: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e"],
		f_j: ["f", "g", "h", "i", "j"],
		k_s: ["k", "l", "m", "n", "o", "p", "q", "r", "s"],
		t_z: ["t", "u", "v", "w", "x", "y", "z"],
		
		initialize: function() {},
		sortData: function(params) {
			switch(params.type) {
				case "Z-A":
					this.descending(params.element, params.type);
				break;    
				case "A-Z":
					this.ascending(params.element, params.type);
				break;
				case "A-E":
					this.range(params.element, this.a_e, params.type);
				break;
				case "F-J":
					this.range(params.element, this.f_j, params.type);
				break;
				case "K-S":
					this.range(params.element, this.k_s, params.type);					
				break;
				case "T-Z":	
					this.range(params.element, this.t_z, params.type);					
				break;
			}
		},
		descending: function(sectionID, type) {
			showLoader();
			var data = "";
			var members = 0;
			var sortable = 1;
			
			for(var i in model.data) {
				for(var k = 0; k < model.data[i].length; k++) {
					if(sectionID == null || (model.data[i][k].sections && model.data[i][k].sections.search(sectionID) != -1)) {
						data = "<li class='off' id='"+model.data[i][k].id+"'><a href='javascript:void(0)' onclick='onclicked(this)' onfocus='focused(this); return false;'>" + model.data[i][k].name + "</a></li>" + data;
						members++;
					}
				}
			}
			
			sig.selectedId = sectionID;
			$("currentSort").innerHTML = type;
			setTimeout(function() {
				view.populate(data, members, sortable, 1);
			}, 100);
			
		},
		ascending: function(sectionID, type) {
			showLoader();
			var data = "";
			var members = 0;
			var sortable = 1;
			
			for(var i in model.data) {
				for(var k = 0; k < model.data[i].length; k++) {
					if(sectionID == null || (model.data[i][k].sections && model.data[i][k].sections.search(sectionID) != -1)) {
						data += "<li class='off' id='"+model.data[i][k].id+"'><a href='javascript:void(0)' onclick='onclicked(this)' onfocus='focused(this); return false;'>" + model.data[i][k].name + "</a></li>";
						members++;
					}
				}
			}

			$("currentSort").innerHTML = type;
			setTimeout(function() {
				view.populate(data, members, sortable, 1);
				sig.selectedId = sectionID;
			}, 500);
			
		},	
		range: function(sectionID, key, type) {
			showLoader();
			
			var key = key;
			
			var data = "";
			var members = 0;
			var sortable = 1;
			
			for(var i=0; i<key.length; i++) {
				var fChar = key[i];
				for(var k = 0; k < model.data[fChar].length; k++) {
					if(sectionID == null || (model.data[fChar][k].sections && model.data[fChar][k].sections.search(sectionID) != -1)) {
						data += "<li class='off' id='"+model.data[fChar][k].id+"' ><a href='javascript:void(0)' onclick='onclicked(this)' onfocus='focused(this); return false;' >" + model.data[fChar][k].name + "</a></li>";
						members++;
					}
				}
			}

			setTimeout(function() {
				view.populate(data, members, sortable, 1);
				sig.selectedId = sectionID;
				$("currentSort").innerHTML = type;
				sdd.setState("enabled");
			}, 500);
			
		}
	}
	function focused(it) {
		curEl = it;
	}
	var SortDropdown = Class.create();
	SortDropdown.prototype = {	
		initialize: function(sb) {
			
			this.selectBox = sb;
			this.enabledHeader = sb.select("#a-z_clickable")[0];
			this.disabledHeader = sb.select("#a-z_not_clickable")[0];
			this.dropdown = sb.select("#select_sort")[0];
			this.opts = sb.select(".sort a");
			this.shadow = $("select_shadow");
			var selectH = $('select_sort').getHeight();		
			this.sortText = $("dropSort");
			
			var selectT = selectH - 2;
			this.shadow.setStyle({
				height: selectH + 'px',
				top: '-' + selectT + 'px'
			});

			Event.observe($("a-z_clickable"), "click", this.toggleMenu.bindAsEventListener(this), false);
			
			for(var i=0; i<this.opts.length; i++) {	
				Event.observe(this.opts[i], "click", this.setSelected.bindAsEventListener(this), false);
			}
		},
		shut: function() {
			this.dropdown.className = "off_page";
			this.shadow.className = "off_page"
		},
		clear: function(andReset) {
			this.shut();
			$("currentSort").innerHTML = "A-Z";
		},
		setSelected: function(e) {
			new Event.stop(e);
			var el = new Event.element(e);
			$("currentSort").innerHTML = el.innerHTML;
			this.toggleMenu();
			
			var obj = {
				element: sig.selectedId,
				type: el.innerHTML	
			}
			sorter.sortData(obj)
		},
		setState: function(state) {
			if(state == "enabled") {
				this.enabledHeader.className = "show";
				this.disabledHeader.className = "hide";
				this.sortText.style.color = "#000";
			} else if(state == "disabled"){
				this.enabledHeader.className = "hide";
				this.disabledHeader.className = "show";	
				sig.selectedId = null;
				this.sortText.style.color = "";				
			}
		},
		toggleMenu: function(e) {
			if(e) { new Event.stop(e); }
			if(this.dropdown.className == "off_page") {
				this.dropdown.className = "on_page";
				this.shadow.className = "on_page";				
			} else {
				this.dropdown.className = "off_page";
				this.shadow.className = "off_page";
			}
		}
	}
	
	
	var curEl = "";
	var tmpCurEl = "";

	var companyList = $("select_companies");
	Event.observe($("select_companies"),'keydown',function(key) {
		if(key.keyCode == 38 || (key.keyCode == 9 && shiftPressed == true)) {
			new Event.stop(key);
			if(curEl == "" ) { var el = new Event.element(key) }
			else { var el = curEl }
			
			if(curEl.parentNode && curEl.parentNode.parentNode.parentNode && curEl.parentNode.parentNode.parentNode.className == "on") {
				if(curEl.parentNode.next("li")) {
					curEl.style.color = "";
					curEl = curEl.parentNode.parentNode.parentNode.select("a")[0];
					if(curEl.style) { curEl.style.backgroundColor = ""; }
					curEl.style.backgroundColor = "#ccc";
					if(view.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {		
						view.scrollbar.slider.setValue(Math.abs(curEl.parentNode.offsetTop / view.scrollbar.offset));
					}
				} else if(curEl != "" && curEl.parentNode.previous("li") ) {
					curEl.style.color = "";
					curEl = curEl.parentNode.previous("li").select("a")[0];
					curEl.style.color = "blue";
				} 
			} 
			else if(el.up('li') && el.up('li').previous('li') && el.up('li').previous('li').className == "on" && el.up('li').previous('li').getElementsByTagName("a")[1]) {				
				curEl.style.backgroundColor = "";
				curEl = el.up('li').previous('li').select("a")[2];
				curEl.style.color = "blue";
				if(view.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {		
					view.scrollbar.slider.setValue(Math.abs(curEl.parentNode.parentNode.parentNode.offsetTop / view.scrollbar.offset));
				}
			} else {				
				if( el.descendantOf(companyList) && el.up('li').previous('li') ) {
					if(curEl.style) { curEl.style.backgroundColor = ""; }
					curEl = el.up('li').previous('li').select("a")[0];
					curEl.style.backgroundColor = "#ccc";	
					if(view.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {		
						view.scrollbar.slider.setValue(Math.abs(curEl.parentNode.offsetTop / view.scrollbar.offset));
					}
				} else {
					$("tabin").focus();	
					if(curEl.style) {
						curEl.style.backgroundColor = "";
						curEl.style.color = "";
					}
					curEl = "";
				}
			}
		} 
		
		if(key.keyCode == 40 || (key.keyCode == 9 && shiftPressed == false)) {
			new Event.stop(key);
			if(curEl == "" ) { var el = new Event.element(key) }
			else { var el = curEl }
			
			if(curEl != "" && curEl.parentNode.className == "on" && curEl.up('li').getElementsByTagName("a")[1]) {
				tmpCurEl = curEl;
				curEl = curEl.up('li').getElementsByTagName("a")[1];
				curEl.style.color = "blue";
			} else if(curEl != "" && curEl.parentNode.parentNode.parentNode.className == "on" && curEl.parentNode.next('li')) {
				curEl.style.color = "";
				curEl = curEl.parentNode.next('li').getElementsByTagName("a")[0];
				curEl.style.color = "blue";
					
			} else if(curEl != "" && curEl.parentNode.parentNode.parentNode.className == "on" && !(curEl.parentNode.next('li'))) {
				curEl.style.color = "";
				tmpCurEl.style.backgroundColor = "";
				if(tmpCurEl.up('li').next('li')) {
					curEl = tmpCurEl.up('li').next('li').select("a")[0];
					
					if(curEl.style) { curEl.style.backgroundColor = ""; }
					curEl.style.backgroundColor = "#ccc";
					if(view.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {		
						view.scrollbar.slider.setValue(Math.abs(curEl.parentNode.offsetTop / view.scrollbar.offset));
					}
				} else {
					$("tabout").focus();
					if(curEl.style) {
						curEl.style.backgroundColor = "";
						curEl.style.color = "";
					}
					curEl = "";
				}	
			} else {
				if( el.descendantOf(companyList) && el.up('li').next('li') ) {
					if(curEl.style) { curEl.style.backgroundColor = ""; }
					curEl = el.up('li').next('li').select("a")[0];
					curEl.style.backgroundColor = "#ccc";	
				}
				if(view.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {		
					view.scrollbar.slider.setValue(Math.abs(curEl.parentNode.offsetTop / view.scrollbar.offset));
				}	
				
				if(!el.up('li').next('li')) {
					$("tabout").focus();
					if(curEl.style) {
						curEl.style.backgroundColor = "";
						curEl.style.color = "";
					}
					curEl = "";
				}
			}
		}
		
		if(key.keyCode == 13) {
			// return key	
			if(curEl != "") { 
				new Event.stop(key);
				if(curEl.parentNode.parentNode.parentNode.className == "on") {
					document.location = curEl.href;
				} else {
					onclicked(curEl, "arrows");
				}
			}		
		}		
		
	});
	
	Event.observe($("tabout"), "focus", function() { 
		if(view.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {	
			view.scrollbar.slider.setValue(1);
		}
		var listitems = $$("#select_companies li a");
		if(curEl && curEl.style) {
			curEl.style.backgroundColor = "";
			curEl.style.color = "";
		}
		curEl = listitems[listitems.length - 1];
		//curEl.focus();
		tmpCurEl = ""; 

	}, false);
	
	Event.observe($("tabin"), "focus", function() { 
		if(view.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {	
			view.scrollbar.slider.setValue(0); 
		}
		var listitems = $$("#select_companies li a");
		if(curEl != "" && curEl != null && curEl.style) {
			curEl.style.backgroundColor = "";
			curEl.style.color = "";
		}
		curEl = listitems[0]; 	
		tmpCurEl = ""; 
	}, false);	
	
	function showLoader() {
		view.view.innerHTML = "<li id='no_results' class='no_results'><span class='red'>Loading...</span></li>";	
				view.scrollbar.slider.setValue(0);
	}
		
	Event.observe(document, "keydown", function(e) { if(e.keyCode == 16) { shiftPressed = true; } }, false);
	Event.observe($("Text1"), "focus", function(e) { shiftPressed = false; }, false);
	
	/*Event.observe($("taboutSelect"), "focus", function(e) {
		if(view.scrollbar.knob.parentNode.parentNode.style.visibility == "visible") {	
			view.scrollbar.slider.setValue(1);
		}					
		sig.fixFocus();
    }, true);*/

