/**
*       @name                                                   Elastic
*       @descripton                                             Elastic is Jquery plugin that grow and shrink your textareas automaticliy
*       @version                                                1.6.3
*       @requires                                               Jquery 1.2.6+
*
*       @author                                                 Jan Jarfalk
*       @author-email                                   jan.jarfalk@unwrongest.com
*       @author-website                                 http://www.unwrongest.com
*
*       @licens                                                 MIT License - http://www.opensource.org/licenses/mit-license.php
*/
(function(jQuery){jQuery.fn.extend({elastic:function(){var mimics=['paddingTop','paddingRight','paddingBottom','paddingLeft','fontSize','lineHeight','fontFamily','width','fontWeight'];return this.each(function(){if(this.type!='textarea'){return false;}
var $textarea=jQuery(this),$twin=jQuery('<div />').css({'position':'absolute','display':'none','word-wrap':'break-word'}),lineHeight=parseInt($textarea.css('line-height'),10)||parseInt($textarea.css('font-size'),'10'),minheight=parseInt($textarea.css('height'),10)||lineHeight*3,maxheight=parseInt($textarea.css('max-height'),10)||Number.MAX_VALUE,goalheight=0,i=0;if(maxheight<0){maxheight=Number.MAX_VALUE;}
$twin.appendTo($textarea.parent());var i=mimics.length;while(i--){$twin.css(mimics[i].toString(),$textarea.css(mimics[i].toString()));}
function setHeightAndOverflow(height,overflow){curratedHeight=Math.floor(parseInt(height,10));if($textarea.height()!=curratedHeight){$textarea.css({'height':curratedHeight+'px','overflow':overflow});}}
function update(){var textareaContent=$textarea.val().replace(/&/g,'&amp;').replace(/  /g,'&nbsp;').replace(/<|>/g,'&gt;').replace(/\n/g,'<br />');var twinContent=$twin.html();if(textareaContent+'&nbsp;'!=twinContent){$twin.html(textareaContent+'&nbsp;');if(Math.abs($twin.height()+lineHeight-$textarea.height())>3){var goalheight=$twin.height()+lineHeight;if(goalheight>=maxheight){setHeightAndOverflow(maxheight,'auto');}else if(goalheight<=minheight){setHeightAndOverflow(minheight,'hidden');}else{setHeightAndOverflow(goalheight,'hidden');}}}}
$textarea.css({'overflow':'hidden'});$textarea.keyup(function(){update();});$textarea.live('input paste',function(e){setTimeout(update,250);});update();});}});})(jQuery);

