var code = 1;
var userid		= null;
var useridint	= null;
var userhash	= null;

// Obté resultat de la petició remota
// ==0 : OK, !=0 : KO
function getResultCode(result) {
	return result ? result.documentElement.getElementsByTagName("code")[0].firstChild.data : -1;
}

// obté un valor del xml resposta
function retrieveValueFromXml(result, fieldName, defaultValue) {
	return result!=null && result.documentElement.getElementsByTagName(fieldName)[0]!=null ? 
		result.documentElement.getElementsByTagName(fieldName)[0].firstChild.data : defaultValue;
}

// Obté resultat de la petició remota
// pos0 : estat (==0:OK, !=0:KO); pos1 : camp 'data'; pos2 : user name (nick); pos3 : user idint


function getResultAdvanced(result) {
	var xml_result	= new Array();
	if (result!=null) {
		xml_result[0]	= retrieveValueFromXml(result, "code", -1);
		xml_result[1]	= retrieveValueFromXml(result, "data", null);
		xml_result[2]	= retrieveValueFromXml(result, "USERID", null);
		xml_result[3]	= retrieveValueFromXml(result, "USERIDINT", null);
		xml_result[4]	= retrieveValueFromXml(result, "USERHASH", null);
		code			= xml_result[0];
		userid			= xml_result[2];
		useridint		= xml_result[3];
		userhash		= xml_result[4];
	} else {
		xml_result[0]	= code;
		xml_result[1]	= null;
		xml_result[2]	= userid;
		xml_result[3]	= useridint;
		xml_result[4]	= userhash;
	}
	return xml_result;
}



function getCookie(name) {
		var dc = document.cookie;
		var prefix = name + "=";
		var begin = dc.indexOf(";" + prefix);
		if (begin == -1) {
			begin = dc.indexOf("; " + prefix);
			if (begin == -1) {
				begin = dc.indexOf(prefix);
				if (begin != 0) return null;
			} else begin += 2;
		} else {
			begin += 1;
		}
		var end = dc.indexOf(";", begin);
		if (end == -1) {
			end = dc.length;
		}
		//alert("begin " + begin + " end " + end + " dc " + dc);
		return unescape(dc.substring(begin + prefix.length, end));
}

function getXmlSerialized(xmlstring) {	
	if (document.implementation.createDocument && typeof DOMParser!='undefined') {
			return new DOMParser().parseFromString(xmlstring, "text/xml");
	} else if (typeof XMLSerializer!='undefined') {
			return new XMLSerializer().serializeToString(xmlstring);
	} else if (xmlstring.xml) {
			return xmlstring.xml;
	} else if (window.ActiveXObject) {
      var dom = new ActiveXObject("Microsoft.XMLDOM");
      dom.async="false"; 
      dom.loadXML(xmlstring);
      return dom;
  } else return null;
}

function getRoot(result) {
		var rootElement = null;
		if (result!=null && typeof (result.contentDocument)!='undefined') {//mozilla
					rootElement = result.contentDocument;					
		} else if (result!=null && typeof (result.documentElement)!='undefined') {//mozilla
					rootElement = result.documentElement;					
		} else if (result!=null && typeof (result.contentWindow)!='undefined') {//IE
					rootElement =  result.contentWindow.document.XMLDocument;
		}					
		//alert("rootElement " + rootElement);
		return rootElement;
}				
			

		
function getDateGMT(l) {
	var d = new Date();
	d.setTime(l);
	return d.toGMTString();
}
			
function CheckValidCookieUser(dbg) {
	var r = getCookie("__USERDATA__");
	//alert ("r:"+r);
	var r2 = getCookie("__USERDATA__TIMECHECK__");
	var now = new Date().getTime();
	var r2fix = ((r2==null || r2=='' || r2=='null')?0:(r2*1));
	var diff = (r2fix-now);
	var ret = (
		r!=null && r!='' && r!='null' && r.indexOf("<code>0</code>")>-1 //check that userdata found and valid
		&& (r2==null || r2=='' || r2=='null' || (diff>0)) // check cookie time period valid or null
	);			
	if (dbg) {
		ret=	"<div style='background-color:#ffffff;font-size:8px;z-index: 100000;display:block'>" +
		ret + "<br />"
		+ diff + "<br />"
		+ r2fix + " " + getDateGMT(r2fix) + "<br />"
		+ "now[" + now + " " + getDateGMT(now) + "]<br />"
		+ getCookie("_FOREIGN_SESSION_ID") + "<br />"
		+ "USERDATA[" + r + "]<br />"
		+ "</div><br />"
		;
	}
	return ret;
}			
		
