/*
 * dropdown.js
 *
 * Dropdown Widget - Inticketing
 * version 0.1
 * 
 * Edition date: Mon Nov  3 10:59:24 PST 2008
 */
// prototype additions
//>> the main Dropdown namespace
// prototype additions
function $(v) { return(document.getElementById(v)); }
function agent(v) { return(Math.max(navigator.userAgent.toLowerCase().indexOf(v),0)); }
function xy(e,v) { return(v?(agent('msie')?event.clientY+document.body.scrollTop:e.pageY):(agent('msie')?event.clientX+document.body.scrollTop:e.pageX)); }
function dragOBJ(d,e) {
    function drag(e) { if(!stop) { d.style.top=(tX=xy(e,1)+oY-eY+'px'); d.style.left=(tY=xy(e)+oX-eX+'px'); } }
    var oX=parseInt(d.style.left),oY=parseInt(d.style.top),eX=xy(e),eY=xy(e,1),tX,tY,stop;
    document.onmousemove=drag; document.onmouseup=function(){ stop=1; document.onmousemove=''; document.onmouseup=''; };
}

String.prototype.trim = function () {
	return this.replace(/^\s+|\s+$/g, "");
}; 

var get = function (id) {
	return (document.getElementById(id));
};
var getElementsByClass = function (searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var reg = new RegExp("^"+searchClass+"$|\\s+"+searchClass+"\\s+|^"+searchClass+"\\s+","i");
	for (i = 0, j = 0; i < elsLen; i++) {
		if (reg.test(els[i].className) ) {
//			alert("found something"+els[i].className);
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
var getElementsByClassName = 
	document.getElementsByClassName ? function (class_name, scope) {
		return (scope || document).getElementsByClassName(class_name);
	} 
	: document.querySelectorAll ? function (class_name, scope) {
		return (scope || document).querySelectorAll("." + class_name);
	} 
	: document.evaluate ? function (class_name, scope) {
		var n,
			r = [],
			x = document.evaluate("descendant::*[contains(concat(' ', @class, ' '), ' " + class_name + " ')]",
				scope || document, null, 5, null);
		while (n = x.iterateNext()) {
			r.push(n);
		}
		return r;
	} 
	: function (class_name, scope) {
		scope = scope || document;
		var nL = scope.all || scope.getElementsByTagName("*"),
			r = [];
		for (var i = 0, n; n = nL[i]; ++i) {
			if (n.className && (' ' + n.className + ' ').indexOf(' ' + class_name + ' ') != -1) {
				r.push(n);
			}
		}
		return r;
};

 //>> the main Dropdown namespace
var DROPDOWN = {};
DROPDOWN.node_artists = [];
DROPDOWN.node_cities = [];
DROPDOWN.node_venues = [];
DROPDOWN.node_events = [];
DROPDOWN.artists = [];
DROPDOWN.cities = [];
DROPDOWN.venues = [];
DROPDOWN.xml_global_markup = [];
DROPDOWN.visualModule = 'default.css'; // 'glass.css', 'facebook.css', 'default.css', etc..
DROPDOWN.maxResults = 6;
DROPDOWN.useLocal = 0;
DROPDOWN.selected = -1;
DROPDOWN.contentOutput = '';
if (DROPDOWN.useLocal) {
	DROPDOWN.xmlFileName = 'events.xml';	
	DROPDOWN.stylingFileName = 'event_styling.css';
	DROPDOWN.visualModuleFileName = '/css/'+DROPDOWN.visualModule;
	DROPDOWN.visualModuleFileName_standard = '/css/standard.css';
}
else {
	DROPDOWN.xmlFileName = '/dropdown/events-search-xml.php';
	DROPDOWN.stylingFileName = '/dropdown/event_styling.css';
	DROPDOWN.visualModuleFileName = '/dropdown/css/'+DROPDOWN.visualModule;
	DROPDOWN.visualModuleFileName_standard = '/dropdown/css/standard.css';	
}
DROPDOWN.moduleClick = function(form) {
	for (i=0;i<form.group1.length;i++) {
		if (form.group1[i].checked) {
			DROPDOWN.visualModule = form.group1[i].value;
			if (DROPDOWN.useLocal) {
				DROPDOWN.visualModuleFileName = '/css/'+DROPDOWN.visualModule;
			}
			else {
				DROPDOWN.visualModuleFileName = '/dropdown/css/'+DROPDOWN.visualModule;
			}
			switch (DROPDOWN.visualModule) {
				case 'default.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.applyCSS(DROPDOWN.xml_global_markup);
					break;
				case 'glass_blue.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);
					break;
				case 'glass_black.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);	
					break;
				case 'glass_green.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);	
					break;
				case 'glass_red.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);	
					break;
				case 'glass_white.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);
					break;
				case 'glass_blue_drop.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);	
					break;
				case 'glass_red_drop.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);	
					break;
				case 'glass_brown_drop.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);
					break;
				case 'glass_green_drop.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);	
					break;
				case 'glass_purple_drop.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);	
					break;
				case 'facebook.css': 
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);	
					break;
				case 'grey.css':  // note here, we don't use the apply saveHoverRule, because, this is a grey theme...
					 // hence, this should explain some of what looks like repetition.
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);	
					break;
				case 'standard.css':  
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);	
					break;
				case 'rounded_white.css':  
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);
					break;
					
				case 'rounded_white_glass.css':  
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);
					break;
				case 'image_free_rounded.css':  
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);
					break;
				case 'image_free_rounded_white.css':  
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);
					break;
				case 'image_free_rounded_white_knockout.css':  
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);
					break;
				case 'image_free_rounded_white_knockout_spacing.css':  
					DROPDOWN.removeGlobalCSS();
					DROPDOWN.loadGlobalCSS(DROPDOWN.visualModuleFileName);
					break;
					
				default:
					break;
			} 
			document.forms["form_search"].elements['dropdown'].focus(); 
			document.forms["form_search"].elements['dropdown'].select(); 			
			DROPDOWN.match();
			return;
		}
	}
};
DROPDOWN.moduleChooser = function () {
	var moduleNode = document.createElement('DIV');
	switch (DROPDOWN.nav) {
		case 'ie6':
			moduleNode.attachEvent('onmousedown', function(){dragOBJ(this,event)});
			moduleNode.style.right = '0px';
			
			
			break;
		case 'ie7':
			moduleNode.attachEvent('onmousedown', function(){dragOBJ(this,event)});
			moduleNode.style.right = '0px';
			
			break;
		default:
			moduleNode.style.right = '0px';
			moduleNode.addEventListener('mousedown', function(event){dragOBJ(this,event)}, false);
	}

	moduleNode.innerHTML = '<form name="module_selector" action=""><input type="radio" name="group1" value="glass_blue.css" onClick="DROPDOWN.moduleClick(this.form)">Glass 2.0 Blue</input><br><input type="radio" name="group1" value="glass_black.css" onClick="DROPDOWN.moduleClick(this.form)">Glass 2.0 Black</input><br><input type="radio" name="group1" value="glass_red.css" onClick="DROPDOWN.moduleClick(this.form)">Glass 2.0 Red</input><br><input type="radio" name="group1" value="glass_green.css" onClick="DROPDOWN.moduleClick(this.form)">Glass 2.0 Green</input><br><input type="radio" name="group1" value="glass_white.css" onClick="DROPDOWN.moduleClick(this.form)">Glass 2.0 White</input><hr><input type="radio" name="group1" value="glass_blue_drop.css" onClick="DROPDOWN.moduleClick(this.form)">Glass 2.0 Blue Drop</input><br><input type="radio" name="group1" value="glass_red_drop.css" onClick="DROPDOWN.moduleClick(this.form)">Glass 2.0 Red Drop</input><br><input type="radio" name="group1" value="glass_purple_drop.css" onClick="DROPDOWN.moduleClick(this.form)">Glass 2.0 Purple Drop</input><br><input type="radio" name="group1" value="glass_brown_drop.css" onClick="DROPDOWN.moduleClick(this.form)">Glass 2.0 Brown Drop</input><br><input type="radio" name="group1" value="glass_green_drop.css" onClick="DROPDOWN.moduleClick(this.form)">Glass 2.0 Green Drop</input><br><input type="radio" name="group1" value="facebook.css" onClick="DROPDOWN.moduleClick(this.form)">Facebook</input><br><input type="radio" name="group1" value="default.css" onClick="DROPDOWN.moduleClick(this.form)">Default_Style</input><hr><input type="radio" name="group1" value="grey.css" onClick="DROPDOWN.moduleClick(this.form)">Grey Theme</input><br><input type="radio" name="group1" value="standard.css" onClick="DROPDOWN.moduleClick(this.form)">Standard Theme + KeyNav Enabled</input><br><input type="radio" name="group1" value="rounded_white.css" onClick="DROPDOWN.moduleClick(this.form)">Standard Theme with Rounded Corners + Drop Shadows</input><br><input type="radio" name="group1" value="rounded_white_glass.css" onClick="DROPDOWN.moduleClick(this.form)">Standard Theme with Rounded Corners + Drop Shadows + Opacity</input><hr><input type="radio" name="group1" value="image_free_rounded.css" onClick="DROPDOWN.moduleClick(this.form)">Image-Free Rounded Border + KeyNav Enabled(Light Grey)</input><br><input type="radio" name="group1" value="image_free_rounded_white.css" onClick="DROPDOWN.moduleClick(this.form)">Image-Free Rounded Border + KeyNav Enabled (White)</input><br><input type="radio" name="group1" value="image_free_rounded_white_knockout.css" onClick="DROPDOWN.moduleClick(this.form)">Image-Free Rounded Border + KeyNav Enabled (White) + Knockout</input><br><input type="radio" name="group1" value="image_free_rounded_white_knockout_spacing.css" checked onClick="DROPDOWN.moduleClick(this.form)">Image-Free Rounded Border + KeyNav Enabled (White) + Knockout + smart height spacing</input></form>';
	moduleNode.id = 'moduleChooser';
	moduleNode.style.backgroundColor = '#FFF';
	moduleNode.style.border = 'thin groove black';
	moduleNode.style.top = '20px';
	moduleNode.style.width = '300px';
	moduleNode.style.position = 'absolute';
	moduleNode.style.padding = '10px 10px 10px 10px';
	moduleNode.style.color = 'black';
	moduleNode.style.display = 'none';
	document.body.appendChild(moduleNode);
};

