if (typeof PortHypeHelper == "undefined" || !PortHypeHelper)
{
	var PortHypeHelper = {};
}

(function () {


PortHypeHelper.logger = PortHypeHelper.logger || {
	trace: function() {},
	debug: function() {},
	info: function() {},
	warn: function() {},
	error: function() {},
	fatal: function() {},
	isDebugEnabled: function()
	{
		return false;
	}
};


PortHypeHelper.util = PortHypeHelper.util || {};
PortHypeHelper.util.constants = PortHypeHelper.util.constants || {};


/**
 * Returns the value of the specified query string parameter.
 *
 * @method getQueryStringParameter
 * @param {string} paramName Name of the parameter we want to look up.
 * @param {string} queryString Optional URL to look at. If not specified,
 *     this method uses the URL in the address bar.
 * @return {string} The value of the specified parameter, or null.
 * @static
 */
PortHypeHelper.util.getQueryStringParameter = function(paramName, url)
{
    var params = this.getQueryStringParameters(url);
    
    if (paramName in params)
    {
       return params[paramName];
    }

    return null;
};

/**
 * Returns the query string parameters as an object literal.
 * Parameters appearing more than once are returned an an array.
 * This method has been extracted from the YUI Browser History Manager.
 * It can be used here without the overhead of the History JavaScript include.
 *
 * @method getQueryStringParameters
 * @param queryString {string} Optional URL to look at. If not specified,
 *     this method uses the URL in the address bar.
 * @return {object} Object literal containing QueryString parameters as name/value pairs
 * @static
 */
PortHypeHelper.util.getQueryStringParameters = function(url)
{
   var i, len, idx, queryString, params, tokens, name, value, objParams;

   url = url || window.location.href;

   idx = url.indexOf("?");
   queryString = idx >= 0 ? url.substr(idx + 1) : url;

   // Remove the hash if any
   idx = queryString.lastIndexOf("#");
   queryString = idx >= 0 ? queryString.substr(0, idx) : queryString;

   params = queryString.split("&");

   objParams = {};

   for (i = 0, len = params.length; i < len; i++)
   {
      tokens = params[i].split("=");
      if (tokens.length >= 2)
      {
         name = tokens[0];
         value = window.unescape(tokens[1]);
         switch (typeof objParams[name])
         {
            case "undefined":
               objParams[name] = value;
               break;

            case "string":
               objParams[name] = [objParams[name]].concat(value);
               break;

            case "object":
               objParams[name] = objParams[name].concat(value);
               break;
         }
      }
   }

   return objParams;
};




PortHypeHelper.util.constants.regExpBeginning = /^\s+/;
PortHypeHelper.util.constants.regExpEnd       = /\s+$/;

/**
 * Supprime les espaces inutiles en début et fin de la chaîne passée en paramètre.
 */
PortHypeHelper.util.trim = function (aString) {
	return (ltrim(rtrim(aString)));
}

/**
 * Supprime les espaces inutiles en début de la chaîne passée en paramètre.
 */
PortHypeHelper.util.ltrim = function (aString) {
	return aString.replace(PortHypeHelper.util.constants.regExpBeginning, "");
}

/**
 * Supprime les espaces inutiles en fin de la chaîne passée en paramètre.
 */
PortHypeHelper.util.rtrim = function (aString) {
	return aString.replace(PortHypeHelper.util.constants.regExpEnd, "");
} 



/**
 * Encode au format ISO9075 une chaine.
 */
PortHypeHelper.util.encodeISO9075 = function (str)
{
	var len = str.length;
	var newstr = "";

	for (var i = 0; i < len; i++)
	{
		var c = str.charAt(i);
		var ci = str.charCodeAt(i);

		if (i == 0)
		{
			/* On encode ce qui n'est pas A-Z, a-z */
			if ((ci >= 65 && ci <= 90) ||    // A-Z
					(ci >= 97 && ci <= 122))     // a-z                 
			{
				newstr = newstr + c;
			}
			else
			{
				// On encode en hexa et on le met sur 4 positions
				newstr = newstr + "x" + toHexa(ci, 4) + "_";
			}
		}
		else
		{
			/* On encode ce qui n'est pas A-Z, a-z, 0-9, - et _ */
			if ((ci >= 65 && ci <= 90) ||    // A-Z
					(ci >= 97 && ci <= 122) ||   // a-z
					(ci >= 48 && ci <= 57) ||    // 0-9
					ci == 45 || ci == 95)        // - et _
			{
				newstr = newstr + c;
			}
			else
			{
				// On encode en hexa et on le met sur 4 positions
				newstr = newstr + "x" + toHexa(ci, 4) + "_";
			}
		}
	}

	return newstr;
}


/**
 * Renvoie le code hexa d'un caractère en 'len' position.
 */
PortHypeHelper.util.toHexa = function (c, len)
{
	if (len == null || len == undefined)
		len = 4;

	var h = c.toString(16);
	while (h.length < len)
	{
		h = "0" + h;
	}

	return h;
}









PortHypeHelper.util.postUrl = function (url, data, target)
{
	PortHypeHelper.logger.debug("POST url [" + url + "] to target [" + target + "]");
	
	// Create temporary form
	var form = document.createElement("form");
	form.setAttribute("method", "POST");
	form.setAttribute("action", url);
	form.setAttribute("style", "display: none;");
	
	// Post form to this popup
	if (target != undefined && target != null)
		form.setAttribute("target", target);
	
	
	for (var key in data)
	{
		if ((typeof data[key]) == "string")
		{
			var elem = document.createElement("input");
			elem.setAttribute("type", "hidden");
			elem.setAttribute("name", key);
			elem.setAttribute("value", data[key]);
			
			form.appendChild(elem);
			
			PortHypeHelper.logger.debug(key + " - " + data[key]);
		}
		else if ((typeof data[key]) == "object")
		{
			for (var i in data[key])
			{
				var elem = document.createElement("input");
				elem.setAttribute("type", "hidden");
				elem.setAttribute("name", key);
				elem.setAttribute("value", data[key][i]);
				
				form.appendChild(elem);
				
				PortHypeHelper.logger.debug(key + " - " + data[key][i]);
			}
		}
	}
	

	document.body.appendChild(form);
	form.submit();
	document.body.removeChild(form);
}



})();