var expireCheckCookieTime = 300*1000;  //expires in 5 minutes (milliseconds)  							
//var urlgatewaybase = "http://www.catradio.cat/pcatradio3/g.jsp";
var urlhome= "http://www.catradio.cat";
var urlgatewaybase = urlhome+"/pcatradio3/g.jsp";
var secureHost="secure.ccrtvi.com";
		
//Functions to encode HEX
var digitArray = new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');
function toHex(n){
    var result = ''
    var start = true;
    for (var i=32; i>0;){
        i-=4;
        var digit = (n>>i) & 0xf;
        if (!start || digit != 0){
            start = false;
            result += digitArray[digit];
        }
    }
    return (result==''?'0':result);
}

function pad(str, len, pad){
    var result = str;
    for (var i=str.length; i<len; i++){
        result = pad + result;
    }
    return result;
}

function encodeHex(str){
    var result = "";
    for (var i=0; i<str.length; i++){
        result += pad(toHex(str.charCodeAt(i)&0xff),2,'0');
    }
    return result;
}

function checkUser(xml) {
	if (location.host==secureHost && (xml==undefined || xml== null)){
		//1st call in page, var values seted by session
		if (code==0){
			updateHeaderLoginContent();
			loggedOk();
		}else{
			genericFunctionLogin(null, null); 
		}
	}else if (location.host==secureHost && xml!=null && xml!= undefined){
		getResultAdvancedFromGJsp(xml);
		if (code==0){
			updateHeaderLoginContent();
			loggedOk();
		}
		else{
			location.href= urlhome;
		}
	}
	else{
	    if (!CheckValidCookieUser()) {
	      var r = getCookie("_FOREIGN_SESSION_ID"); 
	      if (r!=null && r!='' && r!='null'  || !(document.cookie)) { 
	      	//alert("notValidCookieeee"); 
	          loadXMLDoc(urlgatewaybase+"?a=1&t="+r+new Date().getTime(),false,"Login");
	          var futdate = new Date();  //Get the current time and date
	          var expdate = futdate.getTime();  //Get the milliseconds since Jan 1, 1970
	          expdate += expireCheckCookieTime;  //expires in 5 minutes (milliseconds)       
	          var newCookie="__USERDATA__TIMECHECK__=" + expdate +"; path=/;"; //Set the new cookie values up
	          window.document.cookie=newCookie; //Write the cookie    
	      } else {
	       genericFunctionLogin(null, null);
	      }
	    } else {
	    	//alert("ValidCookie");
	      genericFunctionLogin(null, getXmlSerialized(getCookie("__USERDATA__")));
	    }
	}
}

/* -------------------------------------------------------------- */
function getResultAdvancedFromGJsp(result) {
	var xml_result	= new Array();
	var error= false;
	
	if (result!=null) {
		var xml= $.xmlDOM(result).find('doc');
		if (xml.find("code").text() == "0"){
			xml_result[0]	= 0; //code
			xml_result[1]	= xml.find('data').text();
			xml_result[2]	= xml.find('data').find('USERID').text();
			xml_result[3]	= null;
			xml_result[4]	= xml.find('data').find('USERHASH').text();
			code			= xml_result[0];
			userid			= xml_result[2];
			useridint		= xml_result[3];
			userhash		= xml_result[4];
		}
		else{
			error= true;
		}
	}
	else {
		error= true;
	}
	
	if (error){
		xml_result[0]	= -1; //code
		xml_result[1]	= null;
		xml_result[2]	= null;
		xml_result[3]	= null;
		xml_result[4]	= null;
		code			= xml_result[0];
		userid			= xml_result[2];
		useridint		= xml_result[3];
		userhash		= xml_result[4];
	}
	return xml_result;
}

//Custom login utils
function genericFunctionLogin(id, result){
	//var divToShow="";
	var arr = getResultAdvanced(result);
	var sUrlAfterLogout = document.location;
	
	if ( arr[0]==0 ) {
		updateHeaderLoginContent();
		
		loggedOk();
		$("#loginButton").css("display","block");
 		$("#loading_login").html("");
		//divToShow="Loged in:"+arr[2];
	}
	else{
		notLogged();
		//notLogged(true); //true force error
		//divToShow="Not loged in";
	}
	
	//alert(divToShow);
}

