// JavaScript Document
//////////////////////
//  PREVIEW & THUMBS & STATS
////////////////////////
var mousetph=false;
var lastloadedthumbs = "";
var mediatoshow;
var delaysto;
function showThumbnails(mediaurl,delay){
	if(delay){
		clearTimeout(delaysto);
		mediatoshow = mediaurl;
		delaysto = setTimeout(function(){showThumbnails(mediatoshow);},500);
		return;
	}
	var tph = dojo.byId("quickpreview");
	var tphc = dojo.byId("qpcontainer");
	mousetph = mediaurl!=null;
	lastloadedthumbs = mediaurl;
	if(mediaurl==null){
		tph.style.display='none';
		clearTimeout(delaysto);
		//tph.innerHTML = "";
	}else{
		tph.style.display='block';
		tphc.innerHTML = getLoadingHTMLSmall();
		//console.log(mediaurl);
		dojo.xhrGet({
			url: mediaurl,
			load: function(responseObject, ioArgs){
					if(responseObject==null){ this.error(); return; }
					if(responseObject==""){ showThumbnails(); return; }
					if(this.url != lastloadedthumbs){ return; }
					tph.style.display='block';
					tphc.innerHTML = responseObject;
					movethumbsph();
					return responseObject;
				},
			error: function(response, ioArgs){
				showThumbnails();
				return response;
			},
			handleAs: "text"
		});
	}
}
function fadeInImg(who){
	movethumbsph();
	who.style.opacity=0;
	who.style.display='';
	dojo.animateProperty({
		node: who,
		duration:300,
		properties: { opacity: {start:0,end:1 } }
	}).play();
}

function showMediaPreview(id,type){
	showBlackPanel(.85,true);
  	var container = dojo.byId('overcontentshigh');
	container.style.display='';
	container.innerHTML = getLoadingHTML();
	container.innerHTML += "<div class=\"previewcloser\" onclick=\"hideFilePreview();\">"+getMsg('close')+"</div>";
	fixOverContents(false,true);
	var url = "files/file.preview.php?id="+id+"&type="+(type==null?"":type);
	dojo.xhrGet({
		url: url,
		load: function(responseObject, ioArgs){
				if(responseObject==null){ this.error(); return; }
				if(responseObject.mediahtml!=null){
					container.innerHTML = responseObject.mediahtml;
				}
				if(responseObject.buildfunction!=null){
					responseObject.buildfunction();
				}
				//Custom.init(previewer);
				return responseObject;
			},
		error: function(response, ioArgs){
			console.log("ERROR LOADING EDITOR",response, ioArgs);
			container.innerHTML = getLoadingErrorHTML(true);
			//editRecord(lastediturl);
			return response;
		},
		handleAs: "json"
	});
	window.location.href = "#";
}
function hideFilePreview(){
	closeOverContents(true);
	fixOverContents(false,true);
}
function imagePreviewLoaded(){
	fixOverContents();
}

