
var ComboBox = Class.create();

ComboBox.Autocompleter = Autocompleter.Local;

ComboBox.Autocompleter.prototype.onBlur = function(event) {
	if (Element.getStyle(this.update, 'display') == 'none') { return; }
	setTimeout(this.hide.bind(this), 250);
	this.hasFocus = false;
	this.active = false;
}


ComboBox.prototype = {
	initialize: function(textElement, resultsElement, array, options) {
		this.textElement = $(textElement);
        
        // the first text box inside the container
        this.textBox = $A( this.textElement.getElementsByTagName('INPUT') ).findAll( function(input) {
            return (input.getAttribute('type') == 'text');
        })[0];
	
        this.results = $(resultsElement);
        this.textBox.paddingRight = '20px';
        this.textElement.style.width = (this.textBox.offsetWidth) + 'px';
        this.textElement.style.position = 'relative';

		// we dynamically insert a SPAN that will serve as the drop-down 'arrow'
        this.arrow = Element.extend(Builder.node('span'));
        Object.extend(this.arrow.style, {
            cursor: 'pointer',
            backgroundColor: '',
            color: '#000',
            width: '20px',
            position: 'absolute',
            top: '0',
			right: '0px',
			textAlign: 'center',
			fontSize: 'xx-small',
			height: (this.textElement.offsetHeight - 2) + 'px'
        });

		if (document.all) {
			this.arrow.setStyle({ padding: '2px 0 0 3px', width: '18px', height: '17px'});

		}
        this.arrow.innerHTML = ''; //'&darr;';
        this.textElement.appendChild(this.arrow);
	    this.array = array;

		this.results.style.display 	= 'none';
		
		this.events = {
			showChoices: 	    this.showChoices.bindAsEventListener(this),
			hideChoices: 	    this.hideChoices.bindAsEventListener(this),
			click:				this.click.bindAsEventListener(this),
			keyDown:			this.keyDown.bindAsEventListener(this)
		}
		
		this.autocompleter = new ComboBox.Autocompleter(this.textBox, this.results, this.array, options);
				
		Event.observe(this.arrow, 'click', this.events.click);
		Event.observe(this.textBox, 'keydown', this.events.keyDown);
	},
	
	getAllChoices: function(e) {
		var choices = this.array.collect( function(choice) { return '<li>' + choice + '</li>'; } );
		var html = '<ul>' + choices.join('') + '</ul>';
		this.autocompleter.updateChoices(html);
	},
	
	keyDown: function(e) {
		if (e.keyCode == Event.KEY_DOWN && this.choicesVisible() ) {
			this.showChoices();
		}
	},
	
	// returns boolean indicating whether the choices are displayed
	choicesVisible: function() { return (Element.getStyle(this.autocompleter.update, 'display') == 'none'); },
	
	click: function() {
		if (this.choicesVisible() ) {
			this.showChoices();
		} else {
			this.hideChoices();
		}
	},
		
	showChoices: function() {
		this.textBox.focus();
    this.autocompleter.changed = false;
    this.autocompleter.hasFocus = true;
    this.getAllChoices();
	},
	
	hideChoices: function() {
		this.autocompleter.onBlur();
	}
}

