/*
 * opcje:
 * tag: checkbox, radio, select, default->reszta
 */
(function($) {
	$.fn.validate = function(options) {
		
		var options = $.extend({
			validation: 'single',
			file: '/ajax/walidacja/walidacja.php',
			tag: 'text',
			phpValidation: true
		}, options);
		
		var $this = $(this);

		var errors = 0;

		function init()
        {
			if (options.validation == 'single')
            {
                if(
                    $this.attr('name') == "imie" ||
                    $this.attr('name') == "tresc" ||
                    $this.attr('name') == "telefon"
                )
                {
 					$this.blur(function(e) {
						validateSingle($(this));
					});
					$this.keyup(function(e) {
						validateSingle($(this));
					});
                }
				if (options.tag == 'checkbox' || options.tag == 'radio' || options.tag == 'select')
					$this.change(function() {
						validateSingle($(this));
					});
				else
                {
                /*
					$this.keyup(function(e) {
						validateSingle($(this));
					});
                */
					$this.change(function() {
						validateSingle($(this));
					});
                }
            }
			else
				validateAll();
		}
		
		function validateSingle($item) {
			var value = '';
			switch(options.tag) {
				case 'checkbox':
					$item.each(function(index, item) {
						if ($(item).attr('checked'))
							value += $(item).attr('value')+';';
					});
					value = value.substr(0, value.length - 1);
				break;
				case 'radio':
					$item.each(function(index, item) {
						if ($(item).attr('checked'))
							value = $(item).attr('value');
					});
				break;
				default:
					value = $item.val();
				break;
			}
			if (!options.phpValidation) {
				//tutaj twoja walidacja w JS
				var isOk = true;
				var komunikatOk = '';
				var komunikatFail = 'jest zle'

				switch($this.attr('name')) {
					case 'tresc':
						if (value.length < 10) {
							isOk = false;
        					komunikatFail = 'Twoje zapytanie jest zbyt krótkie.';
						}
                        else
                            komunikatOk = '';
					break;
					case 'email':
						komunikatOk = 'dobry email';
						komunikatFail = 'zly email';
						if (value == '') {
							isOk = false;
						}
					break;
					case 'telefon':
                        var ValidChars = "0123456789-+";
                        var IsNumber=true;
                        var Char;


                        for (i = 0; i < value.length && IsNumber == true; i++)
                        {
                            Char = value.charAt(i);
                            if (ValidChars.indexOf(Char) == -1)
                            {
                                IsNumber = false;
                            }
                        }
                        if(!IsNumber)
                        {
                            komunikatFail = 'Podany numer jest nieprawidłowy.';
                            isOk = false;
                        }
                        else if(value.length < 7)
                        {
                            komunikatFail = 'Podany numer jest zbyt krótki.';
                            isOk = false;
                        }
                        else
                            komunikatOk = '';
					break;
					case 'imie':
						if (value.length < 1) {
							isOk = false;
        					komunikatFail = 'To pole nie zostało uzupełnione.';
						}
                        else
                            komunikatOk = '';
					break;
				}
				if (isOk) {
					$('.' + $item.attr('name') + '_ok').html(komunikatOk).show();
					$('.' + $item.attr('name') + '_not_ok').hide();
				} else {
					$('.' + $item.attr('name') + '_not_ok').html(komunikatFail).show();
					$('.' + $item.attr('name') + '_ok').hide();
				}
			} else {
				//a tutaj walidacja w PHP
				$.ajax({
					type: 'post',
					url: options.file,
					data: 'value='+value+'&type='+$item.attr('name'), 
					async: false,
					success: function(response){
						var res = response.split(';');
						if (res[0] == '1') {
							$('.' + $item.attr('name') + '_ok').html(res[1]).show();
							$('.' + $item.attr('name') + '_not_ok').hide();
						}
						else {
							$('.' + $item.attr('name') + '_not_ok').html(res[1]).show();
							$('.' + $item.attr('name') + '_ok').hide();
						}
					}
				});
			}
		}
		
		function validateAll() {
			$find = $this.find('input:not(input:checkbox, input:radio, input:submit, input:button)');

			if ($find.length > 0)
				$find.each(function(index, itemm) {
					validateSingle($(itemm));
				});
			$find = $this.find('textarea');
			if ($find.length > 0)
				$find.each(function(index, itemm) {
					validateSingle($(itemm));
				});
			
			options.tag = 'select';
			$find = $this.find('select');
			if ($find.length > 0)
				$find.each(function(index, itemm) {
					validateSingle($(itemm));
				});

			$find = $this.find('input:checkbox');
			if ($find.length > 0) {
				options.tag = 'checkbox';
				validateSingle($find);
			}

			$find = $this.find('input:radio');
			if ($find.length > 0) {
				options.tag = 'radio';
				validateSingle($find);
			}
			
			$('.not_ok').each(function(index, item) {
				if ($(item).css('display') != 'none')
					errors++;
			});
		}
		
		init();
		if (errors > 0)
			return errors;
		else
			return this;
	};
})(jQuery);
