// DEFINES

var cmsSelectorSufix = '_selector';
var cmsContainers = {list:'cmsListArea', listEng:'cmsListAreaEng', form:'cmsFormArea'};

var cmsListConfig = null;

var cmsFlags = {'listChanged':false};

var cmsFormValidationConfig = new Object();

var cmsActionHistory = new Array();

// LISTA

function openLinkWindow(url, id)
{
	window.open(url + '?prod=' + id, '_blank');
}//openLinkWindow

function cmsListSetConfig(obj, list_id)
{
	if(cmsListConfig == null)
	{
		cmsListConfig = obj;
	}//if !config
	else
	{
		cmsListConfig[list_id] = obj[list_id];
	}//else
}//cmsListSetConfig

function cmsReloadList(arg)
{
	var list_id = 0;
	var params =  new Object();
	var target;

	if(typeof(arg) == 'object')
	{
		var obj = arg;

		list_id = $(obj).attr('ownerid');

		var action = $(obj).attr('action');
		var page = $(obj).attr('page');
		var sort = $(obj).attr('sort');

		if(page != undefined)params['page'] = page;
		else if(sort != undefined)
		{
			var mode = 'asc';
			if($(obj).hasClass('asc'))mode = 'desc';

			$('.asc').removeClass('asc');
			$('.desc').removeClass('desc');

			$(obj).addClass(mode);

			params['sort_' + sort] = mode;
		}//if sort
	}//if objetc (tag)
	else
	{
		list_id = arg;
	}//else

	//params['cmd'] = 'reset';

	if(target == undefined)target = cmsGetTable(list_id).attr('source');

	cmsSendAction(list_id, target, params, true);
}//cmsReloadList

function cmsEdit(obj)
{
	var action = $(obj).attr('action');
	var list_id = $(obj).attr('ownerid');
	var id = $(obj).attr('rowid');

	if($(obj).attr('tab') != undefined)
	{
		cmsSetTabSelected($(obj).attr('tab'));
	}//if tab

	cmsSendAction(list_id, action, {id:id}, true);
}//cmsEdit

function cmsDelete(obj, msg)
{
	var action = $(obj).attr('action');
	var list_id = $(obj).attr('ownerid');
	var id = $(obj).attr('rowid');

	confirmAction(msg, function(){cmsSendAction(list_id, action, {id:id})});
}//cmsDelete

function cmsDeleteMulti(obj, msg)
{
	var action = $(obj).attr('action');
	var list_id = $(obj).attr('ownerid');

	var sel_class = list_id + cmsSelectorSufix;

	var boxes = $('input:checkbox[class=' + sel_class + ']:checked');
	var total = boxes.length;

	if(total > 0)
	{
		var id = new Array();

		for(var c = 0; c < total; c++)
		{
			id.push($(boxes[c]).val());
		}//for c

		confirmAction(msg, function(){cmsSendAction(list_id, action, {'id[]':id})});
	}//if boxex
}//cmsDeleteMulti

function cmsSelectAll(obj)
{
	var sel_class = $(obj).attr('ownerid') + cmsSelectorSufix;
	$('.' + sel_class).attr('checked', true);
}//selectAll

function cmsSelectNone(obj)
{
	var sel_class = $(obj).attr('ownerid') + cmsSelectorSufix;
	$('.' + sel_class).attr('checked', false);
}//selectNone

function cmsResetList(list_id, config)
{
	var list_id;
	for(var lid in config)list_id = lid;

	cmsListConfig[list_id] = config[list_id];

	cmsListUpdateTotals(list_id);
}//cmsResetList

function cmsListUpdateTotals(list_id)
{
	var cfg = cmsListConfig[list_id];

	$('#' + list_id + '_first').html(cfg['pageInfo']['iniRow']);
	$('#' + list_id + '_last').html(cfg['pageInfo']['lastRow']);
	$('#' + list_id + '_total').html(cfg['pageInfo']['totalRows']);
}//cmsListUpdateTotals

function cmsAfterListChange(list_id, message)
{
	messageBox(message, function(){cmsReloadList(list_id)});
}//cmsAfterListChange