DROPDOWN.queryXML_XPATH = function (xmlDoc, path) {
	switch (DROPDOWN.nav) {
		case 'ie6': 
			if (window.ActiveXObject) {
				var nodes=xmlDoc.selectNodes(path);
				return nodes;
			}
			break;
		case 'ie7': 
			if (window.ActiveXObject) {
				var nodes=xmlDoc.selectNodes(path);
				return nodes;
			}
			
			break;
		default:
			if (document.implementation) {
				var nodes=xmlDoc.evaluate(path, xmlDoc, null, XPathResult.ANY_TYPE, null);
				return nodes;
			}		
			break;
	}
	return undefined;
};



DROPDOWN.xmlDoc;
DROPDOWN.click = function (e) {
	var toTop = function(node) {
		if (node) {
			var id;
			if (node.id) { 
				id = node.id;
//				alert("node id is " + id);
				if ((id == 'append') || (id =='dropdown') || (id == 'moduleChooser')) {
					return 1;
				}
			}
			if (node.parentNode) return toTop(node.parentNode);
		}
		else return undefined;
		
	};	
	if ((e.target) && (toTop(e.target))) {
	}
	else if ((e.srcElement) && (toTop(e.srcElement))) {
	}
	else {
		if (e.pageX) {
			get('append').innerHTML = '';
		}
		else if (e.clientX) {
			get('append').innerHTML = '';			
		}
	}
};
DROPDOWN.loadGlobalCSS = function(name) {
	var headID = document.getElementsByTagName("head")[0];
	var cssLinks = headID.getElementsByTagName('link');
	for (var i = 0; i < cssLinks.length; i++) {
//		alert(cssLinks[i].id + ' VERSUS trying to add name: ' + name);
		if (cssLinks[i].id == name) {
//			alert ("already inserted. Not adding " + name);
			return;
		}
	}

	var cssNode = document.createElement('link');
	cssNode.type = 'text/css';
	cssNode.rel = 'stylesheet';
	cssNode.href = name;
	cssNode.id = name; // for identification purposes because .href property changes from /css/foo.css into http://bar.com/css/foo.css by the browser
	
	headID.appendChild(cssNode);
}
DROPDOWN.removeGlobalCSS = function () {
	var head = document.getElementsByTagName("head")[0];
	var csslinks = head.getElementsByTagName("link");
	for (var i = 0; i < csslinks.length; i++) {
		var cssNode = csslinks[i];
		if (cssNode.id.indexOf('/dropdown/css/') != -1) {
			head.removeChild(cssNode);
		}
	}

}
DROPDOWN.applyCSS = function (css) {
	var individual_rules_array = css.split("}");
	var mostRecentStyleSheet = document.styleSheets.length-1;
	var stylesheet = document.styleSheets[mostRecentStyleSheet];
	if (document.styleSheets[mostRecentStyleSheet].cssRules)
		crossrule = document.styleSheets[mostRecentStyleSheet].cssRules
	else if (document.styleSheets[mostRecentStyleSheet ].rules)
		crossrule = document.styleSheets[mostRecentStyleSheet].rules
	var totalrules = crossrule.length - 1;
	if (stylesheet.deleteRule) { //if Firefox
		for (var j = 0; j < (individual_rules_array.length-1); j++) {
			var css = individual_rules_array[j]+'}';
			if (css.indexOf('{') != -1) {
				var selector = (css.slice(0, css.indexOf('{')));
				css_id = selector.trim();
			}
//			alert('applying rule: ' + css);
			stylesheet.insertRule(css, totalrules + j);
		}	
	}
	else if (stylesheet.removeRule) { //else if IE
		for (var j = 0; j < individual_rules_array.length-1;j++) {
			var css = individual_rules_array[j]+'}';
			var selector = (css.slice(0, css.indexOf('{')));
			css_id = selector.trim();
			var style = css.match(/{(.+?)}/);
			stylesheet.addRule(selector, style);
			
		}
	} 
}

