jQuery.fn.print = function(message) {
   return this.each(function() {
      $('<div class="result" />')
         .text(String(message))
         .appendTo($(this).find('.results'));
   });
};

//Przykład 1
//Powoduje błąd JavaScriptu, więc kod umieszczony zostaje w komentarzu.
//$(document).ready(function() {
//   function outerFn() {
//      $('#example-2').print('Funkcja zewnętrzna');
//      function innerFn() {
//         $('#example-1').print('Funkcja wewnętrzna');
//      }
//   }
//   $('#example-1').print('innerFn():');
//   innerFn();
//});

//Przykład 2
$(document).ready(function() {
   function outerFn() {
      $('#example-2').print('Funkcja zewnętrzna');
      function innerFn() {
         $('#example-2').print('Funkcja wewnętrzna');
      }
      innerFn();
   }
   $('#example-2').print('outerFn():');
   outerFn();
});

//Przykład 3
$(document).ready(function() {
   var globalVar;

   function outerFn() {
      $('#example-3').print('Funkcja zewnętrzna');
      function innerFn() {
         $('#example-3').print('Funkcja wewnętrzna');
      }
      globalVar = innerFn;
   }
   $('#example-3').print('outerFn():');
   outerFn();
   $('#example-3').print('globalVar():');
   globalVar();
});

//Przykład 4
$(document).ready(function() {
   function outerFn() {
      $('#example-4').print('Funkcja zewnętrzna');
      function innerFn() {
         $('#example-4').print('Funkcja wewnętrzna');
      }
      return innerFn;
   }
   $('#example-4').print('var fnRef = outerFn():');
   var fnRef = outerFn();
   $('#example-4').print('fnRef():');
   fnRef();
});

//Przykład 5
$(document).ready(function() {
   function outerFn() {
      function innerFn() {
         var innerVar = 0;
         innerVar++;
         $('#example-5').print('innerVar = ' + innerVar);
      }
      return innerFn;
   }
   var fnRef = outerFn();
   fnRef();
   fnRef();
   var fnRef2 = outerFn();
   fnRef2();
   fnRef2();
});

//Przykład 6
$(document).ready(function() {
   var globalVar = 0;
   function outerFn() {
      function innerFn() {
         globalVar++;
         $('#example-6').print('globalVar = ' + globalVar);
      }
      return innerFn;
   }
   var fnRef = outerFn();
   fnRef();
   fnRef();
   var fnRef2 = outerFn();
   fnRef2();
   fnRef2();
});

//Przykład 7
$(document).ready(function() {
   function outerFn() {
      var outerVar = 0;
      function innerFn() {
         outerVar++;
         $('#example-7').print('outerVar = ' + outerVar);
      }
      return innerFn;
   }
   var fnRef = outerFn();
   fnRef();
   fnRef();
   var fnRef2 = outerFn();
   fnRef2();
   fnRef2();
});

//Przykład 8
$(document).ready(function() {
   function outerFn() {
      var outerVar = 0;
      function innerFn1() {
         outerVar++;
         $('#example-8').print('(1) outerVar = ' + outerVar);
      }
      function innerFn2() {
         outerVar += 2;
         $('#example-8').print('(2) outerVar = ' + outerVar);
      }
      return {'fn1': innerFn1, 'fn2': innerFn2};
   }
   var fnRef = outerFn();
   fnRef.fn1();
   fnRef.fn2();
   fnRef.fn1();
   var fnRef2 = outerFn();
   fnRef2.fn1();
   fnRef2.fn2();
   fnRef2.fn1();
});

//Przykład 9
$(document).ready(function() {
   var readyVar = 0;
   function innerFn() {
      readyVar++;
      $('#example-9').print('readyVar = ' + readyVar);
   }
   innerFn();
   innerFn();
});

//Przykład 10
$(document).ready(function() {
   var counter = 0;
   $('#example-10 a.add').click(function() {
      counter++;
      $('#example-10').print('counter = ' + counter);
      return false;
   });
});

//Przykład 11
$(document).ready(function() {
   var counter = 0;
   $('#example-11 a.add').click(function() {
      counter++;
      $('#example-11').print('counter = ' + counter);
      return false;
   });
   $('#example-11 a.subtract').click(function() {
      counter--;
      $('#example-11').print('counter = ' + counter);
      return false;
   });
});

//Przykład 12
$(document).ready(function() {
   $('#example-12 a').each(function(index) {
      $(this).click(function() {
         $('#example-12').print('index = ' + index);
         return false;
      });
   });
});

//Przykład 13
$(document).ready(function() {
   $('#example-13 a').each(function(index) {
      function clickHandler() {
         $('#example-13').print('index = ' + index);
         return false;
      }

      $(this).click(clickHandler);
   });
});

//Przykład 14
//This causes a JavaScript error when the links are clicked!
$(document).ready(function() {
   function clickHandler() {
      $('#example-14').print('index = ' + index);
      return false;
   }

   $('#example-14 a').each(function(index) {
      $(this).click(clickHandler);
   });
});
