$(document).ready(function() {
	// ********** DISABLE SUBMIT BUTTON AFTER CLICK **********
	// TODO: make this work in safari... not sure what I changed from SBF to break it, maybe using classes instead of IDs or something
	// $(".form_submit_button").click(function(){
	// 	$(".form_submit_button").attr("disabled","disabled");
	// });

	if(location.href.indexOf('/jobready/frames.html') >= 0) return;
	
	if(top.document == document)
	{
		$('<div></div>').attr("id", "upload_overlay").css('display', 'none').appendTo("body");
		// without this preload these images doesn't display on safari or chrome
		$('<div></div>').addClass("preloadprogressbarloading").css('display', 'none').appendTo("body");
		$('<div></div>').addClass("preloadprogressbarloading2").css('display', 'none').appendTo("body");
	    var uploadWrapper = $("<div id='uploadWrapper'></div>");
		uploadWrapper.appendTo("body");

		if($.browser.safari && ($(":file").length > 0))
		{
			$('#upload_overlay').append("<iframe id='progressFrame' name='progressFrame' style='display: none' src='javascript:false;'></iframe>");
			
		    var d = $('#progressFrame')[0].contentWindow.document;
		    d.open();
		    /* weird - safari won't load scripts without this lines... */
		    d.write('<html><head></head><body></body></html>');
		    d.close();
		    
		    var b = d.body;
		    var s = d.createElement('script');
		    s.type = 'text/javascript';
		    s.src = document.location.protocol + '//' + document.location.host + '/cdn_redirect/core/js/jquery-1.4.2.js';
		    /* must be sure that jquery is loaded */
		    s.onload = function() {
		      var s1 = d.createElement('script');
			  s1.type = 'text/javascript';
		      s1.src = document.location.protocol + '//' + document.location.host + '/cdn_redirect/core/js/forms.js';
		      b.appendChild(s1);
		    }
		    b.appendChild(s);
		}
		
		// ********** BEGIN FILE UPLOAD PROGRESS BARS **********
	 	$(".form_submit_button").click(function(event) {
	 		var status = process_form_submit_button($(this));
	 		if(status === false) {
	 			return false;
	 		}
	 	});
	 	
	}
	
	if($('#assign_portal_permissions_container').length > 0) {

		$('.activate_portal_user_role, .activate_portal_user').click(function () {
	 		var showHideLink = $(this).parent().nextAll('.toggle_permission_display').children('.toggle_permission_display_link');
	 		if ($(this).prop('checked') == true) {
	 			showHideLink.text('Hide');
	 			$(this).closest('tr').children('td').each(function () {
					$(this).css('border-bottom', 'none');
				});
	 			$(this).closest('tr').next().show();
	 		} else {
	 			showHideLink.text('Show');
	 			$(this).closest('tr').children('td').each(function () {
					$(this).css('border-bottom', '1px solid #AED7F2');
				});
	 			$(this).closest('tr').next().hide();
	 			//uncheck portal permissions
	 			$(this).closest('tr').next().find('.portal_permissions_checkbox').prop('checked', false);
	 		}
	 	});
		
	 	$('.show_all_permissions').click(function () {
	 		$('.row_portal_pages').show();
	 		$('.row_portal_pages').prev().children('td').each(function () {
				$(this).css('border-bottom', 'none');
			});
	 		$('.toggle_permission_display_link').text('Hide');
	 		return false;
	 	});
	 	
	 	$('.hide_all_permissions').click(function () {
	 		$('.row_portal_pages').hide();
	 		$('.row_portal_pages').prev().children('td').each(function () {
				$(this).css('border-bottom', '1px solid #AED7F2');
			});
	 		$('.toggle_permission_display_link').text('Show');
	 		return false;
	 	});
	 	
	 	$('.toggle_permission_display_link').click(function () {
	 		if ($(this).text() == 'Show') {
	 			$(this).text('Hide');
	 			$(this).closest('tr').children('td').each(function () {
					$(this).css('border-bottom', 'none');
				});
	 			$(this).closest('tr').next().show();
	 		} else {
	 			$(this).text('Show');
	 			$(this).closest('tr').children('td').each(function () {
					$(this).css('border-bottom', '1px solid #AED7F2');
				});
	 			$(this).closest('tr').next().hide();
	 		}
	 		return false;
	 	});
	 	
	 	$('.portal_permissions_checkbox').click(function () {
	 		$('.user_not_selected').remove();
	 		var checkbox = $(this).closest('tr').prev().children(':first').children('.activate_portal_user, .activate_portal_user_role');
	 		//get whether or not the "Active" checkbox is checked for this user
	 		var userHasAccess = $(this).closest('tr').prev().children(':first').children('.activate_portal_user, .activate_portal_user_role').prop('checked');
	 		if (!userHasAccess) {
	 			$('<span class="user_not_selected">This user has not been granted access to the portal.</span>').insertAfter($(this).next('span'));
	 			checkbox.parent().css('background-color', '#FFCFCF');
	 			$('.user_not_selected').fadeOut(4000, function() {
	 				$(this).remove();
	 				checkbox.parent().css('background-color', 'white');
	 			});
	 			return false;
	 		}
	 	});
	 	
	 	$('.activate_portal_user:checked, .activate_portal_user_role:checked').each(function () {
	 		$(this).parent().nextAll('.toggle_permission_display').children('.toggle_permission_display_link').trigger('click');
	 	});
	 	
	}
	
	// BEGIN default settings for profile search/directory
	//
	
	$("div.user_profile_search div.form_row").removeClass("required_form_row"); 
	$("div.user_profile_search div.form_label").removeClass("required_form_label"); 
	$("div.user_profile_search div.form_field").removeClass("required_form_field");

	$("a.user_profile_search_search_link_text").click(function(){
		$("div.user_profile_search_browse").hide();
		$("div.user_profile_search_form").show();
 		return false;
	});
	$("a.user_profile_search_browse_link_text").click(function(){
		$("div.user_profile_search_form").hide();
		$("div.user_profile_search_browse").show();
 		return false;
	});
	
	//
	// END default settings for profile search/directory
	
});

