﻿function SubmitQuery(fields, url, form)
{
	if (form == null)
		form = document.forms[0];
		
	var data = GetFormData(form);
	var newData = {};
	var ftokens = fields.split(",");
	//cleanup
	for (var p in data)
	{
		var newName = p.substr(p.lastIndexOf("$") + 1);
		if (!ArrayContains(ftokens, newName))
			continue;
		newData[newName] = data[p];
	}
	var suffix = SerializeFormData(newData);
	window.location = url + "?" + suffix;
}

function SubmitQueryForm(fields, form)
{
	if (form == null)
		form = document.forms[0];
	var data = GetFormData(form);
	var newData = {};
	var ftokens = fields.split(",");
	//cleanup
	for (var p in data)
	{
		var newName = p.substr(p.lastIndexOf("$") + 1);
		if (!ArrayContains(ftokens, newName))
			continue;
		newData[newName] = data[p];
	}

	ModifyFormQuery(newData, form);
	SubmitForm(form);
}

function ModifyFormQuery(data, form)
{
	if (form == null)
		form = document.forms[0];
	var finalUrl = form.action;
	var indexOfQM = finalUrl.indexOf("?");
	if (indexOfQM > 5)
	{
		finalUrl = finalUrl.substr(0, indexOfQM);
	}
	var existingData = ParseQueryStringFromUrl(form.action);
	for (var p in data)
	{
		existingData[p] = data[p];
	}
	var suffix = SerializeFormData(existingData);
	if (suffix == "")
		form.action = finalUrl;
	else
		form.action = finalUrl + "?" + suffix;
}


function SubmitForm(form)
{
	if (form == null)
		form = document.forms[0];
	if (form.parentNode == null || form.parentNode.nodeType==11) //#11=documentFragment
	{
		document.body.appendChild(form);
		form.submit();
		document.body.removeChild(form);
	}
	else
	{
		form.submit();
	}
}


function SubmitQueryFormOnEnter(sender, e, fields)
{
	if (e.keyCode == 13)
	{
		SubmitQueryForm(fields);
		return false;
	}
}

function ParseQueryStringFromUrl(url)
{
	var index = url.indexOf("?");
	var data = {};
	if (index >= 0)
	{
		var query = url.substring(index+1);
		var tokens = query.split("&");
		for (var i = 0; i < tokens.length; i++)
		{
			var token = tokens[i];
			var nameValue = token.split("=");
			data[nameValue[0]] = nameValue[1];
		}
	}
	return data;
}
function SerializeFormData(namesValues)
{
	var first = true;
	var data = [];
	for (var p in namesValues)
	{
		var value = namesValues[p];
		if (value == null)
			continue;
		if (first)
			first = false;
		else
			data.push("&");
		data.push(p);
		data.push("=");
		data.push(encodeURIComponent(value));
	}
	return data.join("");
}

function CreateForm(namesValues)
{
	var form = document.createElement("form");
	for (var p in namesValues)
	{
		var value = namesValues[p];
		if (value == null)
			continue;
		var input = document.createElement("input");
		input.type = "hidden";
		input.name = p;
		input.value = value;
		form.appendChild(input);
	}
	return form;
}



function GetFormData(form)
{
	var data = {};
	for (var i = 0; i < form.length; i++)
	{
		var input = form[i];
		if (input.type == "checkbox")
		{
			if (input.checked)
				data[input.name] = input.value;
		}
		else
		{
			data[input.name] = input.value;
		}
	}
	return data;
}

function ArrayContains(array, value)
{
	for (var i = 0; i < array.length; i++)
	{
		if (array[i] == value)
			return true;
	}
	return false;
}

//Pager click handler

function Page_Click(sender, e)
{
	ModifyFormQuery({ page: sender.PageNumber <= 1 ? null : sender.PageNumber });
	SubmitForm();
}

// USED BY SearchItemControl
function SetupItemControl(id)
{
	var el = $('#' + id);
	var runCodeOpenCode = el.find('.RunCodeOpenCode');

	el.mouseenter(function() { runCodeOpenCode.css("visibility", "visible"); el.css("backgroundColor", "#FFFFCC"); });
	el.mouseleave(function() { runCodeOpenCode.css("visibility", "hidden"); el.css("backgroundColor", ""); });
	runCodeOpenCode.css("visibility","hidden");
}

// USED BY NavigationControl
function DoSearchOnEnter(e, textboxid, baseurl)
{
	if (e.keyCode == 13)
	{
		if (e.preventDefault)
			e.preventDefault();
		else
			e.returnValue = false;
			//
		DoSearch(textboxid, baseurl);
	}
}
// USED BY NavigationControl
function DoSearch(textboxid, baseurl) 
{
	var tb = document.getElementById(textboxid);
	if (tb)
		window.location.href = baseurl + encodeURIComponent(tb.value);
}
// USED BY NavigationControl
function CreateSearchAutoComplete(id, url, multiple, callback)
{
	if (typeof ($) == 'undefined')
		return;
	var elem = $('#' + id);
	var lkc;
	elem.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event)
	{
		lkc = event.keyCode;
		return true;
	});

	var ac = elem.autocomplete(url,
		{
			multiple : multiple,
			minChars: 0,
			delay: 200,
			autoFill: false,
			formatItem: function(item)
			{
				item = item[0];
				var parts = item.split('\t');
				if (parts.length == 1) return parts[0];
				return parts[0] + '&nbsp;&nbsp;<small style="float:right;">' + parts[1] + '</small>';
			},
			formatResult: function(item)
			{
				item = item[0];
				var parts = item.split('\t');
				return parts[0];
			},
			formatMatch: function(item)
			{
				item = item[0];
				var parts = item.split('\t');
				return parts[0];
			},
			highlight: function(value, term)
			{
				var suffix = "";
				var idx = value.indexOf('<small>');
				if (idx > 0)
				{
					suffix = value.substr(value.indexOf('<small'));
					value = value.substring(0, idx);
				}
				return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>") + suffix;
			},
			selectFirst: false
		}).result(function(event, item)
		{
			item = item[0];
			var parts = item.split('\t');
			item = parts[0];
			if (item.substring(item.length - 1) == ':')
				return;

			if (lkc != 9 && callback)
				callback();
			lkc = 0;
		});
		elem.keydown(function(e) 
		{
			if (e.keyCode == 13) 
			{
				if (e.preventDefault)
					e.preventDefault();
				else
					e.returnValue = false;
				callback();
			}			
		});
}

function trackEvent(eventKey)
{
	try
	{
		if (document.location.hostname.toLowerCase().search('coderun.com') < 0)
			return;
		if (!window.gafrm)
		{
			var i = document.createElement('IFRAME');
			window.gafrm = i;
			var ist = i.style;
			ist.height = '1px';
			ist.width = '1px';
			ist.position = 'absolute';
			ist.top = '-100px';
			ist.left = '-100px';
			document.body.appendChild(window.gafrm);
		}
		window.gafrm.src = '';
		window.gafrm.src = 'http://www.coderun.com/ide/e/?' + encodeURIComponent(eventKey);
	}
	catch (ex)
	{
	}
} 
