/*	SWFObject v2.2 <http://code.google.com/p/swfobject/>
	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();


/**
 * @class AjaxJSON
 * @copyright ® 2009
 * @author Alessandro Ministeri
 */


var AjaxJSON=function(initObj){
    var nativeXMLHttp=(typeof XMLHttpRequest!="undefined");
    var nativeActiveX=(typeof ActiveXObject!="undefined");
    var XMLHTTPVers=["MSXML2.XmlHttp.6.0","MSXML2.XmlHttp.3.0"];
    var responseObj={};
    function createRequest(action){
        if(nativeXMLHttp){
            return new XMLHttpRequest()
        }else if(nativeActiveX){
            for(var i=0;i<XMLHTTPVers.length;i++){
                try{
                    return new ActiveXObject(XMLHTTPVers[i])
                }catch(e){}
            }
        }
        responseObj.error="Ajax is not supported on this browser";
        Listener.dispatch(this,"onerror",responseObj);
        return false
    }

    this.send=function(id,caller,method,literal,async,action){
        var oXMLHttp=createRequest(action);
        var responseObj=new Object();
        responseObj.action=action;
        responseObj.XMLHttp=oXMLHttp;
        responseObj.caller=caller;
        var request=new String();
        request="id="+id+"&action="+action+"&json="+encodeURIComponent(Json.toString(literal));
        Listener.dispatch(this,"onuninitialized",responseObj);
        if(async!==true&&async!==false){
            responseObj.error="Request type ("+async+") is not allowed";
            Listener.dispatch(this,"onerror",responseObj);
            return
        }switch(method.toLowerCase()){
            case"get":
                oXMLHttp.open(method,initObj.server+"?"+request,async);
                request=null;
                break;
            case"post":
                oXMLHttp.open(method,initObj.server,async);
                oXMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                break;
            default:
                responseObj.error="Method ("+method+") not allowed for this request";
                Listener.dispatch(this,"onerror",responseObj);
                return
        }
        var oThis=this;
		var cbkCalled=false;
        onreadystatechange = oXMLHttp.onreadystatechange=function(){
            switch(oXMLHttp.readyState){
                case 1:
                    Listener.dispatch(oThis,"onloading",responseObj);
                    break;
                case 2:
                    Listener.dispatch(oThis,"onloaded",responseObj);
                    break;
                case 3:
                    Listener.dispatch(oThis,"oninteractive",responseObj);
                    break;
                case 4:
                    if(oXMLHttp.status==200){
                        try{
                            responseObj=Json.evaluate(oXMLHttp.responseText);
                            responseObj.XMLHttp=oXMLHttp;
                            responseObj.caller=caller;
                        }catch(e){
                            responseObj.error=oXMLHttp.statusText;
                            responseObj.caller=caller;Listener.dispatch(oThis,"onerror",responseObj);
                        }
                        Listener.dispatch(oThis,"oncomplete",responseObj)
                    }else{
                        responseObj.error=oXMLHttp.statusText;
                        responseObj.caller=caller;
                        Listener.dispatch(oThis,"onerror",responseObj)
                    }
            }
			cbkCalled=true;
        };
        oXMLHttp.send(request);
        if(async===false){
			if(!cbkCalled){
				onreadystatechange();
			}
            return Json.evaluate(oXMLHttp.responseText);
        }
    };
    this.initServer=function(path){
        initObj.server=path
    };

    this.upload=function(id,caller,method,literal,file,filters,action){
        var request=new URLRequest(initObj.server,{
            id:id,
            action:action,
            json:Json.toString(literal),
            cookie:document.cookie
        },method);
        file.ajaxObject=this;
        file.request=request;
        file.onselect=function(event){
            var responseObj={};
            responseObj.caller=caller;
            responseObj.event=event;
            responseObj.file=this;
            responseObj.action=this.request.data.action;
            Listener.dispatch(this.ajaxObject,"onselect",responseObj)
        };
        file.onopen=function(event){
            var responseObj={};
            responseObj.caller=caller;
            responseObj.event=event;
            responseObj.file=this;
            responseObj.action=this.request.data.action;
            Listener.dispatch(this.ajaxObject,"onopen",responseObj)
        };
        file.onprogress=function(event){
            var responseObj={};
            responseObj.caller=caller;
            responseObj.event=event;
            responseObj.file=this;
            responseObj.action=this.request.data.action;
            Listener.dispatch(this.ajaxObject,"onprogress",responseObj)
        };
        file.onuploadcompletedata=function(event){
            var responseObj=Json.evaluate(event.data);
            responseObj.caller=caller;
            responseObj.event=event;
            responseObj.file=this;
            Listener.dispatch(this.ajaxObject,"onuploadcompletedata",responseObj)
        };
        file.onioerror=function(event){
            var responseObj={};
            responseObj.caller=caller;
            responseObj.event=event;
            responseObj.file=this;
            responseObj.action=this.request.data.action;
            Listener.dispatch(this.ajaxObject,"onuploaderror",responseObj)
        };
        file.onhttperror=function(event){
            var responseObj={};
            responseObj.caller=caller;
            responseObj.event=event;
            responseObj.file=this;
            responseObj.action=this.request.data.action;
            Listener.dispatch(this.ajaxObject,"onuploaderror",responseObj)
        };
        file.onsecurityerror=function(event){
            var responseObj={};
            responseObj.caller=caller;
            responseObj.event=event;
            responseObj.file=this;
            responseObj.action=this.request.data.action;
            Listener.dispatch(this.ajaxObject,"onuploaderror",responseObj)
        };
        file.oncancel=function(event){
            var responseObj={};
            responseObj.caller=caller;
            responseObj.event=event;
            responseObj.file=this;
            responseObj.action=this.request.data.action;
            Listener.dispatch(this.ajaxObject,"oncancel",responseObj)
        }
    }
};