//////////////////////
//  MOUSE MOVE
////////////////////////
function movethumbsph(){
	if(mousetph){
		var tph = dojo.byId("quickpreview");
		var ps = getPageSize();
		var pH;
		var pV;
		if(ps[0]-(mouseX+15+tph.offsetWidth)>0 || tph.offsetWidth>ps[0]){
			pH = mouseX+15;
		}else{
			pH = mouseX-15-tph.offsetWidth;
		}
		if(mouseY+15+tph.offsetHeight<ps[1] || mouseY-15-tph.offsetHeight<0){
			if(mouseY+15+tph.offsetHeight<ps[1]){
				pV = mouseY+15;
			}else{
				pV = mouseY-tph.offsetHeight/2;
			}
		}else{
			pV = mouseY-15-tph.offsetHeight;
		}
		tph.style.left = pH+"px";
		tph.style.top  = pV+"px";
	}
}
dojo.connect(document,"onmousemove",null,"movethumbsph");
//////////////////////
//  FILTER
//////////////////////
function filterMediaList(val){
	var lines = dojo.query(".fileitem",dojo.byId("myfiles"));
	val = val.toLowerCase();
	while(val.length>0 && val.lastIndexOf(" ")==val.length-1){
		val=val.substr(0,val.length-1);
	}
	while(val.indexOf("  ")!=-1){
		val = val.replace("  "," ");
	}
	var valparts = val.split(" ");
	var count = 0;
	for(var i=0;i<lines.length;i++){
		var line = lines[i];
		var linedata = stripHTML(line.innerHTML).toLowerCase();
		linedata = stripHTML(linedata);
		var lineok = true;
		for(j=0;j<valparts.length && lineok;j++){
			if(linedata.indexOf(valparts[j])==-1){
				lineok=false;
			}
		}
		if(lineok){
			while(line.className.indexOf("par")!=-1 || line.className.indexOf("impar")!=-1){
				line.className = line.className.replace("impar","");
				line.className = line.className.replace("par","");
			}
			line.style.display='';
			line.className += " "+(count%2==0?"par":"impar");
			count++;
		}else{
			line.style.display='none';
		}
	}
}
function stripHTML(str){
	var re= /<\S[^><]*>/g
	return str.replace(re, "");
}
var lasttypeviewed = "type";
function getFilesList(type){
	if(type==null){
		type = "type";
	}
	lasttypeviewed = type;
	var buts = dojo.query(".orderbut",dojo.byId("myfiles"));
	for(var i=0;i<buts.length;i++){
		buts[i].disabled = buts[i].id == "orderbut"+type;
	}
	var url = "user/myfiles.list.php?t="+type;
  	var container = dojo.byId('userfilesph');
	container.innerHTML = getLoadingHTML();
	dojo.xhrGet({
		url: url,
		load: function(responseObject, ioArgs){
				if(responseObject==null){ this.error(); return; }
				container.innerHTML = responseObject;
				fixBlackPanel();
				fixOverContents();
				return responseObject;
			},
		error: function(response, ioArgs){
			console.log("ERROR LOADING EDITOR",response, ioArgs);
			container.innerHTML = getLoadingErrorHTML(true);
			//editRecord(lastediturl);
			return response;
		},
		handleAs: "text"
	});
}
function toggleFilePanel(type){
	var panelheader = dojo.byId("panelheader"+type);
	var filestypepanel = dojo.byId("filestypepanel"+type);
	var newval = filestypepanel.className.indexOf("opened")==-1;
	while(panelheader.className.indexOf("opened")!=-1 || panelheader.className.indexOf("closed")!=-1){
		panelheader.className = panelheader.className.replace("opened","");
		panelheader.className = panelheader.className.replace("closed","");
	}
	while(filestypepanel.className.indexOf("opened")!=-1 || filestypepanel.className.indexOf("closed")!=-1){
		filestypepanel.className = filestypepanel.className.replace("opened","");
		filestypepanel.className = filestypepanel.className.replace("closed","");
	}
	panelheader.className += " "+(newval?"opened":"closed");
	filestypepanel.className += " "+(newval?"opened":"closed");
}






//////////////////////
//  EDIT CONTENTS
////////////////////////
function deleteFile(id){
	url = "files/file.del.php?id="+id;
	showBlackPanel(.8,true);
  	var container = dojo.byId('overcontentshigh');
	container.style.display='';
	container.innerHTML = getLoadingHTML();
	fixOverContents();
	dojo.xhrGet({
		url: url,
		load: function(responseObject, ioArgs){
				if(responseObject==null){ this.error(); return; }
				container.innerHTML = responseObject;
				fixBlackPanel();
				fixOverContents();
				return responseObject;
			},
		error: function(response, ioArgs){
			console.log("ERROR LOADING EDITOR",response, ioArgs);
			container.innerHTML = getLoadingErrorHTML(true);
			//editRecord(lastediturl);
			return response;
		},
		handleAs: "text"
	});
}
function doDeleteFile(id){
	var msgbox = dojo.byId("delfilemsg");
	msgbox.style.display='none';
	var form = dojo.byId('delfileform');
	var fobjs = dojo.query("input",form);
	dojo.xhrPost({
		url: "files/file.del.php?id="+id,
		form:form,
		load: function(responseObject, ioArgs){
			if(responseObject==null){ this.error(); return; }
			dojo.byId('savingimg').style.display = 'none';
			msgbox.style.display='block';
			if(responseObject.success){
				form.style.display='none';
				/*msgbox.className="success";
				msgbox.innerHTML = responseObject.msg+getSuccessButton("closeOverContents(true);showMyFiles();");*/
				closeOverContents(true);
				showMyFiles();
			}else{
				msgbox.innerHTML = responseObject.error;
				msgbox.className="error";
				for(i=0;i<fobjs.length;i++){
					fobjs[i].disabled=false;
				}
			}
			if(responseObject.formatForm!=null){
				responseObject.formatForm();
			}
			fixBlackPanel();
			fixOverContents();
			return responseObject;
		},
		error: function(response, ioArgs){
			console.log("ERROR SAVING",response, ioArgs);
			//saveRecord(lastsaveurl);
			msgbox.style.display='block';
			msgbox.innerHTML = getLoadingErrorHTML();
			msgbox.className="error";
			for(i=0;i<fobjs.length;i++){
				fobjs[i].disabled=false;
			}
			return response;
		},
		handleAs: "json"
	});
	for(i=0;i<fobjs.length;i++){
		fobjs[i].disabled=true;
	}
	dojo.byId('savingimg').style.display = '';
}
function onSaveOk(){
	closeOverContents();
	reloadPage();
}
function onCustomOk(){}
function setErrorClass(who){
	var it = dojo.byId(who);
	if(it!=null){
		it.className = "formerror";
		/*it.onchange=function(){
			this.className="";
		}*/
	}
}
function getLoadingHTML(){
	var str = "<div id=\"loadingcontents\">"+getMsg('loading')+"<br /></div>";
	return str;
}
function getLoadingHTMLSmall(){
	var str = "<div id=\"loadingcontents\"></div>";
	return str;
}
function getLoadingErrorHTML(forover){
	var str = "<div id=\"loadingcontents\">Error: P&aacute;gina no encontrada<br /><img src=\"_images/loadingerror.gif\" />";
	if(forover) str+= "<br /><input type=\"button\" onclick=\"closeOverContents();\" value=\"OK\" />";
	str += "</div>";
	return str;
}
var unloadChecks = new Array();
function onUnloadCheck(){
	var ret = "";
	for(var i=0;i<unloadChecks.length;i++){
		var retval = unloadChecks[i].check();
		if(retval !== false){
			ret += retval;
		}
	}
	if(ret!=""){
		return ret;
	}
}
window.onbeforeunload = onUnloadCheck;







