/**
 * Reportgenerator
 *
 * @version 1.7
 *
 * @param string url
 * @param string callbackElementForm
 * @param string callbackElementReport
 *
 * Version Control
 *
 * 1.7		Changed function changePageSize()
 * 1.6		Added function selectTemplateSet()
 * 1.5		Call function onLoaded() after ajax callback
 * 1.4		Results filter
 * 1.3.6	Replaced window.location.hash with window.scroll
 * 1.3.5	Use internal ajax object
  */
function lib_Reportgenerator(url, callbackElementForm, callbackElementReport)
{
	/**
	 * Class variables
	 */
	this.order = 0;
	this.page = 0;
	this.pageSize = 0;
	this.sort = '';
	this.url = url;
	this.objAjax = new lib_Ajax();
	this.callbackElementForm = callbackElementForm;
	if(this.callbackElementForm == ''){this.callbackElementForm = 'div_form';}
	this.callbackElementReport = callbackElementReport;
	if(this.callbackElementReport == ''){this.callbackElementReport = 'div_report';}




	/**
	 * Print form
	 *
	 * @param integer account
	 * @param integer printFormWithReport
	 */
	this.printForm = function(account, printFormWithReport)
	{
		this.printFormWithReport = printFormWithReport;

		var parameters = 'act=' + 'printForm'
					   + '&account=' + account;

		obj_lib_reportgenerator.objAjax.postAjax(this.url, parameters, this.callbackAjax_printForm);
	}

	/**
	 * Callback function for printForm
	 */
	this.callbackAjax_printForm = function()
	{
		obj_lib_reportgenerator.objAjax.callbackAjax(obj_lib_reportgenerator.callbackElementForm, 1, 1);

		if(document.getElementById('form_report'))
		{
			onLoaded();

			//window.location.hash = 'anchor_form';
			window.scroll(0,0);

			if(obj_lib_reportgenerator.printFormWithReport == 1)
			{
				obj_lib_reportgenerator.printReport('', false, '-1');
			}
		}
	}




	/**
	 * Print report
	 */
	this.printReport = function(sort, reverse, page)
	{
		var parameters = 'act=printReport';
		this.runPrintReport(sort, reverse, page, parameters);
	}




	/**
	 * Print report with given parameters
	 */
	this.printReportParam = function(parameters)
	{
		this.runPrintReport(this.sort, false, -1, parameters);
	}




	/**
	 * Select template set
	 */
	this.selectTemplateSet = function(set)
	{
		var parameters = 'act=selectTemplateSet&set='+set;
		this.runPrintReport(this.sort, false, -1, parameters);
	}




	/**
	 * Run print report
	 *
	 * @param string sort
	 * @param boolean reverse
	 * @param integer page
	 * @param string parameters
	 */
	this.runPrintReport = function(sort, reverse, page, parameters)
	{
		if(sort == '-1')
		{
			sort = this.sort;
			reverse = false;
		}
		else if(sort != this.sort)
		{
			this.order = 0;
			reverse = false;
		}

		if(sort == '')	{if(document.getElementById('sort')){this.sort = document.getElementById('sort').value;}}
		else			{this.sort = sort;}

		if(reverse == true)
		{
			if(this.order == 0)	{this.order = 1;}
			else				{this.order = 0;}
		}

		if(page > 0)	{this.page = page;}

		if(!obj_lib_formprocessor){var obj_lib_formprocessor = new lib_FormProcessor();}

		var parameters = parameters
					   + '&page=' + this.page
					   + '&sort=' + this.sort
					   + '&order=' + this.order
					   + '&pageSize=' + this.pageSize
					   + obj_lib_formprocessor.getParameters('form_report');

		obj_lib_reportgenerator.objAjax.postAjax(this.url, parameters, this.callbackAjax_runPrintReport);
	}

	/**
	 * Callback function for runPrintReport
	 */
	this.callbackAjax_runPrintReport = function()
	{
		if(document.getElementById('div_form'))		{document.getElementById('div_form').style.display = '';}
		if(document.getElementById('div_report'))	{document.getElementById('div_report').style.display = '';}
		if(document.getElementById('div_actform'))	{document.getElementById('div_actform').style.display = 'none';}
		//window.location.hash = 'anchor_report';
		window.scroll(0,0);
		obj_lib_reportgenerator.objAjax.callbackAjax(obj_lib_reportgenerator.callbackElementReport, 1, 1);
		onLoaded();
	}




	/**
	 * Change page size
	 */
	/*this.changePageSize = function()
	{
		if(document.getElementById('pageSize')){this.pageSize = document.getElementById('pageSize').value;}
		this.printReport(this.sort, false, 1);
	}*/




	/**
	 * Change page size
	 */
	this.changePageSize = function()
	{
		var parameters = 'act=' + 'changePageSize'
					   + '&pageSize=' + document.getElementById('pageSize').value;

		obj_lib_reportgenerator.objAjax.postAjax(this.url, parameters, this.callbackAjax_changePageSize);
	}

	/**
	 * Callback function for modifySearch
	 */
	this.callbackAjax_changePageSize = function()
	{
		//window.location.hash = 'anchor_report';
		window.scroll(0,0);
		obj_lib_reportgenerator.objAjax.callbackAjax(obj_lib_reportgenerator.callbackElementReport, 1, 1);
		onLoaded();
	}




	/**
	 * Check all
	 */
	this.checkAll = function()
	{
		if(document.getElementById('checkboxAll').checked)	{var checked = true;}
		else												{var checked = false;}

		for(var i=0; i<=(document.getElementById('itemcount').value-1); i++)
		{
			if(document.getElementById('reportitem_'+i))
			{
				document.getElementById('reportitem_'+i).checked = checked;
			}
		}
	}




	/**
	 * Get checked items
	 *
	 * @return string checkedItems
	 */
	this.getCheckedItems = function()
	{
		return '&checkedItems=' + this.getCheckedItemsList();
	}




	/**
	 * Get checked items list
	 *
	 * @return string checkedItems
	 */
	this.getCheckedItemsList = function()
	{
		var checkedItems = '';

		if(document.getElementById('reportitem_id'))
		{
			//details page: only one item (selected by default)
			//checkedItems = '&reportitem_0=' + document.getElementById('reportitem_id').value;
			checkedItems = '-' + document.getElementById('reportitem_id').value;
		}
		else
		{
			//list page: get all checked
			for(var i=0; i<=document.getElementById('itemcount').value; i++)
			{
				if(document.getElementById('reportitem_'+i))
				{
					if(document.getElementById('reportitem_'+i).checked)
					{
						//checkedItems = checkedItems + '&reportitem_'+i+'=' + document.getElementById('reportitem_'+i).value;
						checkedItems = checkedItems + '-' + document.getElementById('reportitem_'+i).value;
					}
				}
			}
		}

		return checkedItems;
	}




	/**
	 * Modify search criteria
	 *
	 * @param string sName
	 * @param string sValue
	 * @param integer iValue
	 */
	this.modifySearch = function(sName, sValue, iValue)
	{
		var parameters = 'act=' + 'modifySearch'
					   + '&sName=' + sName
					   + '&sValue=' + sValue
					   + '&iValue=' + iValue;

		obj_lib_reportgenerator.objAjax.postAjax(this.url, parameters, this.callbackAjax_modifySearch);
	}

	/**
	 * Callback function for modifySearch
	 */
	this.callbackAjax_modifySearch = function()
	{
		//window.location.hash = 'anchor_report';
		window.scroll(0,0);
		obj_lib_reportgenerator.objAjax.callbackAjax(obj_lib_reportgenerator.callbackElementReport, 1, 1);
		onLoaded();
	}
}