DROPDOWN.glass = function(input) {
	var glass_string_pre = '<div class="glass_dialog glass_type2"><div class="glass_content"><div class="glass_wrapper"><div class="glass_t"></div><div class="glass_bd"><p>';
	var glass_string_post = '</div></div></div><div class="glass_b"><div></div></div></div>';
	return glass_string_pre + input + glass_string_post;
}


DROPDOWN.image_free_rounded = function(input) {
	var image_free_rounded_pre = '<b class="b1"></b><b class="b2"></b><b class="b3"></b><b class="b4"></b><div class="contentb"><div>';
	var image_free_rounded_post = '</div></div><b class="bb4"></b><b class="bb3"></b><b class="bb2"></b><b class="bb1"></b>';
	return image_free_rounded_pre + input + image_free_rounded_post;
}
DROPDOWN.removeInlineStyles = function() {
	switch (DROPDOWN.nav) {
		case 'ie6': 
			var events = getElementsByClass('event', get('append'), 'div');
			for (var k = 0; k < events.length; k++) {
				events[k].className = 'event';
			}
			break;
		case 'ie7': 
			var events = getElementsByClass('event', get('append'), 'div');
			for (var k = 0; k < events.length; k++) {
				events[k].className = 'event';
			}			
			break;
		default:
			var events = getElementsByClassName('event');
			for (var k = 0; k < events.length; k++) {
				if (events[k].className == 'event') {
					events[k].style.backgroundColor = '';
				}
			}
			break;	
	}
}
DROPDOWN.match = function (e) {
	if (e) {
		var current_key = String.fromCharCode(e.keyCode).toLowerCase(); 
		switch(e.keyCode) {
			case 9: // tab
				document.forms["form_search"].elements['dropdown'].focus(); document.forms["form_search"].elements['dropdown'].select();			
				return;
			case 37: //left
				return;
			case 38: //up
				get('dropdown').hasFocus = false;
				switch (DROPDOWN.nav) {
					case 'ie6' : 
						var events = getElementsByClass('event', get('append'), 'div');
						for (var k = 0; k < events.length; k++) {
							if ((events[k].className) && (events[k].className == 'event hover')) {
								DROPDOWN.selected = k;
								break;
							}
						}
						if (DROPDOWN.selected <= 0) {
							return;
						}
						events[DROPDOWN.selected].className = 'event'; 
						DROPDOWN.selected = DROPDOWN.selected - 1;
						events[DROPDOWN.selected].className = 'event hover';
						return;
					case 'ie7' : 
						var events = getElementsByClass('event', get('append'), 'div');
						for (var k = 0; k < events.length; k++) {
							if ((events[k].className) && (events[k].className == 'event hover')) {
								DROPDOWN.selected = k;
								break;
							}
						}
						if (DROPDOWN.selected <= 0) {
							return;
						}
						events[DROPDOWN.selected].className = 'event'; 
						DROPDOWN.selected = DROPDOWN.selected - 1;
						events[DROPDOWN.selected].className = 'event hover';
						return;
						
					default: 
						var events = getElementsByClassName('event');
						for (var k = 0; k < events.length; k++) {
							if (events[k].className == 'event') {
								var style = window.getComputedStyle(events[k], null);
								if (style.getPropertyCSSValue('background-color').cssText == 'rgb(221, 221, 221)') {
									DROPDOWN.selected = k;
								}
							}
						}
						if (DROPDOWN.selected <= 0) {
							return;
						}
						if (DROPDOWN.visualModule == 'standard.css') {
							events[DROPDOWN.selected].style.backgroundColor = '#FFF'; 
						}
						else {
							events[DROPDOWN.selected].style.backgroundColor = 'transparent'; 
						}
						DROPDOWN.selected = DROPDOWN.selected -1;
						events[DROPDOWN.selected].style.backgroundColor = 'rgb(221, 221, 221)';
						return;
				}
			case 39: //right
				return;
			case 40: //down
				get('dropdown').hasFocus = false;
				switch (DROPDOWN.nav) {
					case 'ie6' : 
						var events = getElementsByClass('event', get('append'), 'div');
						for (var k = 0; k < events.length; k++) {
							if ((events[k].className) && (events[k].className == 'event hover')) {
								DROPDOWN.selected = k;
								if ((DROPDOWN.selected + 1) <= (events.length-1)) {
									events[DROPDOWN.selected].className = 'event'; 
									DROPDOWN.selected = DROPDOWN.selected + 1;
									events[DROPDOWN.selected].className = 'event hover';
								}
								return;
							}
						}
						if (events.length > 0) { // notice at the we return if we found a 
						// computedValue background hover value. Since that didn't happen, we assume
						// we are intending to pick the first item, regardless if the .selected is not just -1
						// (i.e. we could have keynav'd down, then moused out, making all the backgrounds
						// the same, but the .selected would not be -1.
							DROPDOWN.selected = 0;
							events[DROPDOWN.selected].className = 'event hover';
						}
						return;
					case 'ie7' : 
						var events = getElementsByClass('event', get('append'), 'div');
						for (var k = 0; k < events.length; k++) {
							if ((events[k].className) && (events[k].className == 'event hover')) {
								DROPDOWN.selected = k;
								if ((DROPDOWN.selected + 1) <= (events.length-1)) {
									events[DROPDOWN.selected].className = 'event'; 
									DROPDOWN.selected = DROPDOWN.selected + 1;
									events[DROPDOWN.selected].className = 'event hover';
								}
								return;
							}
						}
						if (events.length > 0) { // notice at the we return if we found a 
						// computedValue background hover value. Since that didn't happen, we assume
						// we are intending to pick the first item, regardless if the .selected is not just -1
						// (i.e. we could have keynav'd down, then moused out, making all the backgrounds
						// the same, but the .selected would not be -1.
							DROPDOWN.selected = 0;
							events[DROPDOWN.selected].className = 'event hover';
						}
						return;
						
					default: 
						var events = getElementsByClassName('event');
						for (var k = 0; k < events.length; k++) {
							if (events[k].className == 'event') {
								var style = window.getComputedStyle(events[k], null);
								if (style.getPropertyCSSValue('background-color').cssText == 'rgb(221, 221, 221)') {
									DROPDOWN.selected = k;
									if ((DROPDOWN.selected + 1) <= (events.length-1)) {
										if (DROPDOWN.visualModule == 'standard.css') {
											events[DROPDOWN.selected].style.backgroundColor = '#FFF'; 
										}
										else {
											events[DROPDOWN.selected].style.backgroundColor = 'transparent'; 
										}
										DROPDOWN.selected = DROPDOWN.selected + 1;
										events[DROPDOWN.selected].style.backgroundColor = 'rgb(221, 221, 221)';
									}
								return;
								}
							}
						}
						if (events.length > 0) { // notice at the we return if we found a 
						// computedValue background hover value. Since that didn't happen, we assume
						// we are intending to pick the first item, regardless if the .selected is not just -1
						// (i.e. we could have keynav'd down, then moused out, making all the backgrounds
						// the same, but the .selected would not be -1.
							DROPDOWN.selected = 0;
							events[DROPDOWN.selected].style.backgroundColor = 'rgb(221, 221, 221)';
						}
				}
				return;
			case 13: // enter
				var addAction = function(frm, php_action) {
					frm.action = php_action;
				};				
				switch (DROPDOWN.nav) {
					case 'ie6' :
						var events = getElementsByClass('event', get('append'), 'div');
						for (var k = 0; k < events.length; k++) {
							if (events[k].className == 'event hover') {
								var link = String(events[k]["onclick"]);
								link = link.slice(link.indexOf('http:'),link.lastIndexOf('"'));
								window.location.href = link;
								return;
							}
						}
						addAction(document.forms["form_search"], 'evlist.php');
						document.forms["form_search"].submit();						
						break;
					case 'ie7' :
						var events = getElementsByClass('event', get('append'), 'div');
						for (var k = 0; k < events.length; k++) {
							if (events[k].className == 'event hover') {
								var link = String(events[k]["onclick"]);
								link = link.slice(link.indexOf('http:'),link.lastIndexOf('"'));
								window.location.href = link;
								return;
							}
						}
						addAction(document.forms["form_search"], 'evlist.php');
						document.forms["form_search"].submit();						
						break;
					default:
						var events = getElementsByClassName('event');
						for (var k = 0; k < events.length; k++) {
							if (events[k].className == 'event') {
								var style = window.getComputedStyle(events[k], null);
								if (style.getPropertyCSSValue('background-color').cssText == 'rgb(221, 221, 221)') {
									var link = events[k].getAttribute('onclick');
									link = link.slice(link.indexOf('http:'),link.length-2);
									window.location.href = link;
									return;
								}
							}
						}
						if (get('dropdown').hasFocus) {
							addAction(document.forms["form_search"], 'evlist.php');
							document.forms["form_search"].submit();
						}						
						break;
				}
				return;
			default:				
				break;
		}	
		if (((e.keyCode < 46) && (e.keyCode != 8)) || (e.keyCode > 90)) {
			return;
		}
	}
	DROPDOWN.selected = -1;
	var input_text = get('dropdown').value.toLowerCase();
	input_text = input_text.trim();
	if (input_text.length == 0) { 
		get('append').innerHTML = '';
		return 0;
	}
	var found = 0;
	var output = '';
	var numResults = 0;
	var fill_data = function(obj, type) {
		for (var i = 0; i < obj.length; i++) {
			var firstIndex = obj[i].value.indexOf(input_text);
			if ((firstIndex >= 0) && (numResults <= DROPDOWN.maxResults)) {
				found = 1;
				numResults++;
				// for now, DOM methods work in all cases. at some point we can switch this into switch statement
				// for different XPATH methods based on browser (internet explorer)
				var artist = '';
				if ((obj[i].eventNode.getElementsByTagName("title"))[0].childNodes[0]) {
					artist = (obj[i].eventNode.getElementsByTagName("title"))[0].childNodes[0].nodeValue;
				}
				var city = '';
				if ((obj[i].eventNode.getElementsByTagName("venue_city"))[0]) {
					city = (obj[i].eventNode.getElementsByTagName("venue_city"))[0].childNodes[0].nodeValue;
				}
				var venue = '';
				if ((obj[i].eventNode.getElementsByTagName("venue_name"))[0].childNodes[0]) {
					venue = (obj[i].eventNode.getElementsByTagName("venue_name"))[0].childNodes[0].nodeValue;
				}
				venue = venue + " - ";
				var venue_state = '';
				if ((obj[i].eventNode.getElementsByTagName("venue_state"))[0].childNodes[0]) {
					venue_state = (obj[i].eventNode.getElementsByTagName("venue_state"))[0].childNodes[0].nodeValue;
				}
				var link = '';
				if ((obj[i].eventNode.getElementsByTagName("event_url"))[0]) {
					link = (obj[i].eventNode.getElementsByTagName("event_url"))[0].childNodes[0].nodeValue;
				}
				var ev_date = '';
				if ((obj[i].eventNode.getElementsByTagName("event_date"))[0]) {
					ev_date = (obj[i].eventNode.getElementsByTagName("event_date"))[0].childNodes[0].nodeValue;
				}
				var ev_year = ev_date.slice(0, ev_date.indexOf('-'));
				ev_date = ev_date.slice(ev_date.indexOf('-')+1);
				var ev_month = ev_date.slice(0, ev_date.indexOf('-')).trim();
				switch (ev_month) {
					case '01' :
						ev_month = 'Jan';
						break;						
					case '02' : 
						ev_month = 'Feb';
						break;						
					case '03' : 
						ev_month = 'Mar';
						break;						
					case '04' : 
						ev_month = 'Apr';
						break;						
					case '05' : 
						ev_month = 'May';
						break;						
					case '06' : 
						ev_month = 'Jun';
						break;						
					case '07' : 
						ev_month = 'Jul';
						break;						
					case '08' : 
						ev_month = 'Aug';
						break;						
					case '09' : 
						ev_month = 'Sep';
						break;						
					case '10' : 
						ev_month = 'Oct';
						break;						
					case '11' : 
						ev_month = 'Nov';
						break;						
					case '12' : 
						ev_month = 'Dec';
						break;						
					default:
						break;
				}
				var ev_day = ev_date.slice(ev_date.indexOf('-')+1);
				if ((DROPDOWN.visualModule == 'image_free_rounded_white_knockout.css') || (DROPDOWN.visualModule == 'image_free_rounded_white_knockout_spacing.css')) {
					ev_date = ev_month +"<br>" + "<span style='font-weight:900;'>"+ev_day+"</span>";// + " " +  ev_year;
				}
				else {
					ev_date = ev_month +" " + ev_day + " " +  ev_year;
				}
				var css = '';
				if (obj[i].eventNode.getElementsByTagName("css").length) {
					if ((obj[i].eventNode.getElementsByTagName("css"))[0].childNodes[0]) {
						css = (obj[i].eventNode.getElementsByTagName("css"))[0].childNodes[0].nodeValue;
						if ((css) & (css.length > 0)) {
							DROPDOWN.applyCSS(css);
						}
					}
				}
				switch (type) {
					case 'artists': 
						var typed_portion = '<span class="typed_portion">'+artist.substr(firstIndex,input_text.length)+'</span>';
						var artist_with_bold = artist.substr(0,firstIndex) + typed_portion + artist.substr(firstIndex+input_text.length);
						var artist_output = "<div class='artist'>"+artist_with_bold+"</div>";
						
						if (DROPDOWN.visualModule == 'image_free_rounded_white_knockout_spacing.css') {
							if ((artist.substr(0,firstIndex).length + artist.substr(firstIndex,input_text.length).length + 
										artist.substr(firstIndex+input_text.length).length) > 35) {
								artist_output = "<div class='artist artist_small'>"+artist_with_bold+"</div>";
							}
						}						
						var city_output = "<div class='city'>"+city+", "+venue_state+"</div>";
						var date_output = "<div class='date'>"+ev_date+"</div>";
						var venue_output = "<div class='venue'>@ "+venue+"</div>";
						var link_output = "<div class='link'><a href='"+link+"'>"+link+"</a></div>";
						break;
					case 'cities':
						var typed_portion = '<span class="typed_portion">'+city.substr(firstIndex,input_text.length)+'</span>';
						var city_with_bold = city.substr(0,firstIndex) + typed_portion + city.substr(firstIndex+input_text.length);
						var city_output = "<div class='city'>"+city_with_bold+", "+venue_state+"</div>";
						var artist_output = "<div class='artist'>"+artist+"</div>";
						var date_output = "<div class='date'>"+ev_date+"</div>";
						var venue_output = "<div class='venue'>@ "+venue+"</div>";
						var link_output = "<div class='link'><a href='"+link+"'>"+link+"</a></div>";
						break;
					case 'venues':
						var typed_portion = '<span class="typed_portion">'+venue.substr(firstIndex,input_text.length)+'</span>';
						var venue_with_bold = venue.substr(0,firstIndex) + typed_portion + venue.substr(firstIndex+input_text.length);
						var city_output = "<div class='city'>"+city+", "+venue_state+"</div>";
						var artist_output = "<div class='artist'>"+artist+"</div>";
						var date_output = "<div class='date'>"+ev_date+"</div>";
						var venue_output = "<div class='venue'>@ "+venue_with_bold+"</div>";
						var link_output = "<div class='link'><a href='"+link+"'>"+link+"</a></div>";
						break;
					default: 
				}
				var click_string = '';
				var line_break = "<div style='margin-top:15px;border-bottom:thin dotted #000;'></div>";
				var click_string = 'window.location.href="'+link+'";';
				switch (DROPDOWN.visualModule) {
					case 'image_free_rounded_white_knockout_spacing.css':
						output = output + "<div onclick='"+click_string+"' class='event'>"+date_output+"<div class='event_text_wrap'>"+artist_output+venue_output+city_output+"</div>"+line_break+"</div>\n\t";						
						break;
					default:	
						output = output + "<div onclick='"+click_string+"' class='event'>"+date_output+artist_output+venue_output+city_output+line_break+"</div>\n\t";
						break;
				}
				
			}
		}
	};
	fill_data(DROPDOWN.artists, 'artists');
	fill_data(DROPDOWN.cities, 'cities');
	fill_data(DROPDOWN.venues, 'venues');
	DROPDOWN.contentOutput = output;
	if (found) {
		DROPDOWN.render(DROPDOWN.contentOutput);
		switch (DROPDOWN.nav) {
			case 'ie6' :
				var events = getElementsByClass('event', get('append'), 'div');
				for (var i = 0; i < events.length; i++) {
					events[i].onmouseenter = function() {this.className = 'event hover';}
					events[i].onmouseleave = function() {this.className = 'event';}
				} 
				break;
			case 'ie7' :
				var events = getElementsByClass('event', get('append'), 'div');
				for (var i = 0; i < events.length; i++) {
					events[i].onmouseenter = function() {this.className = 'event hover';}
					events[i].onmouseleave= function() {this.className = 'event';}
				} 
				break;
			default:
				break;
		}
		
	}
	else {
		output = "<div class='event' style='background-color:#FFF;'><div style='padding:0px 0 0px 0px; text-align:left; color:#000; background-color:#FFF;'><em>No suggestions found</em></div></div>";
		get('append').innerHTML = DROPDOWN.image_free_rounded(output);
	}
};
DROPDOWN.render = function (output) {
		switch (DROPDOWN.visualModule) { // purpose of this switch is to additional markup for more advanced presentation styles, such as glass
			case 'glass_blue.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'glass_white.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'glass_black.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'glass_red.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'glass_green.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'glass_blue_drop.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'glass_red_drop.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'glass_green_drop.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'glass_brown_drop.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'glass_purple_drop.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'rounded_white.css':  get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'rounded_white_glass.css':  
						get('append').innerHTML = DROPDOWN.glass(output);
					   	break;
			case 'image_free_rounded.css':  
						get('append').innerHTML = DROPDOWN.image_free_rounded(output);
					   	break;
			case 'image_free_rounded_white.css':  
						get('append').innerHTML = DROPDOWN.image_free_rounded(output);
					   	break;
			case 'image_free_rounded_white_knockout.css':  
						get('append').innerHTML = DROPDOWN.image_free_rounded(output);
					   	break;
			case 'image_free_rounded_white_knockout_spacing.css':  
						get('append').innerHTML = DROPDOWN.image_free_rounded(output);
						if ((DROPDOWN.nav == 'ie7') || (DROPDOWN.nav == 'ie6')) {
							DROPDOWN.applyCSS('.event {height:55px;} .date {margin-top:-18px;}');
						}
					   	break;
						
			case 'facebook.css':  get('append').innerHTML = output;
					      break;
			case 'standard.css':  get('append').innerHTML = output;
					      break;
			case 'default.css':
					   get('append').innerHTML = output;
					   break;
			default: 
					   get('append').innerHTML = output;
					   break;
		}	
}
DROPDOWN.handleXML = function () {
	var temp = DROPDOWN.queryXML_XPATH(DROPDOWN.xmlDoc, 'inticketing/xml_global_markup');
	DROPDOWN.node_artists = DROPDOWN.queryXML_XPATH(DROPDOWN.xmlDoc, 'inticketing/event/title');
	DROPDOWN.node_cities = DROPDOWN.queryXML_XPATH(DROPDOWN.xmlDoc, 'inticketing/event/venue_city');
	DROPDOWN.node_venues = DROPDOWN.queryXML_XPATH(DROPDOWN.xmlDoc, 'inticketing/event/venue_name');
	var outstring = '';
	switch (DROPDOWN.nav) {
		case 'ie6': 
			for (var i = 0; i < DROPDOWN.node_artists.length; i++) {
				var artist =new propertyNode(DROPDOWN.node_artists[i].childNodes[0].nodeValue.toLowerCase(), DROPDOWN.node_artists[i].parentNode);
				DROPDOWN.artists.push(artist);
			}
			for (var i = 0; i < DROPDOWN.node_cities.length; i++) {
				var city = new propertyNode(DROPDOWN.node_cities[i].childNodes[0].nodeValue.toLowerCase(), DROPDOWN.node_cities[i].parentNode);
				DROPDOWN.cities.push(city);
			}
			for (var i = 0; i < DROPDOWN.node_venues.length; i++) {
				var venue = new propertyNode(DROPDOWN.node_venues[i].childNodes[0].nodeValue.toLowerCase(), DROPDOWN.node_venues[i].parentNode);
				DROPDOWN.venues.push(venue);
			}
			DROPDOWN.xml_global_markup = temp[0].childNodes[0].nodeValue;
			break;

		case 'ie7':
			for (var i = 0; i < DROPDOWN.node_artists.length; i++) {
				var artist =new propertyNode(DROPDOWN.node_artists[i].childNodes[0].nodeValue.toLowerCase(), DROPDOWN.node_artists[i].parentNode);
				DROPDOWN.artists.push(artist);
			}
			for (var i = 0; i < DROPDOWN.node_cities.length; i++) {
				var city = new propertyNode(DROPDOWN.node_cities[i].childNodes[0].nodeValue.toLowerCase(), DROPDOWN.node_cities[i].parentNode);
				DROPDOWN.cities.push(city);
			}
			for (var i = 0; i < DROPDOWN.node_venues.length; i++) {
				
				var venue = new propertyNode(DROPDOWN.node_venues[i].childNodes[0].nodeValue.toLowerCase(), DROPDOWN.node_venues[i].parentNode);
				DROPDOWN.venues.push(venue);
			}
			DROPDOWN.xml_global_markup = temp[0].childNodes[0].nodeValue;
			
			
			break;
		default: 
			var DOM_node;
			DOM_node = DROPDOWN.node_artists.iterateNext();
			while (DOM_node) {
				var artist =new propertyNode(DOM_node.childNodes[0].nodeValue.toLowerCase(), DOM_node.parentNode);
				DROPDOWN.artists.push(artist);
				DOM_node=DROPDOWN.node_artists.iterateNext();
			}
			DOM_node = DROPDOWN.node_cities.iterateNext();
			while (DOM_node) {
				var city =new propertyNode(DOM_node.childNodes[0].nodeValue.toLowerCase(), DOM_node.parentNode);
				DROPDOWN.cities.push(city);
				DOM_node=DROPDOWN.node_cities.iterateNext();
			}			
			DOM_node = DROPDOWN.node_venues.iterateNext();
			while (DOM_node) {
				var venue =new propertyNode(DOM_node.childNodes[0].nodeValue.toLowerCase(), DOM_node.parentNode);
				DROPDOWN.venues.push(venue);
				DOM_node=DROPDOWN.node_venues.iterateNext();
			}
			DROPDOWN.xml_global_markup = temp.iterateNext().childNodes[0].nodeValue;
			
	}
	switch (DROPDOWN.nav) {
		case 'ie6':
			document.attachEvent('onkeyup', DROPDOWN.match);
			document.attachEvent('onclick', DROPDOWN.click);
			get('append').attachEvent('onmouseenter', DROPDOWN.removeInlineStyles);
			break;
		case 'ie7':
			document.attachEvent('onkeyup', DROPDOWN.match);
			document.attachEvent('onclick', DROPDOWN.click);
			get('append').attachEvent('onmouseenter', DROPDOWN.removeInlineStyles);
			break;
		default:
			document.addEventListener('keyup', DROPDOWN.match, false);
			document.addEventListener('click', DROPDOWN.click, false);
			get('append').addEventListener('mouseover', DROPDOWN.removeInlineStyles, false);
			get('dropdown').addEventListener('focus', function(){this.hasFocus=true;}, false);
		        get('dropdown').addEventListener('blur', function(){this.hasFocus=false;}, false);
			get('dropdown').hasFocus = false;
			get('dropdown').addEventListener('focus', function(){this.form.elements['dropdown'].focus(); this.form.elements['dropdown'].select();}, false);			
	}
};

