// =============================================================
//
// Copyright (c) 2000-2003 GE Smallworld. All Rights Reserved.
//
// =============================================================

function Message() {
	/*	This is the primary container for Messages to the SIAS Server.
   		An instance of this object is created then Requests and Transforms are
   		created and populated. 
   	      
      	Parameters: none
      	Return: none
   */ 

	this._transforms = new Transforms();
	this._requests = new Requests();
	this._url = new Url();
	this._target = new Target();
	//this.targetWindow = '';

	this.registerUrlParam = Message_registerUrlParam;
	this.registerRequest = Message_registerRequest;
	this.registerTransform = Message_registerTransform;
	this.setupTarget = Message_setupTarget;
	this.getRequestVector = Message_getRequestVector;
	this.getTransformVector = Message_getTransformVector;
	this.getUrlParamVector = Message_getUrlParamVector;
	
}

/*	The following functions are member functions of Message.
	They allow access to objects and functions that are part of 
	the message object.
      
*/ 
function Message_registerUrlParam(aParamName, aParamValue) {
	this._url._params.registerParameter(aParamName,aParamValue);
}

function Message_registerRequest() {
	return this._requests.registerRequest();
}

/* 	This function provides access to the registerTransform function on Transforms
	It also sets some default parameters for html transforms. These can be changed or 
	removed if not desired, although they are needed for XSL transforms from XML to HTML
	*/
function Message_registerTransform(aStylesheet) {
	var aTransform = this._transforms.registerTransform(aStylesheet);
	aTransform.registerParam('name','xsl_transform');
	aTransform.registerParam('output_mode','xml');
	return aTransform;
}

function Message_setupTarget() {
	return this._target.setupTarget();	
}

function Message_getRequestVector() {
	return this._requests.requestVector;
}

function Message_getTransformVector() {
	return this._transforms.transformVector;
}

function Message_getUrlParamVector() {
	return this._url._params.parameterVector;
}

function Target() {
	/*	The Target object contains information about the target location of the 
		request. Its main purpose is to store the target frame, but it also allows
		a request to be spawned in a new window.
   	      
      	Parameters: none
      	Return: none
   */ 
   this.frame = null;
   this.openWindow = false;
   this.windowName = '';
   this.windowWidth = 100;
   this.windowHeight = 100;
   
   // setup methods
   this.setupTarget = Target_setupTarget;
}

function Target_setupTarget() {
	/*	Return ths target of this request.  If the target is
   		a window, then the window is first opened.
   		  
      	Parameters: none
      	Return: none
   */ 


   // setup result
   var result = null;
     
  if (this.openWindow == true) {
      openDialog('../html/start.html', 
            this.windowWidth, this.windowHeight,
          '', this.windowName);
      result = this.windowName;
   }
   else {
      result = this.frame.name;
   }
   
   return result;
}  

function Url() {
	/*	The Url object holds any global parameters which go on the URL
		or the action element of the BatchForm. 
   	      
      	Parameters: none
      	Return: none
   */ 
	
	this._params = new Parameters();
	this.anchor = '';

}

function Transforms() {
	/*	The Transforms object holds a Vector of Transform objects. 
		This allows the ability to have multiple transforms for a 
		single request.
   	      
      	Parameters: none
      	Return: none
   */ 

	this.transformVector = new Vector();
	this.registerTransform = Transforms_registerTransform;
	
}

function Transforms_registerTransform() {
	var newTransform = new Transform();
	newTransform.stylesheet = '';
	
	this.transformVector.addElement(newTransform);
	return newTransform;
}

function Requests() {
	/*	The Requests object holds a Vector of Request objects
   	      
      	Parameters: none
      	Return: none
   */ 

	this.requestVector = new Vector();
	this.registerRequest = Requests_registerRequest;
	
}

function Requests_registerRequest() {
	var newRequest = new Request();

	newRequest.name = '';
	newRequest.format = '';
	
	this.requestVector.addElement(newRequest);

	return newRequest;
	
}

function Transform() {
	/*	a Transform object has one default parameter which is 'stylesheet' 
		The user has the ability to register any other parameters using the registerParam
		member function.
   	      
      	Parameters: none
      	Return: none
   */ 

	this._params = new Parameters();
	this.stylesheet = '';
	this.stylesheetDirectoryName = 'stylesheets';
	
	this.registerParam = Transform_registerParam;
}

function Transform_registerParam(aParamName, aParamValue) {
	this._params.registerParameter(aParamName,aParamValue);
}

function Request() {
	/*	The Request object contains information about the a single request to the 
		SIAS server. Its required parameters are name and format. the registerParam 
		member function allows as many other parameters to be added to the request.
   	      
      	Parameters: none
      	Return: none
   */ 


	this._params = new Parameters();

	this.name = '';
	this.format = '';
	
	this.registerParam = Request_registerParam;
	
}

function Request_registerParam(aParamName, aParamValue) {
	this._params.registerParameter(aParamName,aParamValue);
}

function Request_registerParams(parameters) {
	this._params.registerParameters(parameters);
}



function Parameters() {
	/*	The Parameters object holds a number of Parameter objects, which are
		simple name value pairs. This allows the parameters to requests, transforms
		or any other objects to be sent to the server in any form.
   	      
      	Parameters: none
      	Return: none
   */ 

	this.parameterVector = new Vector();

	// setup methods
	this.size = Parameters_size;
	this.elementAt = Parameters_elementAt;
	this.registerParameter = Parameters_registerParameter;	
	this.registerParameters = Parameters_registerParameters;	
}

function Parameters_size(){
	return(this.parameterVector.size());
}

function Parameters_elementAt(index){
	return(this.parametersVector.elementAt(index));
}

function Parameters_registerParameter(aParamName, aParamValue) {

	var newParam = new Parameter();
	newParam.name = aParamName;
	newParam.value = aParamValue;
	
	// need to check and be sure that this. refers to the Parameters object 
	// and not this function itself
	this.parameterVector.addElement(newParam);
}

function Parameters_registerParameters(parameters) {
//	----------------------------------------------------------------------
//	This method registers the parameters specified in parameters.
//
//	Parameters:
//		parameters: parameters object that holds name-value pairs of parameters
//			to send to a server.
//	---------------------------------------------------------------------- 	
	
	// get vector of parameters
	aParamVector = parameters.parameterVector;

	// loop over pararmeters
	for(var i=0; i < aParamVector.size(); i++) {
		// get a parameter
		aParameter = aParamVector.elementAt(i);
		
		// add this to our vector
		this.parameterVector.addElement(aParameter);
	}
}

function Parameter() {
	this.name = '';
	this.value = '';
}