function cmsAjaxSubmitFilterForm(obj)
{
	var form_id = $(obj).attr('formid');

	setLoading(true);
	//var options = {success:function(obj){onCmsActionReceive(obj)}, type:'POST', dataType:'json', error:onCmsActionError};
	var options = {success:function(obj){genericActionReceiver(obj)}, type:'POST', dataType:'json', error:genericActionError};

	$('#' + form_id).ajaxSubmit(options);
}//cmsAjaxSubmitForm

// FORM

function cmsConfigForm(form_id, val_rules, val_messages)
{
	var validation_options = {
		errorElement:'strong',
		errorClass:'form_error',
		errorPlacement:cmsAddFieldError,
		rules:val_rules,
		messages:val_messages
	}//validation_options

	cmsFormValidationConfig[form_id] = validation_options;

	var validator = $('#' + form_id).bind('invalid-form.validate', function(){}).validate(validation_options);
}//configCMSFormValidation

var cmsAddFieldError = function(error, element)
{
	var $fieldset = element.parent("fieldset");

	while($fieldset.length == 0)
	{
		element = element.parent();
		$fieldset = element.parent("fieldset");
	}//while !fieldset

	$fieldset.addClass("fundoBkg");
	if($fieldset.next("p").html() == '')error.appendTo($fieldset.next("p"));
}//cmsAddFieldError

ajaxAddFieldError = cmsAddFieldError;

function cmsAjaxSubmitForm(obj)
{
	var form_id = $(obj).attr('ownerid');

	$('#' + form_id).validate(cmsFormValidationConfig[form_id]);

	if($('#' + form_id).valid())
	{
		$(window).scrollTop(0);
		setLoading(true);
		var options = {success:function(obj){genericActionReceiver(obj)}, type:'POST', dataType:'json', error:genericActionError};
		$('#' + form_id).ajaxSubmit(options);
	}//if valid
	else
	{
		setLoading(false);
	}

	return false;
}//cmsAjaxSubmitForm

function cmsMainFormSaved(target, list_id)
{
	cmsReloadList(list_id);
	switchContainer(target);
}//cmsMainFormSaved

// NAVIGATION

function loadToContainer(container, content, segment)
{
	cmsLoadToSubContainer(container, content, segment);
	switchContainer(container);
}//loadToContainer

function switchContainer(container)
{
	//alert(container);
	if($('#' + container).hasClass('active'))return;

	$('.active').removeClass('active');
	$('#' + container).addClass('active')
}//switchContainer

function cmsBackToList(container, obj)
{
	if(container == undefined)container = 'list';

	if(obj != undefined)cmsSetTabSelected(obj);

	var list_id = $('#' + cmsContainers[container] + '> div').attr('id');

	if(cmsGetTable(list_id).attr('reload') == 'true')
	{
		cmsReloadList(list_id);
	}//if listChanged
	else switchContainer(cmsContainers[container]);
}//cmsBackToList

function cmsSetTabSelected(arg)
{
	var tab_obj;

	if(typeof(arg) == 'object')
	{
		if($(arg).attr('tagName') == 'A' || $(arg).attr('tagName') == 'a')tab_obj = $(arg).parent()
			else tab_obj = arg;

	}//if tab_obj
	else if(typeof(arg) == 'string')
	{
		tab_obj = $('#' + arg)[0];
	}//else

	$('.areaAzul').addClass('areaCinza');
	$('.areaAzul').removeClass('areaAzul');
	$(tab_obj).removeClass('areaCinza');
	$(tab_obj).addClass('areaAzul');
}//cmsSetTabSelected

// LOAD

function cmsLoadToSubContainer(container, content, segment)
{
	if(segment == undefined)$('#' + container).html(content);
		else $('#' + segment).html(content);
}//cmsLoadToSubContainer

