var filesToUpload = [];
var uploadedFiles = [];
var uploadFiles = {};
var cancelledUpload = false;
var uploadedBytes = 0;
var bytesToUpload = 0;

function fileDialogComplete( evt )
{
	
	try
	{
		if( evt.fileList != null && evt.fileList.file0 != 0 )
		{
			filesToUpload = [];
			uploadedFiles = [];
			uploadFiles = {};
			uploadedBytes = 0;
			bytesToUpload = 0;
			for( var fileIndex in evt.fileList )
			{
				if( fileIndex.indexOf( 'file' ) != 0 ) continue;
				filesToUpload.push( evt.fileList[fileIndex].id );
				bytesToUpload += evt.fileList[fileIndex].size;
				uploadFiles[fileIndex] = evt.fileList[fileIndex];
			}
			cancelledUpload = false;
			$( 'spinnerBar' ).style.width = '0px';
			uploadFile( filesToUpload[0] );
		}
	}
	catch( ex )
	{
	}
}

function swfReady( evt )
{
	try
	{
		uploaderYUI.setAllowMultipleFiles( true );
	}
	catch( ex )
	{
	}
}

function uploadSuccess( evt )
{
	try
	{
		//_addImage(server_data);
		uploadedFiles.push( evt.id );
		uploadedBytes += uploadFiles[evt.id].size;
		if( cancelledUpload || uploadedFiles.length == filesToUpload.length )
		{
			$( 'imgSpinner' ).style.display = 'none';
			uploaderYUI.clearFileList();
		}
		else uploadFile( filesToUpload[uploadedFiles.length] );
		Uploader.addImage( evt.data );
	}
	catch( ex )
	{
	}
}

function uploadCancelled()
{
	$( 'imgSpinner' ).style.display = 'none';
}

function uploadProgress( evt )
{
	$( 'spinnerBar' ).style.width = ( ( uploadedBytes + evt.bytesLoaded ) / bytesToUpload * $( 'spinnerProgress' ).getWidth() ) + 'px';
}

function uploadFile( id )
{
			var postParams = {
				"op" : "editor",
				"action" : "uploadfile",
				"forceSiteId" : ( $( 'siteId' ) != null ?  $( 'siteId' ).value : 0 ) 
			};
			var cookies = document.cookie.split( '; ' );
			for( var i = 0; i < cookies.length; i++ )
			{
				var data = cookies[i].split( '=' );
				postParams[data[0]] = decodeURIComponent( data[1] );
			}
			$( 'spinnerMsg' ).innerHTML = '<b>Uploading</b> ' + uploadFiles[id].name + '...';
			$( 'imgSpinner' ).style.display = 'block';
			uploaderYUI.upload( id, '/ged/index.php', 'POST', postParams, 'uploadfile');
}

function cancelUpload()
{
	cancelledUpload = true;
	$( 'spinnerMsg' ).innerHTML = 'Cancelling...';
	uploaderYUI.cancel();
	uploaderYUI.clearFileList();
	$( 'imgSpinner' ).style.display = 'none';
}

Uploader = function() {};

Uploader.addImage = function( json_src, thLine )
{
	if( !thLine ) thLine = 'normal';
	try
	{
		var json = eval( '(' + json_src + ')' );
		if( json == null ) return Uploader.error( 'Upload error' );
	}
	catch( ex )
	{
		return Uploader.error( 'Upload error' );
	}
	var img = new Element( 'img', { 'src' : Uploader.getPreview( json ).filename } );
	json.thLine = thLine;
	if( $('uploadedImageJson').value.length > 0 ) $('uploadedImageJson').value += ';';
	$('uploadedImageJson').value += json_src;
	Uploader.imageIndex.push( json.basename );
	Uploader.images[json.basename] = json;
	Uploader.renderImages();
}

Uploader.error = function( msg )
{
	Uploader.showMessage( msg );
	return false;
}

Uploader.handleButtons = function()
{
	if( $( 'cropButton' ) )  $( 'cropButton' ).style.display = (  Uploader.selectedThumb > 0 ? '' : 'none' );
}