/**
 * @class Listener
 * @copyright ® 2009
 * @author Alessandro Ministeri
 */
var Listener=function(obj){
    if(!this.constructor.listeners){
        this.constructor.listeners=new Array()
        }this.constructor.listeners.push({
        "object":obj,
        "listener":this
    });this.constructor.dispatch=function(processedObj,eventHandler){
        var obj,listener;for(var a in this.listeners){
            obj=this.listeners[a].object;listener=this.listeners[a].listener;if(processedObj===obj&&listener[eventHandler]){
                if(typeof arguments[2]!='undefined')listener[eventHandler](arguments[2]);else listener[eventHandler]()
                    }
            }
        }
    };

var FileReferenceJS=function(container){

	this.flashObj=false;

	this.embedFlash = function (id,container,type){

		var flashvars = {
			myid : id
		}

		var params = {
			allowScriptAccess : 'sameDomain'
		};

		var attributes = {
			id : "FileReferenceJSBridge"+id,
			name : "FileReferenceJSBridge",
			allowScriptAccess : 'sameDomain'
		};

		var alternateContentDiv = new Element('div',{'id' : 'FileReferenceJSDiv'+id});

		alternateContentDiv.injectInside(container);

		var filename = "";
		var width = 40;
		var height = 25;

		switch(type){
			case "standard":
				filename = "FileReferenceJSBridge.swf";
				width = 40;
				height = 25;
				break;
			case "firefox" :
				filename = "FileReferenceJSBridge_firefox.swf";
				width = 92;
				height = 34;
				break;

		}

		swfobject.embedSWF
		(
			getRoot()+"libs/JPA/SWF/"+filename,
			"FileReferenceJSDiv"+id,
			width,
			height,
			"9.0.0",
			false,
			flashvars,
			params,
			attributes
		);

	}

	this.constructor.init=function(){

		var oThis=this;

		this.openConnection=function(id){

			getFileFromID(id).flashObj = swfobject.getObjectById("FileReferenceJSBridge"+id);
			return true

		}

		var getFileFromID=function(id){

			for(var a in oThis.FileReferenceList){
				if(oThis.FileReferenceList[a].id==id){
					return oThis.FileReferenceList[a].FileReferenceJS;
				}
			}
			return null;
		}

		var setAttributes=function(file,id){

			var item=getFileFromID(id);

			item.name = (file.name) ? file.name : new String();
			item.creationDate = (file.creationDate) ? file.creationDate : new Date();
			item.creator = (file.creator) ? file.creator : new String();
			item.modificationDate = (file.modificationDate) ? file.modificationDate : new Date();
			item.size = (file.size) ? file.size : 0;
			item.type = (file.type) ? file.type : new String();

		}

		this.onbrowse=function(id){

			if(getFileFromID(id).onbrowse){
				getFileFromID(id).onbrowse();
			}

		}

		this.onselect=function(file,id,event){

			setAttributes(file,id);

			event.target=event.currentTarget=file;

			if(getFileFromID(id).onselect){
				getFileFromID(id).onselect(event);
			}

		}

		this.onuploadcompletedata=function(file,id,event){

			setAttributes(file,id);

			event.target=event.currentTarget=file;

			event.data=event.text=event.data.slice(event.data.indexOf('{'));

			if(getFileFromID(id).onuploadcompletedata){
				getFileFromID(id).onuploadcompletedata(event);
			}

		}

		this.oncancel=function(file,id,event){

			setAttributes(file,id);

			event.target=event.currentTarget=file;

			if(getFileFromID(id).oncancel){
				getFileFromID(id).oncancel(event);
			}

		}

		this.onopen=function(file,id,event){

			setAttributes(file,id);

			event.target=event.currentTarget=file;

			if(getFileFromID(id).onopen){
				getFileFromID(id).onopen(event);
			}

		}

		this.onprogress=function(file,id,event){

			setAttributes(file,id);

			event.target=event.currentTarget=file;

			if(getFileFromID(id).onprogress){
				getFileFromID(id).onprogress(event);
			}

		}

		this.oncomplete=function(file,id,event){

			setAttributes(file,id);

			event.target=event.currentTarget=file;

			if(getFileFromID(id).oncomplete){
				getFileFromID(id).oncomplete(event);
			}

		}

		this.onhttperror=function(file,id,event){

			setAttributes(file,id);

			event.target=event.currentTarget=file;

			if(getFileFromID(id).onhttperror){
				getFileFromID(id).onhttperror(event);
			}

		}

		this.onioerror=function(file,id,event){

			setAttributes(file,id);

			event.target=event.currentTarget=file;

			if(getFileFromID(id).onioerror){
				getFileFromID(id).onioerror(event);
			}

		}

		this.onsecurityerror=function(file,id,event){

			setAttributes(file,id);

			event.target=file;

			if(getFileFromID(id).onsecurityerror){
				getFileFromID(id).onsecurityerror(event);
			}

		}

	}

	if(!this.constructor.FileReferenceList){
		this.constructor.FileReferenceList=new Array();
	}

	var id=this.constructor.FileReferenceList.length+1;

	var oThis=this;
	this.constructor.init(id,this);

	var type = (typeof arguments[1]!= 'undefined') ? arguments[1] : "standard";

	this.embedFlash(id,container,type);

	this.constructor.FileReferenceList.push({"id":id,"FileReferenceJS":this});

	this.name=new String();
	this.creationDate=new Date();
	this.creator=new String();
	this.modificationDate=new Date();
	this.size=0;
	this.type=new String();

	var callFlash=function(request){

		var error;

		switch(request.action){

			case 'browse':
				error=oThis.flashObj.browse(id,request.FileFilterArray);
				break;

			case 'upload':
				error=oThis.flashObj.upload(id,request.URLRequestObject,request.uploadDataFieldName,request.testUpload);
				break;

			case 'download':
				error=oThis.flashObj.download(id,request.URLRequestObject,request.defaultFileName);
				break;

			case 'cancel':
				error=oThis.flashObj.cancel(id);
				break;
			case 'newFile':
				error=oThis.flashObj.newFile(id);
				break;
		}

		if(error!=null){

			var flashError = new Error();

			flashError.number=error.errorID;
			flashError.message=error.message;
			flashError.name=name=error.name;

			alert("FileReferenceJS\n"+new Date()+"\n\n"+flashError.message);

		}

	}

	var waitConnection=function(request){

		wait=function(){

//			Se l'oggetto flash non � ancora disponibile si richiama
//			ricorsivamente la funzione attravero setTimeout fino a
//			quando non viene instanziato.

			if(!oThis.flashObj){
				window.setTimeout(wait,5);
			}else{
				callFlash(request);
			}
		}
		wait();
	}

	this.browse=function(FileFilterArray){

		var request={
			action : 'browse',
			FileFilterArray : ((FileFilterArray) ? FileFilterArray : new Array())
		}
		waitConnection(request);

	}

	this.cancel=function(){

		var request={
			action : 'cancel'
		}
		waitConnection(request);

	}

	this.upload=function(URLRequestObject,uploadDataFieldName,testUpload){

		var request={
			action : 'upload',
			URLRequestObject : URLRequestObject,
			uploadDataFieldName : ((uploadDataFieldName) ? uploadDataFieldName : 'Filedata'),
			testUpload : ((testUpload) ? testUpload : false)
		}
		waitConnection(request);

	}

	this.download=function(URLRequestObject,defaultFileName){

		var request={
			action : 'download',
			URLRequestObject : URLRequestObject,
			defaultFileName : ((defaultFileName) ? defaultFileName : null)
		}
		waitConnection(request);

	}
}