function changeFileStatus(id,status){
	var filesmatch = dojo.query(".ff"+id,"techview");
	for(var i=0;i<filesmatch.length;i++){
		var cfile = filesmatch[i];
		while(cfile.className.indexOf("revisado")!=-1 || cfile.className.indexOf("norevisado")!=-1 || cfile.className.indexOf("error")!=-1){
			cfile.className = cfile.className.replace("revisado","");
			cfile.className = cfile.className.replace("norevisado","");
			cfile.className = cfile.className.replace("error","");
		}		
		cfile.className += " "+status;
	}
	var url = "files/files.status.php?id="+id+"&status="+status;
	dojo.xhrGet({
		url: url,
		load: function(responseObject, ioArgs){
				if(responseObject==null){ this.error(); return; }
				return responseObject;
			},
		error: function(response, ioArgs){
			console.log("ERROR LOADING EDITOR",response, ioArgs);
			showModal("No se ha podido cambiar el estado del archivo");
			//editRecord(lastediturl);
			return response;
		},
		handleAs: "json"
	});
}
function setFileNotes(id,notes){
	var url = "files/files.notes.php?id="+id+"&notes="+notes;
	dojo.xhrGet({
		url: url,
		load: function(responseObject, ioArgs){
				if(responseObject==null){ this.error(); return; }
				console.log("pk");
				return responseObject;
			},
		error: function(response, ioArgs){
			console.log("ERROR LOADING EDITOR",response, ioArgs);
			showModal("No se han podido guardar las notas del archivo");
			//editRecord(lastediturl);
			return response;
		},
		handleAs: "json"
	});
}


