﻿// Zależy od:
//
// jQuery
// JSON: http://www.json.org/json2.js funkcja 'stringify'



///////////////////////////////////////////////
// Najpierw innicjujemy rozszerzenia.
///////////////////////////////////////////////

// Contains nieczuły na wielkość znaków.
jQuery.extend(jQuery.expr[':'].ContainsIC = function(a, i, m) { return jQuery(a).text().toLowerCase().indexOf(m[3].toLowerCase()) >= 0; });


///////////////////////////////////////////////
// Funkcje pomocnicze.
///////////////////////////////////////////////

// Włącza/wyłącza kontrolkę.
jQuery.fn.enabled = function(enable, text)
{
	if (enable)
	{
		$(this).removeAttr("disabled");
	}
	else
	{
		$(this).attr("disabled", "disabled");
		if ($(this).is('select'))
		{
			$(this)[0].options.length = 0;
		}
	}

	if (null != text)
	{
		$(this).val(text);
	}
}

// Wypełnia listę rozwijaną na podstawie wyniku funkcji webservice'u.
// Przykład:
// $("#cmbWojewodztwo").fillComboBox("WebService.asmx/DajWojewodztwa", "wybierz z listy", "ID", "Name");
jQuery.fn.fillComboBox = function(webServiceMethodUrl, firstItemText, idProperty, nameProperty, webServiceParams)
{
	// jeśli jest to lista rozwijana:
	if ($(this).is('select'))
	{
		var cmb = $(this)[0];
		cmb.options.length = 0;

		// utworzenie parametrów web servic'a:
		var paramList;
		if (null != webServiceParams)
		{
			paramList = '{';
			for (var param in webServiceParams)
			{
				paramList += '"' + param + '":"' + webServiceParams[param] + '",';
			}

			paramList = paramList.substring(0, paramList.length - 1) + '}';
		}
		else
		{
			paramList = '{}'
		}

		$.ajax
		({
			type: "POST"
			, url: webServiceMethodUrl
			, contentType: "application/json; charset=utf-8"
			, dataType: "json"
			, data: paramList

			, success: function(collection)
			{

				// tworzę pierwszy element jeśli trzeba:
				if (null != firstItemText)
				{
					var newOption = document.createElement('option');
					newOption.text = firstItemText;
					newOption.value = -1;
					cmb.options.add(newOption);
				}

				// tworzę kolejne elementy:
				for (var item in collection.d)
				{
					var newOption = document.createElement('option');
					newOption.value = collection.d[item][idProperty];
					newOption.text = collection.d[item][nameProperty];
					cmb.options.add(newOption);
				}
			}

			, error: function(xhr, msg)
			{
				alert("Błąd dostępu do danych.");
			}
		});
	}

};

function checkPostCode (postCode)
{
	var regexp = new RegExp(/^\d{2}-\d{3}$/);
	return (null != postCode && '' != postCode && regexp.test(postCode));
}

// Wywołanie WebService'u.
// Przykład:
// var wsParamList = { "nrStrony": 0, "kodPocztowy": kodPocztowy };
// callWebService("WebService.asmx/DajIloscPoKodachPocztowych", wsParamList, function(result) { countPages = Math.ceil(result / 15); }, function errorFunction(xhr, msg) { alert('Błąd'); }, true);
function callWebService(webServiceMethod, wsParamList, successFunction, errorFunction, synchronous)
{
	$.ajax
	({
		type: "POST"
		, url: webServiceMethod
		, contentType: "application/json; charset=utf-8"
		, multiple: true
		, dataType: "json"
		, async: !synchronous
		, data: JSON.stringify(wsParamList, replacer)

		, success: function(collection) { if (null != successFunction) successFunction(collection.d); }
		, error: function(xhr, msg) { if (null != errorFunction) errorFunction(xhr, msg); }
	});
}

// funkcja wykorzystywana w JSON.stringify do wybierania wartości właściwości obiektu.
function replacer(key, value)
{
	if (typeof value === 'number' && !isFinite(value))
	{
		return String(value);
	}
	return value;
}

/*
Zamienia zakodowane adresy mailowe we właściwe. Odnajduje również sformułowania 'mailto'.

Przykład:
$('a').defuscate();
<a href="mailto:login##tutaj można wstawić cokolwiek##przyklad.com">login##tutaj można wstawić cokolwiek##przyklad.com</a>
*/
jQuery.fn.defuscate = function(settings)
{
	settings = jQuery.extend({ link: true }, settings);

	var regex = /\b([A-Z0-9._%-]+)##[^#]+##((?:[A-Z0-9-]+\.)+[A-Z]{2,6})\b/gi;

	return this.each(function()
	{
		if ($(this).is('a[@href]'))
		{
			// Jeśli jest to link <a>, odkodowuje href'a:
			$(this).attr('href', $(this).attr('href').replace(regex, '$1@$2'));
			// Zaznaczam, że bawimy się linkiem:
			var is_link = true;
		}

		// Odkodowanie zawartości elementu:
		$(this).html($(this).html().replace(regex, (settings.link && !is_link ? '<a href="mailto:$1@$2">$1@$2</a>' : '$1@$2')));
	});
};

// Przykład: 
function onKeyEnter(control, func)
{
	$(control).keyup(function(e)
	{
		if (e.keyCode == 13)
		{
			func();
		}
	});
}

function ReplacePolishChars(str)
{
	return str.replace(/ą/gi, "a").replace(/ć/gi, "c").replace(/ę/gi, "e").replace(/ł/gi, "l").replace(/ń/gi, "n").replace(/ó/gi, "o").replace(/ś/gi, "s").replace(/[żź]/gi, "z");
}


