$(document).ready(function(){

	function InvitationHelper (){
		this.decode_entities = function(str) {
			  var ta=document.createElement("textarea");
			  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
			  return ta.value;
		}
	};	
	
	
	if($('table#invitations').length) {
		var PRAEFIX = "invitation_";
		var DELETE_ACTION = "hide";
		var UPDATE_ACTION = "save";
		var REMIND_ACTION = "remind";
		var PERFORM_ACTION = "invite";
		
		var invID = null;
		var $invContainer = null;
		var $allInvContainers = $("table#invitations .invContainer");
		var $evenInvContainers = $("table#invitations .invContainer:even");
		var $oddInvContainers = $("table#invitations .invContainer:odd");
		var ajaxWorking = false;
		var helper = new InvitationHelper();
		
		var $messageBox = $("<div id='invBox' class='box'></div>");
		
		bindTextFields();
		
		//Remind Link
		$('table#invitations .invReminder').live('click', function(){
			$invContainer = $(this).parents(".invContainer");
			invID = $invContainer.attr('id').substr(PRAEFIX.length);
			var invData = {
					firstName:	$invContainer.find("input[name='firstName']").val(),	
					lastName:	$invContainer.find("input[name='lastName']").val()
			};		
			handleAjaxInvitation(REMIND_ACTION, invID, "POST", invData, $(this));
			return false;
		});
		//Delete Link
		$('table#invitations .invDelete').live('click',function(){
			showMsgBox = false;
			$invContainer = $(this).parents(".invContainer");
			invID = $invContainer.attr('id').substr(PRAEFIX.length);
			handleAjaxInvitation(DELETE_ACTION, invID);
			return false;
			
		});
		
		//Update Link
		$('table#invitations .invUpdate').live('click', function(){
			$invContainer = $(this).parents(".invContainer");
			invID = $invContainer.attr('id').substr(PRAEFIX.length);
			
			var invData = {
					firstName:	$invContainer.find("input[name='firstName']").val(),	
					lastName:	$invContainer.find("input[name='lastName']").val()
			};
			
			handleAjaxInvitation(UPDATE_ACTION, invID, "POST", invData);
			return false;
		});
		
		//Invite Button
		$('#inviteExternForm #invSubmit').click(bindSubmit);
		$('form#friends_invited').submit(bindSubmit);
		
		
		// Counter
	    $("#addInvMessage").click(function() {
	        jQuery("#inviteMessage").fadeIn();
	        $("#invitation_msg").countChars({charsleft:500});
	        return false;
	    });
		
	    // Alte Einladungen
		$('table#invitations a.oldInv').click(function(){
			var personID = $(this).attr('rel');
			//remind
			if( $(this).hasClass('remindV1') ) {
				$('input#remind').val(personID);
			}
			//remove
			if( $(this).hasClass('removeV1') ) {
				$('input#remove').val(personID);
			}
			//save
			$('form#friends_invited').submit();
			return false;
		});	
	}
	
	function bindSubmit() {
		if ($('input#remove').val() == '' && $('input#remind').val() == '') {
			if ($("input#invite_email").val() == '') {
				$messageBox.removeClass().addClass("box " + "error").html("Du musst zumindest die E-Mail-Adresse eingeben, um jemanden einzuladen!");
				$('h2#invHeader').after($messageBox);
				return false;
			}
			var clubVal = '';
			var schoolVal = '';
			var betVal = '';
			
			clubVal = $("#inviteClub").size() ? $("#inviteClub").val() : '';
			schoolVal = $("input[name='schoolid']").size() ? $("input[name='schoolid']").val() : '';
			betVal = $("input[name='betgroupid']").size() ? $("input[name='betgroupid']").val() : '';
		
			var invData = {
					invite_email:		$("input[name='invite_email']").val(),	
					invite_firstName:	$("input[name='invite_firstName']").val(),	
					invite_lastName:	$("input[name='invite_lastName']").val(),
					invite_message:		$("textarea[name='invite_message']").val(),
					club:				clubVal,
					schoolid:			schoolVal,
					betgroupid:			betVal
			};
			
			handleAjaxInvitation(PERFORM_ACTION, "", "POST", invData);
			return false;		
		}
	}
	
    //Verarbeitung der neuen Einladungen
	function handleAjaxInvitation (_action, _invID, _method, _invData, _$object) {
		if (typeof _invData != 'object') {
			_invData = "";
		}
		
		
		if (typeof _method == 'undefined' || _method == "") {
			_method = 'GET'
		}
		var defaults = {
			_method: 'GET',
			_invData: ''
		};
		
		if ($('#invBox').size() > 0) {
			$('#invBox').remove();
		}
		var suffix = "";
		if (_action == UPDATE_ACTION) {
			suffix = "/return/start/"
		}
		if(!ajaxWorking) {
			ajaxWorking = true;
			$.ajax({
				url: "/invitation/" + _action + "/" + _invID + suffix,
				data: _invData,
				dataType: "json",
				error: function(){
					$messageBox.addClass("error").html("Es ist ein Fehler bei der Datenübertragung aufgetreten.");
					$('h2#invHeader').after($messageBox);
					ajaxWorking = false;
					return false;
				},
				type: _method,
				success: function(data){
					if (data) {
						var msgType;
						switch (data.iMessageType) {
							case 0:
								msgType = "hidden"
								break;
							case 1:
								msgType = "success"
								break;
							case 2:
								msgType = "info"
								break;
							case 3:
								msgType = "error"
								break;
						}
						//MessageBox anpassen
						$messageBox.removeClass().addClass("box " + msgType).html(data.sMessageText);
						
						var $firstBox = $('.box:eq(0)');
						
						$('h2#invHeader').after($messageBox);

						
						// deleteAction
						if($messageBox.hasClass('hidden') && _action == DELETE_ACTION) {
							$invContainer.fadeOut(300, function(){
								$invContainer.remove();
								updateZebraRows();
								if($('#invitations .invContainer:visible').size() < 1) {
									$("tr#extInvTeaser").show();
								}
							});	
							
						}				
						// updateAction
						if (_action == UPDATE_ACTION) {
							if (data.iMessageType < 3) {
								$invContainer.find("input").css('color', '#999');
							}
						}
						// remindAction
						if (_action == REMIND_ACTION) {
							if (data.iMessageType < 3) {
								$invContainer.find("input").css('color', '#999');
								var invCount = parseInt($invContainer.find('td:eq(3)').text());
								invCount++;
								$invContainer.find('td:eq(3)').html(invCount)
								if (invCount >= 5) {
									_$object.remove();
								}
							}
						}
						// performAction
						if (_action == PERFORM_ACTION) {
							if (data.iMessageType < 3) {
								$invContainer = $("#friends_invited");
								var $invStub = $('#invitation_stub');
								var $firstRow = $("tr.invitationsHeaders");
								var $lastInvRow = $(".invContainer:last");
								
								var newID = data.sInvitationFakeId;
								
								// Suchen ob die Invitation schon auf der Liste ist. D.h. eine Einladung, die schon auf der Liste war
								var invFound = false;
								$.each($allInvContainers, function(){
									if ($(this).find('td:eq(2) p').attr('title') == data.sEmail) {
										$(this).find('td:eq(0) input').val(helper.decode_entities(data.sFirstName));
										$(this).find('td:eq(1) input').val(helper.decode_entities(data.sLastName));
										$(this).find('td:eq(3)').html(data.iRemindEmailCount);
										invFound = true;
									}
								});
								
								if (false == invFound) {
									// Neue Zeile erzeugen und mit den neuen Werden ausfüllen
									var $newRowContainer = $invStub.clone().addClass('invContainer');
									$newRowContainer.attr('id', PRAEFIX + newID).find('form').attr('action', '/invitation/save/' + newID).attr('name', '/invitation/' + newID);
									$newRowContainer.find('a').attr('href', 'javascript://');
									
									var shortEmail = data.sEmail
									if (data.sEmail.length > 35) {
										shortEmail = data.sEmail.substr(data.sEmail, 35) + "...";
									}
									
									$newRowContainer.find('td:eq(2) p').html(shortEmail).attr('title', data.sEmail);
									$newRowContainer.find('td:eq(0) input').val( helper.decode_entities(data.sFirstName) );
									$newRowContainer.find('td:eq(1) input').val( helper.decode_entities(data.sLastName) );
									$newRowContainer.find('td:eq(3)').html(data.iRemindEmailCount);
									$newRowContainer.find("input").css('color', '#999');
									
									
									$firstRow.after($newRowContainer);
									bindTextFields();
									
									
									$("tr#extInvTeaser").hide();
									$newRowContainer.fadeIn(1000, function(){
										$(this).removeClass('hidden');
										$(this).show()
										
									});
								}
								if (data.iMessageType == 2) {
									$messageBox.find('a').click(function(){
										$("#" + PRAEFIX + newID).find('.invReminder').trigger('click');
										return false;
									});
								}
								
								// Zeilenfarben aktualisieren und Einlade-Formular reseten
								updateZebraRows();
								$("input[name='invite_email']").val('');
								$("input[name='invite_firstName']").val('');
								$("input[name='invite_lastName']").val('');
								$("textarea[name='invite_message']").val('').trigger('keyup');  //keyup für den charcounter
								$("select[name='club']").val(0);
							}
						}						
					}
					ajaxWorking = false;
					return true;
				}
			});
		}
	}
	function updateZebraRows () {
		$allInvContainers = $(".invContainer");
		$allInvContainers.removeClass("normal odd");
		$(".invContainer:even").addClass("normal");
		$(".invContainer:odd").addClass("odd");
	}
	
	function bindTextFields() {
		$("#invitations input[type=text]").focus(function(){
			$(this).css("color","#000");
		});
	}
});