Ext.namespace('Ext.ux.menu');

var currentMenu = null;

Ext.ux.menu.LinkItem = function(config) {

	Ext.apply(this, config);
	Ext.ux.menu.LinkItem.superclass.constructor.call(this);
	this.setHandler(this.onClick, this);
}

Ext.extend(Ext.ux.menu.LinkItem, Ext.menu.Item,  {

	link : null
	,linkid : null
	,hideOnClick : false
	,cls: 'x-menu-item-feedback'

	,onClick : function(event) {
		//TODO: solve this in a different way
		var box = this.getEl().getBox();
		var evX = event.getXY()[0];
		if (evX<box.x+box.width-36) {
			window.open(this.link);
			//this.parentMenu.hide();
		} else {
			// HIER KOMMT DIE FEEDBACK FUNCTION
			// feedback(this.linkid);
			//this.parentMenu.suspendEvents();
			link_feedback(this.linkid);
		}
	}

	
});


Ext.ux.menu.CloseItem = function(config) {
	Ext.apply(this, config);
	Ext.ux.menu.CloseItem.superclass.constructor.call(this);
	this.setHandler(this.onClick, this);
}

Ext.extend(Ext.ux.menu.CloseItem, Ext.menu.Item,  {

	hideOnClick : false
	,cls: 'x-menu-item-close'

	,onClick : function(event) {
		//TODO: solve this in a different way
		var box = this.getEl().getBox();
		var evX = event.getXY()[0];
		if (evX>box.x+box.width-36) {
			this.parentMenu.hide();
		}
	}

});


Ext.ux.menu.ContextMenu = function(htmlElement, title) {
	/* prevent "undefined" title */
	if (typeof title == "undefined") {
		title = "";
	}

	this.init(htmlElement, title);
}
Ext.ux.menu.ContextMenu.prototype = {

	menu : null
	,options : null
	,parent : null
	,title: ''

	,init : function(htmlElement, title)
	{
		this.options = new Array();

		var parent = Ext.get(htmlElement);
		parent.addListener('click', this.onClick, this);
		this.parent = parent;
		this.title = title;
	}

	,addOption : function(linkid, label, icon, link) {
		this.options.push({
			linkid: linkid
			,label: (label+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;')
			,icon: icon
			,link: link
		});
	}

	,onClick : function(event, target, options) {
		if (currentMenu!=null) {
			currentMenu.hide();
		}
		if (!this.menu) {
			this.menu = new Ext.menu.Menu();
			var opt;
			this.menu.add(new Ext.ux.menu.CloseItem({text: (this.title+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;')}));
			for (var i=0; i<this.options.length; i++) {
				this.menu.add(new Ext.ux.menu.LinkItem({
					text: this.options[i].label
					,linkid : this.options[i].linkid
					,link: this.options[i].link
					,icon: (this.options[i].icon ? this.options[i].icon : null)
				}));
			}
			// prevent closing the menu
			Ext.menu.MenuMgr.unregister(this.menu);
		}

		// CSS Fix (html ul element margins)
		//this.menu.getEl().last().applyStyles({margin:"0 0 0 0"});

		this.menu.showAt(event.getXY());
		currentMenu = this.menu;
	}

	,autoClick : function(activeLink) {
		if (currentMenu!=null) {
			currentMenu.hide();
		}
		if (!this.menu) {
			this.menu = new Ext.menu.Menu();
			var opt;
			this.menu.add(new Ext.ux.menu.CloseItem({text:this.title}));
			for (var i=0; i<this.options.length; i++) {
				var text = this.options[i].label;
				if (this.options[i].linkid==activeLink) {
					text = '<strong class="black">'+this.options[i].label+'</strong>';
				}
				this.menu.add(new Ext.ux.menu.LinkItem({
					text: text
					,linkid : this.options[i].linkid
					,link: this.options[i].link
					,icon: (this.options[i].icon ? this.options[i].icon : null)
				}));
			}

			// prevent closing the menu
			Ext.menu.MenuMgr.unregister(this.menu);
		}

		// CSS Fix (html ul element margins)
		//this.menu.getEl().last().applyStyles({margin:"0 0 0 0"});

		//this.menu.showAt([parent.getLeft(),parent.getTop()]);
		this.menu.showAt([this.parent.getRight(),this.parent.getTop()]);
		currentMenu = this.menu;
	}

}

function link_feedback(id) {

			$('feedbackbox').fade('in');

			$('feedbackbox').setStyles({
			   	'background-color': '#727987',
				height: 'auto',
				left: '50%',
				'margin-left': '-300px',
				padding: '10px',
				position: 'absolute',
				top: '20%',
				width: '600px',
				'z-index': 16000
			});

			$('feedbackcontent').setStyles({
				'background-color': '#fff',
				border: '1px solid #535769'
			});

			new Request.HTML({
				url: 'form_feedback_link.php',
				method: 'get',
				data: 'linkid='+id,
				update: $('feedbackcontent'),
				onComplete: function() {

					function feedback_link_close() {

						$('feedbackcontent').set('html', '');

						$('feedbackbox').setStyles({
						   	'background-color': '',
							height: '',
							'margin-left': '',
							padding: '',
							position: 'absolute',
							left: '-10000px',
							top: '-10000px',
							width: '',
							'z-index': '0',
							visibility: 'hidden'
						});
/*						$('feedbackbox').setStyles({
						   	'background-color': '',
							height: '',
							left: '',
							'margin-left': '',
							padding: '',
							position: '',
							top: '',
							width: '',
							'z-index': 0
						});*/

						$('feedbackcontent').setStyles({
							'background-color': '',
							border: ''
						});

					}

					if ($('feedback_link_close')) {

						$('feedback_link_close').addEvent('click', function(e) {

							e = new Event(e).stop();

							feedback_link_close();

						});

					}

					if ($('feedback_link_cancel')) {

						$('feedback_link_cancel').addEvent('click', function(e) {

							e = new Event(e).stop();

							feedback_link_close();

						});

					}

					if ($('form_feedback_link')) {

					/*	$('stars').fade('hide');

						$('link_broken').addEvent('click', function(e) {

							//e.stop();

							if (this.getProperty('checked') == true) {

								$('stars').fade('out');

							}

							else if (this.getProperty('checked')==false) {
							}

						});

						$('link_rating').addEvent('click', function(e) {

							e.stop();

							if (this.getProperty('checked') == true) {

								$('stars').fade('in');

							}


						});
*/
						$('form_feedback_link').addEvent('submit', function(e) {

							e.stop();

							var log = $('response_feedback_link').empty();

							this.set('send', {

								encoding: 'ISO-8859-15',
								onComplete: function(response) {

									log.set('html', response);

									(function() {

										if (response == 'Feedback gespeichert, vielen Dank!') {

											$('feedbackcontent').set('html', '');

											$('feedbackbox').setStyles({
											   	'background-color': '',
												height: '',
												left: '',
												'margin-left': '',
												padding: '',
												position: '',
												top: '',
												width: '',
												'z-index': 0
											});

											$('feedbackcontent').setStyles({
												'background-color': '',
												border: ''
											});

										}

									}.delay(2000));

								}

							});

							this.send();

						});

					}

				}

			}).get();

}

