/*================================================================================= 
 XAJAX_UPLOAD.JS 
 VERSION:1.0.1
 DESCRIPTION:  THIS IS THE REQUIRED JAVASCRIPT FILE FOR  XAJAX UPLOAD:UPLOADER WITH PROGRESS BAR VERSION:1.0.1
 AUTHOR: JEREMY M. DILL
 REQUIREMENTS:  SEE UPLOAD_CONFIG_INC.PHP
================================================================================= 
* Copyright (c) 2007 JEREMY M. DILL (trydobe.com)
* This work is licensed under a Creative Commons Attribution-Share Alike 3.0  License
* http://creativecommons.org/licenses/by-sa/3.0/
* AUTHOR'S NOTE: THANKS TO THE OTHER DEVELOPERS OUT THERE WHO ESTABLISHED THE FOUNDATIONS OF THIS WORK.  
									BITS AND PIECES OF CONTRIBUTIONS FROM VARIOUS SOURCES INCLUDING THE FOLLOWING:
									http://www.raditha.com/megaupload/
									http://lists.geeklog.net/pipermail/geeklog-cvs/2005-June/000525.html
									http://labs.beffa.org/w2box/demo/
									http://tomas.epineer.se/archives/3
									http://jszen.blogspot.com/2005/05/secure-iframe-gotcha.html
									http://obokaman.obolog.com/mensaje/1596
									http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
									(sorry if any of these links become invalid)								
================================================================================= */
var count=0;
var numfiles=0;
var filecount=0;
var frameSet=false;
var frameAdv=0;
//GLOBAL DECLARATIONS
var sid, cgiPath, maxFile, maxNumFiles, autoFirst, uploadDir, cgiDebug, uploadSpeed, videofiletypes, picfiletypes, 
	archivefiletypes, uploadVideo, uploadNewsVideo, uploadNewsArchives, uploadPic, uploadBanner, uploadNewsImg, uploadDoc,
	uploadVThumb, uploadVTrailer, uploadStarPhoto, uploadScreenshot, uploadPlayerLogo, uploadSiteFavicon, uploadDocumentExample,
  uploadTvPlaylistPic, uploadTvPlaylistLogo, uploadCategoryImage,uploadSeoPagesImage,uploadSiteSelImages,
	uploadWwwVideo, docfiletypes, extMode, blankHTMLPath, showMax, vConvert, vConvertExt, uploadSiteSmiles, uploadMailFiles, mailfiletypes,
  extChatStartVideo, welcomeVideoMail, uploadCategoryVideo, uploadCategoryInnerImage;

var layout;
//RESET EVERYTHING BACK TO THE START.  SID WILL REMAIN THE SAME.
function startOver(){
  //alert("startOver()");
  top.xajax_getSid();
  if (parent.frames["main"]) layout = parent.frames["main"];
  else layout = window;
	var news_id = layout.document.getElementById("news_id").value;

	layout.document.getElementById("progress_bar").style.width="0%";
	layout.document.getElementById("load_bar").style.display="block";
	layout.document.getElementById("uldSubmit").disabled=true;
	if (autoFirst)	layout.document.getElementById("uldSubmit").style.display="none";
	layout.document.getElementById("uldCancel").style.display="none";
	if(showMax) {
		layout.document.getElementById("moreinfo1").style.display="block";
		if (null !== layout.document.getElementById("moreinfo3")) layout.document.getElementById("moreinfo3").style.display="block";
	}
	count=0;
	numfiles=0;
	filecount=0;
	addfail=false;
	bastardChild(layout.document.getElementById("file_inputs"));
	bastardChild(layout.document.getElementById("file_list"));
	addFileInput(false, news_id);
	makeIFrame(news_id);
}

