﻿/// For Intellisense
/// <reference path="jquery-1.3.2-vsdoc.js" />
/// <reference path="jquery-ui-1.7.2.custom.js" />
/// <reference path="MicrosoftAjax.debug.js" />
/// <reference path="MicrosoftAjaxTemplates.debug.js" />
/// <reference path="MicrosoftMvcAjax.debug.js" />
/// <reference path="Navitopia.jQuery.js" />
/// <reference path="NavitopiaRepository.js" />
/// <reference path="NavitopiaCrud.js" />
/// <reference path="Navitopia.js" />

function idField(){ return $("#id"); }

// Message functions
var _errorClass = "ui-state-error ui-corner-all",
		_errorIconClass = "ui-icon ui-icon-alert",
		_errorSelector = "." + _errorClass,
		_errorOccurred = false,
		_dlgMsgSelector = "#dlg-messages",
		_mainMsgSelector = "#messages";

function ask(message, title){
	return confirm(message);
}

function clearErrors(elm){
	_repository.status = null;
	_errorOccurred = false;
	clearMessages();
	$(_errorSelector, elm).removeClass(_errorClass);
}

function clearMessages(){
	$(_dlgMsgSelector).empty().removeClass(_errorClass);
	$(_mainMsgSelector).empty().removeClass(_errorClass);
}

function showError(message, elm){
	_errorOccurred = true;
	showMessage(message, $("<span>").addClass(_errorIconClass)).addClass(_errorClass);
	$(elm).addClass(_errorClass).focus();
}

function showMessage(message, icon){
	var messageSelector;
	
	if( _crudManager &&	$(_crudManager.dialogSelector).dialog('isOpen') )
		messageSelector = _dlgMsgSelector;
		else messageSelector = _mainMsgSelector;
	
	if( $.isArray(message) ) for( var index in message ) $(messageSelector).append(message[index] + "<br />");
	else $(messageSelector).append(message);
	
	return $(messageSelector).prepend(icon);
}

// Common functions
var _templates = [];

function getTemplate(templateId){
	var	template;

	if( !templateId ) templateId = CrudManager.prototype.listTemplate;
	template = _templates[templateId];

	if( !template ){
		var elm = $("<div>").html($("#" + templateId).html());

		$("form label", elm).append(":");
		template = new Sys.UI.Template(elm[0]);
		_templates[templateId] = template;
	}

	return template;
}

function loadTemplate(typeName, templateId, callback){
	var options = {callback: function(data){ haveTemplate(templateId, data, callback) }, 
		typeName: typeName, data: {templateId: templateId} };

	_crudManager.repository.getData(typeName + "/GetHtml/", options);
}

function haveTemplate(templateId, data, callback){
	var elm = $("<div>").html(data);

	$("form label", elm).append(":");
	template = new Sys.UI.Template(elm[0]);
	_templates[templateId] = template;
	
	if( $.isFunction(callback) ) callback();
}

function getTemplateDataValue(name, templateId){
	var	template = getTemplate(templateId);

	return $(template.get_element()).data(name);
}

function jsonDecode(data){
	return window["eval"]("(" + data + ")");
};

function setTemplateDataValue(name, value, templateId){
	var	template = getTemplate(templateId);

	$(template.get_element()).data(name, value);
}

function navigateToUrl(url){
	document.location = url;
}

function parseMsJSONDate(date){
	var regExp = /\/Date\((-?\d+)\)\//;

	if( regExp.test(date) ){
		date = new Date(parseInt(RegExp.$1));
	}
	
	return date;
}

function postPseudoForm(url, data){
	var	form = $("<form>").attr("action", _repository.getActionUrl(url)).appendTo(document.body);
	
	for( var key in data ){
		$("<input>").attr({type: "text", id: key, name: key, value: data[key]}).appendTo(form);
	}
	
	form.submit();
}

// Fill selection list dropdowns
// sort, callback and filter are all optional
function fillDropDown(typeName, sort, callback, filter){
	if( $.isFunction(sort) ){
		filter = callback;
		callback = sort;
		sort = null;
	}

	if( sort !== false ) sort = true;

	if( _repository.haveItems(typeName) ) haveItems(typeName, sort, callback, filter);
	else _repository.getList(typeName, 
		function(){ haveItems(typeName, sort, callback, filter); });
}

function haveItems(typeName, sort, callback, filter){
	var items = _repository.getList(typeName);
	var	displayName = _repository.objectTypes[typeName].displayName
	var	key = _repository.objectTypes[typeName].key
	var selector = "select." + typeName + "DropDown";

	if( sort ) items.sort();
	
	if( !$.isFunction(filter) || filter(null) ){
		$(selector).empty().append(
			$("<option>")
				.append("&lt;unknown&gt;")
				.attr({value: _emptyGuid})
		);
	}

	for( index in items ){
		var item = items[index];
		
		if( !$.isFunction(filter) || filter(item) ){
			$(selector).append(
				$("<option>")
					.append(item[displayName])
					.attr({value: items[index][key]})
			);
		}
	}

	if( $.isFunction(callback) ) callback();
}

function submitForm(containerId, callback) {
  var form = $("#" + containerId + " form");
  var action = form.attr("action");
  var serializedForm = form.serialize();

  $.post(action, serializedForm, callback);
}

function AddTableWidgets() {
    $(".data-table th").addClass("tableHeader");

    $(".data-table").tablesorter({
        // striping looking
        widgets: ['zebra']
    });

    //Add Margin to FieldSet
    $("legend").addClass("navLegend");

}
