String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g,'')}

$(function() {

    $('a.toblank').attr({target:'_blank'});

    // Textareas elastics
    $('.molla').elastic();

    $('.ancla-animada').click(function(ev){
       ev.stopPropagation();
       
       var anchor = $(this).attr('href');
       position_id = anchor.indexOf('#',0);

       if(position_id >=0)
       {
           var anchor_id = anchor.substr(position_id, anchor.length);
           $('html,body').animate({scrollTop: $(anchor_id).offset().top},'slow');
       }
    });


    // Inputs amb valors per defecte
    $('.with-placeholder').defaultValue();
   
    mostraIframe();
    dialogForms();
    modalWindows();

    $('.boto_verd_form_reg1_int, .button_filtre').click(function() {
        $(this).stop().animate({
            'opacity': 0.5
        }, 500)
    });
    
});

var dialog_iframitzat;
function mostraIframe(){
    $(".mostraIframe").click(function(e)
    {
        e.preventDefault();
        var $this = $(this);
        var horitzontalPadding = 15;
        var verticalPadding = 15;
        
        dialog_iframitzat = $('<iframe id="iframitzat" src="'+this.href+'" />').dialog({
            title: '',
            autoOpen: true, // que s'obri en la creacio
            width: 800,
            height: 600,
            modal: true,
            resizable: false,
            autoResize: true,
            closeOnEscape: true,
            dialogClass: "no_close"
        }).width(800 - horitzontalPadding).height(600 - verticalPadding);
    });
    // Per tancar la finestra des de dins l'iframe:
    // <a href="javascript:void(0);" onclick="if(window.parent.dialog_iframitzat != undefined) window.parent.dialog_iframitzat.dialog('close');">TANCAR</a>
}

function dialogForms() {
  $('a.dialogForm').click(function() {
    var a = $(this);
    $.get(a.attr('href'),function(resp){
      var dialog = $('<div>').attr('id','dialog-form').html(resp);
      
      if(dialog.find(':submit').size() > 0){
          dialog.find(':submit').hide();
          var buttons = {
              'Enviar': function() {submitFormWithAjax($(this).find('form'),$(this));},
              'Cancel': function() {$(this).dialog('close');}
            };
      } else {
          var buttons = {
              'Cerrar': function() {$(this).dialog('close');}
            };
      }
      $('body').append(dialog);
      dialog.find(':submit').hide();
      dialog.dialog({
        title: a.attr('title') ? a.attr('title') : '',
        modal: true,
        minHeight: 250,
        minWidth: 350,
        buttons: buttons,
        close: function() {$(this).remove();},
        width: 'auto',
        height: 'auto'
      });
    }, 'html');
    return false;
  });
}

function makePopupForm(element)
{
    element.find(':submit').hide();
    element.dialog({
        autoOpen: false,
        title: element.attr('title') ? element.attr('title') : '',
        modal: true,
        minHeight: 250,
        minWidth: 350,
        buttons: {
          'Enviar': function() {submitFormWithAjax($(this).find('form'),$(this));}
        },
        width: 'auto'
    });
}

function makePopupWindow(element)
{
    element.find(':submit').hide();
    element.dialog({
        autoOpen: false,
        title: element.attr('title') ? element.attr('title') : '',
        modal: true,
        minHeight: 250,
        minWidth: 350,
        buttons: {
          'Ok': function() {$(this).dialog('close');}
        },
        width: 'auto'
    });
}

function modalWindows() {
  $('a.modalWindow').click(function() {
    var a = $(this);
    $.get(a.attr('href'),function(resp){
      var modal = $('<div>').attr('id','modal-window').html(resp);
      $('body').append(modal);
      modal.dialog({
        title: a.attr('title') ? a.attr('title') : '',
        modal: true,
        width: 640,
        height: 450,
        buttons: {
          'Ok': function() {$(this).dialog('close');}
        },
        close: function() {$(this).remove();}
      });
    }, 'html');
    return false;
  });
}

function jqConfirm(element,fnCallback)
{
    $( element ).dialog({
            resizable: false,
            height: 'auto',
            modal: true,
            buttons: {
                    "Ok": function() {
                            fnCallback();
                            $( this ).dialog( "close" );

                    },
                    Cancel: function() {
                            $( this ).dialog( "close" );
                    }
            }
    });
}

/*

Per fer submit de Formularis via Ajax

*/

function submitFormWithAjax(form,dialog) {
  form = $(form);
  $.ajax({
    url: form.attr('action'),
    data: form.serialize(),
    type: (form.attr('method')),
    dataType: 'json',
    success: function(response){
        form.html($('<p>').addClass('success').html(response.message));
        dialog.dialog( "option", "buttons", {"Ok": function() {$(this).dialog("close");}} );
        dialog.dialog( "option", "minHeight", 200 );
    },
    error: function(response) {
        
        form.find(".form-errors").html(response.responseText);
        
    }

  });
  return false;
}