var URLRequest=function
(
	url,
	data,
	method
)
{
	this.url = (url) ? url : "";
	this.data = (data) ? data : new Object();
	this.method = (method) ? method : "POST";
}

var FileFilter=function
(
	description,
	extensions
)
{
	this.description = (description) ? description : "";
	this.extensions = (extensions) ? extensions : "";
}
/**
 * @function getRoot
 * @copyright ® 2009
 * @author Alessandro Ministeri
 */
function getRoot(){
	return "/";
};

/**
 * @class Popup
 * @copyright ® 2009
 * @author Alessandro Ministeri
 */
function Popup(options){

	var id;
	var width;
	var height;
	var left;
	var top;
	var zIndex;

	var popupBar;
	var popupBarElement;
	var barHeight;
	var barColor;
	var titleImg;

	var contentEl;
	var popupElement;
	var popupContent;
	var background;
	var centered;
	var draggable;
	var created=false;
	var firstCentered=false;

	var speed;

	var preloadURL=getRoot()+'GIFs/commons/ajax-loader_black.gif';

	var modale;

	var oThis=this;

	var drag;

	var opening=false;
	var opened=false;
	var modeOpened=false;
	var locked=false;


	var initialize=function(options){

		var d=new Date();
		var ms=d.getTime();
		id=MD5(String(ms));

		width=(options.width) ? options.width : 70;
		height=(options.height) ? options.height : 70;
		left=(options.left) ? options.left : 0;
		top=(options.top) ? options.top : 0;

		popupBar=(options.popupBar) ? options.popupBar : '';
		barHeight=(options.barHeight) ? options.barHeight : 15;
		barColor=(options.barColor) ? options.barColor : '#FFFFFF',
		title=(options.title) ? options.title : '';

		centered=(options.centered) ? options.centered : false;
		draggable=(options.draggable) ? options.draggable : false;

		speed=(options.speed) ? options.speed : 400;
		zIndex=(options.zIndex) ? options.zIndex : 1000;
		modeColor=(options.modeColor) ? options.modeColor : '#000000';

		modale=(options.modale)?options.modale:false;

		return this;

	};

	if(!this.constructor.popups){
		this.constructor.popups=new Array();
		this.constructor.active=null;
	}
//	Aggiungo la popup corrente all'array statico popups
	this.constructor.popups.push(this);


	this.constructor.setZIndexes=function(popup){
		if(this.constructor.active!=popup){
			if(this.constructor.active!=null){
				this.constructor.active.setZIndex(zIndex);
				modeOpened=false;
			}

			if(popup.getModale()){
				popup.setZIndex(zIndex+4);
			}else{
				popup.setZIndex(zIndex+1);
			}

			this.constructor.active=popup;
		}
	};

	this.constructor.removePopup=function(popup){
//		Ricerco nell'array statico popups la popup da eliminare
//		e la elimino.
//		Successivamente la elimino dalla memoria.
		for(var a in this.popups){
			if(this.popups[a]==popup){
				if(this.popups[a].getModale()){
					this.modaleOpened=false;
				}
				this.popups.splice(a,1);
			}
		}

		delete popup;
	}

	this.centre=function(){
		var winSize=((window.ie6)?$(document.body).getSize():$(window).getSize());
		var popupSize={};

		if(typeof contentEl !='undefined'){
			try{
				popupSize.size.x=contentEl.getProperty('width');
			}catch(e){
				popupSize=contentEl.getSize();
			}
		}else{
			try{
				popupSize.size.x=contentEl.getProperty('height');
			}catch(e){
				popupSize=popupContent.getSize();
			}
		}

		popupElement.setStyles({
			'left':((winSize.size.x-popupSize.size.x)/2+winSize.scroll.x)+"px",
			'top':((winSize.size.y-(popupSize.size.y+((popupBar)?barHeight:0)))/2+winSize.scroll.y)+"px"
		});

	}

	var createPopup=function(){

		if(modale){
			if(typeof Modale!='undefined'){
				Modale.init();
			}
			oThis.constructor.modaleOpened=true;
		}
		popupElement=new Element('div').setProperties({'id':id});

		popupElement.setStyles({
			'width' : width,
			'height':height+((popupBar)?barHeight:0),
			'position' : 'absolute',
			'left' : left,
			'top' : top,
			'z-index' : zIndex,
			'opacity' : 0,
			'overflow':'visible'
		});

		popupElement.injectInside(document.body);

		popupElement.addEvent('mousedown',function(){
			oThis.constructor.setZIndexes(oThis);
		});

//		Se � attiva la barra del titolo
		if(popupBar){

			popupBarElement=new Element('div').injectInside(popupElement).setStyles({

				'position':'absolute',
				'height':barHeight,
				'width':width,
				'margin':0,
				'padding':0,
				'background-color':barColor

			});

			var bar = new Element('div').injectInside(popupBarElement).setProperties({
				'class':'popupBar'
			});

			var titleSpan = new Element('span').injectInside(bar).setProperty('class','popupTitle');

			if(title!=''){
				titleSpan.setText(title);
			}

			var closeSpan=new Element('a').injectInside(bar).setProperties({
				'class':'popupClose'
			});
			closeSpan.addEvent('click',function(){oThis.close()});

		}

		popupContent=new Element('div').injectInside(popupElement).setProperties({
			'class':'popupContent'
		});

		popupContent.setStyles({
			'height' : (height)?height:'auto',
			'width' : (width)?width:'auto',
			'position':'absolute',
			'top':(popupBar)?barHeight:0,
			'background' : '#000000',// url('+preloadURL+') center no-repeat'
			'overflow':'visible'
		});

//		Se � abilitato il centramento lo gestisco
		if(centered && !draggable){

//			$(window).addEvent('resize',oThis.centre).addEvent('scroll',oThis.centre).$(window).addEvent('change',oThis.centre);

		}

		created=true;
	}

	this.setHandlerDrag=function(newHandler){

		var handler=(typeof newHandler!='undefined')?newHandler:((popupBar)?popupBarElement:popupElement);

		drag=new Drag.Move($(id),{handle: handler});

		handler.setStyles({
			'cursor':'move'
		});

		handler.addEvent('mouseover',function(){

			var sizeMenu=(typeof contentEl !='undefined')?contentEl.getSize():popupContent.getSize();

			var sizeWin=((window.ie6)?$(document.body).getSize():$(window).getSize());

			var scrollY=sizeWin.size.y-(sizeMenu.size.y+((popupBar)?barHeight:0))+sizeWin.scroll.y;
			var scrollX=sizeWin.size.x-sizeMenu.size.x;

			drag.options.limit = {'x':[sizeWin.scroll.x,(scrollX>0)?scrollX:0],'y':[sizeWin.scroll.y,(scrollY>0)?scrollY:sizeWin.scroll.y]};

		});

		handler.addEvent('mousedown',function(){
			oThis.constructor.setZIndexes(oThis);
		});

		handler.addEvent('click',function(){
			drag.stop();
		});
	}

	this.close=function(){

//		Se � stato definito un listener propago l'evento 'onclose'
		if(typeof Listener.dispatch == 'function')
		{
			Listener.dispatch(this,"onclose",popupContent);
		}

		if(modale){
			Modale.closeMode();
		}
		$(id).remove();
		this.setCreated(false);

		this.constructor.removePopup(this);

	}

	this.lock=function(type){

		if((typeof type != 'undefined')?type:true){

			if(!locked && opened){

				var popupSize=(typeof contentEl !='undefined')?contentEl.getSize():popupContent.getSize();

				var preloader=new Element('div',{
					'styles':{
						'position':'absolute',
						'width' : popupSize.size.x,
						'height' : popupSize.size.y,
						'top':0,
						'left':0,
						'background' : '#000000 url('+preloadURL+') center no-repeat',
						'opacity':0.4
					},
					'class':'preloaderLock'
				});

				preloader.injectInside(popupContent);
				locked=true;

//				Se � stato definito un listener propago l'evento 'onlocked'
				if(typeof Listener.dispatch == 'function')
				{
					setTimeout(function(){
						Listener.dispatch(oThis,"onlocked",popupContent.firstChild);
					},100);
				}

			}else if(!opened){
				this.setContent("<div style='height:"+height+"px;width:"+width+"px'></div>",.0);
			}

		}else if(locked){
			$E('.preloaderLock',popupContent).remove();
			locked=false;
		}
	}

	initialize(options);

	createPopup();

	this.getZIndex=function(){
		return zIndex;
	}

	this.setZIndex=function(dept){
		popupElement.setStyle('z-index',dept);
	}

	this.getModale=function(){
		return modale;
	}

	this.getCreated=function(){
		return created;
	}

	this.setCreated=function(value){
		created=value;
	}

	this.getContent=function(){
		return contentEl;
	}

	this.setContent=function(el,op){

		var opacity=(typeof op != 'undefined')?op:1;

		opened=true;

		if(created && !opening){

			this.constructor.setZIndexes(this);

			if(modale && modeOpened===false){

//				Apriamo la finestra modale e assegnamo i riferimenti
//				alla popup e all'elemento per gestirli nell'evento 'onComplete'

				var mode=Modale.openMode(zIndex+3,modeColor);
				mode.modeFX.popup=this;
				mode.modeFX.openPopup=function(){
					modeOpened=true;
					this.popup.setContent(el,opacity);
				}

//				Aggiungo all'evento onComplete la funzione openPopup

				mode.modeFX.addEvent('onComplete',mode.modeFX.openPopup);

//				Rimuovo dall'evento onComplete la funzione openPopup

				mode.modeFX.addEvent('onComplete',function(){
					this.removeEvent('onComplete',this.openPopup)
				});

			}else{

				opening=true;
				this.lock();

				var popup=this;
				var box=new Element('div');

				box.setStyles({
					'position' : 'absolute',
					'z-index' : 0,
					'opacity' : 0,
					'top':0,
					'left':0,
					'overflow':'hidden'
				});

//				Se la popup deve essere centrata solo la prima volta
				if(centered && !firstCentered){
					oThis.centre();
				}

				popupElement.setStyle('opacity',1);

//				Se il contenuto della popup � una stringa
//				si effettua un setHTML altrimenti si inserisce l'elemento
//				dom in input nel box contenuto

				if(typeof el!='string'){
//					Se � stato definito un listener propago l'evento 'onsetcontent'
					if(typeof Listener.dispatch == 'function')
					{
						Listener.dispatch(this,"onsetcontent",el);
					}
					contentEl=new Element(el);
				}else{
					contentEl=new Element('div');
					contentEl.setHTML(el);
//					Se � stato definito un listener propago l'evento 'onsetcontent'
					if(typeof Listener.dispatch == 'function')
					{
						Listener.dispatch(this,"onsetcontent",contentEl);
					}
				}

				var imgs=new Array();
				if(contentEl.tagName=='IMG' || contentEl.tagName=='img'){
					imgs.push(contentEl);
				}else{
					imgs=$ES('img',contentEl);
				}
				this.imgsLenght=imgs.length;

				this.newContent=function(){

					box.setStyles({
						'width' : contentEl.getSize().size.x,
						'height' : contentEl.getSize().size.y
					});

					var boxSize=box.getSize();
					var oldSize=popupContent.getSize();

					var popupContentFX = new Fx.Styles(popupContent, {duration: speed, transition: Fx.Transitions.sineInOut});

					if(popupBar){
						var popupBarFX = new Fx.Styles(popupBarElement, {duration: speed, transition: Fx.Transitions.sineInOut});
					}
//					if(centered){
						var popupElementFX = new Fx.Styles(popupElement, {duration: speed, transition: Fx.Transitions.sineInOut});
//					}

					popupContentFX.addEvent('onComplete',function(){

						popupElement.setStyles({
							'height': boxSize.size.y,
							'width': boxSize.size.x
						});

						popupContent.setStyles({
							'height': boxSize.size.y,
							'width': boxSize.size.x
						});
						contentEl.injectInside(popupContent);

//						Se � stato definito un listener propago l'evento 'onloaded'
						if(typeof Listener.dispatch == 'function')
						{
							Listener.dispatch(oThis,"onloaded",popupContent.firstChild);
						}

						popupContent.setStyle('opacity',opacity);

						opening=false;
						locked=false;

						box.remove();

					});

//					Se � stato definito un listener propago l'evento 'onloading'
					if(typeof Listener.dispatch == 'function')
					{
						Listener.dispatch(oThis,"onloading",popupContent.firstChild);
					}

					oldContent=new Element('div');
					popupContent.firstChild.injectInside(oldContent);

//					Se le dimensioni dei contenuti sono identiche a quelle gi� caricate
//					allora non si effettuano le transizioni, ma semplicemente si scatena
//					l'evento 'onComplete' gi� dichiarato.
					if(oldSize.size.x==boxSize.size.x && oldSize.size.y==boxSize.size.y){

						popupContent.setStyles({'opacity':0.4});
						popupContent.setHTML('');

						popupContentFX.fireEvent('onComplete');

					}else{
						popupContentFX.start({
							'height': boxSize.size.y,
							'width': boxSize.size.x
						});

						if(popupBar){
							popupBarFX.start({
								'width': boxSize.size.x
							});
						}

						popupContent.setStyles({'opacity':0.4});
						popupContent.setHTML('');

//						Se la popup � centrata e non � draggabile, oppure se � draggabile, ma � la prima
//						volta che si apre allora si eseguono le transizioni di centramento.
						if((centered && !draggable) || (centered && !firstCentered)){
							var winSize=((window.ie6)?$(document.body).getSize():$(window).getSize());
							var popupSize=boxSize;

							var top =((winSize.size.y-(popupSize.size.y+((popupBar)?barHeight:0)))/2+winSize.scroll.y);

							popupElementFX.start({
								'left':((winSize.size.x-popupSize.size.x)/2+winSize.scroll.x),
								'top':(top>0)?top:winSize.scroll.y
							});
							firstCentered=true;
						}

					}

				}

				contentEl.injectInside(box);

				box.injectInside(document.body);

				this.loaded=true;

//				Si aspetta il caricamento completo di tutte le immagini
//				prima di visualizzarle all'interno della popup.
//				Si tratta quindi a tutti gli effetti di di un preloader.
				if(this.imgsLenght>0){

					imgs.each(function(img){
						var img2=new Element('img',{
							'properties':{
								'src':img.src+dinamicID()
							},
							'styles':{
								'opacity':0,
								'display':'block',
								'top':0,
								'left':0
							}
						});
						img2.addEvent('load',function(oThis){
							this.remove();
							popup.imgsLenght--;
							if(popup.imgsLenght==0 && popup.loaded){
								popup.newContent();
							}
						});
						img2.injectInside(document.body);

					});

				}else{

					this.newContent();

				}

				return this;
			}
		}
	}
}