var rewriteTarget=""; 
// SUBMIT THE FORM AND START MONITORING WITH XAJAX
function postIt(news_id){
  //alert("postIt()");
	layout.document.getElementById("file"+eval(numfiles+1)).disabled=true;
	layout.document.getElementById("uldCancel").style.display="block";
	layout.document.getElementById("uldSubmit").disabled=true;
	layout.document.getElementById("moreinfo1").style.display="none";
	if (null !== layout.document.getElementById("moreinfo3")) layout.document.getElementById("moreinfo3").style.display="none";
	layout.document.getElementById("moreinfo2").style.display="none";
	layout.document.getElementById("okstatus").style.display="none";
	layout.document.getElementById("progress_bar").style.display="block";
	layout.document.getElementById("loadtext").innerHTML="Upload Initiated.";
	layout.document.forms['file_upload'].action=cgiPath+"?sid="+sid+"&amp;maxfile="+maxFile+"&amp;cgidebug="+cgiDebug+"&amp;speed="+uploadSpeed+"&amp;temp_dir="+uploadDir;
	//TEST: checking action
	if (rewriteTarget != "") {
	  //layout.document.forms['file_upload'].target = "";
	  	//alert("postIt(): action: "+layout.document.forms['file_upload'].action + ", rewriteTarget: "+rewriteTarget+", target: "+layout.document.forms['file_upload'].target);
		  
	  	//layout.document.getElementById("file").value = layout.document.getElementById("file1").value;
		layout.document.forms['file_upload'].target = "upload_iframe";
	  	var uid = layout.document.getElementById("uid").value;
	  	top.xajax_vConvert_registerResource(uid, filename, sid); 
	  	//alert(layout.document.getElementById("remoteId").value+", target: "+layout.document.forms['file_upload'].target);
	  	
	  	//if (layout.document.getElementById("remoteId").value != 0)
	  	jsUpload(layout.document.getElementById("file1"));
	  	top.xajax_vConvert_fileUploaded(filename); 
  	//else (alert("error while registering temp resource")); 
  	//layout.document.forms['file_upload'].submit();
	}	else {
	  	layout.document.forms['file_upload'].submit();
	  	linksArr=getElementsByAttribute(layout.document.getElementById("file_list"), "a","id");
	  	for(var i=0; i<linksArr.length; i++){
	  		var upmsg = layout.document.createElement("span");
	  		upmsg.className="upi";
	  		upmsg.innerHTML="-uploading";
	  		linksArr[i].parentNode.appendChild(upmsg); //add upload indicator
	  		linksArr[i].parentNode.removeChild(linksArr[i]); //remove delete link
	  	}
	  	getProgress(news_id);
	}
}
/* This function is called when user selects file in file dialog */
function jsUpload(upload_field)
{
    if (!upload_field || upload_field == undefined) upload_field = layout.document.getElementById('file1');
    //alert("jsUpload(): in action, upload_field: "+upload_field); 
    // this is just an example of checking file extensions
    // if you do not need extension checking, remove 
    // everything down to line
    // upload_field.form.submit();

    var re_text = /\.wmv|\.avi|\.mpeg|\.mpg|\.mov|\.hdmov|\.mp4/i;
    var filename = upload_field.value;

    /* Checking file type */
    if (filename.search(re_text) == -1)
    {
        alert("File has wrong extension.");
        upload_field.form.reset();
        return false;
    }
    
    upload_field.form.submit();
    //layout.document.getElementById('upload_status').value = "uploading file...";
    layout.document.getElementById('moreinfo1').innerHTML = "uploading file...";
    upload_field.disabled = true;
    return true;
}
// CALL THE XAJAX UPLOAD HANDLER.
function getProgress(news_id){
  //alert("getProgress(): frameSet: " + frameSet);
	if(frameSet){
		var subtype =0;
		//alert(count+'goingback'+sid);
		var type = layout.document.getElementById("utype").value;
		var uid = layout.document.getElementById("uid").value;
		if(!news_id) var news_id = layout.document.getElementById("news_id").value;
		//alert(type+"_"+uid); 
		if (type == uploadDoc) subtype = layout.document.getElementById("st").value;
		//else subtype = 0;  
		top.xajax_uploadHandler(sid,count,type,subtype,uid,news_id);
		count+=1;		
	} else {
		top.xajax_uploadHandler(sid,-1,0,0,0);  // CANCELLED BY USER
	}
}

