var clickedOnce = false;
var processedFileName = "";
var originalFileName = "";
var originalMediaFile = 0;

var mainFormId = "";
var mediaFrameId = "";

var mediaFormId = "mediaForm";
var mediaFieldId = "mediaFile";
var mainFileName = "fileName";
var mainFileStatus = "fileStatus";
var mainFileError = "fileError";
var mainFileSizeInfo = "sizeInfo";
var waitDiv = "wait";

function registerMainForm (id) {
	mainFormId = id;
}
function registerMediaFrame (id) {
	mediaFrameId = id;
}
function registerOriginalFileName(fn) {
	originalFileName = fn;
}
function registerOriginalMediaType(mt) {
	originalMediaType = mt;
}

function submitMediaEntry() {
	if (getMediaType() > 0) {
		submitMedia();
	} else {
		if (clickedOnce) return false;
		clickedOnce = true;
		clearValue(mainFileName);
		clearValue(mainFileError);
		setField(mainFileStatus,"ok");
		processForm();
	}
}
function submitMediaEntryIfChanged() {
	var mt = getMediaType() ;
	if (mt > 0 && mt == originalMediaType ) {
		submitMediaIfChanged();
	} else {
		submitMediaEntry();
	}
}

//send media first then the main form
function submitMedia() {
   if (clickedOnce) return false;
   if ( !this.mainFormId || mainFormId == "") return false;
   clickedOnce = true;
   if (processMedia()) return false;
   processForm();
}

//send media first then the main form, or send only the main form if the media was processed  
function submitMediaIfChanged() {
   if (checkMediaUnchanged()) {
	if (clickedOnce) return false;
	clickedOnce = true;
	processForm();
   } else 
	submitMedia(); 
}

//helper method to decide if we need to skip the upload
function checkMediaUnchanged() {
   if ( !this.mediaFrameId|| mediaFrameId == "") return true;

   var iDocument =  getIframeDoc(getIframeById(mediaFrameId));
   if (!iDocument) return true;

   var fileForm = iDocument.getElementById(mediaFormId);
   var fileField = iDocument.getElementById(mediaFieldId);

   if (!fileField) return true;
   var fileName = fileField.value;
   if (!fileName || fileName == "") {
       // in case the user succesfully uploaded a pic then cleared the file field 
       processedFileName = ""; 
       setField(mainFileName, originalFileName);
       setField(mainFileStatus, "ok");
       clearValue(mainFileError);
       return true;
   }
   return false;
}

function processMedia() {
   if ( !this.mediaFrameId|| mediaFrameId == "") return false;

   var iDocument =  getIframeDoc(getIframeById(mediaFrameId));
   if (!iDocument) return false;

   var fileForm = iDocument.getElementById(mediaFormId);
   var fileField = iDocument.getElementById(mediaFieldId);

   if (!fileForm || !fileField) return false;
   var fileName = fileField.value;

   //if we dont't have a file to process stop here
   if (!fileName || fileName == "") {
       // in case the user succesfully uploaded a pic then cleared the file field 
       processedFileName = ""; 
       clearValue(mainFileName);
       setField(mainFileStatus, "ok");
       clearValue(mainFileError);
       return false;
   }

   //if the file was already processed stop here 
   if (processedFileName == fileName) {
      return false;
   }

   processedFileName = fileName;
   showWait();
   fileForm.submit();

   return true;
}

function processForm() {
   if ( !this.mainFormId || mainFormId == "") return;
   var f = element(mainFormId);
   if (f) f.submit();
}

//call back method from the media iframe form
function process( fileName, duration){
   setField(mainFileName, fileName);
   setField(mainFileStatus, "ok");
   clearValue(mainFileError);
   setField(mainFileSizeInfo, duration);
   processForm();
}
  
//call back method from the media iframe form
function processError() {
   processedFileName = "";
   setField(mainFileName, "#");
   clearValue(mainFileStatus);
   setField(mainFileError, "error.media.upload.failed");
   processForm();
}

function showWait() {
   setClass(waitDiv, "leftFloat");
}

function hideWait() {
   setClass(waitDiv, "hidden");
}