$(document).ready(
		
	function()
	{
		// css-loader
		function loadCSS(path)
		{
			var fullpath = GLOBALS.webBasepath+ '/' +path;
			var el = '<link rel="stylesheet" href="' +fullpath+ '" type="text/css" />;';
			$('head').append(el);
		}

		// js-loader
		function loadJS(path)
		{
			var fullpath = GLOBALS.webBasepath+ '/' +path;
			$.getScript(fullpath);
		}

		// iepngfix
		$.ifixpng(GLOBALS.webBasepath+ '/resources/gfx/background/bg.pixel.alpha.gif');
		$('.alpha-image').ifixpng();
		
		// fatbox
		var fatboxes = $('a.fatbox');
		if (fatboxes.length > 0)
		{
			loadCSS('resources/scripts/plugin/fatbox/styles/fatbox.css');
			$.getScript(
				GLOBALS.webBasepath+ '/resources/scripts/plugin/fatbox/plugin.js',
				function()
				{
					$.getScript(
						GLOBALS.webBasepath+ '/resources/scripts/plugin/flash/plugin.js',
						function()
						{
							$('a.fatbox').fatbox({});
						}
					);
				}
			);
		}

		// external links
		$('a.external').live(
			'click',
			function()
			{
				try
				{
					if ($(this).attr('href') != '')
					{
						var ext = window.open($(this).attr('href'));
						ext.focus();
					}
				}
				catch (e) {}
				return false;
			}
		);

		// popup links
		$('a[rel^=popup]').live(
			'click',
			function()
			{
				try
				{
					if ($(this).attr('href') != '' && $(this).attr('rel').match(/popup\[([0-9]+),([0-9]+)\]/))
					{
						var width = RegExp.$1,
							height = RegExp.$2;
						var ext = window.open(
							$(this).attr('href'),
							'popup',
							'width=' +width+ ', height=' +height
						);
						ext.focus();
					}
				}
				catch (e) {}
				return false;
			}
		);
		
		
		$('#print').click(function() {
				window.print();  
				return false;  
		});  

		// glossaryterms
		if($.fn.glossaryToolTip)
		{
			var $link = $('a.glossaryterm');
			$link.glossaryToolTip();
			$link.click(function(){return false;});
		}
		
		// autoclearing fields
		var $coe_fields = $('.clear_on_enter:not(.form-password)');
		$coe_fields.focus
		(
			function(ev)
			{
				var $field = $(ev.target);
				if (typeof $field.data('coe_oldval') == 'undefined')
				{
					$field.data('coe_oldval', $field.val());
				}
				if ($field.val() == $field.data('coe_oldval'))
				{
					$field.val('');
				}
			}
		)

		$coe_fields.blur
		(
			function(ev)
			{
				var $field = $(ev.target);
				if($field.val() == '')
				{
					$field.val($field.data('coe_oldval'));
				}
			}
		)
		
		// autoclearing password fields
		var $coe_pw_fields = $('.clear_on_enter.form-password');
		if($coe_pw_fields.size()>0)
		{
			var $replacement = $('<input type="text" value="Kennwort" class="replacement form-text">');
			var classes = $coe_pw_fields.attr('class').split(' ');
			for(var i in classes)
			{
				if(classes[i] != 'form-password')
					$replacement.addClass(classes[i]);
			}
			$coe_pw_fields.after($replacement);
			$coe_pw_fields.hide();
	
			$replacement.focus
			(
					function(ev)
					{
						var $field = $(ev.target);
						$field.prev('.form-password').show().focus();
						$field.hide();
					}
			)
	
			$coe_pw_fields.blur
			(
				function(ev)
				{
					var $field = $(ev.target);
					if($field.val()=='')
					{
						$field.hide();
						$field.next('.replacement').show();
					}
				}
			)
		}
		
		// selection / unselection of checkboxes in a form

		/*
		$('a.select').click(toggleCheckboxes);
		$('a.unselect').click(toggleCheckboxes);

		function toggleCheckboxes(event)
		{ 
			event.preventDefault();
			
			var name   = $(this).attr('rel');
			var inputs = $("input[name='" + name + "[]']");
			var className = $(this).attr('class');
			inputs.each(
				function()
				{
					if(className == 'select')
					{
						$(this).attr('checked', 'checked');
					}
					else
					{
						$(this).removeAttr('checked');
					}
				}
			);
		}
		*/

		// appends a hidden input field into the pitch/attachment form to distinguish which button was clicked
		$('.upload-button').click(function(ev){
			$('dd.sweep').append('<input type="hidden" value="true" name="upload-document" />');
		});

		
		
		$('.select').click(toggleCheckboxes);
		
		function toggleCheckboxes(event)
		{			
			var name = $(this).attr('rel');
			$("input[name='" + name + "[]']").each(
				function()
				{
					var $this = $(this);
					if ($this.hasClass('checked'))
					{
						$this.removeAttr('checked');
						$this.removeClass('checked');
					}
					else
					{
						$this.attr('checked', 'checked');
						$this.addClass('checked');
					}
				}
			);
		}
		

		$('a.messaging_submit').click(function() {
			
			// declare messagebox options
			var options = {
				buttons : new Array(
					{
						caption	: 'abbrechen',
						action	: function() { $.fn.messageBox.close($(this).parent('.messageBox')); }
					},
					{
						cssClass: ' link-button-next',
						caption	: 'fortfahren',
						action	: function() {
							$('div.messaging').find('form').submit(); 
						}
					}
				)
			};

			$.post(
				GLOBALS.webBasepath+ '/ajax/dialog',
				{
					'app' : 'yam_app_messaging',
					'component' : 'inbox',
					'key' : 'DELETE_CONFIRMATION'
				},
				function(data)
				{				
					$.fn.messageBox.closeLast();
					$.fn.messageBox(options);
					$.fn.messageBox.open($(data).text());
				}
			);
		});

		

		// transactions
		var TransactionManager = 
		{
			//
			// URL of the requested resource.
			//
			url : null,
			
			//
			// Transaction backend service url
			//
			serviceUrl : location.protocol + '//' + location.host + GLOBALS.webBasepath + '/ajax/transaction-manager',
				
			//
			// Register transaction behaviour.
			//
			registerTransactions : function()
			{			
				$('.transaction').click(
					function(e)
					{
						TransactionManager.url = $(this).attr('href');
						TransactionManager.initializeTransaction();
						TransactionManager.confirmation = false;
						e.preventDefault();
					}
				);
			},
			
			//
			// Execute transaction.
			//
			executeTransaction : function()
			{
				TransactionManager.performRequest(
					'execute',
					{
						'password' : $('#password-confirmation').val()
					}
				);
			},
			
			//
			// Initialize transaction.
			//
			initializeTransaction : function()
			{		
//				if (TransactionManager.serviceUrl.indexOf('http') == -1)
//				{
//					$.post(
//						TransactionManager.serviceUrl, 
//						{
//							url : TransactionManager.url,
//							action : 'host'
//						}, 
//						function(host)
//						{
//							TransactionManager.serviceUrl = host + TransactionManager.serviceUrl;
//							TransactionManager.performRequest('initialize');
//						}
//					);
//				}
//				else
//				{
					TransactionManager.performRequest('initialize');
//				}
			},
			
			//
			// Process response.
			//
			processResponse : function(response)
			{			
				// declare messagebox options
				var options = {
					buttons : new Array(
						{
							caption	: 'abbrechen',
							action	: function() { $.fn.messageBox.close($(this).parent('.messageBox')); }
						},
						{
							cssClass: ' link-button-next',
							caption	: 'fortfahren',
							action	: TransactionManager.redirect
						}
					)
				};
				
				switch (response.status)
				{		
					//
					// Redirect the user to the requested resource
					// a) when he executed the transaction before 
					// b) when the transaction was successfully executed this time.
					//
					case 'COMPLETED':						
						TransactionManager.redirect();
						return;
					break;
					
					//
					// User account provides sufficient funds to
					// execute the transaction.
					//
					case 'PERMIT':								
						$('#password-confirmation').live(
							'keypress',
							function(e)
							{
								if (e.which == 13)
								{
									TransactionManager.executeTransaction();
									e.preventDefault();
								}
							}
						);
						options.buttons[1].action = TransactionManager.executeTransaction;
					break;
					
					//
					// When the users account provides less than
					// 20 credits: display a notification dialog.
					//
					case 'NOTIFY':
						options.buttons.shift();
					break;
					
					case 'INEXECUTABLE':
					case 'ABORT':
						options.buttons.pop();
					break;
					
					case 'DENY':
						options.buttons.pop();
						var button = {
							cssClass: ' link-button-next',
							caption : 'Konto aufladen',
							action : function() 
							{ 
								window.location.href = GLOBALS.webBasepath+'/agenturen/mein-profil/konto-aufladen';
							}
						};
						options.buttons.push(button);
					break;
				}
				TransactionManager.showDialog(response, options);
			},
			
			//
			// Show a dialog for the specified response.
			//
			showDialog : function(response, options)
			{
				$.post(
					GLOBALS.webBasepath+ '/ajax/transaction-dialog',
					response,
					function(data)
					{				
						$.fn.messageBox.closeLast();
						$.fn.messageBox(options);
						$.fn.messageBox.open(data);
					}
				);
			},
			
			//
			// Redirect the user to the requested resource.
			//
			redirect : function()
			{
				window.location.href = TransactionManager.url;
			},
			
			//
			// Perform a request to the transaction logic.
			//
			performRequest : function(action, data)
			{			
				if(TransactionManager.confirmation != true) {
					
					TransactionManager.confirmation = true;
					var data = jQuery.extend(
						{
							'action' : action,
							'url'	 : TransactionManager.url
						},
						data
					);
					
					$.post(
						TransactionManager.serviceUrl, 
						data, 
						TransactionManager.processResponse,
						'json'
					);
				}
			}
		}
		TransactionManager.registerTransactions();

/*		
		var el = $('fieldset#company');
		if(el)
		{
			$(el).hide();
			$('a.toggle').click(toggleCompanies);
		}
		
		function toggleCompanies(event)
		{ 		
			if($(this).html() == 'ausblenden') 
			{ 
				$(el).fadeOut("slow");
				$(this).html('anzeigen'); 
			} 
			else 
			{ 
				$(el).fadeIn("slow");
				$(this).html('ausblenden');
			}		
		}
*/
		// toggles
		$('.togglee_default_off').each(
				function(el)
				{
					el = $(this);
					el.hide();
					$toggle_on  = $('.'+el.attr('id')+'.toggle_on');
					
					$toggle_on.show();
					$toggle_on.click(
							function()
							{
								$toggle_off.toggle();
								$toggle_on.toggle();
								el.toggle(200);
							}
					)

					$toggle_off = $('.'+el.attr('id')+'.toggle_off');
					$toggle_off.hide();
					$toggle_off.click(
							function()
							{
								$toggle_off.toggle();
								$toggle_on.toggle();
								el.toggle(200);
							}
					)
				}
		);		
		
		
		////////////////////////////////////////////////////
		
		
		// toggles
		$('.agency_preview').each(
				function(el)
				{
					el = $(this);
					
					$toggle_off  = $('.'+el.attr('id'));
					
					$toggle_on = $('.'+el.attr('id'));
					
					$toggle_on.click(
							function()
							{
								el.toggle(200);
							}
					)
					
				}
		);		
	}	
);