/**
 * CompanyPhotos functions (upload, edit, delete image mainly)
 */

var CompanyPhotos = {};

CompanyPhotos.X_AJAX_INFO = 'images_validate_upload_form';
CompanyPhotos.DELETE_AJAX_HEADER = 'users_delete_image';

CompanyPhotos.postFrmInitialized = false;
// status for processing form (used to invalidate clicks while the form is processed).
CompanyPhotos.isProcessing = false;
CompanyPhotos.file_uploader = {};
CompanyPhotos.titleOptional = false; // tells if title is required or not.

CompanyPhotos.file_input = 'file_to_upload'; // default ID of the video file input

CompanyPhotos.setTitleOptional = function(required) {
	if( typeof required == 'undefined' ) {
		required = true;
	}
	CompanyPhotos.titleOptional = required;
}

CompanyPhotos.setFileInput = function(file_input_id) {
	// set custom ID
	CompanyPhotos.file_input = file_input_id;
}


CompanyPhotos.initialize = function() {
	
	CompanyPhotos.box = $('#upload_photo_box');
	
	CompanyPhotos.postFrm = document.forms['photoFrm'];
	// alert(typeof CompanyPhotos.postFrm);
	
	if( $('#logged_in').val() != 1 ) {
		$('.add_company_photo').click(function(){$('a#login').trigger('click');return false;});
		return;
	}

	CompanyPhotos.boxContent = $('.content', CompanyPhotos.box);
	
	var frmOpen = function(hash) {
			
		hash.w.show();
		
		$(CompanyPhotos.box).jqmAddClose($('#photoCloseButton', CompanyPhotos.box));
		
		$(CompanyPhotos.box).center();
		
		var frm = CompanyPhotos.postFrm;
		
		if( !CompanyPhotos.postFrmInitialized ) {
			$('#uploadPhotoBtn', CompanyPhotos.box).click(
				function() {
					// alert(frm);
					if( !CompanyPhotos.isProcessing ) {
						var CompanyPhotosOptions = {
								url			: CompanyPhotos.postFrm.action,
								type		: 'post',
								data		: { X_AJAX_INFO 	: CompanyPhotos.X_AJAX_INFO,
												ts				: (new Date()).getTime(),
												'action'    	: 'add',
												'title'			: encodeURIComponent($('#image_caption', frm).val()),
												'description'	: encodeURIComponent($('#image_description', frm).val()),
												'file_to_upload': encodeURIComponent($('#'+CompanyPhotos.file_input, frm).val()),
												'terms'			: $('#terms', frm).get(0).checked ? 1 : 0,
												'title_optional': CompanyPhotos.titleOptional ? 1 : 0
											  },
								success		: CompanyPhotos.handleValidation,
								error		: CompanyPhotos.handleError,
								dataType	: 'text' // 'json'
						};
						$.ajax(CompanyPhotosOptions);
						CompanyPhotos.isProcessing = true;
					} else {
						//alert('Please wait until the submitted data is processed!')
					}
					return false;
				}
			);
			CompanyPhotos.postFrmInitialized = true;
		} 
	};
	CompanyPhotos.box.jqm({trigger: '.add_company_photo',  overlay: 0, onShow: frmOpen});
	
}

CompanyPhotos.handleValidation = function(data, status, form) {
	
	CompanyPhotos.isProcessing = false; // validation has finished
	
	var ajax_url = 'http://' + location.hostname;
	var show_progress_bar = 0;
	var frm = CompanyPhotos.postFrm;
	
	var resp_sliced = data.split('|');
			
	if(resp_sliced[0] == '0') {
		
		// no errors, continue with photo upload
		
		if( $.trim($('input#'+CompanyPhotos.file_input, frm).val() ) != '') {
			
			// set status to "processing ... " again
			CompanyPhotos.isProcessing = true;
			
			// upload photo
			try {
				var facebook_submit = function(data){
					if( data != '' )
					{
						data = eval('(' + data + ')');
						if(data && (typeof data.status != 'undefined') && (data.status == 'publish_facebook'))
						{
							var facebookPublish = function(id, error) {
								window.location.reload(true);
							}
							
							FB.ui(data.facebook_event, facebookPublish);
						}
					}
					return true;
				}
				CompanyPhotos.file_uploader = new AjaxFileUploader.init(CompanyPhotos.file_input, ajax_url, show_progress_bar, {extra_data:{'X_AJAX_INFO':'images_track_upload_progress', 'reload_on_success_no_alert':true, 'success_msg':'File successfully uploaded', 'while_uploading_msg':'Uploading photo ... please wait!', 'callback_on_success': function(){CompanyPhotos.isProcessing = false; return facebook_submit();}}});
			} catch(e) {
				CompanyPhotos.isProcessing = false;
				alert(e.toString());
			}
		} else {
			alert('Please provide a file to upload.');
		}
	} else {
		// errors found, show them
		var error_msg = resp_sliced[1].split('^').join("\n- ");
		alert("Please correct the following errors:\n- "+error_msg);
	}
}

CompanyPhotos.renderObj = function(o, is_recursion) {
	var s = '';
	var c = is_recursion ? "\t" : '';
	var nl = "\n" + c;
	for(var p in o) {
		if(typeof o[p] == 'object') {
			s += c + p + ' = ' + "\n\t" + CompanyPhotos.renderObj(o[p], true);
		} else {
			s += c + p + ' = ' + o[p];
		}
		c = nl;
	}
	return s;
}

CompanyPhotos.handleError = function() {
	CompanyPhotos.isProcessing = false;
	alert('An error has occured, please retry.');
}

CompanyPhotos.deletePhoto = function(doc_id, id_company) {
	// alert('Erase photo with id='+doc_id+' for company ID='+id_company);
	if( confirm('Are you sure you want to delete this photo ?') ) {
		var ajax_url = 'http://' + location.hostname;
		$('#company_photo_'+doc_id).blockElement({'html_content': $('#delete_photo_loader').html()});
		var doc_over_div = $('#company_photo_'+doc_id).get(0).over_div;
		$.fn.blockElement.start(doc_over_div);
		$.ajax({
			url: ajax_url, 
			data: 'id_company='+encodeURIComponent(id_company)+'&id_doc='+encodeURIComponent(doc_id)+'&X_AJAX_INFO='+CompanyPhotos.DELETE_AJAX_HEADER+'&ts='+(new Date()).getTime(),
			type: 'POST',
			timeout: 30 * 1000, // 30 secs
			success: function(resp, status) {
				$.fn.blockElement.stop(doc_over_div);
				var resp_sliced = resp.split('|');
				if(resp_sliced[0] == '1') {
					// no errors
					alert(resp_sliced[1]);
					window.location.reload();
				} else {
					// errors found, show them
					var error_msg = resp_sliced[1];
					alert(error_msg);
				}
				
			},
			error: function(XHR, status, err_thrown) {
				$.fn.blockElement.stop(doc_over_div);
				if(status == 'timeout') {
					alert('The request has timed out, please retry.');
				} else {
					alert('The request has failed due to an error, please retry.');
				}
			},
			dataType: 'text'
		});
		return false;
	}
}

// caches the image having the specified source and retursn the created image object
CompanyPhotos.cacheImage = function(img_src, img_onload_handler, img_onerror_handler) {
	var img = new Image();
	if(img_onload_handler) {
		img.onload = img_onload_handler;
	}
	img.onerror = img_onerror_handler || function() {};
	img.src = img_src;
	return img;
}

//$(document).ready(function() {
//	CompanyPhotos.initialize(); 
//});