var isDown=false;
var isOpen=false;
Event.observe(window, 'load', function() {	
	$('webknecht-messenger-container').show();
	$('webknecht-leiste').absolutize();
	var offset = $('webknecht-messenger-choosen').cumulativeOffset();
	$('webknecht-leiste').style.top=offset[1]+$('webknecht-messenger-choosen').getHeight()+20+'px';
	$('webknecht-leiste').hide();
	$$('.webknecht-messenger-creation')[0].hide();
	$$('.webknecht-messenger-rubrik')[0].hide();
	$$('.webknecht-rubrik-text')[0].hide();
	$('messenger-status').hide();
	$('webknecht-messenger-loader').hide();
	$('webknecht-messenger-loader').down().hide();

	var Messenger = Class.create();
	Messenger.prototype = {	
		initialize: function() {
		},	
		check: function() {
			var m = $('messenger-message');
			var t = cleanMessengerText(m.getValue());
			var s = t.length;
			if(s > 150) {
				var x  = t.substring(0,150);				
				$('messenger-message').setValue(x);
			} else {
				if(s > 0 && m.getValue().substring(m.getValue().length-1) == ' ') {	
					t = t + ' ';
				}
				$('messenger-message').setValue(t);
			}
			$('messenger-counter').update(150-m.getValue().trim().length);
		
		}
	};
	var x = new Messenger();

    Event.observe('webknecht-messenger-button', 'click', function() {	
	$$('.webknecht-messenger-creation')[0].toggle();
	$$('.webknecht-messenger-rubrik')[0].toggle();
	$$('.webknecht-rubrik-text')[0].toggle();
	$('messenger-message').focus();
	$('messenger-rubrik').setValue(messengerDefaultRubrik);
	$('messenger-status').hide();
	if($('messenger-status-clone') != null) {
		$('messenger-status-clone').remove();
	}
	if(!isOpen) {
		isOpen=true;	
		$('webknecht-messenger-button').update('X');
		$('webknecht-messenger-container').addClassName('webknecht-messenger-container-ausgeklappt');
		showMessengerText('Teilen Sie Botschaften und Einladungen mit anderen!',true,true);
	}
	else {
		isOpen=false;		
		resetMessengerButton();
		$('messenger-message').setValue('');
		$('webknecht-messenger-container').removeClassName('webknecht-messenger-container-ausgeklappt');
	}
    });

    Event.observe('messenger-message', 'keyup', function() {	
	x.check();
    });		    


    Event.observe('messenger-message', 'blur', function() {	
	x.check();
    });		    

    Event.observe('webknecht-image-selection', 'click', function() {	
	x.check();
    });

    Event.observe('webknecht-icon-button', 'click', function() {
//	toggleWebknechtleiste();
    });

    Event.observe('webknecht-messenger-choosen', 'click', function() {
	toggleWebknechtleiste();
    });



    function hideAjax() {
	var loader = $('webknecht-messenger-loader');			
	if(loader != null) {
		loader.hide();
		$('webknecht-messenger-img').hide();
	}
    }


    Event.observe('webknecht-messenger-release', 'click', function() {
	//submit
	var text = $('messenger-message').getValue();
	text = cleanMessengerText(text);

	//ajax_redirect/index.php?
	var parameters =  "?myRoot="+my_root;

	var selectedVal = $('messenger-rubrik').getValue();
	var rubrikId="";
	for(var i=0; i<aRubrikNamen.length;i++) {
		if(selectedVal==aRubrikNamen[i]) {
			rubrikId=aRubrikIds[i];
			break;
		}
	}

	var params = {'text':text, 'rubrik_id':rubrikId, 'iconPath':$('webknecht-messenger-hidden-image').getValue()};
	new Ajax.Request(webknecht_host_root+"/messenger/insert.php"+parameters,// + params,
	  {
		method:'post',		
		parameters: params,
		onLoading: function() {
			var box = $$('.webknecht-messenger')[0];
			var loader = $('webknecht-messenger-loader');
			var offset = box.cumulativeOffset();			
			loader.show();
			$('webknecht-messenger-loader').down().show();
			loader.absolutize();			
			loader.style.left=offset[0]+box.getWidth()/2+'px';
			loader.style.top=offset[1]+box.getHeight()/2+'px';
			
		},
		onComplete: function() {
			hideAjax();
		},

		onSuccess: function(transport){
		  response = transport.responseText || "no response text";
		  //show explanation before update
		  $('messenger-tmp-response').update(response);
		  var xml = $('messenger-tmp-response');
		  var statusbar = $('messenger-status');
		  var errors = xml.select('.error');
		  var success = xml.select('.success');		  
		  if(errors.length > 0) {			
			showMessengerText(errors[0].innerHTML,true);
			resetMessengerText();
			statusbar.down().addClassName('errorbar');
		  } else if (success.length > 0) {
			statusbar.down().removeClassName('errorbar');
			showMessengerText(success[0].innerHTML,true);
			resetMessengerText();
			//Effect.SlideUp($$('.webknecht-messenger-creation')[0]);
			resetMessengerButton();
			isOpen=false;
			$$('.webknecht-messenger-creation')[0].hide();
			var statusClone = $('messenger-status').innerHTML;
			statusClone = statusClone.replace('<span','<span id="messenger-status-clone"');
			$('webknecht-messenger-container').insert({top:statusClone});
			new Effect.Highlight($('messenger-status-clone'),{restorecolor:'#ffff99'});
			$$('.webknecht-messenger-rubrik')[0].hide();			
			$$('.webknecht-rubrik-text')[0].hide();
			$('messenger-message').setValue('');			
			$('webknecht-messenger-container').removeClassName('webknecht-messenger-container-ausgeklappt');
			hideAjax();
			if($('messenger-status-clone') != null) {
				var t=setTimeout("$('messenger-status-clone').remove();",3500);
			}			
			var anzeige = $('webknecht-messenger-list-container');
			if(anzeige != null) {
				anzeige.removeClassName('messenger-hide');
				loadMoreMessages(rubrikId,my_root,5,true);				
			}
		  }else {
			statusbar.down().removeClassName('errorbar');
			showMessengerText(xml.innerHTML,true);
			resetMessengerText();
			new Effect.Highlight(statusbar.down());
			//hideMessengerText();
		  }
		  $('messenger-status').removeClassName('mess-pattern');		
		  hideAjax();
		},
		onFailure: function(){ 
			var statusbar = $('messenger-status');
			showMessengerText('Verbindung zum Server unterbrochen.',true);
			statusbar.down().addClassName('errorbar');
			//new Effect.Highlight(statusbar.down(0),{restorecolor:'#ffff99'});
//			statusbar.down().setStyle({'border':'2px solid red'});
			resetMessengerText();
			hideAjax();

		 },
		 onException: function() {
		 	var statusbar = $('messenger-status');
			showMessengerText('Ausnahme. Bitte Admin kontaktieren.',true);
			statusbar.down().addClassName('errorbar');
			resetMessengerText();
			hideAjax();
		 }
	  });		


    });



		    
});

	function cleanMessengerText(text) {
		text = text.replace(/"|'|`|´|>|<|\\/g,'');
		text = text.trim();
		return text;
	}

	function toggleWebknechtleiste() {
		if(isDown) {
			$('webknecht-icon-button').setStyle({'background':'url(../webknecht/messenger/images/down.jpg) no-repeat center'});
			Effect.SlideUp('webknecht-leiste', { duration: 0.3 });
			isDown=false;
		} else {
			$('webknecht-icon-button').setStyle({'background':'url(../webknecht/messenger/images/up.jpg) no-repeat center'});
			Effect.SlideDown('webknecht-leiste', { duration: 0.3 });
			isDown=true;
			disableMessengerText=false;
		}
	}

	var tmpWebknechtMessengerText = '';
	var disableMessengerText=false;
	function showMessengerText(text,show,noPadding) {
		if(disableMessengerText==false || show) {
			$('messenger-status').down(0).removeClassName('errorbar');
			tmpWebknechtMessengerText = $('messenger-message').getValue();
			$('messenger-status').down(0).update(text);
			$('messenger-status').show();
//			$('messenger-status').style.padding='0px 0px 0px 35px';
			if(!noPadding) {
				$('messenger-status').addClassName('mess-padding');
			}
			//$('messenger-message').setValue(text.value);
		}	
	}

	function resetMessengerButton() {
		$('webknecht-messenger-button').update('Botschaft teilen');
	}

	function hideMessengerText() {
		$('messenger-status').hide();
	}
	
	function resetMessengerText() {
		//$('messenger-message').setValue(tmpWebknechtMessengerText);
		$('messenger-status').removeClassName('mess-padding');
	}

	function messengerSelect(image,text) {
		tmpWebknechtMessengerText=text.value;		
		if($('messenger-message').getValue() == '') {
			$('messenger-message').setValue(text.value);
		}
		disableMessengerText=true;
		$('webknecht-messenger-choosen').setStyle({'background':'#f5f5f5 url('+image.src+') no-repeat center'});
		$('webknecht-messenger-hidden-image').setValue(image.src);
		//Effect.Pulsate('webknecht-messenger-choosen',{ pulses: 1, duration: 0.7 });
		toggleWebknechtleiste();
		$('messenger-message').focus();
//		$('messenger-status').style.padding='0px 0px 0px 0px'
		$('messenger-status').removeClassName('mess-padding');

	}


