/**
 * $Date: 2010-02-18 18:10:35 +0300 (Чтв, 18 Фев 2010) $
 * $Author: antonbatenev.ya.ru $
 * $Revision: 481 $
 * $URL: svn://opensvn.ru/opensvn.ru/trunk/media/js/core.js $
 */

function updateProjectInfo (json)
{
	if (json.data != undefined)
	{
		if (json.data.has_vcs == true)
		{
			if (json.data.vcs_type == 'svn' || json.data.vcs_type == 'hg')
			{
				$('#vcs_type').remove();
			}
		}

		if (json.data.has_bugtracker == true)
		{
			$('#has_bugtracker').remove();
		}
	}
}

function addUser (json)
{
	if (json.data != undefined)
	{
		type = json.data.type != undefined ? json.data.type : 'user';

		switch (type)
		{
			case 'offer':

				project_user_list = $('#project_offer_list');

				if (project_user_list.length == 0)
				{
					content  = "";
					content += "<h3>ожидание участников</h3>";
					content += "<table class='listing tickets' id='project_offer_list'>";
					content += "<thead>";
					content += "<tr>";
					content += "	<th>имя</th>";
					content += "	<th>роль</th>";
					content += "	<th>дата</th>";
					content += "	<th>удалить</th>";
					content += "</tr>";
					content += "</thead>";
					content += "<tbody>";
					content += "</tbody>";
					content += "</table>";

					$('#project_offer_list_place').append(content);
					project_user_list = $('#project_offer_list');
				}

				content  = "<tr foo='offer_" + json.data.idUser + "_" + json.data.idRole + "'>";
				// классы трака ticket, summary, component, status, resolution, version, type, priority, owner, date
				content += "	<td class='version'><a href='/user/" + json.data.idUserUrl +  "'>" + json.data.idUser + "</td>";
				content += "	<td class='version'>" + json.data.idRole + "</td>";
				content += "	<td class='version'>" + json.data.date + "</td>";
				content += "	<td class='version'><a href='/private_projects.main.php?action=remove_project_offer_info&id_project=" + json.data.idProjectUrl + "&id_user=" + json.data.idUserUrl + "&id_role=" + json.data.idRoleUrl + "' onclick='return core.getAjax(this, delOffer)'>(удалить)</a></td>";
				content += "</tr>";

				$(content).appendTo(project_user_list);
				project_user_list.find('tbody tr:even').addClass('color1-even').end().find('tbody tr:odd').addClass('color1-odd');

				break;

			case 'user':
			default:

				project_user_list = $('#project_user_list');

				if (project_user_list.length == 0)
				{
					content  = "";
					content += "<h3>участники</h3>";

					content += "<table class='listing tickets' id='project_user_list'>";
					content += "<thead>";
					content += "<tr>";
					content += "	<th>имя</th>";
					content += "	<th>роль</th>";
					content += "	<th>удалить</th>";
					content += "</tr>";
					content += "</thead>";
					content += "<tbody>";
					content += "</tbody>";
					content += "</table>";

					$('#project_user_list_place').append(content);
					project_user_list = $('#project_user_list');
				}

				content = "<tr foo='user_" + json.data.idUser + "_" + json.data.idRole + "'>";
				// классы трака ticket, summary, component, status, resolution, version, type, priority, owner, date
				content += "	<td class='version'><a href='/user/" + json.data.idUserUrl +  "'>" + json.data.idUser + "</td>";
				content += "	<td class='version'>" + json.data.idRole + "</td>";
				content += "	<td class='version'><a href='/private_projects.main.php?action=remove_project_user_info&id_project=" + json.data.idProjectUrl + "&id_user=" + json.data.idUserUrl + "&id_role=" + json.data.idRoleUrl + "' onclick='return core.getAjax(this, delUser)'>(удалить)</a></td>";
				content += "</tr>";

				$(content).appendTo(project_user_list);
				project_user_list.find('tbody tr:even').addClass('color1-even').removeClass('color1-odd').end().find('tbody tr:odd').addClass('color1-odd').removeClass('color1-even');

				break;
		}   // switch (type)
	}   // if (json.data != undefined)
}   // function addUser(json)

