jQuery.fn.hint = function (blurClass) {
	if (!blurClass) { 
		blurClass = 'blur';
  	}
    
	return this.each(function () {
		var $input = $(this),
		title = $input.attr('title'),
		$form = $(this.form),
		$win = $(window);

		function remove() {
			if ($input.val() === title && $input.hasClass(blurClass)) {
				$input.val('').removeClass(blurClass);
			}
		}

		if (title) { 
			$input.blur(function () {
				if (this.value === '') {
					$input.val(title).addClass(blurClass);
				}
			}).focus(remove).blur();

			$form.submit(remove);
      		$win.unload(remove);
		}
  	});
};

jQuery.fn.mandantory = function (text,color,mandantoryClass) {
	if (!mandantoryClass) {
		var mandantoryClass = 'mandantoryflag';
	}

	return this.each(function () {
		var $input = $(this),
		title = $input.attr('title'),
		$form = $(this.form),
		$win = $(window);

		function remove() {
			if ($input.val() === text && $input.hasClass(mandantoryClass)) {
				$input.val('').css({"background" : "white"}).removeClass(mandantoryClass);
			}
		}

		$input.blur(function () {
			if (this.value === '') {
				$input.val(text).css({"background" : color}).addClass(mandantoryClass);
			}
		}).focus(remove).blur();

		$form.submit(remove);
		$win.unload(remove);
  	});
};

jQuery.fn.inputHighlight = function(color){
	$(this).each(function(){
		$(this).focus(function(){
			$(this).css({"background" : color});
		});
		$(this).blur(function(){
			$(this).css({"background" : "white"});
		});
	});
}