// ADD FILE TO THE LIST OF FILES TO BE UPLOADED AND DISPLAY FILENAME IN A LIST.
function addFileInput(elem, news_id) {
    //alert("addFileInput()");
    var filetypes = ""; 
    var uploadtype = layout.document.getElementById('utype').value;
    var news_id = layout.document.getElementById('news_id').value;
    //alert("uploadtype: "+uploadtype+", videofiletypes: "+videofiletypes+", picfiletypes: "+picfiletypes+", globals: "+uploadVideo+uploadPic+uploadDoc); 
    switch (uploadtype){
      case uploadVTrailer:
      case uploadNewsVideo:
      case uploadCategoryVideo:
      case uploadWwwVideo:
      case extChatStartVideo:
      case welcomeVideoMail:
      case uploadVideo: filetypes = videofiletypes; break;

      case uploadPic: 
      case uploadBanner: 
      case uploadNewsImg: 
      case uploadVThumb:
      case uploadStarPhoto:
      case uploadScreenshot:
      case uploadSiteSmiles:
      case uploadTvPlaylistPic:
      case uploadTvPlaylistLogo:
      case uploadCategoryImage:
      case uploadCategoryInnerImage:
      case uploadSeoPagesImage:
      case uploadDoc: filetypes = picfiletypes; break;  

      case uploadNewsArchives: filetypes = archivefiletypes; break;
      case uploadPlayerLogo: filetypes="png"; break;    
      case uploadSiteFavicon: filetypes="ico"; break;    
      case uploadDocumentExample: filetypes = docfiletypes; break; 
      case uploadSiteSelImages: filetypes="gif"; break;
    	case uploadMailFiles: filetypes = mailfiletypes; break; 
    }
    //alert(filetypes); 
    //alert(maxNumFiles + "_" + filecount); 
		if (maxNumFiles==filecount) {
			layout.document.getElementById("okstatus").style.display="block";
			layout.document.getElementById("okstatus").className="warning";
			layout.document.getElementById("okstatus").innerHTML="<b>Maximum number of  files is "+maxNumFiles+".</b><br />Please remove a file using before attempting to add another."
			f=layout.document.getElementById("file"+(numfiles+1));
			f.parentNode.removeChild(f);
		} else {
			if ( elem != false)
				{
				numfiles+=1;
					filepath = elem.value.split("\\");
					filename = filepath[filepath.length-1];
					// CHECK FOR APPROPRIATE EXTENSIONS,
					var customServerExt = " ,"+vConvertExt; //" ,avi,3gp,mpeg,mpg,wmv,mov,mp4,hdmov,"; 
					var tstCustom = 0;
					if (filetypes != "") {
						extensionpath = filename.split(".");
						extension = extensionpath[extensionpath.length-1];
						//ftypes=","+filetypes.toLowerCase()+",";
						ftypes=","+filetypes.toLowerCase()+",";
						
						tst=ftypes.indexOf(","+extension.toLowerCase()+",");
						
						if ( (extMode==1&&(tst==-1)) || (extMode==0&&(tst>=0)) ){ 
								if (extMode==0){
								  layout.document.getElementById("okstatus").innerHTML="<b>Invalid filetype for &#8220;"+filename+"&#8221;. </b>";
								} else {
								  layout.document.getElementById("okstatus").innerHTML="<b>Invalid filetype for &#8220;"+filename+"&#8221;. </b><br />Allowed file types include only "+filetypes+".";
								}
							addfail=true;
							}
  			  	//checking type, if video, but not flv - upload to server-convertor
  			  	/*
  			  	tstCustom = customServerExt.indexOf(","+extension.toLowerCase()+",");
  			  	if (tstCustom > 0) {
  			  	  cgiPath=vConvert; 
  			  	  rewriteTarget="this"; 
  			  	}
  			  	*/
  			  	//testing file extensions
            //if (confirm("Cancel target: "+rewriteTarget+", type: "+extension+", tstCustom: "+tstCustom+", filetypes: "+filetypes+", cgiPath: "+cgiPath)) addfail=true;
					} //CLOSE if (filetypes
					// CHECK FOR DUPE FILENAMES
						linksArr=getElementsByAttribute(layout.document.getElementById("file_list"), "span","id");
						 for(var i=0; i<linksArr.length; i++){
							if (linksArr[i].id==filename) {
								addfail=true;
								layout.document.getElementById("okstatus").innerHTML="<b>Cannot add file &#8220;"+filename+"&#8221;.</b><br /> A file with that name was already added to the list.";
							}
						 }
					if (addfail){
						layout.document.getElementById("okstatus").style.display="block";
						layout.document.getElementById("okstatus").className="warning";
						filesInList=checkForChild(layout.document.getElementById("file_list"));
						if(filesInList<1) layout.document.getElementById("uldSubmit").disabled = true;
						numfiles=numfiles-1;
						addfail=false;
						return false;
					} else {
						elem.style.display="none";
						var newNode = layout.document.createElement("li");
						layout.document.getElementById("file_list").appendChild(newNode);
						newNode.innerHTML ="<span id="+filename+">"+filename+"</span> <a id='del"+numfiles+"' name='del"+numfiles+"' href='javascript:;' onclick='delFile(this,"+numfiles+")' class='delete_link'>[x]</a>";
						layout.document.getElementById("okstatus").style.display="none";
						if (maxNumFiles>1) layout.document.getElementById("moreinfo2").style.display="block";
						layout.document.getElementById("uldSubmit").disabled = false;
						filecount+=1;
					}
				}
		}
			var newNode = layout.document.createElement("input");
			newNode.name="file"+eval(numfiles+1);
			newNode.id="file"+eval(numfiles+1);
			newNode.size="30";
			newNode.onchange=function(){addFileInput(this, news_id);}
			newNode.type="file";
			layout.document.getElementById("file_inputs").appendChild(newNode);
			if (autoFirst&&elem!=false) {postIt(news_id);}
}

