/*****************************************************
 * @author mpoisson
 *****************************************************/

/**
 * @param instanceName uploader variable name, required
 */
function FileUploader(instanceName, responseHandler) {
	this.error = 0;
	this.responseHandler =  responseHandler;
	if (instanceName) this.instanceName = instanceName;
	else this.instanceName = 'up'
}

FileUploader.prototype.getElement = function (id_element) {
	return document.getElementById(id_element);
}

FileUploader.prototype._onLoadHandler = function() {
	var iframe = document.getElementById('upload-temp');
	var cross = 'javascript: ';
    cross += "window.parent." + this.instanceName + ".getElement('upload-temp-div').innerHTML = document.body.innerHTML; void(0);";
	iframe.src = cross;
	var obj = this;
	setTimeout(function() { iframe.parentNode.removeChild(iframe); }, 200);
	setTimeout(function() { obj._onFinishHandler(); }, 200);
}

FileUploader.prototype._onFinishHandler = function() {
	var div = document.getElementById('upload-temp-div');
	this.error = parseInt(div.innerHTML);
	eval(this.responseHandler + '()');
	setTimeout(function() { div.parentNode.removeChild(div); }, 100);
}

FileUploader.prototype._addEvent = function(obj, evType, handler){
    if (obj.addEventListener) obj.addEventListener(evType, handler, true);
    if (obj.attachEvent) obj.attachEvent("on"+evType, handler);
}

FileUploader.prototype.upload = function (form_id, url){

	// Gets the form where file controls are placed
	var frm = this.getElement(form_id);
	var error="";
	if(frm==null || typeof(frm)=="undefined") {
	 	 error += "The form of 1st parameter does not exists.\n";
	} else if(frm.nodeName!="FORM") {
		error += "The form of 1st parameter its not a form.\n";
	}

	if(error.length>0) {
		alert("Error in call upload:\n" + error);
		return;
	}

	//creating the temporary iframe
	var iframe = document.createElement("iframe");
	iframe.setAttribute("id","upload-temp");
	iframe.setAttribute("name","upload-temp");
	iframe.setAttribute("width","0");
	iframe.setAttribute("height","0");
	iframe.setAttribute("border","0");
	iframe.setAttribute("style","width: 0; height: 0; border: none; display: none; ");
	iframe.style.visibility = "hidden";

	//setting form properties
	frm.setAttribute("target","upload-temp");
	frm.setAttribute("action", url);
	frm.setAttribute("method", "post");
	frm.setAttribute("enctype","multipart/form-data");
	frm.setAttribute("encoding","multipart/form-data");

	var div = document.createElement("div");
	div.setAttribute("id","upload-temp-div");
	div.setAttribute("name","upload-temp-div");
	div.setAttribute("width","0");
	div.setAttribute("height","0");
	div.setAttribute("border","0");
	div.setAttribute("style","width: 0; height: 0; border: none; display: none; visibility: hidden");
	div.style.visibility = "hidden";

	 //add iframe child to form node
	frm.parentNode.appendChild(iframe);

	//add iframe child to form node
	frm.parentNode.appendChild(div);

	try {
		window.frames['upload-temp'].name="upload-temp"; //ie sucks
	} catch (e) {
		// If error happens, the naviegator is not IE
	}

	var obj = this;
	var handler = function () { obj._onLoadHandler(); }
	this._addEvent(iframe, 'load', handler);

	//send form to server
	frm.submit();

}

FileUploader.prototype.hasErrors = function (){
	return (parseInt(this.error) != 0) ;
}