// Copyright (c) 2006 Chris Iufer & David Barshow (http://ecosmear.com/relay)
// Copyright (c) 2010 voodish (http://www.voodish.com) - all rights reserved

windowLoader = function () {
	var idList = $('idList').value.split(",");
	var it = 0;
	while(it < idList.length) {
	  new UploadManager("fileUpload_"+idList[it]);
    it+=1;
  }
}

var prevdir = 'http://www.photoproducts.co.uk/uploader_upload/complete/';

var FC = {
	URL: 'http://www.photoproducts.co.uk/relay.php',
	UPLOADURL: 'http://www.photoproducts.co.uk/cgi-bin/upload.pl'
};

var ER = {
	ajax: 'Unable to make a connection to the server'
};


QFiles = new Array();

var UploadManager = Class.create();
var listID = '';
UploadManager.prototype = {
	initialize: function(element) {
		var len = element.length;
		listID = element.substring(11, len);
		this.uploadQ = $('uploadFiles_'+listID);
		this.buttons = $('uploadbuttons_'+listID);
		this.size = 1;
		if(element) {
			this.input = $(element);
			this.id = element;
			this.input.value != '' ? this.addToQ() : null;
		}
		else this.createElement();
		this.input.onchange = this.addToQ.bind(this);
	},
	
	createElement: function() {
		this.id = 'upload'+ getRandom();
		this.input = document.createElement('input');
		this.input.type = 'file';
		this.input.name = 'file[]';
		this.input.size = this.size;
		Element.addClassName(this.input, 'fileupload');
		this.buttons.appendChild(this.input);

	},
	
	addToQ: function() {
		var ilen = this.input.id.length;
		listID = this.input.id.substring(11, ilen);
		uploadQ = $('uploadFiles_'+listID);
		clearQLast(listID);
		$('uploadQ_'+listID).style.height = "auto";
		this.QPOS = QFiles.length;
		QFiles[this.QPOS] = this;
		var reg = /(.+(\\|\/))?(.*)/;
		var results = this.input.value.match(reg);
		this.filename = results[3];
		this.row = document.createElement('tr');
		this.row.id = 'r'+getRandom();				
		this.name = document.createElement('td');
		this.name.innerHTML = '<div class="fileUp">'+this.filename+'</div>';		
		this.del = document.createElement('td');		
		this.link = document.createElement('img');
		this.link.onclick = this.clear.bind(this);
		this.link.src = removeIcon;
		this.del.appendChild(this.link);
		this.row.appendChild(this.name);
		this.row.appendChild(this.del);
		this.uploadQ.appendChild(this.row);		
		Effect.Appear('uploadSubmit_'+listID);
		$('uploadSubmit_'+listID).observe('click', sendUpload(listID));
	
	},
	
	clear: function() {
		Element.remove(this.row);
		Element.remove(this.input);
		QFiles.splice(this.QPOS, 1);
		if(QFiles.length == 0) {
			 Effect.Fade('uploadSubmit');
			 $('uploadQ_'+listID).style.height = "1px";
		}
	},
	
	remove: function() {
		Element.remove(this.row);
	}
};


function genID(){ 
	return String((new Date()).getTime()).replace(/\D/gi,'') 
}

var sessID = '';
var currentID = '';
function sendUpload(listID) {
	  currentID = listID;
	  sid = genID();
	  sessID = sid;
		var uploadDumb = FC.UPLOADURL + '?'+ sid;
		$('uploadForm_'+listID).action = uploadDumb;
		$('uploadForm_'+listID).submit();
		$('uploadSubmit_'+listID).src = uploadCancel;
 		$('uploadSubmit_'+listID).onclick = uploadStop;
    $('imageHolder_'+listID).innerHTML= '';
    $('pgsp_'+listID).innerHTML = '';
		$('pgeta_'+listID).innerHTML = '';
		$('pgpc_'+listID).innerHTML = '0%';
		Element.toggle('uploadAdd_'+listID);
		$('pgfg_'+listID).style.width = "1px";
		Effect.Appear('progress_'+listID);
		window.setTimeout(function() {uploadStatus(sid)}, 500);

}

function uploadStatus(sid) {
	 
		var params = $H({ relay: 'uploadSmart', sessID: sid});
		var ajax = new Ajax.Request(FC.URL, { onSuccess: uploadStatus_handler, method:'post', parameters: params.toQueryString(), onFailure: function() { showError(ER.ajax); } });		

}