//DELETES A FILE ELEMENT FROM VIEW, AND ITS HIDDEN FORM COUNTERPART.
function delFile (node,filenum){
  alert("delFile()");
	f=layout.document.getElementById("file"+filenum);
	node.parentNode.parentNode.removeChild(node.parentNode);
	if(f.parentNode.removeChild(f)) {
		filecount=filecount-1;
	}
	layout.document.getElementById("okstatus").style.display="none";
	filesInList=checkForChild(layout.document.getElementById("file_list"));
	if(filesInList<1) layout.document.getElementById("uldSubmit").disabled = true;
}

//REMOVES ALL CHILDREN FROM A NODE
function bastardChild(node){
  //alert("bastardChild()");
  while (node.childNodes.length){
    node.removeChild(node.childNodes[0]);
  }
}

//CHECK FOR EXISTENSE OF IMMEDIATE (1ST LEVEL) CHILD NODES AND RETURN NUMBER OF FOUND
function checkForChild(node){
  //alert("checkForChild()");
	var numnodes=0;
  while (numnodes<node.childNodes.length){
    numnodes+=1;
  }
	return numnodes;
}
	

// BUILD THE IFRAME TO SUBMIT INTO
function makeIFrame(news_id) {
  //alert("makeIFrame()");
  if(cgiDebug!=1){ 
    d_nested = layout.document.getElementById("destination"+frameAdv);
    if (d_nested) throwaway_node = layout.document.forms['file_upload'].removeChild(d_nested);
  } 
  frameAdv+=1;
  var iframe = layout.document.createElement("iframe");
  iframe.setAttribute("src", blankHTMLPath);
  iframe.setAttribute("id","destination"+frameAdv);
  iframe.setAttribute("name","destination"+frameAdv);
   if(cgiDebug==1) { 
	  iframe.setAttribute("height", "150px");
	  iframe.setAttribute("width", "100%");
	  iframe.setAttribute("frameBorder", "1");
  } else { 
	  iframe.setAttribute("height", "0");
	  iframe.setAttribute("width", "0");
	  iframe.setAttribute("frameBorder", "0");
   } 
  if(layout.document.forms['file_upload'].appendChild(iframe)) frameSet=true;
  layout.document.forms['file_upload'].target="destination"+frameAdv;

  // FIX FOR IE.  ATTRIBUTES FOR NAME AND ID ARE NOT SET USING DOM.
  window.frames[window.frames.length-1].id=iframe.id;
  window.frames[window.frames.length-1].name=iframe.name;
  // END FIX
} 

// CANCEL BUTTON ACTION
function cancel() {
  //alert("cancel()");
	if(frameSet){
	  frameSet=false;
	}
	return false;
}

/*
    Copyright Robert Nyman, http://www.robertnyman.com
    Free to use if this text is included
*/
function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){
    //alert("getElementsByAttribute()");
    var arrElements = (strTagName == "*" && layout.document.all)? layout.document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
    var oCurrent;
    var oAttribute;
    for(var i=0; i<arrElements.length; i++){
      oCurrent = arrElements[i];
      oAttribute = oCurrent.getAttribute(strAttributeName);
      if(typeof oAttribute == "string" && oAttribute.length > 0){
        if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
            arrReturnElements.push(oCurrent);
        }
      }
    }
    return arrReturnElements;
}

