//--------------------------------------------------------------------------
// utils.js
//--------------------------------------------------------------------------
// Javascript amb funcions utils per qualsevol pàgina
//--------------------------------------------------------------------------

//<![CDATA[

	// Creem un objecte UTILS_ABERTIS i ho definim tot a dins per no omplir
	// el namespace global amb moltes definicions i funcions. Així mantenim
	// el function closure i només posem UTILS_ABERTIS al namespace global.
	UTILS_ABERTIS = {};

	// Funció que retorna posa la data i l'hora actual amb el format "dd/mm/yyyy hh:mi(:ss)".
	// @param segons Si es passa un 1, l'hora serà amb segons. Si no, no els inclourà
	// @return Un string amb la data actual
	UTILS_ABERTIS.dataActual = function( segons /*1 o 0*/) {
		var horaActual = new Date();
		var hora = horaActual.getHours();
		var min = horaActual.getMinutes();
		var sec = horaActual.getSeconds();
		var dia = horaActual.getDate();
		var mes = horaActual.getMonth() + 1;	// + 1 per que comença a 0!
		var any = horaActual.getFullYear();
		if ( hora <= 9 ) hora = "0" + hora;
		if ( min <=9 ) min = "0" + min;
		if ( sec <=9 ) sec = "0" + sec;
		var dataActualitzacio;
		if ( segons == 1 )
			dataActualitzacio = hora + ":" + min + ":" + sec + " " + dia + "/" + mes + "/" + any;
		else
			dataActualitzacio = hora + ":" + min + " " + dia + "/" + mes + "/" + any;
		return dataActualitzacio;
	}
	
	// Funció que retorna la data actual del servidor en un Date de javascript
	UTILS_ABERTIS.getServerDate = function () {
		//alert( "UTILS_ABERTIS.getServerDate" );
		return UTILS_ABERTIS_PHP.getServerTime();
		//return new Date();
	}
	
	// Funció que parseja una data en format YYYY-MM-DDTHH:MI:SS.SSS+HH:MI al format
	// "estándar" HH:MI DD-MM-YYYY
	UTILS_ABERTIS.parseData = function( strData ) {
		var d = UTILS_ABERTIS.strData2Date( strData, 1 );
		if ( d != null ) {
			hora = d.getHours();
			minut = d.getMinutes();
			if ( hora <= 9 ) hora = "0" + hora;
			if ( minut <=9 ) minut = "0" + minut;
			var parsedData = hora + ":" + minut + " " + d.getDate() + "-" + (d.getMonth()+1) + "-" + d.getFullYear();
			return parsedData;
		}
		else {
			return "";
		}
	}

	// Funció que parseja una data en format YYYY-MM-DDTHH:MI:SS.SSS+HH:MI i la retorna com a Date de javascript
	// @param strData Un sttring amb la data en el format YYYY-MM-DDTHH:MI:SS.SSS+HH:MI
	// @param mes0 Paràmetre que fem servir per indicar que el mes esc omença a contar per 0 i que no s'ha tingut en compte en la cadena de text passada. Si passem un 1 en aquesta variable, descontarem 1 a la variable mes
	// @return un Date de javascript o null si no e spot parsejar correctament la cadena d'entrada
	UTILS_ABERTIS.strData2Date = function( strData, mes0 ) {
		// Comprovem que ens passen una cadena correcte
		if ( strData == null )
			return null;
		if ( strData.length == 0 )
			return null;

		var any = strData.substring(0,4);
		var mes = strData.substring(5,7);
		// Si el mes comença a contar amb 0 (mes0==1) i no es té en conte a la data
		// (ie: passem un 4 x dir Abril quan haurai de ser 3 per Abril), descontem 1
		if ( mes0 == 1 ) {
			mes = mes - 1;
		}
		var dia = strData.substring(8,10);
		var hora = strData.substring(11,13);
		var minut = strData.substring(14,16);
		var segons = strData.substring(17,19);
		var milisegons = strData.substring(20,23);
		var gmt = strData.substring(24,26);
		//var horaGmt = UTILS_ABERTIS.getHoraGmt( hora, gmt );
		var horaGmt = parseInt(hora,10) + parseInt(gmt,10);
		var d = new Date(parseInt(any,10), parseInt(mes,10), parseInt(dia,10), horaGmt, parseInt(minut,10), parseInt(segons,10), parseInt(milisegons,10));
		/*
		// DEBUG. TREURE!!!!!!
		if ( mes0 == 1 ) {
			alert("Estem a strData2Date" + 
						"\n strData=" + strData +
						"\n mes0=" + mes0 +
						"\n any=" + any +
						"\n mes=" + mes +
						"\n dia=" + dia +
						"\n hora=" + hora +
						"\n minut=" + minut +
						"\n segons=" + segons +
						"\n milisegons=" + milisegons +
						"\n gmt=" + gmt +
						"\n horaGmt=" + horaGmt +
						"\n parseInt(hora) + parseInt(gmt) =" + ( parseInt(hora) + parseInt(gmt) ) +
						"\n parseInt(hora,10) + parseInt(gmt,10) =" + ( parseInt(hora,10) + parseInt(gmt,10) ) +
						"\n parseInt(any)=" + parseInt(any) +
						"\n parseInt(mes)=" + parseInt(mes) +
						"\n parseInt(dia)=" + parseInt(dia) +
						"\n horaGmt=" + horaGmt +
						"\n parseInt(minut)=" + parseInt(minut) +
						"\n parseInt(segons)=" + parseInt(segons) +
						"\n parseInt(milisegons)=" + parseInt(milisegons) +
						"\n d=" + d );
		}
		*/
		return d;
	}
	
	UTILS_ABERTIS.getHoraGmt = function( strHora, strGmt ) {
// DEBUG. TREURE!!!!!!!!!
//		// Si parsegem "08", falla i dóna 0 enlloc d 8!!!!!!!1 Però "07" va bé!!!!!!????????
//		var hora = parseInt( strHora );
//		var gmt = parseInt( strGmt );
//		var horaGmt = hora + gmt;
//		alert("Estem a getHoraGmt" +
//					"\n strHora=" + strHora + " hora=" + hora +
//					"\n strGmt=" + strGmt + " gmt=" + gmt +
//					"\n horaGmt=" + horaGmt );
//		return horaGmt;

		if ( strHora.length == 2 ) {
			if ( strHora.substring(0,1) == "0" ) {
				hora = parseInt( strHora.substring(1,2) );
			}
			else {
				hora = parseInt( strHora );
			}
		}
		else {
			hora = parseInt( strHora );
		}

		if ( strGmt.length == 2 ) {
			if ( strGmt.substring(0,1) == "0" ) {
				gmt = parseInt( strGmt.substring(1,2) );
			}
			else {
				gmt = parseInt( strGmt );
			}
		}
		else {
			gmt = parseInt( strGmt );
		}

		var horaGmt = hora + gmt;
		
		// DEBUG. TREURE!!!!!!!!!
		//alert("Estem a getHoraGmt" +
		//			"\n strHora=" + strHora + " hora=" + hora +
		//			"\n strGmt=" + strGmt + " gmt=" + gmt +
		//			"\n horaGmt=" + horaGmt );

		return horaGmt;
	}


	UTILS_ABERTIS.utf8_encode = function( string ) { 
		// http://kevin.vanzonneveld.net 
		// +   original by: Webtoolkit.info (http://www.webtoolkit.info/) 
		// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
		// +   improved by: sowberry 
		// +    tweaked by: Jack 
		// +   bugfixed by: Onno Marsman 
		// +   improved by: Yves Sucaet 
		// +   bugfixed by: Onno Marsman 
		// *     example 1: utf8_encode('Kevin van Zonneveld'); 
		// *     returns 1: 'Kevin van Zonneveld' 

		string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n"); 

		var utftext = ""; 
		var start, end; 
		var stringl = 0; 

		start = end = 0; 
		stringl = string.length; 
		for (var n = 0; n < stringl; n++) { 
			var c1 = string.charCodeAt(n); 
			var enc = null; 

			if (c1 < 128) { 
				end++; 
			} else if((c1 > 127) && (c1 < 2048)) { 
				//alert( "CHAR > 127. CHAR: " + string.charAt(n) + " CODI: " + c1 );
				enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128); 
			} else { 
				//alert( "CHAR > 2048. CHAR: " + string.charAt(n) + " CODI: " + c1 );
				enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128); 
			} 
			if (enc != null) { 
				if (end > start) { 
					utftext += string.substring(start, end); 
				} 
				utftext += enc; 
				start = end = n+1; 
			} 
		} 

		if (end > start) { 
			utftext += string.substring(start, string.length); 
		} 

			return utftext; 
	}
	
	
	// public method for url decoding
	UTILS_ABERTIS.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;
	}
	
	//Get cookie routine by Shelley Powers 
	UTILS_ABERTIS.getCookie = function (Name) {
		var search = Name + "="
		var returnvalue = "";
		if (document.cookie.length > 0) {
			offset = document.cookie.indexOf(search)
			// if cookie exists
			if (offset != -1) { 
				offset += search.length
				// set index of beginning of value
				end = document.cookie.indexOf(";", offset);
				// set index of end of cookie value
				if (end == -1) end = document.cookie.length;
					returnvalue=unescape(document.cookie.substring(offset, end))
			}
		}
		return returnvalue;
	}
	
	// Funció que realitza una espera activa (bloquejant cpu i navegador!!!!) dels milisegosn passats.
	// Com a màxim espera 500 miliSegons!
	// @param mSec Milisegons que volem esperar. Si és > 500, esperarem 500. Si és < 0, no esperarem res.
	UTILS_ABERTIS.sleep = function (mSec) {
		if ( mSec > 500 )
			mSec = 500;
		if ( mSec < 0 )
			mSec = 0;
		var start = new Date().getTime();
    while (new Date().getTime() < start + mSec);
	}
	


//]]>