/**
* jQuery Remote Validation Plugin for the Nephtali Web Framework
*
* @author Adam Richardson of Envision Internet Consulting, LLC
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
(function($){
	$.fn.validate = function(options) {
		var defaults = {
			renderValid: function(){},
			renderInvalid: function(){},
			highlightError: function(){}
		};
		var options = $.extend(defaults, options);
		
		return this.each(function() {
			var obj = $(this);
			var actionUrl = obj.attr("action");
			var currentErrorField = '';
		
			$("input[type=text], input[type=email], input[type=tel], input[type=url], input[type=number], input[type=password], input[type=date], input[type=datetime], input[type=month], input[type=week], textarea", obj).live('blur', function(){
				var field = $(this);
				var fieldName = field.attr('name');
				var fieldValue = field.val();
				var urlComponents = '';
				if (actionUrl.indexOf("?") >=0) {
					urlComponents = '&nmode=validate&nports='
				} else {
					urlComponents = '?nmode=validate&nports='
				}
		
				$.post(
					actionUrl + urlComponents + fieldName,
					fieldName + "=" + fieldValue,
					function(data){
						if(data[0]){ // invalid
							if(!field.hasClass("nephtaliInvalid")){
								field.addClass("nephtaliInvalid");
							}
							options.renderInvalid(field, data[0][1]);
							if(currentErrorField.length == 0){
								currentErrorField = fieldName;
								options.highlightError(field);
							}
						}else{       // valid
							options.renderValid(field);
						}
					},
					"json"
				);
			}).live('focus', function(){
				if($(this).hasClass("nephtaliInvalid")){
					options.highlightError($(this));
					currentErrorField = $(this).attr("name");
				}
			});
		});
	};
})(jQuery);

// code specific to nephtaliproject.com
function supports_input_placeholder() {
  var i = document.createElement('input');
  return 'placeholder' in i;
}

function hide_info_divs() {
	$("#pipe-info, #view-info, #optblock-info, #data-info, #placeholder-info").hide();
	$("mark.pipe-mark, mark.view-mark, mark.optblock-mark, mark.data-mark, mark.placeholder-mark").removeClass('highlight');
}

$(function(){
	$("form.validation").validate({
		renderInvalid: function(field, errorMsg){
			field.removeClass("invalid").removeClass("valid").addClass("invalid");
			// remove any existing span
			$('#' + field.attr("name") + '-feedback').remove();
			field.after("<span id=\""+field.attr("name")+"-feedback\" class=\"field-feedback hidden\">"+errorMsg+"<\/span>");
		},
		renderValid: function(field){
			field.removeClass("invalid").removeClass("valid").addClass("valid");
			$('#'+field.attr("name")+'-feedback').remove();
		},
		highlightError: function(field){
			// Not using
		}
	});
	
	$("form#search").submit(function(){
		var q = encodeURIComponent($("input#q").val());
		var url = "http://nephtaliproject.com/search/?nmode=htmlfrag&npipe=search&q=" + q;
		$("#canvas").html("<img src='/images/ajax-loader.gif' width='16' height='16' />").load(url);
		return false;
	});
	$("textarea").elastic();
	$("#port_form").hide();
	$("#pipe_form").hide();
	$("#link_add_port").click(function(){
		$("#code_form").hide();
		$("#pipe_form").hide();
		$("#port_form").show();
		$("#port_name").focus();
		return false;
	});
	$("#link_add_pipe").click(function(){
		$("#code_form").hide();
		$("#port_form").hide();
		$("#pipe_form").show();
		$("#pipe_name").focus();
		return false;
	});
	$(".button_cancel").live('click',function(){
		$("#port_form").hide();
		$("#pipe_form").hide();
		$("#code_form").show();
	});
	$("#port_type").change(function () {
		var url = "/staging/port_staging?nmode=htmlfrag&npipe=port_settings&port_type=";
		var str = "";
		str = encodeURIComponent($(this).val());
		$("#port_options").html("<img src='/images/ajax-loader.gif' width='16' height='16' />").load(url + str);
	});
	$("#pipe_type").change(function () {
		var str = $(this).val();
		
		if (str == "Standard pipe") {
			var url = "/staging/standard_pipe_staging?nmode=htmlfrag&npipe=settings&pipe_type=" + encodeURIComponent(str);
		} else {
			var url = "/staging/action_pipe_staging?nmode=htmlfrag&npipe=settings&pipe_type=" + encodeURIComponent(str);
		}
		
		$("#pipe_options").html("<img src='/images/ajax-loader.gif' width='16' height='16' />").load(url);
	});
	$("#add_action_button").live('click', function(){
		var action_name = $("#action_name").val();
		
		var action_ports = new Array();
		$("input[name='action_ports[]']:checked").each(function() {action_ports.push($(this).val());});
		
		var url = "/staging/action_pipe_staging?nmode=htmlfrag&npipe=settings";
		var post_data = {'action_ports[]' : action_ports, 'action_name' : action_name };
		$("#pipe_options").html("<img src='/images/ajax-loader.gif' width='16' height='16' />").load(url, post_data);
		return false;
	});
	hide_info_divs();
	$("#pipe-link").click(function(event){
		hide_info_divs();
		$("#pipe-info").show();
		$("mark.pipe-mark").addClass('highlight');
		event.preventDefault();
	});
	$("#view-link").click(function(event){
		hide_info_divs();
		$("#view-info").show();
		$("mark.view-mark").addClass('highlight');
		event.preventDefault();
	});
	$("#optblock-link").click(function(event){
		hide_info_divs();
		$("#optblock-info").show();
		$("mark.optblock-mark").addClass('highlight');
		event.preventDefault();
	});
	$("#data-link").click(function(event){
		hide_info_divs();
		$("#data-info").show();
		$("mark.data-mark").addClass('highlight');
		event.preventDefault();
	});
	$("#placeholder-link").click(function(event){
		hide_info_divs();
		$("#placeholder-info").show();
		$("mark.placeholder-mark").addClass('highlight');
		event.preventDefault();
	});
	prettyPrint();
	$("form#contact").submit(function(event){
	   var url = "http://nephtaliproject.com/contact/?" + "nmode=htmlfrag&npipe=mail";
	   $("#status").html(
		  "<img src='/images/ajax-loader.gif' width='16' height='16' /> <span class='blurred'>LOADING &hellip;</span>"
	   );
	   $.post(
		  url,
		  {
			 "name" : $("#name").val(),
			 "email" : $("#email").val(),
			 "phone" : $("#phone").val(),
			 "message" : $("#message").val()
		  },
		  function(data) {
			 $('#status').html(data);
		  }
	   );
	   event.preventDefault();
	});
});