function delUser (json)
{
	if (json.data != undefined)
	{
		$('tr[foo=user_' + json.data.idUser + '_' + json.data.idRole + ']').remove();
		$('#project_user_list').find('tbody tr:even').addClass('color1-even').removeClass('color1-odd').end().find('tbody tr:odd').addClass('color1-odd').removeClass('color1-even');
	}
}

function delOffer (json)
{
	if (json.data != undefined)
	{
		$('tr[foo=offer_' + json.data.idUser + '_' + json.data.idRole + ']').remove();
		$('#project_user_list').find('tbody tr:even').addClass('color1-even').removeClass('color1-odd').end().find('tbody tr:odd').addClass('color1-odd').removeClass('color1-even');
	}
}

function addLicense (json)
{
	if (json.data != undefined)
	{
		project_license_list = $('#project_license_list');

		if (project_license_list.length == 0)
		{
			content  = "";
			content += "<h3>лицензии</h3>";
			content += "<table class='listing tickets' id = 'project_license_list'>";
			content += "<thead>";
			content += "<tr>";
			content += "	<th>лицензия</th>";
			content += "	<th>комментарий</th>";
			content += "	<th>удалить</th>";
			content += "</tr>";
			content += "</thead>";
			content += "<tbody>";
			content += "</tbody>";
			content += "</table>";

			$('#project_license_list_place').append(content);
			project_license_list = $('#project_license_list');

		}   // if (project_license_list.length == 0)

		$('tr[foo=license_' + json.data.idLicense + ']').remove();

		content  = "<tr foo='license_" + json.data.idLicense + "'>";
		content += "	<td class='version'>" + json.data.idLicense + "</td>";
		content += "	<td class='version'>" + json.data.comment + "</td>";
		content += "	<td class='version'><a href='/private_projects.main.php?action=remove_project_license_info&id_project=" + json.data.idProjectUrl + "&id_license=" + json.data.idLicenseUrl + "' onclick='return core.getAjax(this, delLicense)'>(удалить)</a></td>";
		content += "</tr>";

		$(content).appendTo(project_license_list);

		project_license_list.find('tbody tr:even').addClass('color1-even').removeClass('color1-odd').end().find('tbody tr:odd').addClass('color1-odd').removeClass('color1-even');

	}   // if (json.data != undefined)
}   // function addLicense (json)

function delLicense (json)
{
	if (json.data != undefined)
	{
		$('tr[foo=license_' + json.data.idLicense + ']').remove();
		$('#project_license_list').find('tbody tr:even').addClass('color1-even').removeClass('color1-odd').end().find('tbody tr:odd').addClass('color1-odd').removeClass('color1-even');
	}
}

function addPlatform (json)
{
	if (json.data != undefined)
	{
		project_platform_list = $('#project_platform_list');

		$('span[foo=platform_' + json.data.idPlatform + ']').remove();

		content = "<span foo='platform_" + json.data.idPlatform + "'>" + json.data.idPlatform + "&nbsp;<a href='/private_projects.main.php?action=remove_project_platform_info&id_project=" + json.data.idProjectUrl + "&id_platform=" + json.data.idPlatformUrl + "' onclick='return core.getAjax(this, delPlatform)'><img src='/media/img/cross.gif' alt='удалить' title='удалить'></a>&nbsp;&nbsp;&nbsp;</span>";

		$(content).appendTo(project_platform_list);
	}
}

function delPlatform (json)
{
	if (json.data != undefined)
	{
		$('span[foo=platform_' + json.data.idPlatform + ']').remove();
	}
}

function addTechnology (json)
{
	if (json.data != undefined)
	{
		project_technology_list = $('#project_technology_list');

		$('span[foo=technology_' + json.data.idTechnology + ']').remove();

		content = "<span foo='technology_" + json.data.idTechnology + "'>" + json.data.idTechnology + "&nbsp;<a href='/private_projects.main.php?action=remove_project_technology_info&id_project=" + json.data.idProjectUrl + "&id_technology=" + json.data.idTechnologyUrl + "' onclick='return core.getAjax(this, delTechnology)'><img src='/media/img/cross.gif' alt='удалить' title='удалить'></a>&nbsp;&nbsp;&nbsp;</span>";

		$(content).appendTo(project_technology_list);
	}
}

