function vCatalogEnableQuantity(url, id, qty)
{
	var quantityCart = $('#'+qty).val();
	var url_request = url + 'Quantity?id='+id+'&quantity='+quantityCart;

	$.ajax({
			type:'POST',
			dataType:'html',
			success:function(data, textStatus){
				$('#v-cart').html(data);
				updateCart(url);
			},
			complete:function(XMLHttpRequest, textStatus){
			},
			url: url_request
	});
}

function vCatalogEnableCheckoutQuantity(url, id, qty)
{
	var quantityCart = $('#'+qty).val();
	var url_request = url + 'Quantity?id='+id+'&quantity='+quantityCart;

	$.ajax({
			type:'POST',
			dataType:'html',
			success:function(data, textStatus){
				$('#cart').html(data);
				updateCart(url);
			},
			complete:function(XMLHttpRequest, textStatus){
			},
			url: url_request
	});
}


function updateCart(url)
{
	$.ajax({
			type:'POST',
			dataType:'html',
			success:function(data, textStatus){
				$('#v-cart-label').html(data);
			},
			complete:function(XMLHttpRequest, textStatus){
			},
			url: url
	});
}

function updateChecoutCart(url)
{
	$.ajax({
			type:'POST',
			dataType:'html',
			success:function(data, textStatus){
				$('#v-cart-label').html(data);
			},
			complete:function(XMLHttpRequest, textStatus){
			},
			url: url
	});
}

function vCatalogEnableTitle()
{
	apostrophe.formUpdates({ 'selector': '#v-catalog-item-title-interface', 'update': 'v-catalog-title-and-slug' });

	// Form has class, input element has id
	var titleInterface = $('#v-catalog-item-title-interface');
	var tControls = titleInterface.find('ul.a-controls');
	var tInput = titleInterface.find('.a-title');
	var originalTitle = tInput.val();
	tInput.keyup(function(event) {
		if (tInput.val().trim() != originalTitle.trim())
		{
			titleInterface.addClass('has-changes');
			tControls.fadeIn();
		}
		return false;
	});
	titleInterface.find('.a-cancel').click(function() {
		tInput.val(originalTitle);
		tControls.hide();
		return false;
	});
}

function vCatalogEnableSlug()
{
	apostrophe.formUpdates({ 'selector': '#v-catalog-item-permalink-interface', 'update': 'v-catalog-title-and-slug' });

	// Form has class, input element has id
	var slugInterface = $('#v-catalog-item-permalink-interface');
	var tControls = slugInterface.find('ul.a-controls');
	var tInput = slugInterface.find('.a-slug');
	var originalSlug = tInput.val();
	tInput.keyup(function(event) {
		if (tInput.val().trim() != originalSlug.trim())
		{
			slugInterface.addClass('has-changes');
			tControls.fadeIn();
		}
		return false;
	});
	slugInterface.find('.a-cancel').click(function() {
		tInput.val(originalSlug);
		tControls.hide();
		return false;
	});
}

function vCatalogEnableReference()
{
	apostrophe.formUpdates({ 'selector': '#v-catalog-item-reference-interface', 'update': 'v-catalog-title-and-slug' });

	// Form has class, input element has id
	var titleInterface = $('#v-catalog-item-reference-interface');
	var tControls = titleInterface.find('ul.a-controls');
	var tInput = titleInterface.find('.a-reference');
	var originalTitle = tInput.val();
	tInput.keyup(function(event) {
		if (tInput.val().trim() != originalTitle.trim())
		{
			titleInterface.addClass('has-changes');
			tControls.fadeIn();
		}
		return false;
	});
	titleInterface.find('.a-cancel').click(function() {
		tInput.val(originalTitle);
		tControls.hide();
		return false;
	});
}