function getUserAvatar(size){
	var urlPath = (location.host==secureHost) ? "https://secure.ccrtvi.com" : urlhome;
	var mySize= (size==null)? '27x27':size;
	if (userhash != null){
		var vHash1= userhash.substring(userhash.length-1, userhash.length);
		var vHash2= userhash.substring(userhash.length-2, userhash.length-1);
		vAvatar= urlPath+"/multimedia/cr/foto_usuaris/"+vHash1+"/"+vHash2+"/usuari_"+mySize+"_"+userhash+".jpg";
	}
	else{
		vAvatar= urlPath+"/multimedia/cr/foto_usuaris/ico_usuari.jpg";
	}
	return vAvatar;
}

function updateHeaderLoginContent(){
	var vAvatar=getUserAvatar();
	//$("#divCapInfoUsuari").html('<a title="'+userid+'" href="https://secure.ccrtvi.com/su/Register?hiTarget=v3/crP07_perfil_usuari.jsp&amp;hiPortal=cr&amp;hiRegServiceId=CR_REG&amp;hiErrTarget=error.jsp&amp;hiAction=129&amp;hiServiceId=CATRADIO_BUTLLETI" class="fletxa registrat pngFix" onclick="return false;"><img alt="'+userid+'" src="'+vAvatar+'" class="avatar"/>'+userid+'</a>');
	$("#divCapInfoUsuari").html('<a title="'+userid+'" href="https://secure.ccrtvi.com/su/Register?hiTarget=crP01.jsp&amp;hiPortal=cr/v3&amp;hiRegServiceId=CR_REG&amp;hiErrTarget=error.jsp&amp;hiAction=129&amp;hiServiceId=CATRADIO_BUTLLETI" class="pngFix"><img alt="'+userid+'" src="'+vAvatar+'" class="avatar"/>'+userid+'&nbsp;</a><a title="" href="#" onclick="return false;" class="fletxa registrat pngFix">&nbsp;</a>');
								 
	addRegistratListener();	
}

