$(document).ready(function($) {

	/*--------------------------------------
	 *- Generic news alert clone functions -
	 *--------------------------------------
	 */
	$.fn.jqNewsAlertClone = {
		cloneShowNewsAlertSection : function(alert, index) {
			var template = $("#showNewsAlertTemplate");
			var clone = template.clone();
			clone.appendTo("#newsAlertContent");
			clone.attr("id","showNewsAlert" + index);
			clone.find("#showNewsAlertTemplateEdit1").unbind();
			clone.find("#showNewsAlertTemplateEdit1").click(function(){$.fn.jqNewsAlert.onClickOpenEdit(index);});
			clone.find("#showNewsAlertTemplateToggle").unbind();
			clone.find("#showNewsAlertTemplateToggle").click(function(){$.fn.jqNewsAlertRestful.toggleAlert(true, alert.id);});
			if (alert.active) {
				clone.find("#showNewsAlertTemplateEdit1").addClass("cBlOr1");
				clone.find("#showNewsAlertTemplateToggle").html("uitschakelen");
			} else {
				clone.find("#showNewsAlertTemplateEdit1").addClass("cGr2");
				clone.find("#showNewsAlertTemplateToggle").html("inschakelen");
			}
			clone.find("#showNewsAlertTemplateEdit2").unbind();
			clone.find("#showNewsAlertTemplateEdit2").click(function(){$.fn.jqNewsAlert.onClickOpenEdit(index);});
			clone.find("#showNewsAlertTemplateDelete").unbind();
			clone.find("#showNewsAlertTemplateDelete").click(function(){$.fn.jqNewsAlertRestful.deleteAlert(true, alert.id );});
			clone.find("#showNewsAlertTemplateIndex").html(index + 1 + ".");
			clone.find("#showNewsAlertTemplateTitle").html(alert.name + (!alert.active ? " (uitgeschakeld)" : ""));
			clone.removeClass('jqHide');
		},
		cloneEditNewsAlertSection : function(alert, index, showImmediately, isNew) {
			var template = $("#editNewsAlertTemplate");
			var clone = template.clone();
			clone.appendTo("#newsAlertContent");
			clone.attr("id","editNewsAlert" + index);
			clone.find("#editNewsAlertTemplateIndex").html(index + 1 + ".");
			clone.find("#editNewsAlertTemplateTitle").html(alert.name + (!alert.active ? " (uitgeschakeld)" : ""));
			clone.find("#editNewsAlertTemplateToggle").unbind();
			clone.find("#editNewsAlertTemplateToggle").click(function(){$.fn.jqNewsAlertRestful.toggleAlert(true, alert.id);});
			if (alert.active) {
				clone.find("#editNewsAlertTemplateToggle").html("uitschakelen");
			} else {
				clone.find("#editNewsAlertTemplateToggle").html("inschakelen");
			}
			clone.find("#editNewsAlertTemplateDelete").unbind();
			clone.find("#editNewsAlertTemplateDelete").click(function(){$.fn.jqNewsAlertRestful.deleteAlert(true, alert.id);});
			//clone.find("#editNewsAlertTemplateForm").attr("name", "formNewsAlert" + index);
			//clone.find("#editNewsAlertTemplateForm").attr("id", "formNewsAlert" + index);
		
			alert.search = alert.search.replace(/&alertid=[\-\d]+/, '');	
			clone.find("#editNewsAlertTemplateAlertId").attr("value", alert.id);
			clone.find("#editNewsAlertTemplateAlertActive").attr("value", alert.active);
			clone.find("#editNewsAlertTemplateAlertSearch").attr("value", alert.search);
			if (alert.id)
				clone.find("#editNewsAlertTemplateAlertSearch").attr("id", "search" + alert.id);
			clone.find("#editNewsAlertTemplateAlertChange").attr("href", clone.find("#editNewsAlertTemplateAlertChange").attr("href") + alert.search + '&alertid=' + (alert.id ? alert.id : '-1'));
			clone.find("#editNewsAlertTemplateAlertChange").attr('title', index);
			if (alert.id)
				clone.find("#editNewsAlertTemplateAlertChange").attr('id', "alert" + alert.id);
			clone.find("#editNewsAlertTemplateAlertName").attr("value", alert.name);
			
			if (alert.sendType == 'DIRECT') { 
				clone.find("#editNewsAlertTemplateAlertSendType1").attr("checked", "checked");
			} else {
				clone.find("#editNewsAlertTemplateAlertSendType2").attr("checked", "checked");
			}
			if (alert.layoutType == 'HTML') { 
				clone.find("#editNewsAlertTemplateAlertLayoutType1").attr("checked", "checked");
			} else {
				clone.find("#editNewsAlertTemplateAlertLayoutType2").attr("checked", "checked");
			}
			clone.find("#editNewsAlertTemplateCancel").unbind();
			clone.find("#editNewsAlertTemplateCancel").click(function(){$.fn.jqNewsAlert.onClickCloseEdit(index);});
			clone.find("#editNewsAlertTemplateSubmit").unbind();
			clone.find("#editNewsAlertTemplateSubmit").click(function(){$.fn.jqNewsAlert.onSubmit(index, false);});
			
			if (showImmediately) {
				clone.removeClass('jqHide');
			}
			if (isNew) {
				clone.find("#editNewsAlertTemplateSubmit").unbind();
				clone.find("#editNewsAlertTemplateSubmit").click(function(){$.fn.jqNewsAlert.onSubmit(index, true);});
				clone.find("#editNewsAlertTemplateEdit").addClass("jqHide");
			}
		}
	};
	
	/*--------------------------------
	 *- Generic news alert functions -
	 *--------------------------------
	 */
	$.fn.jqNewsAlert = {
		maxAlerts : 10,
		newAlertIndex : 0,
		_setNewAlertIndex : function(index) {
			this.newAlertIndex = (index < 0 ? 0 : index);
			return this.newAlertIndex;
		},
		_getNewAlertIndex : function() {
			return this.newAlertIndex;
		},
		getClientNumber : function() {
			if($.fn.authorize.getDecodedCookie("fdmgLogon") != null) {
				var clientNumber = $.fn.authorize.getDecodedCookie("fdmgLogon")[7];
			} else {
				var clientNumber = "1000";
			}
			
			return clientNumber;
		},
		onClickOpenEditNew : function(index) {
			$.fn.jqNewsAlert.closeAll();
			$.fn.jqNewsAlert.updateFooter(index);
			$.fn.jqNewsAlert.toggleFooter(index, true);
			$.fn.jqNewsAlertClone.cloneEditNewsAlertSection($.fn.jqNewsAlertJSON.getAlertAsJSON("true","","Nieuwe alert " + (index + 1),"DAILY","HTML"), index, true, true);
		},
		newAlertWithDefaults : function(search) {
			var index = this._getNewAlertIndex();
			if (index + 1 < this.maxAlerts) {
				$.fn.jqNewsAlert.closeAll();
				$.fn.jqNewsAlert.updateFooter(index);
				$.fn.jqNewsAlert.toggleFooter(index, true);
				$.fn.jqNewsAlertClone.cloneEditNewsAlertSection($.fn.jqNewsAlertJSON.getAlertAsJSON("true",search,"Nieuwe alert " + (index + 1),"DAILY","HTML"), index, true, true);
			}

			return index;
		},
		onClickOpenEdit : function(index) {
			$.fn.jqNewsAlert.closeAll();
			$("#showNewsAlert" + index).addClass('jqHide');
			$("#editNewsAlert" + index).removeClass('jqHide');
			$.fn.jqNewsAlert.toggleFooter(index, false);
		},
		onClickCloseEdit : function(index) {
			$.fn.jqNewsAlert.closeAll();
			$("#editNewsAlert" + index).addClass('jqHide');
			$("#showNewsAlert" + index).removeClass('jqHide');
			$.fn.jqNewsAlert.toggleFooter(index, false);
		},
		onClickDeliveryType : function(deliveryType, id) {
			if (deliveryType == '2') {
				$("#editNewsAlertDaily" + id).removeClass('jqHide');
			} else {
				$("#editNewsAlertDaily" + id).addClass('jqHide');
			}
		},
		closeAll : function() {
			for (i = 0; i < this.maxAlerts; i++) {
				if (i > this.newAlertIndex) {
					// remove possible new edit screen
					$('#editNewsAlert' + i).remove();
					$('#showNewsAlert' + i).remove();
				} else {
					$('#editNewsAlert' + i).each(function(index, element) {
						if (!$(element).hasClass('jqHide')) {
							$(element).addClass('jqHide');
						}
					});
					$('#showNewsAlert' + i).each(function(index, element) {
						if ($(element).hasClass('jqHide')) {
							$(element).removeClass('jqHide');
						}
					});
				}
			}
			if (!$("#newsAlertErrorContainer").hasClass("jqHide")) {
				$("#newsAlertErrorContainer").addClass('jqHide');
			}
		},
		showAll : function(maxAlert) {
			if (typeof(maxAlert)!='undefined') {
				this.maxAlerts = maxAlert;
			} 
			if($.fn.authorize.isLoggedOn() && $('#newsAlertContent').length > 0){
			
				$('#newsAlertContent').html('');
				
				var data = $.fn.jqNewsAlertRestful.getAlerts(false, this.getClientNumber());
				if (data != null) {
					this._setNewAlertIndex(data.alerts.length);
					for (var i = 0; i < data.alerts.length; i++) {
						$.fn.jqNewsAlertClone.cloneShowNewsAlertSection(data.alerts[i], i);
						$.fn.jqNewsAlertClone.cloneEditNewsAlertSection(data.alerts[i], i, false, false);
					}
					$.fn.jqNewsAlert.updateFooter(data.alerts.length, false);
					$.fn.jqNewsAlert.toggleFooter(data.alerts.length, false);
				} else {
					this._setNewAlertIndex(0);
					$.fn.jqNewsAlert.updateFooter(0, false);
					$.fn.jqNewsAlert.toggleFooter(0, false);
				}
				
				if (!$("#newsAlertErrorContainer").hasClass("jqHide")) {
					$("#newsAlertErrorContainer").addClass('jqHide');
				}
				
				$('#newsAlertSection').removeClass('jqHide');
			}
			
		},
		onSubmit : function(index, isNew) {
			var formId = "#editNewsAlert" + index;
			
			var id = $(formId + " input[name=id]").val();
			var active = $(formId + " input[name=active]").val();
			var search = $(formId + " input[name=search]").val();
			var name = $(formId + " input[name=name]").val();
			var sendType = $(formId + " input[name=sendType]:checked").val();
			var layoutType = $(formId + " input[name=layoutType]").val();

			if (isNew) {
				$.fn.jqNewsAlertRestful.createAlert(true, this.getClientNumber(), $.fn.jqNewsAlertJSON.getAlertAsString("true",search,name,sendType,layoutType), index);
			} else {
				$.fn.jqNewsAlertRestful.updateAlert(true, id, $.fn.jqNewsAlertJSON.getAlertAsString("true",search,name,sendType,layoutType), index);
			}
		},
		errorHandler : function(index, msg, msgCause) {
			$("#newsAlertErrorMsg").html(msg);
			$("#newsAlertErrorCause").html(msgCause);
			
			if ($("#newsAlertErrorContainer").hasClass("jqHide")) {
				$("#newsAlertErrorContainer").removeClass('jqHide');
			}
			
			// reset specific form when error occured
			if (index != null) {
				$("#editNewsAlert" + index + " input").not("button, submit, reset, hidden").each(function() {
					this.value = this.defaultValue;
				});
			}
		},
		updateFooter : function(index) {
			$("#newsAlertContentNew").unbind();
			$("#newsAlertContentNew").click(function(){$.fn.jqNewsAlert.onClickOpenEditNew(index);});
			$("#newsAlertContentNew").html("Nieuwsalert toevoegen (nog " + (this.maxAlerts - index) + " toegestaan)");
		},
		toggleFooter : function(index, forceHide) {
			if (this.maxAlerts - index == 0 || forceHide) {
				if (!$("#newsAlertContentNewContainer").hasClass("jqHide")) {
					$("#newsAlertContentNewContainer").addClass('jqHide');
				}
			} else {
				if ($("#newsAlertContentNewContainer").hasClass("jqHide")) {
					$("#newsAlertContentNewContainer").removeClass('jqHide');
				}
			}
		},
		getReadyState : function(readyState) {
			switch(readyState) {
			case 0:
				return "Uninitialized (" + readyState + ")";
			case 1:
				return "Open (" + readyState + ")";
			case 2:
				return "Sent (" + readyState + ")";
			case 3:
				return "Receiving (" + readyState + ")";
			case 4:
				return "Loaded (" + readyState + ")";
			};
		}
	};

	/*-------------------------------------
	 *- Generic news alert json functions -
	 *-------------------------------------
	 */
	$.fn.jqNewsAlertJSON = {
		getAlertAsString : function(active,search,name,sendType,layoutType) {
			return '{"active": ' + active + ',"layoutType": "' + layoutType + '","name": "' + name + '","search": "' + search + '","sendType": "' + sendType + '"}';
		},
		getAlertAsJSON : function(active,search,name,sendType,layoutType) {
			return {"active": active, "layoutType": layoutType, "name": name, "search": search, "sendType": sendType};
		}
	};

	/*---------------------
	 *- Restful functions -
	 *---------------------
	 */
	$.fn.jqNewsAlertRestful = {
		domain: fdalertUrl,
//		domain: 'http://localhost:8080/fdalert',
		getAlerts : function(async, clientNumber) {
			var retVal = null;

			$.ajax({
				async : async,
				url : this.domain + '/person/' + clientNumber + '/alerts.json',
				crossDomain: true,
				cache: false,
				contentType : "application/json",
				dataType : 'json',
				type : 'GET',
				success : function(data, textStatus, jqXHR) {
					if (data != null) {
						if (data.error) {
							$.fn.jqNewsAlert.errorHandler(null, data.error.error.message, data.error.error.messageCause);
						} else {
							if (data.alerts.length > 0) {
								retVal = data;
							} else {
								// no alerts available
							}
						}
					} else {
						$.fn.jqNewsAlert.errorHandler(null, "readyState: " + $.fn.jqNewsAlert.getReadyState(jqXHR.readyState) + ", status: " + jqXHR.status, "responseText: Onbekende melding");
					}
				},
				error : function(jqXHR, textStatus,	errorThrown) {
					$.fn.jqNewsAlert.errorHandler(null, "readyState: " + $.fn.jqNewsAlert.getReadyState(jqXHR.readyState) + ", status: " + jqXHR.status, "responseText: " + jqXHR.responseText);
				}
			});
			return retVal;
		},
       	createAlert : function(async, clientNumber, data, index) {
			$.ajax({
				async : async,
				crossDomain : true,
				cache : false,
				url : this.domain + '/person/' + clientNumber + '/alert.json',
				contentType : "application/json",
				data : data,
				dataType : 'json',
				processData : false,
				type : 'POST',
				success : function(data, textStatus, jqXHR) {
					if (data != null) {
						if (data.error) {
							$.fn.jqNewsAlert.errorHandler(index, data.error.error.message, data.error.error.messageCause);
						} else {
							$.fn.jqNewsAlert.showAll();
						}
					} else {
						$.fn.jqNewsAlert.errorHandler(index, "readyState: " + $.fn.jqNewsAlert.getReadyState(jqXHR.readyState) + ", status: " + jqXHR.status, "responseText: Onbekende melding");
					}
				},
				error : function(jqXHR, textStatus, errorThrown) {
					$.fn.jqNewsAlert.errorHandler(index, "readyState: " + $.fn.jqNewsAlert.getReadyState(jqXHR.readyState) + ", status: " + jqXHR.status, "responseText: " + jqXHR.responseText);
				}
			});
		},
		updateAlert : function(async, alertId, data, index) {
			$.ajax({
				async : async,
				crossDomain : true,
				cache : false,
				url : this.domain + '/alert/upd/' + alertId + '.json',
				contentType : "application/json",
				data : data,
				dataType : 'json',
				processData : false,
				type : 'POST',
				success : function(data, textStatus, jqXHR) {
					if (data != null) {
						if (data.error) {
							$.fn.jqNewsAlert.errorHandler(index, data.error.error.message, data.error.error.messageCause);
						} else {
							$.fn.jqNewsAlert.showAll();
						}
					} else {
						$.fn.jqNewsAlert.errorHandler(index, "readyState: " + $.fn.jqNewsAlert.getReadyState(jqXHR.readyState) + ", status: " + jqXHR.status, "responseText: Onbekende melding");
					}
				},
				error : function(jqXHR, textStatus, errorThrown) {
					$.fn.jqNewsAlert.errorHandler(index, "readyState: " + $.fn.jqNewsAlert.getReadyState(jqXHR.readyState) + ", status: " + jqXHR.status, "responseText: " + jqXHR.responseText);
				}
			});
		},
		deleteAlert : function(async, id) {
			$.ajax({
               async : async,
               crossDomain: true,
               cache: false,
               url: this.domain + '/alert/del/' + id + '.json',
               contentType: "application/json",
               dataType: 'json',
               processData: false,
               type : 'POST',
               success: function(data, textStatus, jqXHR) {
            	   if (data != null) {
	                   if (data.error) {
							$.fn.jqNewsAlert.errorHandler(null, data.error.error.message, data.error.error.messageCause);
	                   } else {
	                	   $.fn.jqNewsAlert.showAll();
	                   }
					} else {
						$.fn.jqNewsAlert.errorHandler(null, "readyState: " + $.fn.jqNewsAlert.getReadyState(jqXHR.readyState) + ", status: " + jqXHR.status, "responseText: Onbekende melding");
					}
               },
               error: function(jqXHR, textStatus, errorThrown) {
					$.fn.jqNewsAlert.errorHandler(null, "readyState: " + $.fn.jqNewsAlert.getReadyState(jqXHR.readyState) + ", status: " + jqXHR.status, "responseText: " + jqXHR.responseText);
               }
           });
       },
       toggleAlert : function(async, id) {
           $.ajax({
               async : async,
               crossDomain: true,
               cache: false,
               url: this.domain + '/alert/toggle/' + id + '.json',
               contentType: "application/json",
               dataType: 'json',
               processData: false,
               type : 'POST',
               success: function(data, textStatus, jqXHR) {
            	   if (data != null) {
	                   if (data.error) {
							$.fn.jqNewsAlert.errorHandler(null, data.error.error.message, data.error.error.messageCause);
	                   } else {
	                	   $.fn.jqNewsAlert.showAll();
	                   }
					} else {
						$.fn.jqNewsAlert.errorHandler(null, "readyState: " + $.fn.jqNewsAlert.getReadyState(jqXHR.readyState) + ", status: " + jqXHR.status, "responseText: Onbekende melding");
					}
               },
               error: function(jqXHR, textStatus, errorThrown) {
					$.fn.jqNewsAlert.errorHandler(null, "readyState: " + $.fn.jqNewsAlert.getReadyState(jqXHR.readyState) + ", status: " + jqXHR.status, "responseText: " + jqXHR.responseText);
               }
           });
       }
	};

	/*--------------------------------------------
	 *- Support when JQuery 1.5 or later is used -
	 *--------------------------------------------
	 */
	//	jQuery.support.cors = true; // force cross-site scripting (as of jQuery 1.5)
	//	$.ajaxSetup({
	//		isLocal: true
	//	});
	
	// initialize alerts the first time
	//$.fn.jqNewsAlert.showAll();

	
});