Uploader.renderImages = function()
{
	try
	{
		var inHtml = {
			'normal' 	: '',
			'cropped'	: '',
			'stored'	: ''
		};
		for( var i = 0; i < Uploader.imageIndex.length; i++ )
		{
			var id = Uploader.imageIndex[i];
			var img = Uploader.getPreview( Uploader.images[id] );
			var item = '<a href="#" onclick="Uploader.selectImage( \'' + id + '\' ); return false;"><img id="thumb_' + i + '" src="' + img.previewFilename + '" class="thumbnailImg' + ( ( Uploader.selectedImage != null && id == Uploader.selectedImage ) ? ' selected' : '' ) + '" width="50" height="50" /></a>';
			inHtml[Uploader.images[id].thLine] += item;
		}
	}
	catch( ex ) {  }
	$( 'thumbnails' ).innerHTML = inHtml['normal'];
	$( 'cropThumbnails' ).innerHTML = inHtml['cropped'];
	$( 'storedThumbnails' ).innerHTML = inHtml['stored'];
	if( inHtml['cropped'].length > 0 ) $( 'cropSource' ).style.display = 'block'; 
	if( inHtml['stored'].length > 0 ) $( 'storedList' ).style.display = 'block'; 
	$( 'imageUploader' ).style.display = 'block';
	
	//$( 'imageUploader' ).style.top = ( 100 + $( 'postParametersTopContainer' ).getHeight() ) + 'px';
	/*$( 'imageUploader' ).style.top = '75px';
	var iuoffset = $( 'imageUploader' ).cumulativeOffset();
	 
	$( 'imageThumbs' ).style.top = ( iuoffset.top + $( 'cropThumbnails' ).getHeight() + $( 'imageUploader' ).getHeight() ) + 120 + 'px';*/
	Uploader.handleButtons();
}

Uploader.getPreview = function( img )
{
	var obj = img;
	if( img.thumbs[img.previewThumb] != null )
	{
		obj = img.thumbs[img.previewThumb];
		obj.previewFilename = obj.filename;
	}
	else obj.previewFilename = obj.filename.replace( /([a-zA-Z0-9]+:\/\/)[^\/]+(\/.*)/, '$1' + location.host + '$2' );
	return obj;
}

Uploader.selectImage = function( img )
{
	Uploader.selectedImage = null;
	if( Uploader.images[img] != null )
	{
		Uploader.selectedImage = img;
		Uploader.renderImages();
		Uploader.showSource();
		return true;
	}
	return false; 
}

Uploader.selectThumb = function( size )
{
	if( size == null ) size = 0;
	Uploader.selectedThumb = size;
	$$( '.thumbItem' ).each( function( v ) { v.removeClassName( 'selected' ) } );
	var el = $( 'thumbItem_' + size ); 
	if( el != null ) el.addClassName( 'selected' );
	Uploader.showSource();
}

Uploader.extractSizes = function()
{
	var thumbs = $( 'imageThumbs' ).getElementsByTagName( 'div' );
	var ret = [];
	for( var i = 0; i < thumbs.length; i++ ) ret.push( parseInt( thumbs[i].id.split( '_' ).pop() ) );
	return ret.sort( function( a,b ) { return a - b; } );
}