DROPDOWN.load = function() {
	DROPDOWN.moduleChooser();
	DROPDOWN.moduleClick(document.forms["module_selector"]);
	propertyNode = function(param1, param2) {
		this.value = param1;
		this.eventNode = param2;
	};
	get('dropdown').value = '';
	switch (DROPDOWN.nav) {
		case 'webkit' :
			function httpcallback() {
				if (http_request.readyState == 4) {
					if (http_request.status == 200) {
						DROPDOWN.xmlDoc = http_request.responseXML;
						DROPDOWN.handleXML();
						} else {
						alert('There was a problem with the request.');
					}
				}
			}
			function makePOSTRequest(url, parameters, callback) {
				http_request = false;
					if (window.XMLHttpRequest) { 
						http_request = new XMLHttpRequest();
					} else if (window.ActiveXObject) {
					try {
						http_request = new ActiveXObject("Msxml2.XMLHTTP");
					} catch (e) {
						try {
							http_request = new ActiveXObject("Microsoft.XMLHTTP");
						} catch (e) {}
						}
					}
				if (!http_request) {
					alert('Cannot create XMLHTTP instance');
					return false;
				}
				http_request.onreadystatechange =  callback;
				http_request.open('POST', url, true);
				http_request.setRequestHeader("Content-type", "text/xml");
				http_request.setRequestHeader("Content-length", parameters.length);
				http_request.setRequestHeader("Connection", "close");
				http_request.send(parameters);
			}
			makePOSTRequest(DROPDOWN.xmlFileName, '', httpcallback);
			break;
		case 'ie6' :
			DROPDOWN.xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			DROPDOWN.xmlDoc.async=false;
			DROPDOWN.xmlDoc.load(DROPDOWN.xmlFileName);
			DROPDOWN.handleXML();
			break;
		case 'ie7' :
			function httpcallback() {
				if (http_request.readyState == 4) {
					if (http_request.status == 200) {
						DROPDOWN.xmlDoc = http_request.responseXML;
						DROPDOWN.handleXML();
					} else {
						alert (http_request.status);
						alert('There was a problem with the request.');
					}
				}
			}
			function makePOSTRequest(url, parameters, callback) {
				http_request = false;
				if (window.XMLHttpRequest) {
					http_request = new XMLHttpRequest();
				}
				if (!http_request) {
					alert('Cannot create XMLHTTP instance');
					return false;
				}
				http_request.onreadystatechange =  callback;
				http_request.open('POST', url, true);
				http_request.setRequestHeader("Content-type", "text/xml");
				http_request.setRequestHeader("Content-length", parameters.length);
				http_request.setRequestHeader("Connection", "close");
				http_request.send(parameters);
			}
			makePOSTRequest(DROPDOWN.xmlFileName, '', httpcallback);
			break;
		default:
			DROPDOWN.xmlDoc = document.implementation.createDocument("","",null);
			DROPDOWN.xmlDoc.async=false;
			DROPDOWN.xmlDoc.load(DROPDOWN.xmlFileName);
			DROPDOWN.handleXML();
	}
	DROPDOWN.loadGlobalCSS(DROPDOWN.stylingFileName);
};


