var AutoAjax = Ajax.extend({
    responseIsSuccess: function(status){
        try {
            if(this.transport.readyState != 4 || 
                 this.transport.status == "undefined" || 
                (this.transport.status < 200 || this.transport.status >= 300))
                    return false;
            return true;
        } catch(e) {
            return false;
        }
    },
    responseIsFailure: function(){
        return !this.responseIsSuccess();        
    },
    onStateChange: function(){
        if (this.transport.readyState == 4 && this.responseIsSuccess()){
            if (this.options.update) $(this.options.update).setHTML(this.transport.responseText);
            this.options.onComplete.pass([this.transport.responseText, this.transport.responseXML], this).delay(20);
            if (this.options.evalScripts) this.evalScripts.delay(30, this);
            this.transport.onreadystatechange = Class.empty;
            this.callChain();
        } else if(this.transport.readyState == 4 && this.responseIsFailure()) {
            if($type(this.options.onFailure)=='function') this.options.onFailure.pass(this.transport, this).delay(20);
        }
    }
});
Element.extend({
  hide: function() {
    this.style.display = 'none';
    return this;
  },
  show: function() {
    this.style.display = '';
    return this;
  }
});
var AjaxAutoCompleter = new Class({
	initialize: function(element, choices, url, options) {
		this.options = Object.extend({
			minChars: 2,
			delay: 400,
			jsfunction: null,
			indicator: null
        }, options || {});
        if (this.options.indicator != null) {
        	this.indicator = $(this.options.indicator);
        }
        if (this.options.jsfunction != null) {
        	this.jsfunction = $(this.options.jsfunction);
        }
		this.element = $(element);
		this.choices = $(choices);
		this.url = url;
		this.currentValue = '';
		this.element.setAttribute("autocomplete", "off");
		this.element.addEvent('keyup', this.onTextChange.bindAsEventListener(this));
		// need keydown for IE as it will not fire for arrow keys
		this.element.onkeydown = this.onKeyDown.bind(this);
	},
	onKeyPress: function(e) {
		if (window.event) {
			var keyCode = window.event.keyCode;
		} else {
			var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
		}
		if (keyCode ==  13) {
			if (this.choices.style.display == '') {
				var currentSel = $E('div.selected', this.choices);
				if (currentSel) {
					this.choiceSelect(currentSel);
				}
			}
			return false;
		}
		return true;
	},
	onKeyDown: function(e) {
		if (window.event) {
			var keyCode = window.event.keyCode;
		} else {
			var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
		}
		if (keyCode == 40 || keyCode == 38) {
			return false;
		}
		return true;
	},
	onTextChange: function() {
		if (this.fetchDelay) {
			this.fetchDelay = $clear(this.fetchDelay);
		}
		this.fetchDelay = this.fetch.delay(this.options.delay, this);
	},
	fetch: function() {
		if (this.element.value.length < this.options.minChars) {
			//this.clearSelected();
		} else {
			if (this.element.value != this.currentValue) {
				this.currentValue = this.element.value;
				this.clearSelected();
				this.choices.show();
				if (this.indicator) {
					this.indicator.show();
				}
				new AutoAjax(this.url + this.element.value, {method: 'get', onFailure:this.onFailure, onComplete:this.onSuccess.bindAsEventListener(this)}).request();
			}
		}
	},
	onFailure: function(response) {
		if (this.indicator) {
			this.indicator.hide();
		}
		alert('There was a problem! ' + response);
	},
	onSuccess: function(response) {
		if (this.indicator) {
			this.indicator.hide();
		}
                //Marti = Add JSON Hack
				   //    if(res['filename'] !='') var details ="<div style='border-top:1px solid #3AB2ED;padding-top:7px;padding-bottom:7px;'><div style='float:left;width:200px;text-align:left;'><a href=javascript:getPriceList('" + res['content.id'] + "')>" + res['content.name_one'] + "  " + res['content.name_two'] + "</a><input type='hidden' id='text" + res['content.id'] + "' value='" + res['content.name_one'] + " - " + res['content.name_two'] + "' />{else'] + "<a href=javascript:getPriceList('" + res['content.id'] + "')>" + res['content.name_one'] + "</a><input type='hidden' id='text" + res['content.id'] + "' value='" + res['content.name_one'] + "' />{/if'] + "
                var items = false
                response = Json.evaluate(response);
		var details = "";
                response.each(function(res){
                   items = true
                   var div = new Element('div');
                      items = true

 
					
					if(res['album_front'])
						var image_location = "<img class='no_brdr' src='/Gallery/" +res['event_ID']+ "/" +res['album_ID']+ "/Thumbnails/" +res['album_front']+ "' alt='" +res['event_name']+ "' />";
					else if(res['event_image'] == 1)
						var image_location = "<img class='no_brdr' src='/event_images/" +res['event_ID']+ "_sm.jpg'  alt='" +res['event_name']+ "' />";
					else if(res['venue_image'] == 1)
						var image_location = "<img class='no_brdr' src='/venue_images/" + res['id'] + "_sm.jpg'  alt='" +res['venue_name']+ "' />";
					else if(res['brand_image'] == 1)
						var image_location = "<img class='no_brdr' src='/brand_images/" + res['id'] + "_sm.jpg'  alt='" +res['brand_name']+ "' />";
					else
						var image_location = "<img class='display_image' src='/profile_images/Anonymous.jpg'  />";
			
					if(res['person_photo_hierachy']){
						if(res['person_photo_hierachy'] >3) var snapper = "(goldeneye)";
						else if(res['person_photo_hierachy']==3)  var snapper = "(silvereye)";
						else var snapper = "(standard)";
					}
			         


			var details;
		   if(this.options.jsfunction == 'eventsearch')  details ="<div> <div class='frnd_img_bx'><a href='/events/profile?id=" +res['event_ID']+ "'>" + image_location + "</a> </div><div class='venevbra_details'><a href='/events/profile?id=" +res['event_ID']+ "'>" +res['event_name']+ "</a> @  <a href='/venues/profile?id=" +res['venue_ID']+ "'>" +res['venue_name']+ "</a><br /><span class='sm_grey_txt'> Location : </span> " +res['city_name']+ "<br /><span class='sm_grey_txt'> Date : </span> " +res['event_date_display']+ "<br /></div><br class='clr_dv' /></div>	"; 
		   else if (this.options.jsfunction == 'venuesearch') details =" <div> <div class='album_img1'><a href='/venues/profile?id=" +res['id']+ "'>" + image_location + "</a> </div><div class='venevbra_details'><a href='/venues/profile?id=" +res['id']+ "'>" +res['venue_name'] + "</a><br /><span class='sm_grey_txt'> Address : </span> " +res['venue_address1']+ "<br /><span class='sm_grey_txt'> Location : </span> " +res['city_name']+ "<br /><span class='sm_grey_txt'></span> " +res['venue_description'] + "<br /></div></div><br class='clr_dv' />"; 
		   else if (this.options.jsfunction == 'brandsearch') details =" <div> <div class='frnd_img_bx'>" + image_location + "</div><div class='venevbra_details'><a href='/brands/profile?id=" +res['id']+ "'>" +res['brand_name'] + "</a><br /><span class='sm_grey_txt'> Website : </span> " +res['brand_web']+ "<br /><span class='sm_grey_txt'> DJ : </span> " +res['brand_DJ']+  "<br />" + res['brand_tag'] + "</div></div><br class='clr_dv' />"; 
		   else  details ="<div><div class='album_img1'><a href='/albums/view?event_ID=" +res['event_ID']+ "&album=" +res['album_ID']+ "'>" + image_location + "</a></div><div class='album_cnt'><h3 class='album_title'>" +res['album_name']+ "</h3><div class='count'>" +res['event_date_display']+ ", <a href='/events/profile?id=" +res['event_ID']+ "'>" +res['event_name']+ " </a> @ <a href='/venues/profile?id=" +res['venue_ID']+ "'>" +res['venue_name']+ "</a> </div><span class='count'>" +res['numOfphotos']+ " Photos</span><br /><span class='txt_grey'>Created by <a href='/users/profile?id=" +res['person_ID']+ "'>" +res['person_username']+ " </a> <span class='photSmLevel'>" +snapper + "</span></div><br class='clr_dv' /></div>";
			   
				//<div class='clr_dv'><span class='txt_grey'>Total Amount of Views:</span> " +res['views']+ "</div>
		   div.setHTML(details + '<br /><div class = "breakGal" ><hr /></div><br />');
	
                   div.injectInside($('image_details'));
                }.bind(this));

				  $$('.page_controls').setHTML('');
                if(!items){
					 if (this.options.jsfunction == "contentsel") var div = new Element('div', {'class':'image_row_select'});
					else
						var div = new Element('div', {'class':'image_row'});
                   div.setText('No Images Found');
                   div.injectInside($('image_details'));
                }
	},
	clearSelected: function() {
		$(this.choices).empty();
	}
});