function objClientServerCommunicator(strRef) {
//LOCAL FUNCTIONS
	this.ref = strRef; //refernece to the object itself... mainly used in eval functions
	this.session = new Array; //list of the communication sessions
	
	function session (id,type,targetId,strJavascript){
		this.id = id;
		this.type = type; //(postForm,getData)
		this.targetId = targetId;
		this.strJavascript = strJavascript;
		this.frameId;
		};
	
	this.startSession = function(type,targetId,strJavascript) {
		var id = this.session.length;
		this.session[id] = new session(id,type,targetId,strJavascript)
		return id;
	}

	this.endSession = function(sessionId){
		if (this.session[sessionId].type=="postFormAndgetHtml"){
				document.getElementById(this.session[sessionId].targetId).innerHTML=window.frames[this.session[sessionId].frameId].document.getElementById("idHTMLResponse").innerHTML;
				if (this.session[sessionId].strJavascript!="") {eval(this.session[sessionId].strJavascript)};
				};
		if (this.session[sessionId].type=="getData"){
				document.getElementById(this.session[sessionId].targetId).innerHTML=window.frames[this.session[sessionId].frameId].document.getElementById("idHTMLResponse").innerHTML;
				if (this.session[sessionId].strJavascript!="") {eval(this.session[sessionId].strJavascript)};
				};
//		window.frames[this.session[sessionId].frameId].removeNode(true);
	}

	this.postForm = function(strIdForm,strIdTargetResponse,strJavascript){
			//startsession
			var sessionId = this.startSession("postFormAndgetHtml",strIdTargetResponse,strJavascript)
			//first create iframe
			var objFrame = this.createSessionIframe(sessionId);
		    //clone form to IFrame
			var strHTML = "<html><body>"+document.getElementById(strIdForm).parentNode.innerHTML+"</body></html>";
			funcWriteHtmlToIframe(strHTML,objFrame);
			//bind forms
			var oFormOriginal = document.getElementById(strIdForm);
			var oFormCopy = objFrame.document.getElementById(strIdForm);
			//copy values form one form to the other 
			funcCopyForm(oFormOriginal,oFormCopy);
			//set action form 
			oFormCopy.action = oFormCopy.action + "?TPMsessionId=" + sessionId + "&TPMsessionRef="+ this.ref ; 
			//submit form
			oFormCopy.submit();
		}
	

	this.getData = function(strUrlData,strIdTargetResponse,strJavascript){
			//startsession
			var sessionId = this.startSession("getData",strIdTargetResponse,strJavascript)
			//first create iframe
			var objFrame = this.createSessionIframe(sessionId);
			objFrame.document.location.href = strUrlData + "?TPMsessionId=" + sessionId + "&TPMsessionRef="+ this.ref ; 
	}

		
	this.createSessionIframe = function(sessionId) {
		var framename = "communicationframe" + sessionId;
		this.session[sessionId].frameId = framename
		if (document.body.insertAdjacentHTML){
			document.body.insertAdjacentHTML( "beforeEnd", '<span id="SPAN' + framename + '"></span>' );
			var span = document.all( "SPAN" + framename );
			span.innerHTML = '<iframe id="' + framename + '" contextID="' + framename + '" name="' + framename + '" src="" ></iframe>';
			span.style.display = 'none'
			}
		else {
			 var span = document.createElement('SPAN');
		     span.id = "SPAN" + framename;
		     document.body.appendChild(span);
		     var iframe = document.createElement('IFRAME');
	 	     iframe.contextID = framename;
		     iframe.name = framename;
      	 span.appendChild(iframe);
				 span.style.visibility = 'hidden';
		     //span.style.display = 'none';
			}
			return window.frames[framename]
		}

			
	function funcWriteHtmlToIframe(strHTML,objFrame){
			  objFrame.document.open();
			  objFrame.document.write(strHTML);
			  objFrame.document.close();
		}

	
	function funcCopyForm(oFormOriginal,oFormCopy){
			  for(i=0;i<oFormOriginal.elements.length;i++){
				  var org = oFormOriginal.elements[i];
				  var copy = oFormCopy.elements[i];
				  var orgtag = org.tagName.toUpperCase();
				  var orgtype = org.type.toUpperCase();
				  if (orgtag=="SELECT") {copy.selectedIndex = org.selectedIndex}
				  else{ if ((orgtag=="TEXTAREA") || (orgtag=="INPUT" && (orgtype=="TEXT" || orgtype=="HIDDEN" || orgtype=="PASSWORD")) ) {copy.value = org.value}
				  		else { if (orgtag=="INPUT" && (orgtype=="RADIO" || orgtype=="CHECKBOX")) {copy.checked = org.checked}
							else { if (orgtag=="INPUT" && (orgtype=="SUBMIT" || orgtype=="RESET" || orgtype=="BUTTON")){}
								else { alert("this field: tag="+orgtag+" type:"+orgtype+" in the form is not supported bij js functions")
								}
							}
						}
				  }
			}
	}

}
