var preloadImages = new Array();

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
/* Not used -> see cmsCompatiblePreloadImages() */
/*function MM_preloadImages() { //v3.0
	var d=document; 
	if (d.images) { 
		if (!d.MM_p) d.MM_p=new Array();
    	var i,j=d.MM_p.length,a=MM_preloadImages.arguments; 
    	for (i=0; i<a.length; i++) {
			if (a[i].indexOf("#")!=0) { 
				d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];
			}
		}
	}
}*/
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function cmsCompatiblePreloadImages() {
	if (document.images && preloadImages) { 
		if (!document.MM_p) document.MM_p=new Array();
    	var i,j=document.MM_p.length;
    	for (i=0; i<preloadImages.length; i++) {
			if (preloadImages[i].indexOf("#")!=0) { 
				document.MM_p[j] = new Image; 
				document.MM_p[j++].src=preloadImages[i];
			}
		}
	}
}

//Event.observe(window, 'load', cmsCompatiblePreloadImages, false);
$(document).ready(function() {
	cmsCompatiblePreloadImages()
});

/* file upload ************************************************************************************/
var progressBarTimer;
var progress;

function ajaxFileUpload(url, fileElementId) {
	//starting setting some animation when the ajax starts and completes
/*	$("#loading")
		.ajaxStart(function(){
			progress = 10;
			$(this).progressbar({
				value: progress
			});
			$(this).show();
			progressBarTimer = setTimeout("checkUpdateStatus()", 1000);
		})
		.ajaxComplete(function(){
			$(this).hide();
			progress = 100;
			clearTimeout(progressBarTimer);
			$(this).progressbar('value', 0);
			alert("finished!");
		});*/

	// get the form
	var form = $('#' + fileElementId).get(0).form;
	// create an id for this upload:
	var id = new Date().getTime();
	// create an ifram as target for this upload
	var uploadIframe = createUploadIframe(id, false);
	// prepare the function which handels the return message from the server
	var uploadCallback = function() {
//		jQuery.event.trigger( "ajaxComplete" );
		$("#loading").hide();
		$("#loadingNumbers").hide();
		$("#loadingNumbers").text("");
		progress = 100;
		clearTimeout(progressBarTimer);
		$("#loading").progressbar('value', 0);

		var io = uploadIframe;
		var xml = {};
		try {
			if (io.contentWindow) {
				xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
				xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
			} else if (io.contentDocument) {
				xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
				xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
			}
		} catch (e) {
			jQuery.handleError(s, xml, null, e);
		}
		// clean up
		setTimeout(function() {
				try {
					$(io).remove();
					$("#" + fileElementId).attr("value", null);
				} catch(e) {
					jQuery.handleError(s, xml, null, e);
				}									
			}, 
			100);
//		alert(xml.responseText);
//		var data = jQuery.uploadHttpData( xml, s.dataType );	
		var data = jQuery.uploadHttpData( xml, "xml");	
		if ($(data).find("errors").size() > 0) {
			var errorMessage = "Es sind Fehler aufgetreten:\n";
			$(data).find("errors error").each(function() {
				errorMessage += $(this).text();
			});
			alert(errorMessage);
		} else {
			$(form).hide();
			var message = $(data).find("message").text();
			if (message == "upload.successful") {
				// TODO: localize!
				message = "Upload erfolgreich!";
			}
			$(data).find("files file").each(function (i) {
				message += "<br />" + $(this).find("filename").text() + " (" + $(this).find("fileextension").text() + ", " + $(this).find("filesize").text() + ")";
			});
			$("div.dropbox div.response div.message").html(message);
			$("div.dropbox div.response").show();
		}	
	}
	// attach the method that should get executed when the upload returns
	if (window.attachEvent) {
		document.getElementById(uploadIframe.id).attachEvent('onload', uploadCallback);
	} else {
		document.getElementById(uploadIframe.id).addEventListener('load', uploadCallback, false);
	}
	// set the target of the upload form to the newly created iframe
	form.target = "jUploadFrame" + id;
//	jQuery.event.trigger( "ajaxStart" );
	// submit the form
	progress = 0;
	$("#loading").progressbar({
		value: progress
	});
	$("#loading").show();
	$("#loadingNumbers").show();
	progressBarTimer = setTimeout("checkUpdateStatus()", 1000);
	return true;
}

function uploadHttpData( r, type ) {
	var data = !type;
	data = type == "xml" || data ? r.responseXML : r.responseText;
	// If the type is "script", eval it in global context
	if ( type == "script" )
		jQuery.globalEval( data );
	// Get the JavaScript object, if JSON is used.
	if ( type == "json" )
		eval( "data = " + data );
	// evaluate scripts within html
	if ( type == "html" )
		jQuery("<div>").html(data).evalScripts();
		//alert($('param', data).each(function(){alert($(this).attr('value'));}));
	return data;
}

function createUploadIframe(id, uri) {
	//create frame
	var frameId = 'jUploadFrame' + id;
	
	if(window.ActiveXObject) {
		var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
		if(typeof uri== 'boolean'){
			io.src = 'javascript:false';
		}
		else if(typeof uri== 'string'){
			io.src = uri;
		}
	}
	else {
		var io = document.createElement('iframe');
		io.id = frameId;
		io.name = frameId;
	}
	io.style.position = 'absolute';
	io.style.top = '-1000px';
	io.style.left = '-1000px';

	document.body.appendChild(io);

	return io;
}

function newUpload() {
	$("div.dropbox div.response").hide();
	$("div.dropbox form").show();
}

function checkUpdateStatus(test) {
	if (progress < 100) {
			var id = new Date().getTime();
		$.getJSON("../../../.magnolia/pages/upload?type=json&statusVar=chmobilUploadStatus&command=uploadStatus&ick=" + id,
        	function(data) {
				var totalBytes = data.status.totalBytes;
				var bytesUploaded = data.status.bytesUploaded;
				if (bytesUploaded > 0) {
					var percentage = bytesUploaded / totalBytes * 100;
					$("#loading").progressbar('value', percentage);
					$("#loadingNumbers").text("" + Math.round(percentage) + "%");
				}
			});
		progressBarTimer = setTimeout("checkUpdateStatus()", 1000);
	} else {
		clearTimeout(progressBarTimer);
	}
}