DROPDOWN.nav = function() { 
//	alert(navigator.userAgent);
	var ua = navigator.userAgent;
	return (/webkit/i).test(ua)? 'webkit' :
	       (/opera/i).test(ua)?  'opera'  :
	       (/MSIE 6/i).test(ua)?   'ie6'    :
	       (/MSIE 7/i).test(ua)?   'ie7'    :
	       (/mozilla/i).test(ua)?'moz'    : 'other';
}();

switch(DROPDOWN.nav) {
	case 'webkit': // enter
		var _timer=setInterval(function(){
		if (/loaded|complete/.test(document.readyState)) {
			clearInterval(_timer)
			DROPDOWN.load();// call target function
		}}, 10)
		break;
	case 'ie6' : 
		var IEContentLoaded = function (w, fn) {
			var d = w.document, done = false,
			// only fire once
			init = function () {
				if (!done) {
					done = true;
					fn();
				}
			};
		// polling for no errors
			(function () {
				try {
					// throws errors until after ondocumentready
					d.documentElement.doScroll('left');
				} catch (e) {
					setTimeout(arguments.callee, 50);
					return;
				}
				// no errors, fire
				init();
			})();
			// trying to always fire before onload
			d.onreadystatechange = function() {
				if (d.readyState == 'complete') {
					d.onreadystatechange = null;
					init();
				}
			};
		};

		if (typeof document.fileSize != 'undefined') {
			IEContentLoaded(window,	function () {document.body.style.backgroundColor = 'white';
					DROPDOWN.load();
				}
			);
		}
		




		break;
	case 'ie7' : 
		var IEContentLoaded = function (w, fn) {
			var d = w.document, done = false,
			// only fire once
			init = function () {
				if (!done) {
					done = true;
					fn();
				}
			};
		// polling for no errors
			(function () {
				try {
					// throws errors until after ondocumentready
					d.documentElement.doScroll('left');
				} catch (e) {
					setTimeout(arguments.callee, 50);
					return;
				}
				// no errors, fire
				init();
			})();
			// trying to always fire before onload
			d.onreadystatechange = function() {
				if (d.readyState == 'complete') {
					d.onreadystatechange = null;
					init();
				}
			};
		};

		if (typeof document.fileSize != 'undefined') {
			IEContentLoaded(window,	function () {document.body.style.backgroundColor = 'white';
					DROPDOWN.load();
				}
			);
		}
		break;
	default:
		document.addEventListener("DOMContentLoaded", DROPDOWN.load, false);
}