//
// **************
// 
// disallows the enter key from submitting a form

function process_form_submit_button(currentObj) {

	var parent_form = currentObj.closest('form');
	
		// This will trigger the file upload if any file upload form fields exist on the form.
	if (typeof parent_form != 'undefined' && parent_form.find(":file").length > 0)
	{

		var required_fields = null;
			
		var form_required_fields = parent_form.find('input[name="form_required_fields"]');
		if(typeof form_required_fields.val() != 'undefined') {
			required_fields = eval('(' + form_required_fields.val() +')')
		}
		
 		// Check required fields are all filled in.
 		if(required_fields != null && typeof required_fields != 'undefined')
 		{
 			fields = "";
 			
 			for(i = 0; i < required_fields.length; i++)
 			{
 				missing = false;
 				
 				switch(parseInt(required_fields[i].type))
 				{
 					case 2:
 					{
		 				if($('textarea[name="' + required_fields[i].id + '"]').val() == '')
		 				{
		 					missing = true;
		 				}
		 				break;
 					}
 					case 3:
 					{
		 				if($('input[name="' + required_fields[i].id + '[]"]:checked').length == 0)
		 				{
		 					missing = true;
		 				}
		 				break;
 					}
 					case 4:
 					{
		 				if($('input[name="' + required_fields[i].id + '"]:checked').length == 0)
		 				{
		 					missing = true;
		 				}
		 				break;
 					}
 					case 5:
 					case 15:
 					{
		 				if($('select[name="' + required_fields[i].id + '"] :selected').val() == '')
		 				{
		 					missing = true;
		 				}
		 				break;
 					}
 					case 7:
 					{
		 				if($('input[name="' + required_fields[i].id + '"]').val() == '')
		 				{
		 					if($('input[name="' + required_fields[i].id + '_use_saved_upload"]').val() != undefined && $('input[name="' + required_fields[i].id + '_saved_upload"]').val() != undefined) {
		 						if($('input[name="' + required_fields[i].id + '_use_saved_upload"]:checked').val() == undefined) {
										missing = true;
									}
		 					} else {
		 						missing = true;
		 					}
		 				}
 						break;
 					}
 					case 8:
 					{
		 				if(($('input[name="' + required_fields[i].id + '"]').val() == '') && ($('input[name="' + required_fields[i].id + '_upload"]').val() == ''))
		 				{
		 					missing = true;
		 				}
		 				break;
 					}
 					default:
 					{
		 				if($('input[name="' + required_fields[i].id + '"]').val() == '')
		 				{
		 					missing = true;
		 				}
		 				break;
 					}
 				}
 				
 				if(missing)
 				{
 					fields += "<li>The " + required_fields[i].label + " field is required</li>\n";
 				}
 			}
 			
 			if(fields != "")
 			{
 				$('html, body').animate({scrollTop:0}, 'slow');
 				$('.error_message').remove();
 				currentObj.closest('form').before("<ul class=\"error_message\">\n" + fields + "</ul>\n");
 				return false;
 			}
 		}
		
 		var isFileUpload = false;
 		$.each(parent_form.find(":file"), function(i, val) {
 			if($(val).val() != '') {
 				isFileUpload = true;
 			}
 		});
 		
 		if(isFileUpload) {
			uid = $("#progress_key").val();
			beginUpload(uid);
 		}
	}
	
}