function downloadOriginal(id){
	var nurl = 'files/file.download.php?f='+id;
	window.open(nurl);
}
function reencodeFile(fileid,filetype,fstarttime,faspect){
	if(window.confirm("Seguro que desea reencodear el archivo?")){
		if(filetype=="video" || filetype=="audio"){
			var starttime = window.prompt('Ingrese el tiempo de inicio de encodeo (hh:mm:ss)',fstarttime!=null?fstarttime:'00:00:00');
			if(starttime==null) return;
			var ret = starttime.match(/^(([0-9]){2}:([0-9]){2}:([0-9]){2})$/i);
			while(ret == null){
				if(!window.confirm('Tiempo de encodeo erroneo, desea volver a ingresar el valor?')){
					return;
				};
				starttime = window.prompt('Ingrese el tiempo de inicio de encodeo (hh:mm:ss)',fstarttime!=null?fstarttime:'00:00:00');
				if(starttime==null) return;
				var ret = starttime.match(/^(([0-9]){2}:([0-9]){2}:([0-9]){2})$/i);
			}
			var st = ret[0];
		}
		if(filetype=="video"){
			var aspect = window.prompt('Ingrese el aspect ratio a encodear (4:3 o 16:9)',faspect!=null?faspect:'4:3');
			if(aspect==null) return;
			var ret = aspect.match(/^(4:3|16:9)$/i);
			if(ret == null){
				if(!window.confirm('Aspect ratio erroneo, desea volver a ingresar el valor?')){
					return;
				};
				aspect = window.prompt('Ingrese el aspect ratio a encodear (4:3 o 16:9)',faspect!=null?faspect:'4:3');
				if(aspect==null) return;
				var ret = aspect.match(/^(4:3|16:9)$/i);
			}
			var ar = ret[0];
			var ff = window.confirm('El archivo tiene problemas de campos?\nHaga clic en aceptar para hacer un segundo paso de encodeo para solucionarlo.');
		}
		if(filetype=="image"){
			var rotate = window.prompt('Ingrese el valor de rotacion de la imagen (Sentido horario, CW)',0);
			if(rotate==null) return;
			var ret = rotate.match(/^([0-9]{1,3})$/i);
			while(ret == null){
				if(!window.confirm('Rotacion erronea, desea volver a ingresar el valor?')){
					return;
				};
				rotate = window.prompt('Ingrese el valor de rotacion de la imagen (Sentido horario, CW)',0);
				if(rotate==null) return;
				var ret = rotate.match(/^([0-9]{1,3})$/i);
			}
			var ir = ret[0];
		}
		var rbut = dojo.byId('reencodebut'+fileid);
		rbut.value = "Espere...";
		rbut.disabled = true;
		dojo.xhrGet({
			url: "files/file.reencode.php?fileid="+fileid+"&st="+st+"&ar="+ar+"&ff="+(ff?"1":"0")+"&ir="+ir,
			load: function(responseObject, ioArgs){
					if(responseObject==null){ this.error(); return; }
					rbut.value = "Reencodear";
					rbut.disabled = false;
					updateFileItem(fileid);
					return responseObject;
				},
			error: function(response, ioArgs){
				console.log("ERROR LOADING EDITOR",response, ioArgs);
				rbut.value = "Reencodear";
				rbut.disabled = false;
				//showModal("No se ha podido cambiar el estado del archivo");
				//editRecord(lastediturl);
				return response;
			},
			handleAs: "json"
		});
	}
}





var filefilterstatus = {revisado:true,
						error:true,
						norevisado:true};
function filterFiles(type,val,skip){
	if(val==null && !skip){
		val = !filefilterstatus[type]
	}
	filefilterstatus[type] = val;
	var caters = dojo.byId("techview");
	if(caters==null) return;
	var filtbut = dojo.byId("filter"+type);
	if(filtbut!=null){
		while(filtbut.className.indexOf("disabled")!=-1){
			filtbut.className = filtbut.className.replace("disabled","");
		}
		filtbut.className += val?"":" disabled";
	}
	var files = dojo.query(".fileitem."+type,caters);
	var fullcount = 0;
	var count = 0;
	for(var i=0;i<files.length;i++){
		var file = files[i];
		file.style.display=val?'':'none';
		if(val){
			count++;
			fullcount++;
		}
	}
}
function filterEncoding(val){
	var caters = dojo.byId("techview");
	if(caters==null) return;
	var files = dojo.query(".fileitem",caters);
	var actions = dojo.query(".actions",caters);
	var count = 0;
	//var count = dojo.query(".actions."+val,caters);
	//count = count.length;
	for(var i=0;i<files.length;i++){
		var file = files[i];
		var action = actions[i];
		if(val && action.className.indexOf(val)==-1){
			file.style.display='none';
		}else{
			file.style.display='';
			count++;
		}
	}
	if(val!=null){
		var button = dojo.byId("f"+val);
		if(count){
			button.style.display='';
			button.innerHTML = "(" + count + ")";
		}else{
			button.style.display='none';
		}
	}
}
function countFiles(){
	var statuses = ["revisado","error","norevisado"];
	for(var stat in statuses){
		var cstat = statuses[stat];
		var files = dojo.query(".fileitem."+cstat);
		var countph = dojo.byId('filecount'+cstat);
		if(countph){
			countph.innerHTML = files.length;
		}
	}
}

function openFilePopup(id,type){
	var url = "files/file.popup.php?id="+id+"&type="+type;
	window.open(url,"file"+id, "width=480,height=396,scrollbars=NO");
}

function updateFileItem(id){
	var fitem = dojo.byId('fph'+id);
	fitem.className += " updating";
	dojo.xhrGet({
		url: "files/tech.onefile.php?id="+id,
		load: function(responseObject, ioArgs){
				if(responseObject==null){ this.error(); return; }
				fitem.innerHTML = responseObject;
				fitem.className = fitem.className.replace(/updating/g,"");
				return responseObject;
			},
		error: function(response, ioArgs){
			fitem.className = fitem.className.replace(/updating/g,"");
			return response;
		},
		handleAs: "text"
	});	
}