	var update_trigger;
	
	function isArray(obj) {
      if (obj.constructor.toString().indexOf("Array") == -1)
         return false;
      else
         return true;
   }

	/*refactor : Must add way to create unique id's*/
	function inputBuilder(type,attributes,value,func){
       var temp = new Element(type,attributes);
       if (type == 'select') {
		temp.observe('change', func);
       } else {
		if (attributes['type'] == 'checkbox' || attributes['type'] == 'radio') {
			temp.observe('click', func);
		} else {
			temp.observe('keyup',func);
		}
       }
       if(isArray(value)){
           for(i=0;i<value.length;i++){
			if(value[i][0] == 'default'){
				temp.appendChild(new Element('option',{'value':""}));	
			} else {
				temp.appendChild(new Element('option',{'value':value[i][0], 'id':(attributes['id']+value[i][0])}).update(value[i][1]));	
			}
           }
       } /*else if(type=="checkbox" || type=="radio" ){
           temp.writeAttribute('value',value);
       } */else {
           temp.value = value;
       }
       return temp;
	}

	function communityFilter(event){
		if(event.type == 'submit'){
			Event.stop(event);
		}
		$('filter-results').update();
		$('filter-results').setStyle({'background': "url('../images/loading.gif') center center no-repeat"});
		var f = $('communityfilter');
		var url = f.readAttribute('action');
		var paras = Form.serialize(f);
		var myAjax = new Ajax.Updater(
			{success: 'listserv'}, 
			url, 
			{
				method: 'get', 
				parameters: paras, 
				onFailure: reportError,
				onComplete: updatelinks
			});
	}
	
	function sortMessages(event){
		var element = event.element();
		order_target = $('order_target');
		toggle = /#.*/;
		element = toggle.exec(event.element().readAttribute('href'))[0].replace(/#/, '');
		if(element.replace('#','') == order_target.value){
			order_dir = $('order_dir');
			if(order_dir.value == "ASC"){
				order_dir.value = "DESC";
			} else{
				order_dir.value = "ASC";
			}
		} else {
			order_target.value = element.replace('#','')
		}
		newResults();
	}

	function newResults(){
		if(update_trigger){
			clearTimeout(update_trigger);
		}
		$('filter-results').update();
		$('filter-results').setStyle({'background': "url('../images/loading.gif') center center no-repeat"});
		var f = $('mainfilter').select('form')[0];
		var url = f.readAttribute('action');
		var paras = Form.serialize(f);
		var myAjax = new Ajax.Updater(
			{success: 'listserv'}, 
			url, 
			{
				method: 'get', 
				parameters: paras, 
				onFailure: reportError,
				onComplete: updatelinks
			});
	}

	function flagMessage(id){
		var url = '/messages/flag_post';
		var paras = 'id=' + id;
		var myAjax = new Ajax.Updater(
			{success: 'flag_count' + id}, 
			url, 
			{
				method: 'post', 
				parameters: paras, 
				onFailure: reportError,
				onComplete: function(){					
					alert('Thanks for policing the system!')
					}
			});
			
	}
	
	function profileAjaxReply(event){
		Event.stop(event);
		var f = event.element();
		var url = f.readAttribute('action');
		var paras = Form.serialize(f) ;
		var myAjax = new Ajax.Updater(
			{success: 'lightboxcontent'}, 
			url, 
			{
				method: 'post', 
				parameters: paras, 
				onFailure: reportError,
				onComplete: function (){
					alert("Your profile has been updated.")
						$$('#edit_profile form').each(function(item){
						item.observe("submit",profileAjaxReply);
				});
				}
			});
	}

	function photoAjaxUpdate(){
		var url = '/profiles/refresh';
		var paras = "";
		var myAjax = new Ajax.Updater(
			{success: 'lightboxcontent'}, 
			url, 
			{
				method: 'post', 
				parameters: paras, 
				onFailure: reportError,
				onComplete: function (){
						$$('#edit_profile form').each(function(item){
						item.observe("submit",profileAjaxReply);
				});
				}
			});
	}
	
	function ajaxReply(event){
		Event.stop(event);
		var f = event.element();
		var url = f.readAttribute('action');
		var paras = Form.serialize(f) + "&target_form=" + f.readAttribute('id');
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'post', 
				parameters: paras, 
				onFailure: reportError,
				onComplete: formReset
			});
		f.reset()
		f.select('textarea')[0].setStyle({'background': "url('../images/loading.gif') center center no-repeat"});
	}

	function formReset(oReqs){
		try {
			data = oReqs.responseText.evalJSON()
			f = $(data.target_form)
			f.select('textarea')[0].setStyle({'background': "url('') center center no-repeat"})
			Form.reset(f)
			alert(data.message)
		} catch (e){
			alert(e).description
		}
	}
	
	function saveThisSearch(e){
		var url = '/messages/save_search';
		var paras = Form.serialize($('mainfilter').getElementsByTagName('form')[0]) + "&" + Form.serialize($('mainfilter').getElementsByTagName('form')[1]);
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: paras, 
				onFailure: reportError,
				onComplete: function(req){ 
				var jsondata = eval('(' + req.responseText + ')');
				alert(jsondata.state + ": \n" + jsondata.message );
				}
			});
		Event.stop(e)
	}

	function research(){
		paras = "id=" + $('savedsearches').value;
		var url = '/messages/load_search';
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: paras, 
				onFailure: reportError,
				onComplete: formUpdate
			});
	}
	
	function formUpdate(request){
		var jsondata = eval('(' + request.responseText + ')').criteria;
		resetForm();
		if (jsondata[0].name == 'have'){
			haveform();
		} else if (jsondata[0].name == 'need'){
			needform();
		} else {
			eventform();
		}
		for(i=0;i< jsondata.length; i++){
			temp = $(jsondata[i].name);
			if(temp.nodeName == "INPUT"){
				if(temp.getAttribute("type") == "text"){
					temp.value = jsondata[i].value;
				} else {
					temp.checked = true;
				}
			} else if(temp.nodeName == "SELECT"){
				$(jsondata[i].name + "" + jsondata[i].value).selected = true;
			}
		}
		newResults();
	}

	function filterWatched(){
		resetForm();
		$('filterform').remove();
		var filter = new Element('div',{'id':'filterform'});
		var watchedagents = $('watchedagents').cloneNode(true);
		filter.appendChild(watchedagents);
		var filterform = Element.extend($('mainfilter').getElementsByTagName('form')[0]);
		filterform.appendChild(filter);
//		$('folder').value = $('filterlabels').value;
//		newResults();
	}

	function reportError(request) {
		$('filter') = "Error";
	}

	function postCount(event){
		page = /[0-9]+/;
		page = page.exec(event.element().readAttribute('href'))[0];
		$('list_count').writeAttribute('value', page);
		newResults();
		return false;
	}

	function ajaxFlag(event){
		page = /[0-9]+/;
		page = page.exec(event.element().readAttribute('href'))[0];
		flagMessage(page);
		Event.stop(event);
		return false;
	}

	function pagination(event){
		page = /[0-9]+/;
		page = page.exec(event.element().readAttribute('href'))[0];
		$('page').writeAttribute('value', page);
		newResults();
		return false;
	}

	function filterLabel(event){
		label = /[0-9]+/;
		label = label.exec(event.element().readAttribute('href'))[0];
		$('folder').writeAttribute('value', label);
		newResults();
		return false;
	}

	function filterWatched(event){
		agent = /[0-9]+/;
		agent = agent.exec(event.element().readAttribute('href'))[0];
		$('agent').writeAttribute('value', agent);
		newResults();
		return false;
	}

	function lastInitial(event){
		Event.stop(event);
		initial = /\/[A-Z]$/;
		initial = (initial.exec(event.element().readAttribute('href'))[0]).replace("/","");
		$('last_initial').writeAttribute('value', initial);
		communityFilter(event);
	}

	function filterLocation(object, target){
		$('filter_location').value = object.id;
		newResults();
	}

	function clearFilter(event){
		var filterform = Element.extend($('mainfilter').getElementsByTagName('form')[0]);
		$('pick_post_state').selectedIndex= 0
		filterform.select('input').each(function(item){
			if(item.readAttribute('type') == 'hidden'){
				item.value = item.readAttribute('rel');
			} else if( item.readAttribute('type') == "checkbox"){
				item.checked = false;
			} else {
				item.value = '';
			}
			item.setStyle({backgroundPosition : "0px 0px"});
		})
		filterform.select('select').each(function(item){
			item.selectedIndex = 0;
		})
		newResults();
	}

	function prepareSearch(){
		temp = $$('.filter');
		temp.each(function(item){
			action = 'click';
			if(item.nodeName == 'SELECT'){
				action = 'change';
			}else if(item.nodeName == 'INPUT'){
				if(item.readAttribute("type") == "text"){
					action = 'keyup';
				}
				item.observe('focus',function(){
					this.select();	
				});
			}else if(item.nodeName == 'TEXTAREA'){
				action = 'keyup';
			}
			if(action != "keyup"){
				item.observe(action,newResults)
			} else {
				if(item.value.length == 0){
					item.setStyle({backgroundPosition : "0px 0px"});
				} else {
					item.setStyle({backgroundPosition : "0px -50px"})
				}
				item.observe('focus', function(){
					this.setStyle({backgroundPosition : "0px -50px"})
				})
				item.observe('blur', function(){
					if(this.value.length == 0){
						this.setStyle({backgroundPosition : "0px 0px"});
					}
				})
				item.observe('keyup',function(){
					if(this.value.length == 0){
						this.setStyle({backgroundPosition : "0px 0px"});
					} else {
						this.setStyle({backgroundPosition : "0px -50px"})
					}
					if(update_trigger){
						clearTimeout(update_trigger);
					}
					update_trigger = setTimeout(newResults,2000);
//					try{
//						if(this.value.length > 2 || this.value.length == 0){
//							newResults();
//						}
//					} catch(e){
//						alert(e);
//					}
				});
			}
		});
		$$('.filtertrigger').each(function(link){
			Event.observe(link,'click',toggleFilterItem);
		})
		if($('pick_post_state')){
			$('pick_post_state').observe('change', function(){
				selected_state= $('pick_post_state').getValue()
			$('post_state').writeAttribute('value', selected_state)
			newResults();
			})
		}
		if($('inboxfilter')){
			searchinputs = $('inboxfilter').select('a');
			searchinputs.each(function(item){
				item.observe('click', function(event){
					var element = event.element();
					toggle = /#.*/;
					toggle = toggle.exec(event.element().readAttribute('href'))[0].replace(/#/, '');
					if($('section').value != toggle )
					{
						$('inboxfilter').select('li').each(function(section){
							if(section.hasClassName("active")){
								section.toggleClassName('active');
							} else {
								if(/#.*/.exec(section.firstChild.readAttribute('href'))[0].replace(/#/,'') == toggle){
									section.toggleClassName('active');
								}	
							}
						})
					}
					$('section').writeAttribute('value', toggle);
					newResults();
				});
			});
		}
	}

	function toggleFilterItem(event){
		Event.stop(event);
		toggle = /#.*/;
		toggle = toggle.exec(event.element().readAttribute('href'))[0].replace(/#/, '');
		Effect.toggle("filter_"+toggle, 'slide');
		return false;
	}

	function updatelinks(){
		reset_background();
		prepLinks();
		$$('#listserv .lbOn').each(function(link){
			link.observe("click", popThis);
		})
	}

	function prepLinks(){
		$$('.pagination').each(function(page){
			page.observe("click",pagination);
		});
		$$('.post_count').each(function(count){
			count.observe("click",postCount);
		});
		$$('.ajaxFlag').each(function(flag){
			flag.observe("click",ajaxFlag);
		});
		$$('.sort').each(function(trig){
			trig.observe("click",sortMessages);
		});
		$$(".listserv_response_box form").each(function(item){
			item.observe("submit",ajaxReply);
		});
		$$('.letter').each(function(item){
			item.observe("click",lastInitial);
		});
		$$('.glidebutton').each(function(link){
			link.observe("click", overArchingClick)
		});
		// $$('.glidetrigger').each(function(trig){
		// 			trig.observe("click",glide);
		// 		});
	}

	function eventKiller(event){
		Event.stop(event);
	}

	function communityTrigger(event){
		if (!event) event = window.event;
		input = event.element()
		//if(input.value.length > 2  || input.value.length == 0){
	  		var key	= event.keyCode || event.which;
			if(update_trigger){
				clearTimeout(update_trigger);
			}
			if (key != Event.KEY_TAB) {
				update_trigger = setTimeout(communityFilter,2000,event);
			}
		//}
	}

	function communityBlur(event){
		input = event.element()
		if(input.value.length == 0){
			input.value = input.readAttribute('rel')
		}
	}

	function clear(event){
		event.element().value = "";
	}

	function prepPage(){
		prepLinks();
		if($('clearfilter')){
			$('clearfilter').observe("click",clearFilter);
		}
		if($('filterform')){
			$('filterform').observe("submit",eventKiller);
		}
		if($('communityfilter')){
			$('communityfilter').select('input').each(function(item){
				item.observe("focus",clear);
				item.observe('keyup',communityTrigger)
				item.observe("blur",communityBlur);
			})
			$('communityfilter').select('select').each(function(item){
				item.observe('change',communityFilter); //communityTrigger)
			})
			$('communityfilter').observe('submit', communityFilter);
			
		}
		$$('.filterlabel').each(function(label){
			label.observe("click",filterLabel);
		})
		$$('.filterwatched').each(function(agent){
			agent.observe("click",filterWatched);
		})
	}

	function reset_background(){
		$('filter-results').setStyle({'background': "url('') center center no-repeat"});
	}

	function toggleListings(tar){
		listings = $$('.' + tar);
		listings.each(function(item){
			item.toggleClassName('hidden');
			//t = Effect.toggle(item, 'appear');
		})
		return false;
	}

	Event.observe(window, 'load',
	        function() {
				//formPrep();
				prepareSearch();
				prepPage();
				
			}
	);