/**
 * @function appendElements
 * @copyright ® 2009
 * @author Alessandro Ministeri
 */
var appendElements=function(obj,root){

	obj.each(function(currentObj){

		if(typeof currentObj.el !='undefined'){

			var element=new Element(currentObj.el);

			for(var a in currentObj.props){
					element.setProperty( a, currentObj.props[a]);
			}

			for(var b in currentObj.styles){
					element.setStyle( b, currentObj.styles[b]);
			}

			element.injectInside(root);

			if(typeof currentObj.childs !='undefined'){
				appendElements(currentObj.childs,element);
			}

		}else{

			root.appendText(currentObj);

		}
	});

	return (typeof element !='undefined') ? element : false;
}


/*
 * @autor Alessandro Ministeri
 * @copyright 2010
 */
//Funzione per forzare il caricamento degli oggetti dalla cache
function dinamicID(){
	var d=new Date();
	var ms=d.getTime();
	return "?id="+MD5(String(ms));
}


/*
 * @autor Alessandro Ministeri
 * @copyright 2010
 */
//Funzione per convertire una data php in oggetto date Javascript
var convertData = function (mysqlDate){
	if(mysqlDate){
		var d=new Date();
		var ar01=mysqlDate.split(' ');
		var ar02=ar01[0].split('-');
		d.setFullYear(ar02[0],ar02[1]-1,ar02[2]);
		return d;
	}
	return false;
}


