var init_uploader = function(_custom_obj, use_multiple) {
	
	if (!typeof(_custom_obj) == 'Object') {
		throw 'Invalid type of initial object in swfUpload constructor method';
	}
	
	var _init_obj = {
		flash_url: '/js/swfupload/swfupload.swf',
		upload_url: '/',
		post_params: {"PHPSESSID" : ""},
		file_size_limit : "10 MB",		
		file_post_name: 'file',
		file_types: '*.jpg;*.jpeg;*.png;*.gif;*.JPG;*.JPEG;*.PNG;*.GIF;*.Jpg;*.Jpeg;*.Png;*.Gif',
		file_upload_limit : use_multiple ? 50 : 1,
		file_queue_limit : 0,
		custom_settings : {
			progressTarget : "fsUploadProgress",
			cancelButtonId : "btnCancel"
		},		
		debug: false,
		// Button settings
		button_placeholder_id: 'btn-edit-avatar',
		button_image_url: '/i/fresh/new_photo.png',
		button_width: 124,
		button_height: 33,
		buttonText: 'Добавить фото',
		// button_action: SWFUpload.BUTTON_ACTION.SELECT_FILE,
		button_cursor: SWFUpload.CURSOR.HAND,
		button_window_mode: 'opaque',
		http_success: [200, 302],
		// The event handler functions are defined in handlers.js
		file_queued_handler : fileQueued,
		file_queue_error_handler : fileQueueError,
		file_dialog_complete_handler : fileDialogComplete,
		upload_start_handler : uploadStart,
		upload_progress_handler : uploadProgress,
		upload_error_handler : uploadError,
		upload_success_handler : uploadSuccess,
		upload_complete_handler : uploadComplete,
		queue_complete_handler : queueComplete // Queue plugin event		
	};
	
	_init_obj = $.extend(_init_obj, _custom_obj);
	
	var _uploader = new SWFUpload(_init_obj);

	return _uploader;
};

function fileQueueError(file, errorCode, message) {
	try {

		switch (errorCode) {
		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
			console.log("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
			console.log("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
			console.log("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		default:
			if (file !== null) {
				progress.setStatus("Unhandled Error");
			}
			console.log("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		}
	} catch (ex) {
        this.debug(ex);
    }
}

function uploadError(file, errorCode, message) {
	try {
		
		switch (errorCode) {
			case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:			
				console.log("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
				console.log("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.IO_ERROR:
				console.log("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
				console.log("Error Code: Security Error, File name: " + file.name + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
				console.log("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
				console.log("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
				console.log('Cancelled');
				break;
			case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
				console.log("Stopped");
				break;
			default:
				console.log("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
				break;
		}
	} catch (ex) {
        this.debug(ex);
    }
}
