function JSRefParser()
{
	this.is_utf8 = false;
	this.ref_dec =  function(ref)
									{
	    							var query = '';

	    							if(ref.indexOf('yandex.ru') > 0)
	    							{
	    								query = this.yandex(ref);
	    							}
	    							else if(ref.indexOf('google.') > 0)
	    							{
	    								query = this.google(ref);
	    							}
	    							else if(ref.indexOf('mail.ru') > 0)
	    							{
	    								query = this.mail_ru(ref);
	    							}
	    							else if(ref.indexOf('icq.com') > 0)
	    							{
	    								query = this.icq(ref);
	    							}
	    							else if(ref.indexOf('yahoo.com') > 0)
	    							{
	    								query = this.yahoo(ref);
	    							}
	    							else if(ref.indexOf('rambler.ru') > 0)
	    							{
	    								query = this.rambler(ref);
	    							}
	    							else if(ref.indexOf('aport.ru') > 0)
	    							{
	    								query = this.aport(ref);
	    							}
	    							else if(ref.indexOf('msn.com') > 0)
	    							{
	    								query = this.msn(ref);
	    							}
	    							else if(ref.indexOf('live.com') > 0)
	    							{
	    								query = this.live_com(ref);
	    							}
	    							else if(ref.indexOf('nigma.ru') > 0)
	    							{
	    								query = this.nigma(ref);
	    							}
	    							else if(ref.indexOf('webalta.') > 0)
	    							{
	    								query = this.webalta(ref);
	    							}
	    							else if(ref.indexOf('bigmir.net') > 0)
	    							{
	    								query = this.bigmir(ref);
	    							};

	    							this.is_utf8 = false;

									try
									{
										query = decodeURI(query);
										this.is_utf8 = true;
									}
									catch(e)
									{
									};

	    							return query;
									};
};

function trim(s)
{
	s = s.replace(/^[\x00-\x20]+/g, '');
	s = s.replace(/[\x00-\x20]+$/g, '');

	return s;
};

JSRefParser.prototype.yandex = function(ref)
{
	var query = '';

	if(/text=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	}

	return query;
};

JSRefParser.prototype.google = function(ref)
{
	var query = '';

	if(/[\?&](as_q|q)=([^&]*)/i.test(ref))
	{
		query = RegExp.$2;
	};

	return query;
};

JSRefParser.prototype.mail_ru = function(ref)
{
	var query = '';

	if(/[\?&]q=([^&]*)/i.test(ref))
	{
		query = RegExp.$1;
	};

	return query;
};

JSRefParser.prototype.icq = function(ref)
{
	var query = '';

	if(/[\?&]q=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	}
	else if(/[\?&]as_q=([^&]*)/.test(ref))
	{
		query = trim(RegExp.$1);
	};

	return query;
};

JSRefParser.prototype.yahoo = function(ref)
{
	var query = '';

	if(/[\?&]p=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	}
	else
	{
		ref = unescape(ref);

		if (/[\?&]p=([^&]*)/i.test(ref))
		{
			query = trim(RegExp.$1);
		};
	};

	return query;
};

JSRefParser.prototype.rambler = function(ref)
{
	var query = '';

	if (/[\?&]query=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	};

	return query;
};

JSRefParser.prototype.aport = function(ref)
{
	var query = '';

	if(/[\?&]r=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	};

	return query;
};

JSRefParser.prototype.msn = function(ref)
{
	var query = '';

	if(/[\?&]q=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	};

	return query;
};

JSRefParser.prototype.live_com = function(ref)
{
	var query = '';

	if(/[\?&]q=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	}

	return query;
};

JSRefParser.prototype.nigma = function(ref)
{
	var query = '';

	if (/[\?&]s=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	}
	else if (/&request_str=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	};

	return query;
};

JSRefParser.prototype.webalta = function(ref)
{
	var query = '';

	if(/[\?&]q=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	};

	return query;
};

JSRefParser.prototype.bigmir = function(ref)
{
	var query = '';

	if (/[\?&]q=([^&]*)/i.test(ref))
	{
		query = trim(RegExp.$1);
	};

	return query;
};