Uploader.showSource = function( all )
{
	if( all == null ) all = false;
	if( Uploader.selectedImage == null ) all = true;
	if( all ) Uploader.selectedImage = null;
	var maxWidth = 0;
	var minWidth = 0;
	var sizes = Uploader.extractSizes();
	var validThumbs = sizes;
	if( all )
	{
		for( var i = 0; i < Uploader.imageIndex.length; i++ )
		{
			if( maxWidth < Uploader.images[Uploader.imageIndex[i]].size.width ) maxWidth = Uploader.images[Uploader.imageIndex[i]].size.width;
			if( minWidth > 0 && minWidth > Uploader.images[Uploader.imageIndex[i]].size.width ) minWidth = Uploader.images[Uploader.imageIndex[i]].size.width;
			validThumbs = Uploader.collectValidThumbs( Uploader.images[Uploader.imageIndex[i]], validThumbs );
		}
	}
	else
	{
		maxWidth = Uploader.images[Uploader.selectedImage].size.width;
		minWidth = Uploader.images[Uploader.selectedImage].size.width;
		validThumbs = Uploader.collectValidThumbs( Uploader.images[Uploader.selectedImage], validThumbs );
	}
	var validThumb = 0;
	var missingThumbs = [];
	for( var i = 0; i < sizes.length; i++ )
	{
		if( sizes[i] < maxWidth && validThumbs.indexOf( sizes[i] ) != -1 )
		{
			$( 'thumbItem_' + sizes[i] ).style.display = 'block';
			validThumb = sizes[i];
		}
		else
		{
			if( sizes[i] < minWidth ) missingThumbs.push( sizes[i] ); 
			$( 'thumbItem_' + sizes[i] ).style.display = 'none';
		}
	}
	if (missingThumbs.length > 0)
	{
		var msg = 'T';
		if( all ) msg = 'Some of t';
		Uploader.showMessage( msg + 'he following thumbnails are missing: ' + missingThumbs.join(', ' ) );
	}
	if( Uploader.selectedThumb > maxWidth )
	{
		Uploader.selectThumb(validThumb );
		return;
	}
	if( all )
	{
		var imgs = [];
		for( var i = 0; i < Uploader.imageIndex.length; i++ )
		{
			if( Uploader.selectedThumb <= Uploader.images[Uploader.imageIndex[i]].size.width ) imgs.push( Uploader.getSource( Uploader.imageIndex[i], Uploader.selectedThumb ) );
		}
		text = imgs.sort().join( "\n" );
	}
	else text = Uploader.getSource( Uploader.selectedImage, Uploader.selectedThumb );
	if( Uploader.appendNewlineToImageHtml != null && Uploader.appendNewlineToImageHtml != undefined && Uploader.appendNewlineToImageHtml == true ) text += "\n";
	$( 'allimagesarea' ).value = text;
	$( 'allimagesarea' ).style.display = '';
	Uploader.handleButtons()
}

Uploader.getSource = function( img, thumb )
{
	if( Uploader.images[img] == null || ( thumb != 0 && Uploader.images[img].thumbs[thumb] == null ) ) return '';
	var data = Uploader.images[img];
	if( thumb > 0 ) data = data.thumbs[thumb];
	return '<img src="' + data.filename + '" width="' + data.size.width + '" height="' + data.size.height + '" />';		
}

Uploader.toggleThumbs = function()
{
	if( $( 'imageThumbs' ).style.display == 'block' )
	{
		$( 'imageThumbs' ).style.display = 'none';
		Uploader.rememberThumb = Uploader.selectedThumb;
		Uploader.selectThumb( 0 );
		$( 'generateThumbsBtn' ).value = 'Generate thumbs';
	}
	else
	{
		$( 'imageThumbs' ).style.display = 'block';
		Uploader.selectThumb( Uploader.rememberThumb );
		$( 'generateThumbsBtn' ).value = 'Use original';
	}
}

Uploader.togglePopupForm = function()
{
	$( 'popupForm' ).toggle();
	$( 'popupCaption' ).value = '';
}

