
//==============================
// utilities
//==============================

var rpt_swfu_phpsessid;
var rpt_swfu_app_form_id;
var rpt_swfu_new;
var rpt_new_button_ready = false;
var rpt_swfu_edit = new Array();
var rpt_in_lightbox;
var rpt_file_size_limit =  "50 MB";


// must call this before user can upload
function rpt_swfu_initialize(sessid, form_id, lightbox)
{
		var in_lightbox;

		if (lightbox)
			rpt_in_lightbox = true;
		else
			rpt_in_lightbox = false;

		rpt_swfu_phpsessid = sessid;
		rpt_swfu_app_form_id = form_id;
		rpt_attach_file_buttons();
		rpt_swfu_new = rpt_get_swfu_object(true, 'new');
}

function rpt_attach_file_buttons()
{
	table = $('versions_table');
    
	for(var rowNum=1; rowNum<table.rows.length; rowNum++){
		rpt_swfu_edit[rowNum] = rpt_get_swfu_object(false, rowNum);
	}
}



function rpt_check_upload_button()
{
	if ( !rpt_new_button_ready)
		return;

	if ( $('file_tag').value != ''
		&& $('pub_date').value != '') {
		rpt_swfu_new.setButtonDisabled(false);
	}
	else {
		rpt_swfu_new.setButtonDisabled(true);
	}
}


function rpt_revert_row(row_num, is_new)
{
	var tbl = document.getElementById('versions_table');

	if (is_new) {
		tbl.deleteRow(row_num);
	}
	else {
		// set filename, url, row's class back to old

		previous_filename = $('file_name_' + row_num).value;

		anchor = $('file_anchor_' + row_num);
		anchor.href = $('file_url_'+row_num);

		anchor.removeChild(anchor.childNodes[0]);
		anchor.appendChild(document.createTextNode(previous_filename));
		// existing row

		mode = $('file_mode_' + row_num).value;

		if (mode == '' ) {
			// stupid IE
			//$('file_row_' + row_num).setAttribute('class', 'existing');
			$('file_row_' + row_num).className = 'existing';
		}
		else if (mode == 'delete' || mode == 'delete_new') {
			//$('file_row_' + row_num).setAttribute('class', 'delete');
			$('file_row_' + row_num).className = 'delete';
		}
		else if (mode == 'new') {
			//$('file_row_' + row_num).setAttribute('class', 'new');
			$('file_row_' + row_num).className = 'new';

		}

	}

}


function rpt_toggle_delete(rowNum)
{
	
	// modes: new | delete_new | '' | delete

	table = $('versions_table');
    
	// count rows not deleted (shouldn't have < 1)
	var num_not_deleted = 0

	for(var row_num=1; row_num<table.rows.length; row_num++) {
	 	this_row_mode = $('file_mode_'+row_num).value;
				
		if (this_row_mode != 'delete' && this_row_mode != 'delete_new') {
			num_not_deleted ++;
		}
	}


	var current_mode = $('file_mode_'+rowNum).value;

	if (current_mode == 'new' || current_mode=='' ) {
		if (num_not_deleted == 1 ) {
			alert('You must have at least one version');
			return;
		}
		

		if (current_mode == 'new')  {
			new_value = 'delete_new';
		}
		else {
			new_value = 'delete'
		}

		$('file_mode_'+rowNum).value=new_value;
		//$('file_row_'+rowNum).setAttribute('class', 'delete');
		$('file_row_'+rowNum).className='delete';
	}
	else if (current_mode == 'delete' || current_mode == 'delete_new') {

		if (current_mode == 'delete_new')  {
			//$('file_row_'+rowNum).setAttribute('class', 'new');
			$('file_row_'+rowNum).className = 'new';
			new_value = 'new'
		}
		else {
			//$('file_row_'+rowNum).setAttribute('class', 'existing');
			$('file_row_'+rowNum).className = 'existing';
			new_value = '';
		}

		$('file_mode_'+rowNum).value = new_value;
	}
}