function vCatalogEnablePrice()
{
	apostrophe.formUpdates({ 'selector': '#v-catalog-item-price-interface', 'update': 'v-catalog-title-and-slug' });

	// Form has class, input element has id
	var titleInterface = $('#v-catalog-item-price-interface');
	var tControls = titleInterface.find('ul.a-controls');
	var tInput = titleInterface.find('.a-price');
	var originalTitle = tInput.val();
	tInput.keyup(function(event) {
		if (tInput.val().trim() != originalTitle.trim())
		{
			titleInterface.addClass('has-changes');
			tControls.fadeIn();
		}
		return false;
	});
	titleInterface.find('.a-cancel').click(function() {
		tInput.val(originalTitle);
		tControls.hide();
		return false;
	});
}

function vCatalogEnableTva()
{
	apostrophe.formUpdates({ 'selector': '#v-catalog-item-tva-interface', 'update': 'v-catalog-title-and-slug' });

	// Form has class, input element has id
	var titleInterface = $('#v-catalog-item-tva-interface');
	var tControls = titleInterface.find('ul.a-controls');
	var tInput = titleInterface.find('.a-tva');
	var originalTitle = tInput.val();
	tInput.keyup(function(event) {
		if (tInput.val().trim() != originalTitle.trim())
		{
			titleInterface.addClass('has-changes');
			tControls.fadeIn();
		}
		return false;
	});
	titleInterface.find('.a-cancel').click(function() {
		tInput.val(originalTitle);
		tControls.hide();
		return false;
	});
}

function vCatalogEnableNewForm()
{
	var newForm = $('.v-catalog-admin-new-form');
	newForm.submit(function() {
		var form = $(this);
		apostrophe.updating('.v-catalog-admin-new-ajax');
		$.post(form.attr('action'), $(this).serialize(), function(data) {
			$(document).append(data);
		});
		return false;
	});
}

function vCatalogEnableImportForm()
{
	var newForm = $('.v-catalog-admin-import-form');
	var importButton = $('.a-import-file');

	importButton.click(function(){
		newForm.submit();
		return false;
	});

/*	newForm.submit(function() {
		var form = $(this);
		apostrophe.updating('.v-catalog-admin-import-ajax');

		$.post(form.attr('action'), $(this).serialize(), function(data) {
			$(document).append(data);
		});
		return false;
	});*/
}

function vCatalogEnableForm(options)
{
	var changed = false;
	var savedState = null;
	var form = $('#a-admin-form');
	apostrophe.formUpdates({ selector: '#a-admin-form', update: 'a-admin-form' });
	// Due to the way our markup is structured this is a better place for the little
	// 'updating' message
	$('.a-subnav-wrapper').addClass('a-ajax-attach-updating');
	var status = form.find('[name=v_catalog_item[publication]]');
	var init = true;

	// A convenience within this closure to keep us from getting lazy and
	// using selectors that aren't specific to the form
	function find(sel)
	{
		return form.find(sel);
	}

	status.change(function() {
		var c = form.find('.a-published-at-container');
		var s = status.val();
		if (s === 'schedule')
		{
			c.show();
		}
		else
		{
			c.hide();
		}
		if (!init)
		{
			find('.a-save-catalog-main .label').text(options['update-labels'][s]);
		}
		init = false;
	});
	status.change();

	find('.template.section select').change(function() {
		alert(options['template-change-warning']);
		// Let the form submit as a full refresh
		$(form).unbind('submit.aFormUpdates');
	});

	p = { 'choose-one': options['categories-choose-label'] };
	if (options['categories-add'])
	{
		p['add'] = options['categories-add-label'];
	}
	aMultipleSelect(form.find('#categories-section'), p);

	function toggleAllDay(checkbox) {
		$(checkbox).toggleClass('all_day_enabled');
		find('.start_time').toggleClass('time_disabled').toggle();
		find('.end_time').toggleClass('time_disabled').toggle();
	}

	find('.all_day input[type=checkbox]').bind('click', function() {
		toggleAllDay($(this));
	});

	if (find('.all_day input[type=checkbox]:checked').length)
	{
		toggleAllDay($(this));
	}
}

