/*
	This function provides drag-and-drop functionality
	to the question moves ...
*/

$(function() {
	
	$( "#sortable" ).sortable();
	$( "#sortable" ).disableSelection();
	
	$( "#sortable" ).bind( "sortchange", function(event, ui) {
		// add attributes to item will 
		// dragging-and-dropping. 
		// USE JQUERY CSS() FUNCTION PLEASE
		ui.item.css("background-color","#F69");
	});	
	
	$( "#sortable" ).bind( "sortupdate", function(event, ui) {
			var qlist = [];
			var indx = 1;
			$('#sortable li').each( function(){
				qlist.push( $(this).attr("id") );
				$(this).html(indx);
				$(this).removeClass('active_q');
				indx += 1;
			})
			$.ajax({ type: "POST",
				     url: '/api/update_question_order/',
					 data : { 'qlist' : qlist, 'currentq' : ui.item.attr('id') },
					 success: function(data) 
					 {  
						if (data.success === true){
							location.href = data.next_url;
						}
					 }
			});
	});
});


function ajaxSubmitSkipLogic( qid, sid, qnum )
{	
	var skip_logic = $('.' + qid)
	var results = {};
	results['qid'] = qid;
	results['sid'] = sid;

	skip_logic.each( function(){
		var value 	= $(this).val();
		var key	= $(this).attr('name') ;
		results[key] = value;
	});
	
	var form_id 	= '#form_socialq_skip_logic';
	var ajax_url	= '/api/update_skip_logic/';
	var vdata		= {};
	var data		= results;
	var callback = function(data) {
		hideAllMessages();	
		$('.success #number').html(qnum);			  
		$('.success').animate({top:"0"}, 500);
	};	
	
	make_request_skip_logic(form_id, ajax_url, data, vdata, callback);
	
	return false;
}

function SubmitUserResponse( sid ) 
{
	var D = $('#socialq_form').serializeArray();
	var form_data = $.param(D);

	var response_length = $('.response').length;
	var responses = [];

	if ( response_length > 1 )
	{
		$('.response').each(function(){
			var checked = $(this).attr('checked');
			if (checked)
			{
				responses.push( $(this).val() )
			}
		});
		
		var is_datetime = $('#datetime').length;
		if ( is_datetime > 0 ){
			$('.response').each( function(){ 
				responses.push($(this).val() )
			})
		}
		
		// check if other was clicked on multiple choice 
		// question
		if ( jQuery.inArray("an_other" ,responses) !== -1 )
		{
			responses.push( $('input[name=other]').val() )
		}

	}
	else
	{
		responses.push( $('.response').val() )
	}
			
	$.ajax({ type: "POST",
		     url: '/api/save_user_response/',
			 data : { 'form_data' : form_data, 'sid' : sid, 'responses' : responses },
			 beforeSend: function(){ return $("#socialq_form").validate().form(); },
			 success: function(data) 
			 { 
				if (data.success === true){
					location.href = data.next_url;
				}
			 }
	});
}

function make_request_skip_logic(form_id, ajax_url, data, vdata, callback)
{
		
	vdata = vdata || {};
	
	$.ajax(	{ type : "POST",
			  url : ajax_url, 
			  data : data,
			  success : function(data) 
			  { 
				if (data.success) {
					callback();
			  	} else {
					$('#' + data.qid ).css('display','inline')
				}
			  },
			  beforeSend: function(){ return $(form_id).validate( vdata ).form();}
	});	
	return false;
}



function make_request(form_id, ajax_url, data, vdata, callback, next_url)
{
		
	vdata = vdata || {};
	
	$.ajax(	{ type : "POST",
			  url : ajax_url, 
			  data : data,
			  success : function(data) 
			  { 
				if (data.success) {
					callback();
					if(next_url !== undefined){
						var moveto = "location.href='" + next_url + "'"
						setTimeout(moveto, 1000);
					}
			  	}
			  },
			error:function (xhr, ajaxOptions, thrownError){
			                    alert(xhr.status);
			                    alert(thrownError);
			                },
			  beforeSend: function(){ return $(form_id).validate( vdata ).form();}
	});	
	return false;
}

function beta_submit()
{
	var is_valid = $('#socialq-contact-form').validate().form();
	if( is_valid === true)
	{
		hideAllMessages();				  
		$('.success').animate({top:"0"}, 500);			
	}
}


function ajaxDistributionSettings(next_url)
{
	var form_id = '#form_settings_distribution';
	var vdata   = {};
	var ajax_url = '/api/update_distro_settings/';
	var data = $(form_id).serialize();
	var callback = function() {
		hideAllMessages();				  
		$('.success').animate({top:"0"}, 500);
	}

	return make_request(form_id, ajax_url, data, vdata, callback, next_url);	
}

function ajaxSurveyTextSettings(next_url)
{
	var form_id = '#survey_text_form';
	var vdata	= {};
	var ajax_url 	= '/api/update_text_settings/';	
	var data = {
		'welcome_text' : $('#welcome_text').val(),
		'closing_text' : $('#closing_text').val(),
		'url' : $('input[name=exit_url]').val()
	};
	
	var callback = function() {
		hideAllMessages();				  
		$('.success').animate({top:"0"}, 500);
	}
		
	return make_request(form_id, ajax_url, data, vdata, callback, next_url);
}

function ajaxFacebookConnectSettings(next_url)
{
	var form_id 	= '#survey_facebook_connect_form';
	var data		= $(form_id).serialize();
	var ajax_url 	= '/api/update_fb_settings/';
	var vdata 		= {};
	
	var callback = function() {
		hideAllMessages();				  
		$('.success').animate({top:"0"}, 500);
	}
		
	return make_request(form_id, ajax_url, data, vdata, callback,next_url);
}

