 	var Dom = YAHOO.util.Dom,
	YE = YAHOO.util.Event,
	YM = YAHOO.util.Motion,
	$ = Dom.get,
	resultDiv = null,
	region = null,
	uploader,
	currentImg,
	rowIdAnim,
	sUrl,
	viewportWidth = Dom.getViewportWidth(),
	viewportHeight = Dom.getViewportHeight(),
	crop,
	resultImg,
	fileName,
	fileList,
	imagesUploaded = 0;

	YAHOO.widget.Uploader.SWFURL = "/resources/js/library/uploader.swf";

	/**
	 *
	 * @access public
	 * @return void
	 **/
	function uploadInit(){

		var uiLayer = Dom.getRegion('selectLink');
		var overlay = $('uploaderOverlay');
		Dom.setStyle(overlay, 'width', uiLayer.right-uiLayer.left + "px");
		Dom.setStyle(overlay, 'height', uiLayer.bottom-uiLayer.top + "px");

		uploader = new YAHOO.widget.Uploader("uploaderOverlay");
		uploader.addListener('contentReady', handleContentReady);
		uploader.addListener('fileSelect', onFileSelect)
		uploader.addListener('uploadStart', onUploadStart);
		uploader.addListener('uploadProgress', onUploadProgress);
		uploader.addListener('uploadComplete', onUploadComplete);
		uploader.addListener('uploadError', onUploadError);

		rowIdAnim = 0;
	}

	function handleContentReady () {
	    // Allows the uploader to send log messages to trace, as well as to YAHOO.log
		uploader.setAllowLogging(true);

		// Allows multiple file selection in "Browse" dialog.
		uploader.setAllowMultipleFiles(true);

		// New set of file filters.
		var ff = new Array({description:"Images", extensions:"*.jpg;*.png;*.gif"},
		                   {description:"Videos", extensions:"*.avi;*.mov;*.mpg"});

		// Apply new set of file filters to the uploader.
		uploader.setFileFilters(ff);
	}

	var imgcallback =
	{
		customevents:{
			onSuccess:function(eventType, args){
				if(args[0].responseText !== undefined){
					$('single').style.height = '51px';
					$('single').innerHTML = '<div class="success"><p>Images uploaded successfully</p></div>';
				}
			},
			onFailure:function(eventType, args){
				if(args[0].responseText !== undefined){
					alert("Image Not Uploaded");
				}
			}
		}
	};

	function callImgAjax(){
		var imageRequest = YAHOO.util.Connect.asyncRequest('GET', sUrl, imgcallback);
	}

	/*function browse() {
		uploader.clearFileList();
		uploader.browse(true, [{description:"Images", extensions:"*.jpg"}]);
	}*/

	function createDataTable(entries) {
		var single = $('single');
		single.style.height = '0px';
		single.style.overflow = 'hidden';

		rowCounter = 0;
		this.fileIdHash = {};
		this.dataArr = [];
		for(var i in entries) {
			var entry = entries[i];
			entry["progress"] = "<div style='height:5px;width:100px;background-color:#CCC;'></div>";
			dataArr.unshift(entry);
			rowCounter++;
		}

		for (var j = 0; j < dataArr.length; j++) {
			this.fileIdHash[dataArr[j].id] = j;
		}

		var myColumnDefs = [
		    {key:"name", label: "File Name", sortable:false},
		 	{key:"size", label: "Size", sortable:false},
		 	{key:"progress", label: "Upload progress", sortable:false}
		];

		this.myDataSource = new YAHOO.util.DataSource(dataArr);
		this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
		this.myDataSource.responseSchema = {
		  fields: ["id","name","created","modified","type", "size", "progress"]
		};

		this.singleSelectDataTable = new YAHOO.widget.DataTable("single",
		       myColumnDefs, this.myDataSource, {
		           caption:"Files To Upload",
		           selectionMode:"single"
		       });

	    var tHeight = rowCounter * 30;
		var myAnim = new YAHOO.util.Anim(single, {
	  	  height: { to: tHeight + 40, from: 0 }
	    }, 2, YAHOO.util.Easing.easeBothStrong);
	    myAnim.animate();
		myAnim.onComplete.subscribe(upload);
	}

	function upload() {
		if (fileList != null) {
			var username = $('currentUser').innerHTML;
			uploader.setSimUploadLimit(3);
			uploader.uploadAll("/components/image_handler_component.class.php?username=" + username);
		}
	}

	function onUploadProgress(event) {
		rowNum = fileIdHash[event["id"]];
		prog = Math.round(100*(event["bytesLoaded"]/event["bytesTotal"]));
		progbar = "<div style='height:5px;width:100px;background-color:#CCC;'><div style='height:5px;background-color:#F00;width:" + prog + "px;'></div></div>";
		singleSelectDataTable.updateRow(rowNum, {name: dataArr[rowNum]["name"], size: dataArr[rowNum]["size"], progress: progbar});
	}


	function onFileSelect(event) {
		uploadCounter = 0;
		fileList = event.fileList;
		createDataTable(fileList);
	}

	function onUploadStart(event) {
		YAHOO.log(event);
		rowNum = fileIdHash[event["id"]];
		singleSelectDataTable.updateRow(rowNum, {name: dataArr[rowNum]["name"], size: dataArr[rowNum]["size"], progress: "Starting..."});
	}

	function onUploadComplete(event) {
		rowNum = fileIdHash[event["id"]];
		prog = Math.round(100*(event["bytesLoaded"]/event["bytesTotal"]));
		progbar = "<div style='height:5px;width:100px;background-color:#CCC;'><div style='height:5px;background-color:#87A227;width:100px;'></div></div>";
		singleSelectDataTable.updateRow(rowNum, {name: dataArr[rowNum]["name"], size: dataArr[rowNum]["size"], progress: progbar});

		imagesUploaded++;

		if(rowCounter == imagesUploaded){

			uploader.clearFileList();
			uploader.enable();
			fileID = null;

			sUrl = '/components/image_handler_component.class.php';

			var single = $('single');
			var animBack = new YAHOO.util.Anim(single, {
		  	  height: { to: 0 }
		    }, 2, YAHOO.util.Easing.easeBothStrong);
		    animBack.animate();
		    animBack.onComplete.subscribe(callImgAjax);
		}
	}

	function onUploadError (event) {
		YAHOO.log(event);
	}

	function getURLParam(strParamName){
		var strReturn = "";
		var strHref = window.location.href;
		if ( strHref.indexOf("?") > -1 ){
			var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
			var aQueryString = strQueryString.split("&");
			for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
				if (
					aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 ){
					var aParam = aQueryString[iParam].split("=");
					strReturn = aParam[1];
					break;
				}
			}
		}
		return unescape(strReturn);
	}

	YE.onDOMReady(uploadInit);