/**
 * http://civicactions.com/blog/jquery_hook_or_callback_function 
 */
jQuery.extend({
  executeHook: function(hookName) {
    if (typeof window[hookName] == 'function') {
      window[hookName]();
    } else {
      //debug
    }
  }
});


/* Texte per defecte */

$.fn.defaultText = function(options) {
    var defaults = {
        css: 'dimmed'
    };

    var options = $.extend({}, defaults, options);

    if (!('text' in options)) return this;

    var input = this[0],
        $input = this,
        offset = $input.offset();

    function hide() {
      $div.hide();
      $input.add($div).removeClass(options.css);
    };

    function show() {
       $div.show();
       $input.add($div).addClass(options.css);
    }

    function focus() {
        if (input.value.length) hide();
        else show();
    };

    // Create div to put placeholder text in
    var $div = $('<div>' + options.text + '</div>')
        // Position it to the same place as the input box:
        .css({position: 'absolute',
               top: offset.top,
               left: offset.left + 4,
               cursor: 'text'
            })
        .click(function() {
            $input.focus();
            focus();
        })
        .addClass(options.css + ' unselectable')
        .appendTo('body');

    // Also add the class to the input box:
    $input
        .addClass(options.css)
        .keyup(focus).blur(function() {
            if (!input.value.length) show();
        });

    return this;
};


/*
 * 	Character Count Plugin - jQuery plugin
 * 	Dynamic character count for text areas and input fields
 *	written by Alen Grakalic
 *	http://cssglobe.com/post/7161/jquery-plugin-simplest-twitterlike-dynamic-character-count-for-textareas
 *
 *	Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)
 *	Dual licensed under the MIT (MIT-LICENSE.txt)
 *	and GPL (GPL-LICENSE.txt) licenses.
 *
 *	Built for jQuery library
 *	http://jquery.com
 *
 */

(function($) {

	$.fn.charCount = function(options){

		// default configuration properties
		var defaults = {
			allowed: 140,
			warning: 25,
			css: 'limitedtextarea_counter',
			counterElement: 'span',
			cssWarning: 'limitedtextarea_counter_warning',
			cssExceeded: 'limitedtextarea_counter_exceeded',
			counterText: ''
		};

		var options = $.extend(defaults, options);

		function calculate(obj){
			var count = $(obj).val().length;
			var available = options.allowed - count;
			if(available <= options.warning && available >= 0){
				$(obj).next().addClass(options.cssWarning);
			} else {
				$(obj).next().removeClass(options.cssWarning);
			}
			if(available < 0){
				$(obj).next().addClass(options.cssExceeded);
			} else {
				$(obj).next().removeClass(options.cssExceeded);
			}
			$(obj).next().html(options.counterText + available);
		};

		this.each(function() {
			$(this).after('<'+ options.counterElement +' class="' + options.css + '">'+ options.counterText +'</'+ options.counterElement +'>');
			calculate(this);
			$(this).keyup(function(){calculate(this)});
			$(this).change(function(){calculate(this)});
		});

	};

})(jQuery);

// HeartBeat

(function($) {
	$.fn.heartBeat = function(options){
		// Heart beat plugin
		//
		// build main options before element iteration
		var opts = $.extend({}, $.fn.heartBeat.defaults, options);

		// Apply the modification on each item in the selector.
		return this.each(function() {
			var $this = $(this);
			// build element specific options
			var o = opts;

		 if (!o.alwaysBeat){
			$this.bind("mouseover", function(){
					// set the interval
					// TODO
				})
				.bind("mouseout", function(){
					// clear the interval
					// TODO
				});
		 }
		 else {
			 var myThis = $(this);
			 $.fn.heartBeat.start($(this), o);
			 var intervalFct = function(){ $.fn.heartBeat.start(myThis, o); }; // Fix for setInterval bug between browser
			 var intervalId = setInterval(intervalFct, o.delayBetweenAnimation + o.delay * 2);
			 $(this).attr("intervalId", intervalId);
		 }

		});
	};

	$.fn.heartBeat.start = function(thisItem, options) {
		var opts = $.extend({}, $.fn.heartBeat.defaults, options);

		if (thisItem.css("opacity") == opts.opacityMax){
			thisItem.fadeTo(opts.delay, opts.opacityMin, function(){ thisItem.fadeTo(opts.delay, opts.opacityMax); });
		}
	};

	$.fn.heartBeat.stopHeartBeat = function(options){
		// Stop the heart beat.
		return this.each(function() {
			var intervalId = $(this).attr("intervalId");
			clearInterval(intervalId);
			$(this).attr("intervalId", 0);
		});
	}

	$.fn.heartBeat.defaults = {
		opacityMax: "1",
		opacityMin: "0.5",
		delay:"75", // in ms
		delayBetweenAnimation: 1000,
		alwaysBeat: true
	};

 })(jQuery);