/*
 * @autor Alessandro Ministeri
 * @copyright 2010
 */
var checkDateIntersect=function(ab1,bis1,ab2,bis2){
	if(ab1<=ab2 && bis1>=ab2){
		return true;
	}
	if(ab1<=bis2 && bis1>=bis2){
		return true;
	}
	if(ab1<=ab2 && bis1>=bis2){
		return true;
	}
	if(ab1>=ab2 && bis1<=bis2){
		return true;
	}
	return false;
}


/**
 * @function Modale
 * @copyright ® 2009
 * @author Alessandro Ministeri
 */
function Modale(){}
Modale.init = function(){

	this.initialized=true;

	this.openMode=function(dept,color){

		this.modeOpened=true;

		var height=(navigator.appName=="Microsoft Internet Explorer")? ((window.ie6)?$(document.body).getSize():$(window).getSize()).size.y+'px' : '100%';
		var width=(navigator.appName=="Microsoft Internet Explorer")? ((window.ie6)?$(document.body).getSize():$(window).getSize()).size.x+'px' : '100%';

		this.mode=new Element('div');

		this.mode.setStyles({
			'width':width,
			'position':'absolute',
			'left':((window.ie6)?$(document.body).getSize():$(window).getSize()).scroll.x+"px",
			'top':((window.ie6)?$(document.body).getSize():$(window).getSize()).scroll.y+"px",
			'height': height,
			'z-index':dept,
			'opacity': 0,
			'background-color':color
		});

		this.mode.setProperty('id','mode');
		this.mode.injectInside(document.body);

		this.modeFX=new Fx.Styles('mode', {duration: 250, transition: Fx.Transitions.sineInOut});
		this.modeFX.start({
			'opacity': .8
		});

		return this;

	}

	this.closeMode=function(){
		if(this.modeOpened){
			this.modeFX=new Fx.Styles('mode', {duration: 250, transition: Fx.Transitions.sineInOut});
			this.modeFX.start({
				'opacity': 0
			});

			this.modeFX.addEvent("onComplete",function(){
				this.element.remove();
			});
			return this;
		}
	}

	this.handleResize=function(){
		if(this.modeOpened){
			this.mode.setStyle('left',((window.ie6)?$(document.body).getSize():$(window).getSize()).scroll.x+'px');
			this.mode.setStyle('top',((window.ie6)?$(document.body).getSize():$(window).getSize()).scroll.y+'px');
			if(navigator.appName=="Microsoft Internet Explorer"){
				this.mode.setStyle('height',((window.ie6)?$(document.body).getSize():$(window).getSize()).size.y+'px');
				this.mode.setStyle('width',((window.ie6)?$(document.body).getSize():$(window).getSize()).size.x+'px');
			}
		}
	}

	this.modeOpened=false;
	$(window).addEvent('resize',function(evt){Modale.handleResize(evt)}).addEvent('scroll',function(evt){Modale.handleResize(evt)}).$(window).addEvent('change',function(evt){Modale.handleResize(evt)});
};
/**
 * @class Listener
 * @copyright ® 2009
 * @author Alessandro Ministeri
 */