function ajaxSurveyName(next_url)
{
	var form_id = '#survey_name_form';
	var data = { 'name' : $('input[name=survey_name]').val() };
	var ajax_url = '/api/update_survey_name/';
	
	var callback = function() {
		hideAllMessages();				  
		$('.success').animate({top:"0"}, 500);
	}
	
	
	var vdata = { 
			rules :
			{
				survey_name : {
					required : true,	  
					survey_chars_allowed: true,
					check_default_name: true
				}
			},
			messages :
			{
				survey_name : {
					required : "The survey name is required."	  
				}
			},
			onfocusout: function(element) { $(element).valid(); } ,
		};
	return make_request(form_id, ajax_url, data, vdata, callback, next_url);
}


function update_survey_state(sid, new_state, name, next_url)
{
	var text = "";
	if (new_state === 'OPENED')
	{
		text = 'Do you really want to open ' + name + ' to respondents?'
	} 
	else if (new_state === 'PAUSED') 
	{
		text = 'Do you really want to pause ' + name + '?'
	}
	else
	{
		text = 'Do you really want to close ' + name + ' to respondents?'	
	}
	
	var answer = confirm (text)
	
	if ( answer )
	{
		if (new_state === 'OPENED')
		{
			$.ajax({ type: "GET",
				     url: '/api/is_valid_for_publish/',
					 data : { 'sid' : sid },
					 success: function(data) 
					 { 
						if (data.valid === false)
						{
							alert(data.msg)
						}
						else
						{
							$.ajax({ type: "POST",
									 url: '/api/update_survey_state/',
									 data : { 'sid' : sid, 'state' : new_state },
									 success: function(data) {  if( data.success ) { location.href = data.next_url; } }
							});
						}
					}
			});
			
			return false;
		}

		$.ajax({ type: "POST",
				 url: '/api/update_survey_state/',
				 data : { 'sid' : sid, 'state' : new_state },
				 success: function(data) {  if( data.success ) { location.href = data.next_url; } }
		});
		
		return false;
	}	
}


function generate_unique_urls(sid, generate_unique) 
{
		var num = 0;
		var use_single_url = 0;
		if( generate_unique === true){
			num = 1;
			use_single_url = 1;
		} else {
			num = $('input[name=num_urls]').val();
		}
		
		$.ajax({ type: "POST",
			     url: '/api/generate_unique_urls/',
				 data : { 'sid' : sid, 'num'  : num, 'use_single_url' : use_single_url },
				 success: function(data) 
				 {  
					if( generate_unique ) {
						
						$('#unique_url_testing_label').css('display','block');						
						$('#unique_url_label').css('display','block');						
						$('#unique_url').html(data.live_url);
						$('#unique_url').css('display','block');
						$('#unique_url_test').html(data.testing_url);
						$('#unique_url_test').css('display','block');

					} else {
						$('#url_download_link').css('display','block');
						$('#download_URLs').attr('href', data.url);					F
				 	}
				}
		});
		
		
}

// VALIDATE GENERAL FORMS
$(document).ready(function() {
	$("#social_form").validate();
	$("#multiple-question-form").validate();
	$("#rate_question_form").validate();
	$("#date_time_question_form").validate();
	$("#comment_box_question_form").validate();
	$("#text_box_question_form").validate();
	$("#number_box_question_form").validate();
	$("#socialq-contact-form").validate();	
	
	
var valid_skip_logic = function(value, element) {
	
	console.log( value )

	if ( value !== "End" && value !== "Next")
	{
		if (value.match(/^[0-9]+$/)) {
			return true;
		} else{
			return false;
		}
		return false;
	} 
	
	return true;
}
	
$.validator.addMethod("survey_chars_allowed", function(value, element) {
    return value.match(/^[A-Za-z0-9\s\+-\_\-]+$/); }, "Please enter a valid survey name. (letter, numbers, dashes, etc.)");
$.validator.addMethod("check_default_name", function(value, element) { return value !== "Enter Survey Name" }, "Enter A Valid Survey Name!");	
});




function askFB( unique_id, sid, next_url, permissions, facebook_oped_out_url ) 
{

	FB.login(function(response) 
	{
		if (response.authResponse == null)
		{
			if( facebook_oped_out_url === undefined) {  
				location.href = next_url;
			} else {
				location.href = facebook_oped_out_url;
			}
			
		} 
		else 
		{		
			$.ajax( { type: "POST", 
					url: "/facebook/save_fb_data/", 
					data : { 'uid' 	 : unique_id,  
							 'token' : response.authResponse.accessToken ,
							 'fid'   : response.authResponse.userID, 
							 'sid'   : sid },
					success: function(data) 
					{ 		
						top.location.href = next_url; 
					},
					error: function (xhr, ajaxOptions, thrownError ){
					            alert(xhr.status);
					            alert(thrownError);	}
				});
		}
	  },
	  { scope : permissions }
	);
}


function askFBModal( unique_id, sid, next_url, permissions) 
{

	FB.login(function(response) 
	{
		if (response.authResponse == null)
		{
			$('#FB_message').modal('show')
		} 
		else 
		{		
			$.ajax( { type: "POST", 
					url: "/facebook/save_fb_data/", 
					data : { 'uid' 	 : unique_id,  
							 'token' : response.authResponse.accessToken ,
							 'fid'   : response.authResponse.userID, 
							 'sid'   : sid },
					success: function(data) 
					{ 		
						top.location.href = next_url; 
					},
					error: function (xhr, ajaxOptions, thrownError ){
					            alert(xhr.status);
					            alert(thrownError);	}
				});
		}
	  },
	  { scope : permissions }
	);
}