function rpt_add_row(tag, pub_date, file_name)
{
	var tbl = document.getElementById('versions_table');

    var lastRow = tbl.rows.length; // length w/ header row
    var rowNum = lastRow ; 


	// the row
    var row = tbl.insertRow(lastRow);
	//row.setAttribute('class', 'uploading');
	row.className = 'uploading'; 
 	row.id = 'file_row_' + rowNum;


	// hidden form elements

	// add hidden inputs
	// mode
    var el = document.createElement('input');
    el.type = 'hidden';
    el.name = 'files[' + rowNum + '][mode]';
    el.id = 'file_mode_' + rowNum;
	el.value = 'uploading'; // don't change to new till actually uploaded
    row.appendChild(el);

	// file_upload_id
    var el = document.createElement('input');
    el.type = 'hidden';
    el.name = 'files[' + rowNum + '][upload_id]';
    el.id = 'file_upload_id_' + rowNum;
	//el.value = file_upload_id; // id when file uploaded.
    row.appendChild(el);

	// file_iteration_id
    var el = document.createElement('input');
    el.type = 'hidden';
    el.name = 'files[' + rowNum + '][iteration_id]';
    el.id = 'file_iteration_id_' + rowNum;
    row.appendChild(el); 

	// file_url
    var el = document.createElement('input');
    el.type = 'hidden';
    el.name = 'files[' + rowNum + '][url]';
    el.id = 'file_url_' + rowNum;
	//el.value = url;
    row.appendChild(el); 

	// file_name
    var el = document.createElement('input');
    el.type = 'hidden';
    el.name = 'files[' + rowNum + '][name]';
    el.id = 'file_name_' + rowNum;
	el.value = file_name;
    row.appendChild(el); 


	// cells:


    //  delete cell
    var deleteCell = row.insertCell(0);

	deleteCell.onclick = function() {
		rpt_toggle_delete(rowNum);
	}

	//deleteCell.setAttribute('class','deleteCell');
	deleteCell.className = 'deleteCell';

 	var messageHolder = document.createElement('span');
	//messageHolder.setAttribute('class', 'loadingMessage');
	messageHolder.className = 'loadingMessage';
	messageHolder.id = 'loading_message_'+rowNum;
	deleteCell.appendChild(messageHolder);

	uploadingMessage = document.createTextNode("Loading...");
	messageHolder.appendChild(uploadingMessage);


  

    // tag cell
    var tagCell = row.insertCell(1);
    var el = document.createElement('input');
    el.type = 'text';
	el.value = tag;
    el.name = 'files[' + rowNum + '][tag]';
    el.id = 'file_tag_' + rowNum;
    el.size = 8; 
    tagCell.appendChild(el);

    // pub date cell
    var dateCell = row.insertCell(2);
    var el = document.createElement('input');
    el.type = 'text';
	el.value = pub_date;
    el.name = 'files[' + rowNum + '][pub_date]';
    el.id = 'file_pub_date_' + rowNum;
    el.size = 9; 
    el.maxlength = 10;
    dateCell.appendChild(el);
  
    // link cell
    var linkCell = row.insertCell(3);
	var anchor = document.createElement('a');
	//anchor.href = url;
    anchor.id = 'file_anchor_' + rowNum;
	if (file_name ) {
		link_text = document.createTextNode(file_name);
	}
	else {
		link_text = document.createTextNode("Click Here");
	}
	anchor.appendChild(link_text);
	linkCell.appendChild(anchor);


	// Change file cell
	var changeFileCell = row.insertCell(4)

    var buttonDiv = document.createElement('div');

    var buttonSpan = document.createElement('span');
	buttonSpan.id = 'swf_button_span_' + rowNum;

	buttonDiv.appendChild(buttonSpan);

	changeFileCell.appendChild(buttonDiv);


	// Alt URL 
	var altUrlCell = row.insertCell(5)
    var el = document.createElement('input');
    el.type = 'text';
	el.value = '';
    el.name = 'files[' + rowNum + '][alt_url]';
    el.id = 'file_alt_url_' + rowNum;
    el.size = 12; 
    altUrlCell.appendChild(el);



	// create upload button
	rpt_swfu_edit[rowNum] = rpt_get_swfu_object(false, rowNum);

	return rowNum;
}




//==============================
// Swf upload event handlers
//==============================


function rpt_fileQueued(file)
{

 	if (this.customSettings.is_new == true) {
   		// save tag/date
   		//tag_list[file.id] = $('file_tag').value;
   		//date_list[file.id] = $('pub_date').value;


		this.customSettings.row_num = rpt_add_row( $('file_tag').value, $('pub_date').value, file.name);

   		$('file_tag').value = '';
   		$('pub_date').value = '';

  		rpt_check_upload_button();
	}
	else {

		row_num = this.customSettings.row_num;

		//$('file_row_'+row_num).setAttribute('class', 'uploading');
		$('file_row_'+row_num).className = 'uploading';
		
		anchor = $('file_anchor_' + row_num);
		anchor.href = ''; // disable until loaded

		anchor.removeChild(anchor.childNodes[0]);
		anchor.appendChild(document.createTextNode(file.name));


	}
}


function rpt_uploadError(file, code, message)
{
	alert('There was an error uploading the file '+file.name + ' (code ' +code+ '-' + message+')' );

	rpt_revert_row(this.customSettings.row_num, this.customSettings.is_new);
}


function rpt_fileDialogComplete(selected, queued, total)
{
   this.startUpload();
}

function rpt_swfUploadLoaded()
{
	if (this.customSettings.row_num == 'new') {
		rpt_new_button_ready = true;
		rpt_check_upload_button();
	}
}

