/*
** RequestObject class
*/

function RequestObject() {
	this.Url = '';
	this.FullUrl = '';
	this.SecureFullUrl = '';
	this.Method = 'GET';
	this.QueryString = new Array();
	this.Form = new Array();
	
	function _AddQueryString(oKeyValue) {
		return lnkAddQueryString(this, oKeyValue);
	};
	
	function _AddForm(oKeyValue) {
		return lnkAddForm(this, oKeyValue);
	};
	
	this.AddQueryString = _AddQueryString;
	this.AddForm = _AddForm;
};

function lnkCreateObject(sRequestObject) {
	var oRequestObject = JSON.parse(sRequestObject);
	if (!oRequestObject) {
		oRequestObject = new RequestObject();
	};
	return oRequestObject;
};

function lnkOpen(oRequestObject, bUseSecureVersion, sTarget) {
	var sURL = '';
	
	if (!sTarget) {
		sTarget = (oRequestObject.Method == 'GET') ? '_self' : '_parent';
	};
	
	if (bUseSecureVersion) {
		sURL = oRequestObject.SecureFullUrl;
	} else {
		sURL = oRequestObject.Url;
	};
	
	if (oRequestObject.QueryString.length > 0) {
		for(iIndex = 0; iIndex < oRequestObject.QueryString.length; iIndex++) {
			sURL += (iIndex == 0) ? '?' : '&';
			sURL += oRequestObject.QueryString[iIndex].Key;
			sURL += '=';
			sURL += oRequestObject.QueryString[iIndex].Value;
		};
	};
	
	// 20061218 ddignazi
	if (isContextVisible()) {
		document.cookie = 'eFrameworkVisible=1;path=/';
	};
	sURL += (oRequestObject.QueryString.length > 0) ? '&' : '?';
	sURL += 'random=' + newTarget();
	
	if (oRequestObject.Method == 'GET') {
		
		window.open(sURL, sTarget);
		
	} else {
		
		var oContainer = jsrsContextPool[ jsrsGetContextID() ];
		var oPage = null;
		var oInput;
		
		// 20070112 ddignazi: si esta función se invoca desde index.asp la librería
		// JavaScript Remote Scripting falla al buscar el HTTP FORM que crea
		// para realizar el HTTP POST. En ese caso se utiliza el formulario auxiliar 
		// de eFramework.
		if (oContainer.container == undefined) {
		
			oPage = document.getElementById('eF');
			
			oPage.action = sURL;
			oPage.target = sTarget;
			oPage.method = 'POST';
			
			for(iIndex = 0; iIndex < oRequestObject.Form.length; iIndex++) {
				oInput = document.createElement('input');
				oInput.name = unescape(oRequestObject.Form[iIndex].Key);
				oInput.type = 'hidden';
				oInput.value = unescape(oRequestObject.Form[iIndex].UrlValue);
				oPage.appendChild(oInput);
			};
			
			oPage.submit();
			
		} else {
		
			oContainer = oContainer.container;
			
			oPage = oPage = (jsrsBrowser == 'IE' ) ? oContainer.document : oContainer.contentDocument;
			oPage.open();
			oPage.charset = "windows-1252";
			oPage.write("<html>");
			oPage.write("<body>");
			oPage.write("<form name='RequestObject' method='POST' ");
			oPage.write(" target='" + sTarget + "' ");
			oPage.write(" action='" + sURL + "'>");
			
			for(iIndex = 0; iIndex < oRequestObject.Form.length; iIndex++) {
				oPage.write("<input type='hidden' name='" + oRequestObject.Form[iIndex].Key + "' value='" + oRequestObject.Form[iIndex].Value + "'/>");
			};
			
			oPage.write("</form>");
			oPage.write("</body>");
			oPage.write("</html>");
			oPage.close();

			// 20070112 ddignazi
			if (isContextVisible()) {
				oPage.cookie = 'eFrameworkVisible=1;path=/';
			};
			
			oPage.forms['RequestObject'].submit();
		
		};
		
	};
};

/*
** RequestObjectKeyValue class
*/

function RequestObjectKeyValue(sKey, sValue) {
	this.Key = (sKey) ? sKey : '';
	this.Value = (sValue) ? sValue : '';
	// 20070112 ddignazi
	this.UrlValue = (sValue) ? escape(sValue) : '';
};

function lnkAddQueryString(oRequestObject, oKeyValue) {
	if (!oKeyValue) oKeyValue = new RequestObjectKeyValue();
	if (oRequestObject) oRequestObject.QueryString.push(oKeyValue);
	return oKeyValue;
};

function lnkRemoveQueryString(oRequestObject, iIndex) {
	var vPrevItems = new Array();
	var vNextItems = new Array();
	
	if (iIndex > 0) {
		vPrevItems = oRequestObject.QueryString.slice(0, iIndex);
	};
	if (iIndex < oRequestObject.QueryString.length - 1) {
		vNextItems = oRequestObject.QueryString.slice(iIndex + 1);
	};
	
	oRequestObject.Filters = vPrevItems.concat(vNextItems);
	
	return true;
};

function lnkAddForm(oRequestObject, oKeyValue) {
	if (!oKeyValue) oKeyValue = new RequestObjectKeyValue();
	if (oRequestObject) oRequestObject.Form.push(oKeyValue);
	return oKeyValue;
};

function lnkRemoveForm(oRequestObject, iIndex) {
	var vPrevItems = new Array();
	var vNextItems = new Array();
	
	if (iIndex > 0) {
		vPrevItems = oRequestObject.Form.slice(0, iIndex);
	};
	if (iIndex < oRequestObject.Form.length - 1) {
		vNextItems = oRequestObject.Form.slice(iIndex + 1);
	};
	
	oRequestObject.Filters = vPrevItems.concat(vNextItems);
	
	return true;
};