function noenter() {
	return !(window.event && window.event.keyCode == 13); 
}

// 
// **************
//

var byteunits = ['bytes', 'KB', 'MB', 'GB', 'TB'];

function HumanNumber(num)
{
	topnum = 1;
	basenum = 1;
	unit = '';
	
	for(i = 0; i < byteunits.length; i++)
	{
		basenum = topnum;
		topnum *= 1024;
		
		unit = byteunits[i];
		
		if(num < topnum)
		{
			break;
		}
	}
	
	return (num / basenum).toFixed(2) + ' ' + unit;
}

function HumanTime(secs)
{
	days = (secs) / 60 / 60 / 24;
	daysRound = Math.floor(days);
	hours = (secs) / 60 / 60 - (24 * daysRound);
	hoursRound = Math.floor(hours);
	minutes = (secs) /60 - (24 * 60 * daysRound) - (60 * hoursRound);
	minutesRound = Math.floor(minutes);
	seconds = (secs) - (24 * 60 * 60 * daysRound) - (60 * 60 * hoursRound) - (60 * minutesRound);
	secondsRound = Math.round(seconds);
	sec = (secondsRound == 1) ? " second" : " seconds";
	min = minutesRound ? (minutesRound == 1) ? minutesRound + " minute, " : minutesRound + " minutes, " : "";
	hr = hoursRound ? (hoursRound == 1) ? hoursRound + " hour, " : hoursRound + " hours, " : "";
	dy = daysRound ? (daysRound == 1)  ? daysRound + " day, " : daysRound + " days, " : "";
	return dy + hr + min + secondsRound + sec;
}

function StartAjax(uid)
{
	setTimeout("DoAjax('" + uid + "')", 2000);
}

function sleep(naptime)
{
    naptime = naptime * 1000;
    var sleeping = true;
    var now = new Date();
    var alarm;
    var startingMSeconds = now.getTime();
//    alert("starting nap at timestamp: " + startingMSeconds + "\nWill sleep for: " + naptime + " ms");
    while(sleeping){
        alarm = new Date();
        alarmMSeconds = alarm.getTime();
        if(alarmMSeconds - startingMSeconds > naptime){ sleeping = false; }
    }        
//    alert("Wakeup!");
}

function DoAjax(uid)
{
	$.ajax({
			url: "/upload_progress?id=" + uid,
			method: 'GET',
			dataType: 'text',
			success: function(data)
			{
				if (!data)
					return;
		 
				var response;
				eval ("response = " + data);

				if (!response)
					return;
		 
		 		// Updates the progress bar.
				var percentage = Math.floor(100 * parseInt(response['bytes_uploaded']) / parseInt(response['bytes_total']));
				top.$(".uploadprogressbar").show();
				top.$(".uploadprogressbar").progressbar("value", percentage);
		 
		 		// Updates the progress information.
				top.$("#progressinfo").empty();
				top.$("#progressinfo").removeClass('progressbarloading');
		 		var text = HumanNumber(response['bytes_uploaded']) + " of " + HumanNumber(response['bytes_total']) + " (" + percentage + "%)  uploaded.";
		 		text += "<br />";
		 		text += "Estimated Time Remaining: " + HumanTime(response['est_sec']);
		 		top.$("#progressinfo").html(text);
		 		
		 		setTimeout("DoAjax('" + uid + "')", 2000);
			}
	});

}

