﻿String.prototype.startsWith = function (str, ignoreCase)
{	
	if (ignoreCase)
	{
		return this.toLowerCase().indexOf(str.toLowerCase()) === 0;
	}
	else
	{
		return this.indexOf(str) === 0;
	}
};

String.prototype.contains = function (str, ignoreCase)
{
	if (ignoreCase)
	{
		return this.toLowerCase().indexOf(str.toLowerCase()) >= 0;
	}
	else
	{
		return this.indexOf(str) >= 0;
	}
};

// Henter en verdi fra querystring
$.query = function (name)
{
	var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
	if (!results) return 0;
	return (results[1] || 0);
};

// Finner et element i et jQuery objekt
// Returnerer null hvis ingen elementer matcher
// Kaster exception hvis mer enn ett element matcher
// Bruk: $.singleOrDefault(lst, function(id, elem) { return <bool>; }
$.singleOrDefault = function (lst, func)
{
	var elem = null;
	var _func = function (i, e)
	{
		var hit = func(i, e);
		if (hit)
		{
			if (elem != null) throw Error("Sequence contains multiple matching elements.");
			elem = e;
		}
	};
	$.each(lst, _func);
	return elem;
};

// Finner et element i et jQuery objekt
// Kaster exception hvis ingen elementer matcher
// Kaster exception hvis mer enn ett element matcher
// Bruk: $.single(lst, function(id, elem) { return <bool>; }
$.single = function (lst, func)
{
	var elem = $.singleOrDefault(lst, func);
	if (elem == null) throw Error("Sequence contains no matching elements.");
	return elem;
};

$.indexOf = function (lst, func)
{
	for (var index = 0; index < lst.length; ++index)
	{
		var elem = lst[index];
		var hit = func(elem);
		if (hit) return index;
	}
	return -1;
}
