var d = new Date();
var calendar = new Object();
calendar.month = d.getMonth() + 1;
calendar.year = d.getFullYear();
function appendInMiddle(obj, width, z_index) {
        var window_scroll = -20 + $(window).scrollTop();
        var curr_width =  ( width ? width : obj.css('width').replace('px','') );
        var margin_left = (parseInt((curr_width / 2))) * (-1);
        z_index = ( z_index ? z_index : 1000 );
        obj.css({
                'position': 'absolute',
                'margin-left': margin_left + 'px',
                'left':'50%',
                'margin-top': window_scroll + 'px',
                'top': '50%',
                'z-index': z_index
        });
        obj.insertBefore($('body *').get(0));
        obj.css({
                'margin-top': (window_scroll - (obj.height()/2) + 'px')
        });
}
function create(type,options) {
	var item = $(document.createElement(type));
	if ( options ) 
		item.attr(options)
	return item;
}
function add_item(input) {
	goTo('add', input);
}
$(document).ready(function() {
	$("div.main_tabs div").click(function() {
		goTo(this.id);
	});
	if ( 'undefined' != typeof(default_tab) ) {
		goTo(default_tab);
	}
});
function close_detail() {
	$("#detail_holder").remove();
}
function show_det(expense_id) {
	loading_on();
	$("#detail_holder").remove();
	var url = 'requests/get_detail.php';
	var params = 'expense_id='+expense_id;
	$.post(url, params, function(response) {
		var close_div = create('div',{'style':'text-align:right'});
		$("<a href='javascript: close_detail()' class='close_link'>[Close]</a>").appendTo(close_div);
		var holder_div = create('div',{'id':'detail_holder','class':'abs_center'});
		close_div.appendTo(holder_div);
		holder_div.append(response);
		appendInMiddle(holder_div, '274');
		loading_off();
		holder_div.animate({'width':'240px'},"slow",'easeInSine', function () {
			holder_div.animate({'height':'190px'},"slow",'easeOutBounce', function () {
				$("#detail_holder div").fadeIn();
			});
		});
	});
}
function goTo(what, input) {
	var param = ( input ? input : '' );
	$("#main_content").html('');
	$("div.main_tabs div").removeClass('selected');
	$("#"+what).addClass('selected');
	var accepted = new Array('add','mod','rep','cal','sch', 'gph');
	if (  -1 != $.inArray(what, accepted) ) {
		eval(what+"('"+param+"')");
	}
	
}
function cal(month, year) {
	if ( !month || !year ) {
		var d = new Date();
		month = d.getMonth() + 1;
		year = d.getFullYear();
	}
	var url = 'requests/get_calendar.php';
	var parameters = 'month='+month+'&year='+year+'&req=Y';
	loading_on();
	$.post(url, parameters, function (response) {
		$("#main_content").html(response);
		loading_off();
	});
}
function change_month(month) {
	calendar.month = month
	cal(month, calendar.year);
}
function change_year(year) {
	calendar.year = year;
	cal(calendar.month, year);
}
function mod() {
	var url = 'requests/get_expenses.php';
	var params = '';
	loading_on();
	$.post(url, params, function (response) {
		$("#main_content").html();
		div = create('div');
		div.css({
			'height':'30px',
			'width':'100%',
			'position':'absolute',
			'margin-top': '15px'
		});
		msg_box = get_msg_box();
		msg_box.appendTo(div);
		div.appendTo("#main_content");
		$("#main_content").append(response);
		loading_off();
	});
}
function sch() {
	var url = 'requests/get_schedule.php';
	var params = '';
	loading_on();
	$.post(url, params, function (response) {
		$("#main_content").html('');
		$("#main_content").append(response);
		loading_off();
	});
}
function rep(params) {
	var url = 'requests/get_history.php';
	params = ( params ? params : '' );
	loading_on();
	$.post(url, params, function (response) {
		$("#main_content").html('');
		$("#main_content").append(response);
		loading_off();
	});
}
function gph(params) {
	var url = 'requests/get_graphs.php';
	params = ( params ? params : '' );
	loading_on();
	$.post(url, params, function (response) {
		$("#main_content").html('');
		$("#main_content").html(response);
		loading_off();
	});
}
function display_errors(errors) {
	var all_errors = errors.split('||');
	$(".error").remove();
	for ( var i = 0; i < all_errors.length; i++ ) {
		var name = all_errors[i].split('|')[0];
		var error_msg = all_errors[i].split('|')[1];
		try {
			div = create('div',{'class':'error'});
			div.css({'text-align':'left','margin-left':'250px'});
			div.html(error_msg);
			div.insertAfter("#"+name+"_row");
		} catch(e) {}
	}
}
function add(input_val, expense_id, prefix) {
	prefix = ( prefix ? prefix : 'Add' );
	expense_id = ( expense_id ? expense_id : '-1' );
	parameters = 'type=add&expense_id='+expense_id;
	parameters += ( 'Edit' == prefix ? '&is_edit=Y' : '' );
	var holder = create('div',{'class':'field_holder','align':'center','id':'add_form_holder'});
	var form = create('form',{'method':'post','id':'add_form','enctype':'multipart/form-data'});
	build_fields(parameters, holder, form, prefix, expense_id, input_val);
}
function build_fields(parameters, holder, form, prefix, expense_id, input_val) {
	loading_on();
	var url = 'requests/get_fields.php';
	$.post(url, parameters, function (response) {
		for ( var i = 0; i < response.length; i++ ) {
			var field = response[i];
			var row = create('div', {'id':field.name+'_row', 'class':'row'});
			var label = create('div', {'class':'label'});
			var data = create('div', {'class':'data'});
			label.appendTo(row);
			data.appendTo(row);
			var var_value = ( field.value ? field.value : '' );
			switch ( field.type ) {
				case 'date':
					var date_value = ( var_value != '' ? var_value : input_val );
				case 'input':
					var input = create('input', {
						'name':field.name,
						'id':field.name,
						'type':'text',
						'title':field.description,
						'size':field.size,
						'maxlength':field.maxlength,
						'value': ( 'date' == field.type ? date_value : var_value )
					});
					input.appendTo(data);
					break;
				case 'select':
					var select_box = create('select', {
						'name':field.name,
						'id':field.name	
					});
					for ( var j = 0; j < field.select_data.length; j++ ) {
						select_data = field.select_data[j];
						if ( select_data.val == var_value )
							select_box.addOption(select_data.val, select_data.display, true);
						else 
							select_box.addOption(select_data.val, select_data.display, false);
					}
					select_box.appendTo(data);
					break;
				case 'textarea':
					row.css('height', '75px');
					var textarea = create('textarea', {
						'name':field.name,
						'id':field.name,	
						'cols':'30',
						'rows':'3',
						'value':var_value
					});
					textarea.appendTo(data);
					break;
				case 'file':
					var input = create('input', {
						'name':field.name,
						'id':field.name,
						'type':'file',
						'size':field.size,
						'maxlength':field.maxlength
					});
					input.appendTo(data);
					break;
			}
			label.html(field.display);
			row.appendTo(form);
		}
		var button_row = create('div',{'align':'right','class':'row','style':'text-align:right'});
		if ( prefix == 'Pay' || prefix == 'Edit' ) {
			var cancel = create('input', {'type':'button','name':'cancel','value': 'Cancel'});
			cancel.appendTo(button_row);
			cancel.click(function () {
				var id = ( 'Edit' == prefix ? 'add' : 'pay' );
				$("#"+id+"_form_holder").remove();
			});
		}
		var add = create('input', {'type':'button','name':'add','value': prefix +' Expense'});
		add.appendTo(button_row);
		button_row.appendTo(form);
		add.click(function() {
			if ( prefix == 'Edit' ) {
				submit_edit(expense_id);
			} else if ( prefix == 'Pay' ) {
				submit_pay(expense_id);
			} else {
				add_expense(false);
			}
		});
		form.appendTo(holder);
		msg_box = get_msg_box();
		msg_box.appendTo('#main_content');
		holder.appendTo('#main_content');
		if ( prefix == 'Pay' ) {
			$("#pay_paid_on").datepicker();
		} else {
			$("#add_due_date").datepicker();
		}
		loading_off();
	}, 'json');	
}
function submit_edit(expense_id) {
	var extra_data = new Array();
	extra_data['is_edit'] = 'Y';
	extra_data['expense_id'] = expense_id;
	add_expense(null, extra_data);
}
function submit_pay(expense_id) {
	var extra_data = new Array();
	extra_data['expense_id'] = expense_id;
	$("#pay_form").attr('action','requests/pay_expense.php');
	loading_on();
	$("#pay_form").ajaxSubmit({
		data: extra_data,
		success: function (response) {
				if ( 'success' == response ) {
					$("#main_content *").remove();
					sch();
					display_message('Expense Paid Successfully');
				} else {
					display_errors(response);
				}
				loading_off();
			}
	});	
}
function pay_expense(expense_id) {
	parameters = 'type=pay&expense_id='+expense_id;
	$("#pay_form_holder").remove();
	var holder = create('div',{'class':'field_holder','align':'center','id':'pay_form_holder'});
	var form = create('form',{'method':'post','id':'pay_form','enctype':'multipart/form-data'});
	build_fields(parameters, holder, form, 'Pay', expense_id, '');
}
function get_msg_box() {
	$("#msg_box").remove();
	var div = create('div',{'id':'msg_box'});
	return div;
}
function display_message ( msg) {
	var div = create('div',{'id':'tmp_msg'});
	div.html(msg);
	div.appendTo("#msg_box");
	div.fadeOut(5000, function() {
		div.remove();
	});
}
function add_expense(to_continue, extra_data) {
	extra_data = ( extra_data ? extra_data : '' );
	message = ( extra_data ? 'Edited' : 'Added' );
	var url = 'requests/add_expense.php';
	$("#add_form").attr('action','requests/add_expense.php');
	loading_on();
	$("#add_form").ajaxSubmit({
		data: extra_data,
		success: function (response) {
				if ( 'success' == response ) {
					$("#add_form").get(0).reset();
					if ( 'Edited' == message ) {
						$("#main_content *").remove();
						mod();
					}
					display_message('Expense '+message+' Successfully');
				} else {
					display_errors(response);
				}
				loading_off();
			}
	});
}
function delete_expense(expense_id, obj) {
	var url = 'requests/delete_expense.php';
	var params = 'expense_id='+expense_id;
	$.post(url, params, function (response) {
		if ( response == 'timeout' ) {
			alert('Your Sessions expired and you will be redirected');
			window.href = 'http://www.expensemanage.com';
		} else if ( response == 'success') {
			var row = $(obj).parents().get(1);
			$(row).remove();
			display_message('Expense Removed Successfully');
		} else {
			alert('An Error Occured');
		}
	});
}
function edit_expense(expense_id, obj) {
	$("#add_form_holder").remove();
	add('',expense_id, 'Edit');
}
function show_filters() {
	if ( 'none' == $("#filters").css('display') ) {
		$("#filters").slideDown();
		$("#filter_link").html('[-] Filters');
	} else {
		$("#filters").slideUp();
		$("#filter_link").html('[+] Filters');
	}
}
function filter(obj) {
	var params = 'filtered=Y';
	$("#filters select").each(function () {
		params += '&'+this.name+"="+this.value;
	});
	rep(params);
}
function open_popup(url) {
	window.open(url);
}
function export_excel() {
	var params = '?';
	$("#filters input, #filters select").each(function () {
		params  += this.name + '=' + this.value + '&';
	});
	params.replace(/&$/, '');
	var url = 'requests/get_excel_dump.php'+params;
	open_popup(url);
}
function make_main(which) {
	var url = 'requests/make_main.php';
	var params = {
		tab: which
	};
	loading_on();
	$.post(url, params, function(response) {
		loading_off();
	});
}