/* -------------------------------------------------------------- */
// Login methods with flash comunication
		
	/**
	 * Login call powered by login.swf
	 * When the flash ends his job, calls the ASLoginCallBack with the response data
	 */
	function doLogin(formu) {
		var isIE = navigator.appName.indexOf('Microsoft') != -1;
		var flashObject= (isIE) ? 'swfLoginIE':'swfLogin';
	
		var _user= formu.user.value;
		var _pass= formu.password.value;
		
		$("#loginButton").css("display","none");
		$("#loading_login").css("display","block");
		$("#loading_login").html("<img src='/img/enviar_button_loading.gif'/>");
		
		var _loginUrl="https://secure.ccrtvi.com/su/Register?hiTarget=*.swf&hiErrTarget=*.swf&hiPortal=cr/v3&hiRetrieval=S&hiRegServiceId=CR_REG&hiServiceId=CR_REG&hiUsrField=CR_NICK&hiPwdField=PWD&hiPersist=true&hiAction=11&hiRetrievalXsl=crLogin.xsl&CR_NICK="+_user+"&PWD="+_pass;
		document.getElementById(flashObject).doLogin(_loginUrl);
		return false;
	}
	
	/**
	 * Logout call powered by login.swf
	 * When the flash ends his job, calls the ASLoginCallBack with the response data
	 */
	 function doLogout(portal){
		var isIE = navigator.appName.indexOf('Microsoft') != -1;
		var flashObject= (isIE) ? 'swfLoginIE':'swfLogin';
		
		var hiPortal = (portal)? portal:"cr/v3";

		var _logoutUrl="https://secure.ccrtvi.com/su/Register?hiTarget=*.swf&hiErrTarget=*.swf&hiPortal="+hiPortal+"&hiRetrieval=S&hiRegServiceId=CR_REG&hiServiceId=CR_REG&hiPersist=true&hiAction=0&hiRetrievalXsl=crLogin.xsl";
		

		document.getElementById(flashObject).doLogout(_logoutUrl);
		code=1;
		notLogged();

		return false;
	 }

	/**
	 * CallBack function for the flash login.
	 * The xml comes escaped
	 * controlVar: on 1st callBack comes from secure. on 2nd callBack comes from g.jsp 
	 * if we are in secure, we don't have the cookie, so we have to get data from g.jsp response
	 */
	var controlVar=1;
	function ASLoginCallBack(response){
		if (controlVar==1){
			controlVar=2;
			parseLoginXml(unescape(response));
		}
		else{
			controlVar=1;
			checkUser(unescape(response));
		}
	}
	
	/**
	 * CallBack function for the flash logout.
	 * The xml comes escaped
	 */
	function ASLogoutCallBack(response){
		parseLogoutXml(unescape(response));
	}
	
	/**
	 * Parse login response from secure done by login.swf
	 */
	function parseLoginXml(xml) {
		if ( $.xmlDOM(xml).find('doc').attr("code") != "0" ){
			$("#spanErrorLogin").html($.xmlDOM(xml).find('error').text());
			$("#spanErrorLogin").css("display", "block");
			$("#loginButton").css("display","block");
			$("#loading_login").css("display","none");
						
			//Es resetea perque hi ha hagut error
			controlVar=1;
		}else{
			$("#spanErrorLogin").css("display", "none");
			$("#spanErrorLogin").html('');
			try{ hideCommentsLogin();} catch(e){}
		}
		
		//si s'ha fet reset perque ha hagut un error no cal fer aquesta comprovacio
		if(controlVar!=1){
        $.xmlDOM(xml).find('item').each(function(){
         	if ($(this).find('shortname').text()=='jsessionid'){
				var jsessionid = $(this).find('valor').text();
				var jsc= encodeHex(jsessionid);
				setSession(jsc);
         		//alert("setting jsessionid:"+jsessionid+"...");
         	}
         	else if ($(this).find('shortname').text()=='CR_NOM'){
         		var _nick= $(this).find('valor').text();
         		//alert("updating capçalera:"+_nick+"...");
         	}
         });
		}
    }
	 
	 /**
		 * Parse logout response from secure done by login.swf
	 */
	function parseLogoutXml(xml) {
		if ( $.xmlDOM(xml).find('doc').attr("code") == "0" ){
			
			 $.xmlDOM(xml).find('item').each(function(){
		         	if ($(this).find('shortname').text()=='jsessionid'){
						var jsessionid = $(this).find('valor').text();
						var jsc= encodeHex(jsessionid);
						//setSession(jsc);
						var setSessionUrl= urlgatewaybase+"?_si_="+jsc;
						$.post(setSessionUrl,function(){notLogged();});
						
		         	}
		         	});
			 
			
		
			controlVar=1
		}else{
			//Es resetea perque hi ha hagut error
			controlVar=1;	
		}
	  }
	
	 /**
     * Sets the session in pub and writes the cookie information
     */
    function setSession(jsc){
    	var setSessionUrl= urlgatewaybase+"?_si_="+jsc;
		var isIE = navigator.appName.indexOf('Microsoft') != -1;
		var flashObject= (isIE) ? 'swfLoginIE':'swfLogin';
		document.getElementById(flashObject).doLogin(setSessionUrl);
		//var setSessionParams = {_si_:jsc};
		//$.post(setSessionUrl,setSessionParams, function(data){checkUser();});
    }
/* -------------------------------------------------------------- */
 	function loggedOk(){
		tancaDivLogin();
		//$("#user_menu").removeClass("non_auth");
		//$("#user_menu").addClass("auth");
		
		$("#user_menu").css("display","none");
		$("#user_menu2").css("display","block");
		
		$(".liLoginNoAuth").css("display","none");
		$(".liLoginAuth").css("display","block");
		
		$(".identificado").css("display","block");
		$(".no_identificado").css("display","none");			
		
		$("a.editar").css("display","block");
		$("a.editar_non_logged").css("display","none");

		$("#comentaris").addClass("auth");
		
		$("#butlleti").attr("href", "https://secure.ccrtvi.com/su/Register?hiTarget=v3/crPButlleti.jsp&hiPortal=cr&hiRegServiceId=CR_REG&hiErrTarget=error.jsp&hiAction=129&hiServiceId=CATRADIO_BUTLLETI");
	}
	
	function notLogged(error){
		//if(error){alert(loginErrorText);}
		tancaDivLoginRt();
		//$("#user_menu").removeClass("auth");
		//$("#user_menu").addClass("non_auth");
		
		$("#user_menu").css("display","block");
		$("#user_menu2").css("display","none");
		
		$(".liLoginAuth").css("display","none");
		$(".liLoginNoAuth").css("display","block");

		$(".identificado").css("display","none");
		$(".no_identificado").css("display","block");
		
		$("a.editar_non_logged").css("display","block");
		$("a.editar").css("display","none");

		$("#comentaris").removeClass("auth");
		$("#comentaris").css("display", "block");
		
		$("#butlleti").attr("href", "/butlleti");
	}    