# Launch SSL request

tryssl = (myevent) ->
	form = $(myevent.currentTarget).closest 'form';
	path = window.location.pathname
	console.log 'path -> ', path
	console.log 'Call URL -> ', window.datas.sslHost
	e = jQuery.Event( "sslAttempt" )
	$(document).trigger e
	if !e.isDefaultPrevented()
		$.ajax window.datas.sslHost,
			dataType: 'json',
			xhrFields:
				withCredentials: true
			# If request succeed, posting form to get redirection
			# or menu
			success: (data) ->
				console.log 'Success -> ', data
				e = jQuery.Event( "sslSuccess" )
				$(document).trigger e, [ data ]
				if !e.isDefaultPrevented()
					# If we contain a ajax_auth_token, add it to form
					if data.ajax_auth_token
						form.find('input[name="ajax_auth_token"]').attr("value", data.ajax_auth_token)
					sendUrl form,path
			# Case else, will display PE_BADCREDENTIALS or fallback to next auth
			# backend
			error: (result) ->
				console.log 'Error during AJAX SSL authentication', result
				e = jQuery.Event( "sslFailure" )
				$(document).trigger e, [ result ]
				if !e.isDefaultPrevented()
					# If the AJAX query didn't fire at all, it's probably
					# a bad certificate
					if result.status == 0
						# We couldn't send the request.
						# if client verification is optional, this means
						# the certificate was rejected (or some network error)
						sendUrl form,path
					# For compatibility with earlier configs, handle PE9 by posting form
					if result.responseJSON && 'error' of result.responseJSON && result.responseJSON.error == "9"
						sendUrl form,path

					# If the server sent a html error description, display it
					if result.responseJSON && 'html' of result.responseJSON
						$('#errormsg').html(result.responseJSON.html);
						$(window).trigger('load');
	false

sendUrl = (form,path) ->
	form_url = form.attr('action')
	if form_url.match /^#$/
		form_url = path
	else
		form_url = form_url + path
	console.log 'form action URL -> ', form_url
	form.attr('action', form_url)
	form.submit()

$(document).ready ->
	# Script may be loaded twice if multiple choices use SSL
	if !window._ssl_js_done
		window._ssl_js_done = true
		$('.sslclick').on 'click', tryssl
