function CTranslate(objName,ghUri,langs,selLang,selDom,progress){
    this.max=32;
	this.objName=objName;
    this.ghUri=ghUri;
    this.langs=langs;
	this.selLang=$(selLang);
	this.selDom=$(selDom);
    this.progress=$(progress);
    
	this.selLangChanged();
	this.selLang.attachEvent('onchange',Util.CreateDelegate(this,this.selLangChanged));
}
CTranslate.prototype={
	Run:function(){
		this.showProgress(true);
		this.d=mainFrame.frmTgt.contentWindow.document;
		this.RequestId=-1;
	    
		setTimeout(this.objName+".GetNextTranslation();",10);
	},
	GetNextTranslation:function(){
		this.RequestId++;
		this.x=new XMLHttpRequest;
		if(this.x.overrideMimeType) {
		  this.x.overrideMimeType("text/xml")
		}
		this.x.onreadystatechange=Util.CreateDelegate(this,this.GetNextTranlationCallBack);
	    
		this.x.open("POST",this.ghUri,true);
		this.x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	   
		var a=this.GetRequestBody();
		if(!a){
			this.showProgress(false);
			return;
		}

		this.x.send(a)
	},
	GetRequestBody:function(){
		var sb = new Sys.StringBuilder();
	    
		sb.append("lng=");
		sb.append(this.selLang.value);
		sb.append("&dom=");
		sb.append(this.selDom.value);
	    
		var c=0;
		var i=0;
		while(i<this.max){
		  e=this.getElement(this.RequestId,i++);
		  if(!e)continue;
		  sb.append("&src=");
		  sb.append(encodeURIComponent(e.innerHTML));
		  c++;
		}
		if(!c)return null;
	    
		return sb.toString();
	},
	GetNextTranlationCallBack:function(){
		if(this.x.readyState==4)
			if(this.x.status==200)
				this.beginProcessTranslateResponse();
			else
				this.reportError();
	},
	reportError:function(){
		this.showProgress(false);

		var sb = new Sys.StringBuilder();

		sb.appendLine(this.x.statusText);
		sb.appendLine(this.x.responseText);

		alert(sb);
	},
	beginProcessTranslateResponse:function(){
		if(this.x.responseXML==null)return;
		var x=this.x.responseXML;
		x.preserveWhiteSpace=true;
	    
		var destWords=x.getElementsByTagName("string");
		var i2=0;
		for(i=0;i<destWords.length;i++){
			while(!(b=this.getElement(this.RequestId,i2++)));
	        
			try{
				b.innerHTML=destWords[i].text;
			}
			catch(e){}
		}

		setTimeout(this.objName+".GetNextTranslation();",10);
	},
	getElement:function(s,i){
		try{
			return this.d.getElementById("TR_"+s+"_"+i);
		}
		catch(e){return null;}
	},
    selLangChanged:function(){
        var i=this.selLang.selectedIndex;
        if(i<0){
            this.selLang.selectedIndex=0;
            return;
        }
        var s=this.selLang.options[i].innerText;
        var a=s.split(" - ");
        $("lbWebSrc").innerText=a[0];
        $("lbWebTgt").innerText=a[1];
        
        var domains=this.langs[this.selLang.value];

        this.selDom.innerHTML="";
        for(var value in domains){
            var option = document.createElement("option");
            this.selDom.options.add(option);
            option.text = domains[value];
            option.value = value;  
        }
    },
    showProgress:function(v){
		if(v){
			this.progress.className="";
			this.selLang.disabled=true;
			this.selDom.disabled=true;
		}
		else{
			this.progress.className="hidden";
			this.selLang.disabled=false;
			this.selDom.disabled=false;
		}
    }
}
