/**
 * BusinessAdmin: administrative software for small companies
 * Copyright (C) 2015 Camil Staps (ViviSoft)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

$(document).ready(function(){
	// Use the plugin bootstrapValidator (a form validator) for all forms with class bootstrapValidator
	// The input elements should have data attributes containing all necessary information
	$('.bootstrapValidator').bootstrapValidator({
		feedbackIcons: {
			valid: 'glyphicon glyphicon-ok',
			invalid: 'glyphicon glyphicon-remove',
			validating: 'glyphicon glyphicon-refresh'
		}
	});

	// Use the plugin form (to ajax-ify forms) for all forms with class ajaxify
	$('.ajaxify').each(function(){
		var options = jQuery.extend(
			{dataType: 'json'},
			$(this).data('ajaxify-options')
		);
		if (options.success != undefined)
			options.success = window[options.success];
		if (options.error != undefined)
			options.error = window[options.error];
		if (options.beforeSubmit != undefined)
			options.beforeSubmit = window[options.beforeSubmit];
		$(this).ajaxForm(options);
	});

	// Use the plugin X-editable for .editable elements
	// Editables are disabled by default
	$('.editable').editable().editable('disable');
	// Open the editable on double click
	$('.editable').dblclick(function(){
		if ($(this).hasClass('editable-disabled')) {
			$(this).editable('enable').editable('show').editable('activate');
		}
	// Disable the editable again when it's hidden
	}).on('hidden', function(e, reason){
		$(this).editable('disable');
	}).click(function(e){
		e.preventDefault();
	});

	// Use the bootstrap-select plugin on all selects
	$('select').selectpicker();

	// Use the MixItUp plugin for sorting tables
	$('.mixitup').mixItUp({
		animation: {
			duration: 200,
			effects: 'fade'
		},
		layout: {
			display: 'table-row'
		}
	});
	$('.mixitup .mixitup-sort').click(function(){
		var mapping = {
			desc: 'asc',
			asc: 'desc'
		}
		$(this).data('sort', $(this).data('sort').replace(/asc|desc/gi, function(m){ return mapping[m]; }));
		$(this).closest('.mixitup').mixItUp('sort', $(this).data('sort'));
		var sorting = $(this).data('sort').substring($(this).data('sort').indexOf(':') + 1);

		$(this).parent().find('.mixitup-sort').removeClass('active sorting_asc sorting_desc').addClass('sorting');
		$(this).addClass('active sorting_' + sorting).removeClass('sorting');
	});

	// Collapse menu
	var collapsed = false;
	$('#collapse-menu').click(function(e, p){
		var animation = 200;
		if (typeof p != 'undefined' && p.load)
			animation = 0;

		if (!collapsed)
			$('.nav-title').finish().hide();
		$('.sidebar').animate({
			width: collapsed ? 250 : 50
		}, animation);
		$('#page-wrapper').animate({
			marginLeft: collapsed ? 250 : 50
		}, animation);
		if (collapsed)
			$('.nav-title').finish().delay(animation).queue(function(){$(this).show()});
		$(this).find('i.fa').removeClass('fa-caret-square-o-left fa-caret-square-o-right').addClass('fa-caret-square-o-' + (collapsed ? 'left' : 'right'));
		collapsed = !collapsed;

		$.ajax({
			url: const_url_external + 'ajax/collapse',
			method: 'GET',
			crossDomain: true,
			cache: false,
			data: {
				setting: collapsed
			}
		});

		return true;
	});
});

// Email modal
function sendMail() {
	var modal = $('#modal-email');
	var modalBody = modal.find('.modal-body');
	var sendIcon = modal.find('.modal-footer .btn-send .fa');
	var values = modalBody.find('form').serialize();
	modalBody.find(':input').prop('disabled', true);
	sendIcon.removeClass('fa-envelope').addClass('fa-spin fa-refresh');
	$.ajax({
		url: const_url_external + 'ajax/email/offer',
		method: 'POST',
		data: values,
		success: function(data) {
			modal.modal('hide');
			modalBody.html('');
		},
		error: function(jqxhr, stat, err) {
			modalBody.find('.alert').remove();
			modalBody.html('<div class="alert alert-danger" role="alert">' + stat + ': ' + err + '</div>' + modalBody.html());
		},
		complete: function() {
			modalBody.find(':input').prop('disabled', false);
			sendIcon.addClass('fa-envelope').removeClass('fa-spin fa-refresh');
		}
	});
}

function offerEmail(offerId) {
	var modal = $('#modal-email');
	var modalBody = modal.find('.modal-body');
	modal.modal('show');
	modalBody.html('<i class="fa fa-fw fa-refresh fa-spin"></i>');
	$.ajax({
		url: const_url_external + 'ajax/email/offer',
		method: 'GET',
		data: {
			id: offerId
		},
		success: function(data) {
			modalBody.html(data);
		},
		error: function(jqxhr, stat, err) {
			modalBody.html('<div class="alert alert-danger" role="alert">' + stat + ': ' + err + '<br/>' + jqxhr.responseText + '</div>');
		}
	});
}