var Listener=function(obj){
	if(!this.constructor.listeners){
		this.constructor.listeners=new Array();
	}
	this.constructor.listeners.push({"object":obj,"listener":this});
	this.constructor.dispatch=function(processedObj,eventHandler){
		var obj,listener;
		for(var a in this.listeners){
			obj=this.listeners[a].object;
			listener=this.listeners[a].listener;
			if(processedObj===obj&&listener[eventHandler]){
				if(typeof arguments[2]!='undefined'){
					listener[eventHandler](arguments[2]);
				}else{
					listener[eventHandler]();
				}
			}
		}
	}
};

var MD5 = function (string) {

    function RotateLeft(lValue, iShiftBits) {
        return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
    };

    function AddUnsigned(lX,lY) {
        var lX4,lY4,lX8,lY8,lResult;
        lX8 = (lX & 0x80000000);
        lY8 = (lY & 0x80000000);
        lX4 = (lX & 0x40000000);
        lY4 = (lY & 0x40000000);
        lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
        if (lX4 & lY4) {
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
        }
        if (lX4 | lY4) {
            if (lResult & 0x40000000) {
                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
        } else {
            return (lResult ^ lX8 ^ lY8);
        }
     };

    function F(x,y,z) {return (x & y) | ((~x) & z);};
    function G(x,y,z) {return (x & z) | (y & (~z));};
    function H(x,y,z) {return (x ^ y ^ z);};
    function I(x,y,z) {return (y ^ (x | (~z)));};

    function FF(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function GG(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function HH(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function II(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function ConvertToWordArray(string) {
        var lWordCount;
        var lMessageLength = string.length;
        var lNumberOfWords_temp1=lMessageLength + 8;
        var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
        var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
        var lWordArray=Array(lNumberOfWords-1);
        var lBytePosition = 0;
        var lByteCount = 0;
        while ( lByteCount < lMessageLength ) {
            lWordCount = (lByteCount-(lByteCount % 4))/4;
            lBytePosition = (lByteCount % 4)*8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
            lByteCount++;
        }
        lWordCount = (lByteCount-(lByteCount % 4))/4;
        lBytePosition = (lByteCount % 4)*8;
        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
        lWordArray[lNumberOfWords-2] = lMessageLength<<3;
        lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
        return lWordArray;
    };

    function WordToHex(lValue) {
        var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
        for (lCount = 0;lCount<=3;lCount++) {
            lByte = (lValue>>>(lCount*8)) & 255;
            WordToHexValue_temp = "0" + lByte.toString(16);
            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
        }
        return WordToHexValue;
    };

    function Utf8Encode(string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    };

    var x=Array();
    var k,AA,BB,CC,DD,a,b,c,d;
    var S11=7, S12=12, S13=17, S14=22;
    var S21=5, S22=9 , S23=14, S24=20;
    var S31=4, S32=11, S33=16, S34=23;
    var S41=6, S42=10, S43=15, S44=21;

    string = Utf8Encode(string);

    x = ConvertToWordArray(string);

    a = 0x67452301;b = 0xEFCDAB89;c = 0x98BADCFE;d = 0x10325476;

    for (k=0;k<x.length;k+=16) {
        AA=a;BB=b;CC=c;DD=d;
        a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
        d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
        c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
        b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
        a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
        d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
        c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
        b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
        a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
        d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
        c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
        b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
        a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
        d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
        c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
        b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
        a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
        d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
        c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
        b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
        a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
        d=GG(d,a,b,c,x[k+10],S22,0x2441453);
        c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
        b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
        a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
        d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
        c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
        b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
        a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
        d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
        c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
        b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
        a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
        d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
        c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
        b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
        a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
        d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
        c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
        b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
        a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
        d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
        c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
        b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
        a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
        d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
        c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
        b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
        a=II(a,b,c,d,x[k+0], S41,0xF4292244);
        d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
        c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
        b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
        a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
        d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
        c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
        b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
        a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
        d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
        c=II(c,d,a,b,x[k+6], S43,0xA3014314);
        b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
        a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
        d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
        c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
        b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
        a=AddUnsigned(a,AA);
        b=AddUnsigned(b,BB);
        c=AddUnsigned(c,CC);
        d=AddUnsigned(d,DD);
    }

    var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

    return temp.toLowerCase();
}
/*
 * @autor Alessandro Ministeri
 * @copyright 2010
 */
var lock = function(contentEl,type){

	var myRoot = (typeof root != 'undefined') ? root : "";

	if(type){

		if(!contentEl.__locked){

			var cont = contentEl.getFirst();

			var size = contentEl.getSize();

			var contSize = cont.getSize();

			var preloader=new Element('div',{
				'styles':{
					'position':'relative',
					'width' : size.size.x,
					'height' : size.size.y,
					'top':  0,
					'left': 0,
					'background' : '#00CCFF url('+myRoot+'GIFs/commons/ajax-loader_blu.gif) center no-repeat',
					'opacity':0.80
				},
				'class':'preloaderLock'
			});

			preloader.setStyle ("opacity",0);
			preloader.injectInside(contentEl);

			try{
				var topPositionPreloader = preloader.getClientRects()[0].top;
				var topPositionContent = contentEl.getClientRects()[0].top;

				var diff = topPositionContent - topPositionPreloader;

				if(diff!==0){
					preloader.setStyle ("top",diff);
				
				}
				preloader.setStyle ("opacity",1);
				contentEl.__locked=true;

			}catch(e){}

		}

	}else if(contentEl.__locked){
		$E('.preloaderLock',contentEl).remove();
		contentEl.__locked=false;
	}
}

/*
 * @autor Alessandro Ministeri
 * @copyright 2010
 */
function include(src, callback)
{
	/*
	 * Create the <script> element
	 */
	var e=document.createElement('script');
	var head=document.getElementsByTagName('head')[0];
	e.setAttribute('type','text/javascript');
	e.setAttribute('src',src);

	if (typeof callback != 'undefined')
    {
        if(e.addEventListener){
            e.addEventListener("load",callback,true);
        }
        else
        {
			var myCallback = function(evt){
				if(evt.srcElement.readyState=="loaded") callback();
			}
            e.attachEvent("onreadystatechange",myCallback);
        }
    }
	head.appendChild(e);
}

/*
 * @autor Alessandro Ministeri
 * @copyright 2010
 */
var addTag = function(tag){
	var input = $('search');
	input.value += tag;
}

function getQSParam(ParamName) {
	// Memorizzo tutta la QueryString in una variabile
	QS=window.location.toString();
	// Posizione di inizio della variabile richiesta
	var indSta=QS.indexOf(ParamName);
	// Se la variabile passata non esiste o il parametro è vuoto, restituisco null
	if (indSta==-1 || ParamName=="") return null;
	// Posizione finale, determinata da una eventuale &amp; che serve per concatenare più variabili
	var indEnd=QS.indexOf('&amp;',indSta);
	// Se non c'è una &amp;, il punto di fine è la fine della QueryString
	if (indEnd==-1) indEnd=QS.length;
	// Ottengo il solore valore del parametro, ripulito dalle sequenze di escape
	var valore = unescape(QS.substring(indSta+ParamName.length+1,indEnd));
	// Restituisco il valore associato al parametro 'ParamName'
	return valore;
}