function cmsSendAction(list_id, target, params, history)
{
	if(target != undefined)
	{
		setLoading(true);

		if(params == undefined)params = new Object();
		params['list_id'] = list_id;

		if(history == true)
		{
			var hist_obj = {target:target, list_id:list_id, params:params};
			cmsActionHistory.push(hist_obj);
		}//history

		callAction(target, params);
	}//if target
	else
	{
		errorBox('NO ACTION TARGET RECEIVED');
	}//else
}//sendAction

function cmsBack(back)
{
	if(cmsActionHistory.length > 0)
	{
		if(back == undefined)back = 1;
			else if(back > cmsActionHistory.length)back = cmsActionHistory.length;

		var act_obj;

		for(var i = 0; i < back; i++)act_obj = cmsActionHistory.shift();

		if(act_obj != undefined)
		{
			cmsSendAction(act_obj.list_id, act_obj.target, act_obj.params, true);
		}//if act
	}//if history
	else cmsBackToList();
}//cmsBack

function onCmsActionReceive(obj, list_id)
{
	setLoading(false);

	var content = obj['html'];
	var cmd = obj['cmd'];
	var params = obj['params'];
	var error = 0;

	//errorBox(dump(obj));

	//FUNC

	if(cmd['func'] != undefined)
	{
		cmsProcessFunctions(cmd['func'], list_id)
	}//if func

	// FLAGS

	if(cmd['flag'] != undefined)
	{
		cmsFlags[cmd['flag'][0]] = cmd['flag'][1];
	}//if flag

	//errorBox(dump(params['listConfig']));

	if(params['listConfig'] != undefined)
	{
		cmsResetList(list_id, params['listConfig']);
	}//if new listConfig

	// OOPS

	if(error != 0)
	{
		errorBox(error + '\n\r' + dump(obj));
	}//if error
}//onActionReceive

function cmsProcessFunctions(func_arr, list_id)
{
	for(var f in func_arr)
	{
		//errorBox(f + ' = ' + dump(func_arr[f]));
		var func = func_arr[f]['func'];
		var params = func_arr[f]['params'];
		var error = '';

		switch(func)
		{
			case 'loadToContainer':
				if(params['target'] == undefined)
				{
					error = 'NO TARGET FOR loadToContainer';
					break;
				}//if !target
				if(content == undefined)
				{
					error = 'NO CONTENT FOR loadToContainer';
					break;
				}//if !content
				loadToContainer(cmsGetContainer(params['target']), params['content'], params['segment']);
				break;
			case 'cmsMainFormSaved':
				if(params['target'] == undefined)
				{
					error = 'NO TARGET FOR cmsMainFormSaved';
					break;
				}//if !target
				if(content == undefined)
				{
					error = 'NO CONTENT FOR cmsMainFormSaved';
					break;
				}//if !content
				cmsMainFormSaved(cmsGetContainer(params['target']), params['content'], params['list_id'],
												 params['lastAction'], params['regID']);
				break;
			case 'flashMessage':
				messageBox(params['content'], null, params['time']);
				break;
			case 'cmsAfterListChange':
				cmsAfterListChange(list_id, params['content']);
				break;
			case 'cmsReloadList':
				cmsReloadList(params['list_id']);
				break;
			case 'cmsLoadToSubContainer':
				cmsLoadToSubContainer(params['target'] ,params['content'], params['segment']);
				break;
			default:
				error = 'INVALID FUNC ' + cmd['func'];
				break;
		}//switch func
		if(error != '')break;
	}//for func in func_arr
}//cmsProcessFunctions

function onCmsActionError(XMLHttpRequest, textStatus, errorThrown)
{
	setLoading(false);

	errorBox("ERROR: " + textStatus + "\n\r" + dump(errorThrown) + ":\n\r" + XMLHttpRequest.responseText);
}//onActionError

// AUX

function cmsConfigParam(param, list_id)
{
	return (cmsListConfig[list_id][param] != undefined)?(cmsListConfig[list_id][param]):(null);
}//cmsConfigParam

function cmsGetContainer(alias)
{
	if(cmsContainers[alias] != undefined)return cmsContainers[alias];
		else return alias;
}//cmsGetContainer

function cmsGetTable(list_id)
{
	return $('#' + list_id + '_table');
}//cmsGetTable