function rpt_fileQueueError(file, errorCode, message) {
	// code from demo
	try {
		if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
			alert("You have attempted to queue too many files.\n" + (message === 0 ? "You have reached the upload limit." : "You may select " + (message > 1 ? "up to " + message + " files." : "one file.")));
			return;
		}


		switch (errorCode) {
		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
			alert("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message + " Maximum size is " + rpt_file_size_limit);
			break;
		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
			alert("Cannot upload Zero Byte files.");
			//this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
			alert("Invalid File Type.");
			//this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		default:
			if (file !== null) {
				alert("Unhandled Error");
			}
			alert("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		}
	} catch (ex) {
        alert(ex);
    }
}



function rpt_uploadSuccess(file, serverData) 
{
	// server gives us back OK <id> <url>

	parts = serverData.split(" ");
	row_num = this.customSettings.row_num;
	is_new = this.customSettings.is_new;


	if (parts[0] == 'OK' && is_new ) {
		// new row

		// update URL, upload_id, mode
		$('file_upload_id_'+row_num).value = parts[1];
		$('file_url_'+row_num).value = parts[2];
		$('file_anchor_'+row_num).href = parts[2];
		//$('file_row_'+row_num).setAttribute('class', 'new');
		$('file_row_'+row_num).className = 'new';
		$('file_mode_'+row_num).value = 'new';
	}
	else if (parts[0] == 'OK' ) {
		// existing row

		mode = $('file_mode_' + row_num).value;

		if (mode == '' ) {
			//$('file_row_' + row_num).setAttribute('class', 'existing');
			$('file_row_' + row_num).className = 'existing';
		}
		else if (mode == 'delete') {
			// un-delete
			//$('file_row_' + row_num).setAttribute('class', 'existing');
			$('file_row_' + row_num).className = 'existing';
			$('file_mode_' + row_num).value = '';
		}
		else if (mode == 'delete_new') {
			// un-delete
			//$('file_row_' + row_num).setAttribute('class', 'new');
			$('file_row_' + row_num).className = 'new';

			$('file_mode_' + row_num).value = 'new';
		}
		else if (mode == 'new') {
			//$('file_row_' + row_num).setAttribute('class', 'new');
			$('file_row_' + row_num).className = 'new'; 
		}


		$('file_url_' + row_num).value = parts[2]

		anchor = $('file_anchor_' + row_num);
		anchor.href = parts[2];

		$('file_upload_id_' + row_num).value = parts[1];
		$('file_name_' + row_num).value = file.name;

	}
}


function rpt_handle_debug(message)
{
	win = $('swf_debug_win');
	if (win != null) {
		win.value += "\n----------------Next Message----------------------\n"+ message
	}
}

function rpt_uploadProgress(file, bytesLoaded, bytesTotal)
{

	var row_num = this.customSettings.row_num;
	var percent = Math.floor((bytesLoaded / bytesTotal) * 100);
	//var percent = Math.floor((bytesLoaded / bytesTotal) *20)*5;
	var message = "Loading ("+percent+"%)";
	$('loading_message_'+row_num).innerHTML = message;
}

function rpt_uploadStart(file)
{
	var row_num = this.customSettings.row_num;
	var message = "Starting upload...";
	$('loading_message_'+row_num).innerHTML = message;
}


function rpt_get_swfu_object(is_new, row_num)
{
	var in_lightbox = rpt_in_lightbox;
		
			var settings = {
				file_post_name: "filedata",	
				flash_url : "/system/modules/swfupload/flash/swfupload.swf",
				upload_url: "/system/modules/swfupload/upload.php",	// Relative to the SWF file
				post_params: {"PHPSESSID" : rpt_swfu_phpsessid,  'app_form': rpt_swfu_app_form_id},
				file_size_limit : rpt_file_size_limit,
				file_types : "*.*",
				file_types_description : "All Files",
				file_upload_limit : 100,
				file_queue_limit : 0,
				
				custom_settings : {

					is_new : is_new,
					row_num : row_num,
					inLightbox : in_lightbox
				},


				debug: false, 
				debug_handler: rpt_handle_debug,

				// Button settings
				button_image_url: "/system/images/xpupload61x22.png",	// Relative to the Flash file
				button_width: 61,
				button_height: 22,
				button_placeholder_id: 'swf_button_span_' + row_num,

				file_queued_handler : rpt_fileQueued,
				file_queue_error_handler : rpt_fileQueueError,
				file_dialog_complete_handler : rpt_fileDialogComplete,
				upload_start_handler : rpt_uploadStart,
				upload_progress_handler : rpt_uploadProgress,
				upload_error_handler : rpt_uploadError,
				upload_success_handler : rpt_uploadSuccess,
				swfupload_loaded_handler : rpt_swfUploadLoaded
				//upload_complete_handler : uploadComplete
				//queue_complete_handler : queueComplete	// Queue plugin event
			};
			
			//alert(settings.post_params.PHPSESSID);
			
			var swfu=  new SWFUpload(settings);

			return swfu;

}