//
// **************
// 
// fades in the progress bar and starts polling the upload progress after 1.5seconds

function beginUpload(uid)
{
	$('#upload_overlay').addClass('overlay').css('display', 'inline');
    var uploadWrapper = $('#uploadWrapper');
    uploadWrapper.addClass("uploadWrapperClass");
	
	// progress bar
	var progressBar = $("<div class='uploadprogressbar'></div>");
	uploadWrapper.append(progressBar);
	
	// Progress Information
    var progressinfo = $("<div id='progressinfo'>Your file(s) are uploading, please be patient.</div>");
    progressinfo.addClass("progressbarloading");
	uploadWrapper.append(progressinfo);
	top.$(".uploadprogressbar").hide();
	top.$(".uploadprogressbar").progressbar({value: 0});
	
	if($.browser.safari)
	{
		progressFrame.StartAjax(uid);
	}
	else
	{
		StartAjax(uid);
	}
}

// 
// **************
//
	
function jobready_begin_upload(uuid, url) {
	
	// overlay div
    var	overlay = $("<div></div>");
   	overlay.addClass("overlay");
   	overlay.attr("id", "upload_overlay");
   	overlay.appendTo("body");
	
    // Create the upload wrapper
    var uploadWrapper = $("<div id='uploadWrapper'></div>");
    uploadWrapper.addClass("uploadWrapperClass");
    uploadWrapper.addClass("jobreadyUploadWrapperClass");
	uploadWrapper.appendTo("body");
	   	
	// progress bar
	var progressBar = $("<div class='uploadprogressbar'></div>");
	uploadWrapper.append(progressBar);
	
	// Progress Information
	var progressinfo = $("<div id='progressinfo'>Your file(s) are uploading, please be patient.</div>");
    progressinfo.addClass("progressbarloading");
	uploadWrapper.append(progressinfo);
	$(".uploadprogressbar").hide();
	$(".uploadprogressbar").progressbar({value: 0});
	
	setTimeout("showJobreadyUpload('" + uuid + "', '" + url + "')", 1000);
}

function finish(url) {
	window.location = url;
}

function showJobreadyUpload(uuid, url) {
	$.ajax({
		url: "/upload_progress?jobready_key=" + uuid,
		method: 'GET',
		dataType: 'json',
		success: function(data)
		{
		
			if (data != null) {
					
		 		// Updates the progress bar.
				var percentage = Math.floor(100 * parseInt(data.bytes_uploaded) / parseInt(data.bytes_total));
				
				if(isNaN(percentage)) {
					
					percentage = 0;
				}
				
				if(data.show_progress_bar) {
					$(".uploadprogressbar").show();
					$(".uploadprogressbar").progressbar("value", percentage);
			 
			 		// Updates the progress information.
			 		$("#progressinfo").empty();
			 		$("#progressinfo").removeClass('progressbarloading');
			 		var text = data.bytes_uploaded + " bytes of " + data.bytes_total + " bytes uploaded.";
			 		text += "<br />";
			 		//text += "Estimated Time Remaining: " + response['est_sec'] + " seconds";
			 		$("#progressinfo").html(text);
			 		
			 		if (percentage >= 100) {
			 			$("#progressinfo").empty();
			 			$("#progressinfo").html("Upload is finalizing, please wait a moment...");
			 			setTimeout("finish('" + url + "')", 1500);
			 			return;
			 		}
				} else {
					if (percentage >= 100) {
						$("#progressinfo").empty().append("Upload is finalizing, please wait a moment...");
			 			setTimeout("finish('" + url + "')", 1500);
			 			return;
			 		} 
				}
				
		 		setTimeout("showJobreadyUpload('" + uuid + "', '" + url + "')", 2000);
			} else {
				return;
			}
			
		}
	});

}