Uploader.showPopupCode = function()
{
	var sImage = Uploader.selectedImage;
	if( !sImage )
	{
		if( Uploader.imageIndex.length == 0 ) return false;
		Uploader.selectImage( Uploader.imageIndex[0] );
	}
	var img = Uploader.images[Uploader.selectedImage];
	var maxWidth = img.size.width;
	if( maxWidth <= 340 ) return false;
	var thumb = img.thumbs[340];
	//var text = '<img src="' + thumb.filename + '" style="width: ' + thumb.size.width + 'px; height: ' + thumb.size.height + 'px;" />';
	var title = '';
	if( $( 'popupCaption' ).value.length > 0 ) title =  ' title="' + $( 'popupCaption' ).value.replace( /"/g, '&quot;' ) + '"';
	//text = '<a href="' + img.filename + '" rel="lytebox"' + title + '>' + text + '<div style="' + magPos + '"></div></a>';
	//text = '<div class="popupImgContainer">' + text + '</div>';
	var text = '<a href="' + img.filename + '" rel="lytebox" class="ppImgCont2"' + title + ' style="background-image: url(\'' + thumb.filename + '\');width: ' + thumb.size.width + 'px; height: ' + thumb.size.height + 'px;"><span></span></a>';
	$( 'allimagesarea' ).value = text;	
}

Uploader.collectValidThumbs = function( img, sizes )
{
	if( !img ) return sizes;
	var ret = sizes;
	for( var i = 0; i < sizes.length; i ++ )
	{
		if (!img.thumbs[sizes[i]])
		{
			ret = ret.without(sizes[i]);
		}
	}
	return ret;
}

Uploader.showMessage = function( msg, timeout )
{
	if( !timeout ) timeout = 3000;
	$( 'imageMessage' ).innerHTML = msg;
	$( 'imageMessage' ).show();
	setTimeout( function()  { $( 'imageMessage' ).hide() }, timeout );
}

Uploader.images = {};
Uploader.imageIndex = [];
Uploader.selectedThumb = 0;
Uploader.rememberThumb = 0;
Uploader.selectedImage = null;
Uploader.appendNewlineToImageHtml = false;


var swfu;

// The uploadStart event handler. This function variable is assigned to upload_start_handler in the settings object 
var uploadStartEventHandler = function (file) { var continue_with_upload = true; return continue_with_upload; }; 

// The uploadSuccess event handler. This function variable is assigned to upload_success_handler in the settings object
var uploadSuccessEventHandler = function (file, server_data) { alert("The file " + file.name + " has been delivered to the server. The server responded with " + server_data); }; 

/*swfu = null;

    swfuInit = function () {
        swfu = new SWFUpload({
			// Backend settings
			upload_url: "/ged/index.php",	// Relative to the SWF file, you can use an absolute URL as well.
			post_params: {"op" : "editor", "action" : "uploadfile", "forceSiteId" : ( $( 'siteId' ) != null ?  $( 'siteId' ).value : 0 )  },
			file_post_name: "uploadfile",

			// Flash file settings
			file_size_limit : "10240",	// 10 MB
			file_types : "*.*",	// or you could use something like: "*.doc;*.wpd;*.pdf",
			file_types_description : "All Files",
			file_upload_limit : 20, 
			file_queue_limit : 20, 



			// Flash Settings
			flash_url : "/assets/ged/js/swfupload/swfupload_f9.swf",	// Relative to this file

			
			// Debug settings
			debug: false,
			
			// Callbacks
			upload_start_handler : uploadStartEventHandler,
			//upload_success_handler : uploadSuccessEventHandler,
			upload_success_handler: uploadSuccess,
			file_dialog_complete_handler : fileDialogComplete,
			upload_complete_handler : uploadComplete,
			
			custom_settings : {
				upload_target : "divFileProgressContainer"
			}
		});
    }*/
var uploaderYUI = null;

uploaderInit = function( id, bg, swfUrl )
{
	YAHOO.widget.Uploader.SWFURL = swfUrl;
	uploaderYUI = new YAHOO.widget.Uploader( id, bg );
	uploaderYUI.addListener( 'contentReady', swfReady );
	uploaderYUI.addListener( 'fileSelect', fileDialogComplete );
	uploaderYUI.addListener( 'uploadCompleteData', uploadSuccess );
	uploaderYUI.addListener( 'uploadProgress', uploadProgress );
	uploaderYUI.addListener( 'uploadCancel', uploadCancelled );
	uploaderYUI.addListener( 'uploadError', function( evt ) { alert( 'Upload error' ) } );
} 