function delTechnology (json)
{
	if (json.data != undefined)
	{
		$('span[foo=technology_' + json.data.idTechnology + ']').remove();
	}
}

function addCategory (json)
{
	if (json.data != undefined)
	{
		project_category_list = $('#project_category_list');

		$('span[foo=category_' + json.data.idCategory + ']').remove();

		content = "<span foo='category_" + json.data.idCategory + "'>" + json.data.idCategory + "&nbsp;<a href='/private_projects.main.php?action=remove_project_category_info&id_project=" + json.data.idProjectUrl + "&id_category=" + json.data.idCategoryUrl + "' onclick='return core.getAjax(this, delCategory)'><img src='/media/img/cross.gif' alt='удалить' title='удалить'></a>&nbsp;&nbsp;&nbsp;</span>";

		$(content).appendTo(project_category_list);
	}
}

function delCategory (json)
{
	if (json.data != undefined)
	{
		$('span[foo=category_' + json.data.idCategory + ']').remove();
	}
}

core = {

	message :
	{
        	data : [],

		add : function (message, stype)
		{
			stype == undefined ? stype = 'done' : '';

			this.data.push({
				data: message,
				type: stype
			});
		},

		show : function (message, stype)
		{
			if (message != undefined)
			{
				this.build(message, stype)
			}
			else
			{
				$.each(this.data, function(n, m){
					core.message.build(m.data, m.type);
				});

				this.data = [];
			}
		},

		build : function (message, stype)
		{
			switch (stype)
			{
				case 'done':
					break;
				case 'error':
					break;
				case 'info':
				default:
					stype = 'info';
			}

			$.jGrowl(message, {
				theme: stype,
				life: 5000
			})
		}

	},   // message:

	init : function ()
	{
		//this.checkAjaxForm('.ajaxForm')
	},

	/**
	 * Отправка формы через Ajax запрос
	 * form - instanse формы
	 * after(json) - функция выполняема по возвращении результата
	 * before(form, data) - фукнция выполняемая до отправки запроса
	 */
	submitAjaxForm : function (form, after, before)
	{
		options =
		{
			dataType : 'json',
			type     : 'POST',
			success  : function(json)
			{
				if (json != undefined)
				{
					if (json.error != undefined)
					{
						core.message.show(json.error, 'error');
					}
					else if (json.info != undefined)
					{
						core.message.show(json.info, 'info');
					}
					else if (json.content != undefined)
					{
						core.message.show(json.content, 'done');
					}
					else
					{
						core.message.show('Что-то пошло не так', 'error');
					}
				}
				else
				{
					core.message.show('Возвращены пустые данные', 'error');
				}

				$(form).find(':submit').removeAttr('disabled')

				if (after != undefined)
				{
					after(json)
				}
			},
			beforeSubmit : function(data)
			{
				if (before != undefined)
				{
					before(form, data)
				}

				$(form).find(':submit').attr({'disabled': 'disabled'});
			}
		}

		$(form).ajaxForm(options);
		$(form).submit();
		//$(form).ajaxSubmit();

		return false;
	},   // submitAjaxForm : function (form, after, before)

	/**
	 * Функция принимает в качестве агрумента объект ссылки и производит ajax запрос,
	 * a - dom объект <a>
	 * callback(json) - функция выполняемая по возвращению результата
	 */
	getAjax : function (a, callback)
	{
		$.getJSON($(a).attr('href'), function (json) {
			if (json != undefined)
			{
				if (json.error != undefined)
				{
					core.message.show(json.error, 'error');
				}
				else if (json.info != undefined)
				{
					core.message.show(json.info, 'info');
				}
				else if (json.content != undefined)
				{
					core.message.show(json.content, 'done');
				}
				else
				{
					core.message.show('Что-то пошло не так', 'error');
				}

				callback(json)
			}
			else
			{
				core.message.show('Возвращены пустые данные', 'error');
			}
		})

		return false;
	},   // getAjax : function (a, callback)

	changeAll : function (checked_status, objects)
	{
		$(objects).each(function() {
			this.checked = checked_status;
		});
	},

	deinit : function ()
	{
	}
}