jQuery.fn.startPaperlog = function (year,month,day,hour,minute) {

	var timeStamp = null;
	var updateQSO = null;
	var savedTimeStamp = null;

	timeStamp = setTime(year,month,day,hour,minute);

	function getDateString(t) {
		var m = t.getMonth();
		var d = t.getDate();
		return t.getFullYear() + (m < 10) ? "0" + m : "" + m + (d < 10) ? "0" + d : "" + d;
	}

	function setTime(year,month,day,hour,minute) {

		var t = day.toString();

		if ($("#contest").attr("selectedIndex") == 0) {
			var dayOne = 17;
			var dayTwo = 18;
		} else {
			var dayOne = 8;
			var dayTwo = 9;			
		}

		if (day.toString() == "NaN") day = dayOne;
		if (hour.toString() == "NaN") hour = 12;
		if (minute.toString() == "NaN") minute = 0;

		if ((day != dayOne) && (day != dayTwo)) {
			var ts = timeStamp;
		} else if ((day == dayOne) && (hour < 12)) {
			var ts = new Date(year,month-1,day,12, 0, 0, 0);			
		} else if ((day == dayTwo) && (hour > 11)) {
			var ts = new Date(year,month-1,day,0, 0, 0, 0);			
		} else if ((minute < 0) || (minute > 59)) {
			var ts = timeStamp;
		} else {
			var ts = new Date(year,month-1,day,hour,minute, 0, 0);			
		}

		var d = ts.getDate();
		var h = ts.getHours();
		var m = ts.getMinutes();

		$("#day").val((d < 10) ? "0" + d : d);
		$("#hour").val((h < 10) ? "0" + h : h);
		$("#minute").val((m < 10) ? "0" + m : m);

		return ts;
	}

	function incrementTime() {
		$("#minute").removeClass("flagInput");

		timeStamp.setTime(timeStamp.getTime() + 60000)

		var d = timeStamp.getDate();
		var h = timeStamp.getHours();
		var m = timeStamp.getMinutes();

		if ($("#contest").attr("selectedIndex") == 0) {
			if (d == 18) {
				if (h == 12) {
					timeStamp.setTime(timeStamp.getTime() - 60000)
					d = timeStamp.getDate();
					h = timeStamp.getHours();
					m = timeStamp.getMinutes();
				}
			}
		} else if (d == 9) {
			if (h == 12) {
				timeStamp.setTime(timeStamp.getTime() - 60000)
				d = timeStamp.getDate();
				h = timeStamp.getHours();
				m = timeStamp.getMinutes();
			}
		}

		$("#day").val((d < 10) ? "0" + d : d);
		$("#hour").val((h < 10) ? "0" + h : h);
		$("#minute").val((m < 10) ? "0" + m : m);	
	}

	function decrementTime() {

		$("#minute").removeClass("flagInput");

		timeStamp.setTime(timeStamp.getTime() - 60000)

		var d = timeStamp.getDate();
		var h = timeStamp.getHours();
		var m = timeStamp.getMinutes();

		if ($("#contest").attr("selectedIndex") == 0) {
			if (d < 17) {
				timeStamp.setTime(timeStamp.getTime() + 60000)
				d = timeStamp.getDate();
				h = timeStamp.getHours();
				m = timeStamp.getMinutes();
			} else if (d == 17) {
				if (h < 12) {
					timeStamp.setTime(timeStamp.getTime() + 60000)
					d = timeStamp.getDate();
					h = timeStamp.getHours();
					m = timeStamp.getMinutes();
				}
			}
		} else {
			if (d < 8) {
				timeStamp.setTime(timeStamp.getTime() + 60000)
				d = timeStamp.getDate();
				h = timeStamp.getHours();
				m = timeStamp.getMinutes();
			} else if (d == 8) {
				if (h < 12) {
					timeStamp.setTime(timeStamp.getTime() + 60000)
					d = timeStamp.getDate();
					h = timeStamp.getHours();
					m = timeStamp.getMinutes();
				}
			}
		}
		
		$("#day").val((d < 10) ? "0" + d : d);
		$("#hour").val((h < 10) ? "0" + h : h);
		$("#minute").val((m < 10) ? "0" + m : m);

	}

	function incrementRS(id) {

		var i = $("#" + id).val();

		if ($("#contest").attr("selectedIndex") == 0) {
			var t = i.substr(2,1)
		} else {
			var t = "";
		}

		var rs = parseInt(i.substr(0,2));
		rs++;

		switch (rs) {
			case 50:
				rs = 51;
				break;
			case 40:
				rs = 41;
				break;
			case 30:
				rs = 31;
				break;
			case 20:
				rs = 21;
				break;
			default:
				rs = (rs > 59) ? 59 : rs;
		}
		$("#" + id).val(rs+t);
	}

	function decrementRS(id) {

		var i = $("#" + id).val();

		if ($("#contest").attr("selectedIndex") == 0) {
			var t = i.substr(2,1)
		} else {
			var t = "";
		}
			
		var rs = parseInt(i.substr(0,2));
		rs--;
		switch (rs) {
			case 50:
				rs = 49;
				break;
			case 40:
				rs = 39;
				break;
			case 30:
				rs = 29;
				break;
			case 20:
				rs = 19;
				break;
			default:
				rs = (rs < 11) ? 11 : rs;
		}
		$("#" + id).val(rs+t);
	}

	function incrementNr(id) {

		n = $("#" + id).val();
		// if (typeof(n) != "number") n = "0";

		var nr = parseInt(n);
		nr++;
		$("#" + id).val(nr);
	}

	function validRST(id) {
		var i = $("#" + id).val();
		var rs = parseInt(i.substr(0,2));

		if ($("#contest").attr("selectedIndex") == 0) {
			mode = "CW"
		} else {
			mode = "PH"			
		}

		if (mode == "CW") {
			if  (i.length < 3) {
				var t = 9;
			} else {
				var t = 1*i.substr(2,1);
			}

			if (t.toString() == "NaN") t = 9;
			if ((t < 1) || (t > 9)) t = 9;
			t = t.toString();

			var rs = 1*i.substr(0,2);
			if (rs.toString() == "NaN") rs = 59;
			if ((rs < 11) || (rs > 59) || (rs = 20) || (rs = 30) || (rs = 40)  || (rs = 50)) {
				rs = 59;
			}
		} else {
			var t = "";
			var rs = 1*i.substr(0,2);
			if (rs.toString() == "NaN") rs = 59;
			if ((rs < 11) || (rs > 59)) {
				rs = 59;
			}
		}
		$("#" + id).val(rs.toString()+t);
	}

	$("#contest").change(function() {
		if ($(this).val() == "SAC-CW") {
			timeStamp = setTime(2011,9,17,12,0);
			$("#rxRST,#txRST").val("599");
		} else {
			timeStamp = setTime(2011,10,8,12,0);
			$("#rxRST,#txRST").val("59");
		}
	});

	$("#day, #hour, #minute").change(function() {
		timeStamp = setTime(timeStamp.getFullYear(),timeStamp.getMonth(),1*$("#day").val(),1*$("#hour").val(),1*$("#minute").val());
	});
	
	$("#rxRST").change(function() {
		validRST('rxRST');
	});
	
	$("#txRST").change(function() {
		validRST('txRST');
	});

	$('.inputField').keypress(function(event) {
		if (!event.ctrlKey && !event.altKey) {
			switch (event.keyCode) {
				case 38:
					incrementTime();
					break;
				case 40:
					decrementTime();
					break;
				case 13:
					switch (this.id) {
						case 'frequency':
							$(this).mandantory("Missing","#F36A86");
							$("#rxCallsign").focus();
							break;						
						case 'day':
							$(this).mandantory("Missing","#F36A86");
							$("#rxCallsign").focus();
							break;						
						case 'hour':
							$(this).mandantory("Missing","#F36A86");
							$("#minute").focus();
							break;
						case 'minute':
							$(this).mandantory("Missing","#F36A86");
							$("#rxCallsign").focus();
							break;
						case 'rxCallsign':
							$(this).mandantory("Missing","#F36A86");
							$("#rxNR").focus();
							$("#minute").removeClass("flagInput");
							break;
						case 'rxRST':
							$(this).mandantory("Missing","#F36A86");
							validRST('rxRST');
							$("#rxNR").focus();
							break;
						case 'rxNR':
							$(".mandantory").mandantory("Missing","#F36A86");
							if ($("#qsoInputArea").find(".mandantoryflag").length != 0) return;

							if (updateQSO) {
								if ($("#contest").attr("selectedIndex") == 0) {
									updateQSO.html('<td class="frequency">' + $("#frequency").val() + '</td><td class="date">2011-09-' + $("#day").val() + '</td><td class="time">' + $("#hour").val() + ":" + $("#minute").val() + '</td><td class="rxCallsign">' + $("#rxCallsign").val().toUpperCase() + '</td><td class="rxRST">' + $("#rxRST").val() + '</td><td class="rxNR">' + $("#rxNR").val() + '</td><td class="txRST">' + $("#txRST").val() + '</td><td class="txNR">' + $("#txNR").val());
								} else {
									updateQSO.html('<td class="frequency">' + $("#frequency").val() + '</td><td class="date">2011-10-' + $("#day").val() + '</td><td class="time">' + $("#hour").val() + ":" + $("#minute").val() + '</td><td class="rxCallsign">' + $("#rxCallsign").val().toUpperCase() + '</td><td class="rxRST">' + $("#rxRST").val() + '</td><td class="rxNR">' + $("#rxNR").val() + '</td><td class="txRST">' + $("#txRST").val() + '</td><td class="txNR">' + $("#txNR").val());								
								}
								updateQSO = null;
								timeStamp = savedTimeStamp;
								savedTimeStamp = null;								
							} else {
								if ($("#contest").attr("selectedIndex") == 0) {
									$("#qsoRows").append('<tr class="qsoRow" id="' + $("#txNR").val() + '"><td class="frequency">' + $("#frequency").val() + '</td><td class="date">2011-09-' + $("#day").val() + '</td><td class="time">' + $("#hour").val() + ":" + $("#minute").val() + '</td><td class="rxCallsign">' + $("#rxCallsign").val().toUpperCase() + '</td><td class="rxRST">' + $("#rxRST").val() + '</td><td class="rxNR">' + $("#rxNR").val() + '</td><td class="txRST">' + $("#txRST").val() + '</td><td class="txNR">' + $("#txNR").val() + '</td></tr>');
								} else {
									$("#qsoRows").append('<tr class="qsoRow" id="' + $("#txNR").val() + '"><td class="frequency">' + $("#frequency").val() + '</td><td class="date">2011-10-' + $("#day").val() + '</td><td class="time">' + $("#hour").val() + ":" + $("#minute").val() + '</td><td class="rxCallsign">' + $("#rxCallsign").val().toUpperCase() + '</td><td class="rxRST">' + $("#rxRST").val() + '</td><td class="rxNR">' + $("#rxNR").val() + '</td><td class="txRST">' + $("#txRST").val() + '</td><td class="txNR">' + $("#txNR").val() + '</td></tr>');
								}
							}
							$("#rxCallsign").val("");
							$("#rxRST").val("599");
							$("#rxNR").val("");
							$("#txRST").val("599");
							incrementNr("txNR");
							$("#minute").addClass("flagInput");
							$("#rxCallsign").focus();
							break;
						case 'txRST':
							$(this).mandantory("Missing","#F36A86");
							validRST('txRST');
							$("#txNR").focus();
							break;
						case 'txNR':
							$(this).mandantory("Missing","#F36A86");
							$("#rxNR").focus();
							break;
						default:
							break;
					}
				default:
					var key = event.keyCode;
			}
		} else if (event.ctrlKey) {
			switch (event.keyCode) {
				case 38:
					incrementRS("rxRST","9");
					break;
				case 40:
					decrementRS("rxRST","9");
					break;
				default:
					if ((event.charCode == 77) || (event.charCode == 109)) {
						$("#mode").click();
						$("#rxCallsign").focus();
						return false;
					}
					var key = event.keyCode;
			}
		} else if (event.altKey) {
			switch (event.keyCode) {
				case 38:
					incrementRS("txRST","9");
					break;
				case 40:
					decrementRS("txRST","9");
					break;
				default:
					var key = event.keyCode;
			}
		}
	});

	$(".qsoRow").live("click",function() {

		updateQSO = $(this);

		if (!savedTimeStamp) {
			savedTimeStamp = timeStamp;
		}

		$(this).find("td").not(".date, .time").each(function() {
			var cell = $(this);
			$("#" + cell.attr("class")).val(cell.html());
		});

		var date = $(this).find(".date").html();
		var time = $(this).find(".time").html().split(":");

		var y = date.substr(0,4);
		var m = date.substr(5,2);
		var d = date.substr(8,2);
		
		m = (m.substr(0,1) != "0") ? parseInt(m) : parseInt(m.substr(1,1));
		d = (d.substr(0,1) != "0") ? parseInt(d) : parseInt(d.substr(1,1));
		time[0] = (time[0].substr(0,1) != "0") ? parseInt(time[0]) : parseInt(time[0].substr(1,1));
		time[1] = (time[1].substr(0,1) != "0") ? parseInt(time[1]) : parseInt(time[1].substr(1,1));

		timeStamp = setTime(parseInt(date.substr(0,4)),parseInt(m),parseInt(d),parseInt(time[0]),parseInt(time[1]));

		$(".inputField").removeClass("mandantoryflag");
		$("#rxCallsign").focus();
	});

	$("#paperlogqsotab").click(function() {
		$("#rxCallsign").focus();
	});

	$("#logHeaderArea").ajaxError(function(e, xhr, settings, exception) {
		if (xhr.status == "401") {
			$("#loginPincode").val("");
			$("#loginMsg").html(xhr.statusText);
			$("#loginPincode").html("");
			$("#login").dialog("open");
			$("#loginPincode").focus();
		} else if (xhr.status == "402") {
			$("#login").dialog("close");
			$("#alertMessage").html(xhr.statusText);
			$("#pincode").html("");
			$("#alertBox").show("slide",{},500);			
		} else {
			$("#alertMessage").html(xhr.statusText);
			$("#pincode").html("");
			$("#alertBox").show("slide",{},500);	
		}
		return false;
	});

	$("#loginPincode").keypress(function(event) {
		if (event.keyCode == 13) {
			$.post("paperlog.php",{command : "doLogin", contestCallsign : $("#contestCallsign").val(), contest : $("#contest").val(), pincode : $("#loginPincode").val()},function(data) {
				$("#login").dialog("close");
			});
		}
	});

	$('#login').dialog({
		autoOpen: false,
		width: 460,
		modal: true,
		resizable: false,
		draggable: false
	});

	$("#saveLog").live("click",function() {
		$("#alertBox").hide();
		$("input.PaperLogHeader").mandantory("Required info","#F36A86","mandantoryHeaderInfo");
		if ($("input.mandantoryHeaderInfo").length != 0) return;
		if ($("#logHeaderArea").find(".mandantoryhighlite").length == 0) {
			$.post("paperlog.php",{command : "savePaperlog", logHeaders : $("#logHeader").serialize(), qso : $("#qsoArea").html()},function(data) {
				message = jQuery.parseJSON(data);
				$("#alertMessage").html(message.messagetext);
				$("#pincode").html(message.pincode);
				$("#alertBox").show("slide",{},500);
			});
		}
	});

	$("#loadLog").live("click",function() {		
		$("#alertBox").hide();
		$("#contestCallsign").mandantory("Required info","#F36A86","mandantoryHeaderInfo");
		if ($(".mandantoryHeaderInfo").length == 0) {
			$.post("paperlog.php",{command : "loadPaperlogHeaders", contestCallsign : $("#contestCallsign").val(), contest : $("#contest").val()},function(data) {
				headers = jQuery.parseJSON(data);
				$("#contestCallsign").val(headers.contestCallsign);
				$("#contestContactName").val(headers.contestContactName);
				$("#contestContactAddress").val(headers.contestContactAddress);
				$("#contestContactPostalCode").val(headers.contestContactPostalCode);
				$("#contestContactCity").val(headers.contestContactCity);
				$("#contestContactCountry").val(headers.contestContactCountry);
				$("#contestContactEmail").val(headers.contestContactEmail);
				$("#contestOperators").val(headers.contestOperators);
				$("#contestSoapBox").val(headers.contestSoapBox);
				$("#contest").attr("selectedIndex",headers.contest);
				$("#categoryassistedPL").val(headers.categoryAssisted);

				$('input[name="contestClassPL"]').attr("checked",0);
				$('input[value="' + headers.contestClassPL + '"]').attr("checked",1);

				$("#qsoArea").load("paperlog.php",{command : "loadPaperlogQSO", logId : headers.logId});

				if ($("#contest").attr("selectedIndex") == 0) {
					$("#rxRST,#txRST").val("599");
				} else {
					$("#rxRST,#txRST").val("59");
				}
			});
		}
	});

	$("#sendLog").live("click",function() {		
		$("#alertBox").hide();

		$("input.mandatory").mandantory("Required info","#F36A86","mandantoryHeaderInfo");
		if ($("input.mandantoryHeaderInfo").length != 0) return;

		if (1*$(".qsoRow").length == 0) {
			$("#alertMessage").html("There is no QSO in this log!");
			$("#pincode").html("");
			$("#alertBox").show("slide",{},500);
			return;
		}

		var xml = "<qsoLines>";
		$(".qsoRow").each(function(row) {
			xml += "<qso>";
			$(this).find("td").each(function(column) {
				var cell = $(this);
				var tagName = cell.attr("class");
				xml += "<" + tagName + ">" + cell.html() + "</" + tagName + ">";
			});
			xml += "</qso>";
		});
		xml += "</qsoLines>"
		
		$.post("paperlog.php",{command : "sendLog", logHeaders : $("#logHeader").serialize(), xmlstring : xml},function(data) {
			message = jQuery.parseJSON(data);
			$("#alertMessage").html(message.messagetext);
			$("#pincode").html(message.pincode);
			$("#alertBox").show("slide",{},500);
		});
	});

	$("#paperlogqsotab").click(function() {
		$("#alertBox").hide();
	});
}
