var jobs = {};

/**
 * Generic AJAX form post with spinners and clalbacks. If we actually use this elsewhere, it should be moved.
 * @param form
 * @param onSuccess callback
 * @param onFailure callback
 * @return
 */
var formLock = [];
function saveFormViaAjax(form, onSuccess, onFailure){
	var id = form.attr('id');
	//don't send more than once
	if (formLock[id]) {
		return false;
	}
	formLock[id] = true;
	
	//show spinner over form
	showSpinner(id);

	//AJAX post
	$.ajax({
		type: 'POST',
		url: form.attr('action'),
		data: form.serialize()+'&ajax=1',
		success: function(response) {
			hideSpinner(id);
			formLock[id] = false;
			onSuccess(response);
		},
		error: function(response) {
			hideSpinner(id);
			formLock[id] = false;
			onFailure(response);
		}
	});
	return false;
}

/**
 * Job action controller
 * @param jobId
 * @param selectInput
 * @return
 */
function jobAction(jobId, selectInput) {
	if (selectInput.options[selectInput.selectedIndex].value != '') {
		if ((selectInput.options[selectInput.selectedIndex].value != 'delete') 
		   || (confirm('Are you sure you want to delete this job?'))) { 
			exec(jobId,selectInput.options[selectInput.selectedIndex].value)
		} 
		else { 
			selectInput.selectedIndex = 0;
		}
	}
}


/**
 * Execute job action
 * @param jobId
 * @param event
 * @return
 */
function exec(jobId, event) {
	document.getElementById('jobId').value = jobId;
	document.getElementById('event').value = event;
	document.cmd.submit();
}

/**
 * Saves the job post form via AJAX
 * @return
 */
function saveJobPostForm() {
	var form = $('#jobPostForm');
	
	return saveFormViaAjax(
		form,
		function(response) {
			data = parseJSON(response);
			if (data.job) {
				showSpinner(form.attr('id'));
				shareJob(data.job);
			} else {
				form.parent().html(data.html);
				$('#jobPostForm').attr('action', $('#jobPostForm').attr('action') + '?' + fbParams);
				initJobPostForm();
			}
		},
		function() {
			alert("An Error Occurred");
		}
	);
}

/**
 * Initializes the Job Post form. We need a function to do this because it's HTML can be replaced by AJAX
 * @return
 */
function initJobPostForm() {
	$('#jobPostForm').submit(function(event) {
		event.preventDefault();
		saveJobPostForm();
	});
	
	//job fair date picker
	$('#jobFairDate').datepicker({
		minDate: 0
	});
	
	//shows and hides apply to url or apply to email fields	
	$('#jobPostForm .desc_before input:radio').click(function(event) {
		if ($('#applyMethod-url').attr('checked')) {
			$('#applyEmail').parent().addClass('hidden');
			$('#applyUrl').parent().removeClass('hidden');
			if($('#applyUrl').hasClass('pageMsg')) {
				$('#applyUrl').parent().html('<div id="applyUrl">'+$('#applyUrlPageMsg').html()+'</div>');
			}
		} else {
			$('#applyUrl').parent().addClass('hidden');
			$('#applyEmail').parent().removeClass('hidden');
		}	
	});
		
	addUrlTest();
}

/**
 * add URL test link to applicable fields
 */
function addUrlTest() {
	$('.urlField').each(function() {
		var id = $(this).attr('id');
		//add link
		$(this).after('<a id="'+id+'-test" class="urlTestLink" href="#">Test</a>');
		//link event handler
		$('#'+id+'-test').click(function(event) {
			event.preventDefault();
			if ($('#'+id).val().length > 0 && $('#'+id).val().substr(0,4) != 'e.g.') {
				openWindow($('#'+id).val(), '780', '400');
			} else {
				alert('Please enter a URL to test');
			}
		});
	});
}



/**
 * Launches Facebook publisher and Twitter publisher for the given job
 * @param job
 */
function shareJob(job){
	if ($('#user-hasFacebook').val() == 1) {
		showFacebookPopup(job, twitterCheck);
	} else {
		twitterCheck(job);
	}
}


/**
 * Launches Facebook popup for a given job
 * @param job
 * @param callback
 * @return
 */
function showFacebookPopup(job, callback) {
	var media = [];
	
	//don't show picture on AltaMed posts
	if (fbPageId != '297332085501') {
		media = [{
					type: "image",
					src:  fbShareImageUrl,
					href: job.fbUrl
				}];
	}
	
	//this allows for sharing jobs to page as user
	var actor = '';
	if (fbPageId != '') {
		var actor = fbPageId;
	}
	
	FB.ui({
		method	:	'stream.publish',
		message : job.fbMessage,
		attachment:	{
			name: job.linkName,
			caption: job.description,
			href: job.fbUrl,
			media: media
		},
		actor_id: actor,
		display:	'dialog',
		action_links:[{
			text: 'Share Job',
			href: fbBaseUrl + '/job/fb-share/index/id/' + job.id
		}]
	
	},function() { callback(job); });
}