var uc = 0;
var change = 0;
var currentsize = 0;
var destination = 0;
var pginterval = 2000; 
var refresh = 20;
var pgwidth = 180;

function createHtmlAttribute(name, value) {
   var attribute = document.createAttribute(name)
   attribute.nodeValue = value
   return attribute
}

function uploadStatus_handler(response) {
	var json_data = response.responseText; 
	eval("var jsonObject = ("+json_data+")");
	var progress = jsonObject.bindings[0];
		if(progress.uploads != 'false') {
		  var str = progress.uploads;
      var newStr = str.substring(0, str.length-1);
		  var filearray = newStr.split("|");
		  var i=0;
		  while(i < filearray.length) {
        var newimage = document.createElement('div');
        newimage.innerHTML = '<div id="newImage_'+currentID+'" style="float:left; width:320px; text-align:center; padding:20px 0 20px 0;"><a rel="lightbox" href="'+prevdir+filearray[i]+'" ><img src="'+prevdir+filearray[i]+'" class="uploading" style="padding: 2px; border: 2px #ccc solid;" width="200" /></a><br />Click Image for Preview. <br /><img class="imgDelete" src="'+deleteIcon+'" alt="delete" onclick="imageDelete('+currentID+'); window.location.reload()" /></div>';
        $('imageHolder_'+currentID).appendChild(newimage);
        $("uploadFile_"+currentID).value = filearray[i];
			  i+=1
		  }
		
		}
		
	if(progress.done == 'false') {

		window.setTimeout( function() {uploadStatus(sessID)}, 1800);
		if(FC.PG) clearInterval(FC.PG);
		
		var p =  pgwidth * progress.percent;
		$('pgfg_'+currentID).style.width = p + 'px';
		currentsize = p;

		var pixels = progress.percentSec * pgwidth;
		change = pixels / refresh;
		destination = currentsize + pixels;
		
		FC.PG = setInterval("updatePgFg()", pginterval/refresh);
		
		$('pgsp_'+currentID).innerHTML = progress.speed;
		$('pgeta_'+currentID).innerHTML = progress.secondsLeft;
		
	}	else { 
	  uploadFinish();
  }
}

function imageDelete(imgID) {
	new Effect.Fade(
    'newImage_'+imgID, {
        afterFinish: function() {
            $('newImage_'+imgID).remove();
        }
    }
);
	Effect.Appear('uploadAdd_'+imgID);

}


function updatePgFg() {
	if (currentsize < destination) {
		uc++;		
		currentsize = currentsize + change;
		if(currentsize < pgwidth) {
			$('pgpc_'+currentID).innerHTML = parseInt((currentsize/pgwidth)*100) + "%";
			$('pgfg_'+currentID).style.width = currentsize + 'px';
		}
	}
}

function uploadFinish(stop) {

		change = 0;
		currentsize = 0;
		destination = 0;
		clearInterval(FC.PG);
		if(stop) $('pgpc_'+currentID).innerHTML = "Canceled";
		else $('pgpc_'+currentID).innerHTML = "100%";
		$('uploadSubmit_'+currentID).src = uploadBtn;
		$('uploadSubmit_'+currentID).onclick = sendUpload;		
		$('uploadAdd_'+currentID).style.display = 'block';		
		$('pgfg_'+currentID).style.width = pgwidth + "px";
		Effect.Fade('progress_'+currentID);
	  if(!stop) Effect.Fade('uploadAdd_'+currentID);
		clearQ();
}

function uploadStop() {
	$('uploadiframe').src = "about:blank";
	uploadFinish(true);
}

function getRandom() { return Math.round(Math.random()*1000); }

function clearQ() {
	for(var i=0;i < QFiles.length; i++){ QFiles[i].remove(); }

	Effect.Fade('uploadSubmit_'+currentID);
	$('uploadQ_'+currentID).style.height = "28px";
	QFiles = new Array();
	
}

function clearQLast(listID) {
	for(var i=0;i < QFiles.length; i++){ QFiles[i].remove(); }

	$('uploadQ_'+listID).style.height = "28px";
	QFiles = new Array();
}

showError = function(text) {
	return false;
}
