/**
 * Global singleton ICZ for utility function
 *
 * @copyright	Copyright(c) 2005-2006, IC Zones
 * @author		Guillaume Lacroix
 * @since		2007,09,6
 * @package		JavaScript
 *
**/
var ICZ = (function(){
	return{
		/**
		 * return the customer id
		 *
		 * @author		Guillaume Lacroix
		 * @since		2007,09,6
		**/
		getCustId: function(){
			var custId = location.search.substr( location.search.indexOf( 'id' ) );
			return custId.indexOf( '&' ) > - 1 	? 
				custId.substring( custId.indexOf( '=' ) + 1, custId.indexOf( '&' ) )	: 
				custId.substr( custId.indexOf( '=' ) + 1 );
		},
		/**
		 * force to download a file
		 *
		 * @copyright	Copyright(c) 2005-2006, IC Zones
		 * @author		Guillaume Lacroix
		 * @since		2007,09,6
		 * @package		JavaScript
		 *
		 * @params params.link       link of the file
		 * @params params.module     name of the module
		 * @params params.idObj      id
		**/
		forceDownload: function( params ){
			var downloadFrame = document.createElement('iframe');//build iframe
			//setup some style
			downloadFrame.style.display = "none";
			downloadFrame.style.position = "absolute";
			//prepare the iframe src
			var iframeSrc =  location.protocol +'//'+ location.hostname + '/source/frontend/logClick/logClick.php';
			//first get the customer id
			params.id = this.getCustId();
			//return the right separator
			var linkSep = function(){
				linkSep = function(){ return '&'; };
				return '?';
			};
			for( var varName in params ){ //loop to add all params
				iframeSrc += linkSep() + varName + '=' + params[varName];
			}
			downloadFrame.src = iframeSrc; //apply src
			document.getElementsByTagName( 'body' )[0].appendChild( downloadFrame ); //append iframe to dom
		},
		url:{
			// public method for url encoding
			encode: function (string) {
				return escape(this._utf8_encode(string));
			},
			
			// public method for url decoding
			decode: function (string) {
				return this._utf8_decode(unescape(string));
			},
			
			// private method for UTF-8 encoding
			_utf8_encode: function (string) {
				string = string.replace(/\r\n/g,"\n");
				var utftext = "";
				
				for (var n = 0; n < string.length; n++) {
					var c = string.charCodeAt(n);
					
					if (c < 128) {
						utftext += String.fromCharCode(c);
					}
					else if((c > 127) && (c < 2048)) {
						utftext += String.fromCharCode((c >> 6) | 192);
						utftext += String.fromCharCode((c & 63) | 128);
					}
					else {
						utftext += String.fromCharCode((c >> 12) | 224);
						utftext += String.fromCharCode(((c >> 6) & 63) | 128);
						utftext += String.fromCharCode((c & 63) | 128);
					}
				
				}
				
				return utftext;
			},
			
			// private method for UTF-8 decoding
			_utf8_decode: function (utftext) {
				var string = "";
				var i = 0;
				var c = c1 = c2 = 0;
				
				while ( i < utftext.length ) {
				
				c = utftext.charCodeAt(i);
				
				if (c < 128) {
					string += String.fromCharCode(c);
					i++;
				}
				else if((c > 191) && (c < 224)) {
					c2 = utftext.charCodeAt(i+1);
					string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
					i += 2;
				}
				else {
					c2 = utftext.charCodeAt(i+1);
					c3 = utftext.charCodeAt(i+2);
					string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
					i += 3;
				}
				
			}
			
			return string;
			}
		}
	};
})();