/**
 * Launches twitter publisher if necessary, otherwise redirect to jobs list
 * @param job
 */
function twitterCheck(job){
	// If user has authenticated Twitter, ask them if they want to post this
	if ($('#user-hasTwitter').val() == 1) {
		showTwitterPopup(job, function() { fbgo('/job') });
	} else {
		fbgo('/job');
	}
}

/**
 * Start twitter authorization process
 * @return
 */
function authorizeTwitter() {
	var url = '/account/twitter/authorize';
	
	if (self !== top) {
		var fbParams = getFbParams();
		if (fbParams != '') {
			url += '?' + fbParams;
		}
	}
	window.top.location = url;
	return;
}


function jobBoardSearch() {
	var form = $('#jobSearchForm');

	//change search button
	$('#submit').attr('src','/images/btnSearching.png');
	
	//hide drop down
	$('#countryDropDown').hide();
	
	//AJAX post
	saveFormViaAjax(form, function(response) {
		$('#jobBoardContent').html(response);
		$('#jobSearchForm').attr('action', $('#jobSearchForm').attr('action') + '?' + fbParams);
	}, function() {
		$('#message').html('An error occurred. Please try again later.');
	});
	return false;
}


function showJobBoardPage(pageNumber) {
	$('#page').val(pageNumber);
	$('#keyword').val(jobBoardPrevKeyword);
	$('#location').val(jobBoardPrevLocation);
	$('#country').val(jobBoardPrevCountry);
	return jobBoardSearch();
}


function exportTalentNetwork() {
	var fbParams = getFbParams();
	var url = '/job/talent/export-excel'
	if (fbParams != '') {
		url += '?' + fbParams;
	}
	
	var elIframe = document.createElement("iframe"); 
	elIframe.src = url; 
	elIframe.style.display = 'none'; 
	document.body.appendChild(elIframe); 
}

$(document).ready(function() {
	//this will handle the job post form
	initJobPostForm();
	
	//authorize twitter
	$("a.authorizeTwitter").click(function(event) {
		event.preventDefault();
		if (confirm("In order to share job posts on twitter, you need to authorize jobmagic to post tweets. Would you like to proceed?")) {
			authorizeTwitter();
		}
	});
	
	//share to twitter
	$("a.shareOnTwitter").click(function(event) {
		event.preventDefault();
		var jobId = this.id.substring(this.id.indexOf("_") + 1);
		showTwitterPopup(jobs[jobId], function(){});
	});
	
	/**
	 * Post jobs to Facebook from Job's list
	 */
	$("a.shareOnFacebook").click(function(event) {
		event.preventDefault();
		var jobId = this.id.substring(this.id.indexOf("_") + 1);
		var job = jobs[jobId];
		showFacebookPopup(job,function(){});
	});
	
	
	//share this button for job list 
	jQuery.each($('.jobShareThis'), function() {
		var jobId = this.id.substring(this.id.indexOf("_") + 1);
		
		var configOptions =  {
			services_exclude: 'facebook,linkedin,twitter',
			ui_click: true
		}
		var shareOptions =  {
			title: jobs[jobId].title + " | jobmagic",
			url: jobs[jobId].url
		}
		addthis.button(this, configOptions, shareOptions);
	});

	//job brand text prompts
	if ($('#jobBrandForm').length > 0) {
		TextfieldHint.apply($('#twitterUrl'), 'e.g. http://www.twitter.com/username');
		TextfieldHint.apply($('#linkedInUrl'), 'e.g. http://www.linkedin.com/in/username');
		TextfieldHint.apply($('#videoUrl'), 'e.g. http://www.youtube.com/user/username');
		TextfieldHint.apply($('#blogUrl'), 'e.g. http://www.blog.mysite.com');
		TextfieldHint.apply($('#facebookUrl'), 'e.g. http://www.facebook.com/pages/pagename/123');
	}
	
	//logs click action to database
	$('.jobConnectAction').click(function() {
		var parts = this.id.split('_');
		if (parts.length == 3) {
			var jobId = parts[1];
			var actionType = parts[2];
			var isFacebook = (self !== top)
			
			$.post('/job/analytics/connect/',
				{xhr: 1, jobId: jobId, actionType: actionType, isFacebook: isFacebook});
		}
	});
	
	if ($('#jobApplyForm').length > 0) {
		//shows and hides apply to url or apply to email fields	
		$('#jobApplyForm .desc_before input:radio').click(function(event) {
			if ($('#applyMethod-file').attr('checked')) {
				$('#resumeText').parent().addClass('hidden');
				$('#resumeFile').parent().removeClass('hidden');
			} else {
				$('#resumeFile').parent().addClass('hidden');
				$('#resumeText').parent().removeClass('hidden');
			}	
		});
	}

});