function vCatalogCheckboxToggle(checkbox)
{ // Toggle any checkbox you want with this one
	checkbox.attr('checked', !checkbox.attr('checked'));
}


function vCatalogGetPostStatus()
{
	var postStatus = $('#v_catalog_item_status');
	return postStatus.val();
}

// Starting to assemble the vCatalogConstructor -- eventually all of the JS functions above can be migrated into this space

function vCatalogConstructor()
{
	this.sidebarEnhancements = function(options)
	{
		var debug = options['debug'];

		debug ? apostrophe.log('vCatalog.sidebarEnhancements -- debug') : '';

		$('.a-tag-sidebar-title.all-tags').click(function(){
			$('.a-tag-sidebar-list.all-tags').slideToggle();
			$(this).toggleClass('open');
		});

		$('.a-tag-sidebar-title.all-tags').hover(function(){
			$(this).toggleClass('over');
		},
		function(){
			$(this).toggleClass('over');
		});
	}

	this.enableCartButtons = function(options)
	{
		var aPageSettingsURL = options['aPageSettingsURL'];
		var name = options['name'];
		var menu = $('#v-cart');

		$('#'+name).click(function(){
			$('.a-page-overlay').show();
			$.ajax({
					type:'POST',
					dataType:'html',
					success:function(data, textStatus){
						menu.html(data);
					},
					complete:function(XMLHttpRequest, textStatus){
					},
					url: aPageSettingsURL
			});
		});

		// Close Cart, Destroy Listener
		menu.unbind('toggleClosed').bind('toggleClosed', function(){
			$('.a-page-overlay').hide();
			menu.html('');
		});

		$('#' + menu.attr('id') + ' .a-options-cancel').live('click',function(e){
			e.preventDefault();
			menu.trigger('toggleClosed');
		});

		$('.a-page-overlay').click(function(){
			menu.trigger('toggleClosed');
		});
	}

	this.enableAddToCart = function(options)
	{
		var aPageSettingsURL = options['url'];
		var messageError = options['messageError'];
		var name = options['name'];

		$( '#quantity_cart' ).bind('keypress', function(e){ 
			   if ( e.keyCode == 13 ) { 
				   $('#v-cart-quantity-save').click(); 
				   return false;
			   } 
			 }); 		
		
		$('#v-cart-quantity-save').click(function(){
			var quantityCart = $('#quantity_cart').val();

			if (quantityCart >= 1)
			{
				aPageSettingsURL += '&quantity='+quantityCart;
				$.ajax({
						type:'POST',
						dataType:'html',
						success:function(data, textStatus){
							$('.a-page-overlay').hide();
							$('#'+name+'-dropshadow').html('');
							$('#v-cart-button').html(data);
						},
						complete:function(XMLHttpRequest, textStatus){
						},
						url: aPageSettingsURL
				});
			}
			else
			{
				alert(messageError);
			}
		});
	}

	this.enableRequestQuoteCart = function(options)
	{
		var aPageSettingsURL = options['url'];
		var name = options['name'];

		$('#'+name).click(function(){
			window.location.href = aPageSettingsURL;
		});
	}

	this.enableDeleteCart = function(options)
	{
		var aPageSettingsURL = options['url'];
		var url = options['url_update_label'];
		var name = options['name'];

		$('#'+name).click(function(){
			$.ajax({
					type:'POST',
					dataType:'html',
					success:function(data, textStatus){
						$('#v-cart').html(data);
						updateCart(url);
					},
					complete:function(XMLHttpRequest, textStatus){
					},
					url: aPageSettingsURL
			});
		});

		return false;
	}

	this.enableDeleteCheckoutCart = function(options)
	{
		var aPageSettingsURL = options['url'];
		var url = options['url_update_label'];
		var name = options['name'];

		$('#'+name).click(function(){
			$.ajax({
					type:'POST',
					dataType:'html',
					success:function(data, textStatus){
						$('#cart').html(data);
						updateCart(url);
					},
					complete:function(XMLHttpRequest, textStatus){
					},
					url: aPageSettingsURL
			});
		});

		return false;
	}

	this.enableDeleteItem = function(options)
	{
		var aPageSettingsURL = options['url'];
		var url = options['url_update_label'];
		var name = options['name'];

		$('#'+name).click(function(){
			$.ajax({
					type:'POST',
					dataType:'html',
					success:function(data, textStatus){
						$('#v-cart').html(data);
						updateCart(url);
					},
					complete:function(XMLHttpRequest, textStatus){
					},
					url: aPageSettingsURL
			});
		});

		return false;
	}

	this.enablePrintCart = function(options)
	{
		var aPageSettingsURL = options['url'];
		var name = options['name'];

		$('#'+name).click(function(){
			window.location.href = aPageSettingsURL;
		});

		return false;
	}

	this.enableCheckoutDeleteItem = function(options)
	{
		var aPageSettingsURL = options['url'];
		var url = options['url_update_label'];
		var name = options['name'];

		$('#'+name).click(function(){
			$.ajax({
					type:'POST',
					dataType:'html',
					success:function(data, textStatus){
						$('#cart').html(data);
						updateCart(url);
					},
					complete:function(XMLHttpRequest, textStatus){
					},
					url: aPageSettingsURL
			});
		});

		return false;
	}

	this.enableAddQuantity = function(options)
	{
		var aPageSettingsURL = options['url'];
		var name = options['name'];

		apostrophe.menuToggle({"button":"#"+name,"classname":"","overlay":true, "debug":true,
			"beforeOpen": function() {
				$.ajax({
						type:'POST',
						dataType:'html',
						success:function(data, textStatus){
							$('#'+name+'-dropshadow').html(data);
						},
						complete:function(XMLHttpRequest, textStatus){
						},
						url: aPageSettingsURL
				});
			},
			"afterClosed": function() {
				$('#'+name+'-dropshadow').html('');
			}
		});
	}

	this.enableSendQuote = function(options)
	{
		var name = options['name'];

		$('#'+name).click(function(){
			$('#send-checkout-form').submit();
		});
	}


	this.enableEraseQuote = function(options)
	{
		var name = options['name'];

		$('#'+name).click(function(){
			$('#request_name').val('');
			$('#request_email').val('');
			$('#request_phone').val('');
			$('#request_message').val('');
		});

		return false;
	}

	this.slotEditView = function(options)
	{
		var formName = options['formName'];
		var autocompleteUrl = options['autocompleteUrl'];
		var className = options['class'];
		var selfLabelSelector = options['selfLabelSelector'];
		var labelSelector = options['labelSelector'];

		var debug = (options['debug']) ? options['debug'] : false;

		(debug) ? apostrophe.log('vCatalog.slotEditView -- formName: ' + formName) : '';
		(debug) ? apostrophe.log('vCatalog.slotEditView -- autocompleteUrl: ' + autocompleteUrl) : '';
		(debug) ? apostrophe.log('vCatalog.slotEditView -- class: ' + className) : '';

//    aMultipleSelect('#a-' + formName + ' .' + className, { 'autocomplete': autocompleteUrl });
    aMultipleSelect('#a-' + formName + ' .' + className, { 'choose-one': 'Ajouter les titres' });
    aMultipleSelect('#a-' + formName + ' .categories', { 'choose-one': labelSelector });

		var slotEditForm = $('#a-'+formName)
		var editStates = slotEditForm.find('.a-form-row.by-type input[type="radio"]');
		var editState = slotEditForm.find('.a-form-row.by-type input[type="radio"]:checked').val();
		slotEditForm.addClass('a-options dropshadow editState-' + editState );
			editStates.live('click', function(){
			 	editState = slotEditForm.find('.a-form-row.by-type input[type="radio"]:checked').val();
				slotEditForm.removeClass('editState-title').removeClass('editState-tags').addClass('editState-'+editState);
		});
	}

}

window.vCatalog = new vCatalogConstructor();
