/* 
@name: /sso/registerCell.js
@desc: check sulla unicità dello username 
@authors: Marco Toci
@lastauthor: Marco Toci (email: marco.toci@staff.dada.net - skype: marco.toci) Wed Mar 28 19:52:38 CEST 2007 

@synopsis:

			<script type="text/javascript" src="[js_dest_domain]/sso/checkNick.js"></script>
			
			
			<script type="text/javascript">
			 // impostazioni il check di unicità dello username.
				var generalParamsCheckNick = {
					service: 'life',
					instanceName:'myCheckNick',
					messages:	{
					nickFree:'<span class="ok">Il nick è libero!</span>',
					nickBusy:'<span style="color:#f00;">Nickname occupato</span>',
					nickInvalid:'<span class="ok">Attenzione: Lo username deve essere composto solo da lettere e numeri, deve essere più lungo di 5 caratteri e meno di 16 e il primo carattere deve essere una lettera.',
					wait:'<span class="wait">Attendere, prego.</span>'
				 }
			 };
				var myCheckNick = new CheckNick();
				myCheckNick.initialize(generalParamsCheckNick);
			</script>

				.
				.
			<form....
				.
				.
			<input type="text"  name="username" value="" id="isc_username" onblur="myCheckNick.checkNick(this);return false;" />
			   <div id="checkNickResponse" style="display: none;color:#72a330; font-size:11px;"></div>
				<div id="checkNickAdditionalParams" style="display: none;color:#666; font-size:11px;"></div>
		
				
			<script type="text/javascript">
			
				myCheckNick.checkNick(document.getElementById('isc_username') );
			 </script>
				.
			</form>

*/

var CheckNick = Class.create();
CheckNick.prototype = {
	initialize: function (gP) {
    var opzioni = {
        setName: 'result',
		  metaHeader:"result",
		  rowName: 'row',
        statusAttr: null,
        okValue:	null,
        errorAttr: null
    };
	 
	 this.config={
		 scriptBaseUrl: '/cgi-bin/sso/',
		 checkScript: 'getAltUsername.cgi',
		 altNickListLen:3,
		 sectiom:"nick"
     };
	  
	 this.generalParams=gP;
	 this.nickBusy=0;

	 this.ds = new DataSetHolder(opzioni);
	 this.ds.addListener( "onDataChange", this );
	 this.ds.addListener( "onDataError", this );
	 this.dati=new Array();

	 if(this.generalParams){
		 this.config.altNickListLen =(this.generalParams['altNickListLen'] == undefined)?this.config.altNickListLen:this.generalParams['altNickListLen'];
		 this.def_div_resp      = this.generalParams['div_response'] ? this.generalParams['div_response'] : "checkNickResponse";
		 this.def_div_resp_pars = this.generalParams['div_alternative_params'] ? this.generalParams['div_alternative_params'] : "checkNickAdditionalParams";
		 this.section           = this.generalParams['section'] ? this.generalParams['section'] :"nick";
	 } else{
	  this.def_div_resp = "checkNickResponse";
	  this.def_div_resp_pars = "checkNickAdditionalParams";
	  this.section ="nick";
	 } 
	 
	} ,
	
	
	checkNick: function  ( formFieldUsername ) {
		this.hideAllMessages();
		if (formFieldUsername.value){
			this.elementUpdate(this.def_div_resp,this.generalParams.messages['wait'] );
			Element.show(this.def_div_resp);
	
			this.formFieldUsername=formFieldUsername;
			nickname=formFieldUsername.value;
			
			var pars ="";
			
			if (!this.section || (this.section == "nick")){
				if (nickname.search( /^[a-zA-Z][a-zA-Z0-9]{4,16}$/ ) == -1 ) {
  				this.elementUpdate(this.def_div_resp,this.generalParams.messages['nickInvalid'] );
  				Element.show(this.def_div_resp);
  				return false;
  			}else{
  				pars =	"service="+this.generalParams['service']+
  								"&nickname="+nickname+
  								"&alternative="+this.config.altNickListLen;
  								if (this.generalParams.skipControl){
  									pars=pars+"&skipcontrol="+this.generalParams.skipControl;
  								}
  								if (this.generalParams.username){
  									pars=pars+"&username="+this.generalParams.username;
  								}
  			}  
		  }


			if (this.section == "email"){
				/*if (nickname.search( /^[\_]*(\w+([\.\_\-]*)?)+@(\w\w+(\.|\-*\.))+\w{2,6}$/ ) == -1 ) {*/
				if (nickname.search(/^[\w]{1}[\w.%+-]*@[a-zA-Z0-9]{1}[a-zA-Z0-9.-]*\.[a-zA-Z]{2,6}$/ ) == -1 ) {
					this.elementUpdate(this.def_div_resp,this.generalParams.messages['nickInvalid'] );
					Element.show(this.def_div_resp);
					return false;
				}else{
					pars =	"service="+this.generalParams['service']+
									"&email="+nickname+
									"&alternative="+this.config.altNickListLen;
									if (this.generalParams.skipControl){
										pars=pars+"&skipcontrol="+this.generalParams.skipControl;
									}
	/*								if (this.generalParams.email_as_user){
										pars=pars+"&email_as_user="+this.generalParams.email_as_user;
									}
	  */		
				}  
			
		  }

			
			if (pars) {
				var checkUrl= 	this.config['scriptBaseUrl']+
									this.config['checkScript'];
									this.ds.bindTo(checkUrl, pars.replace(/\+/,"%2b"), 'get');
			}
		}
		return true;
	},

   checkNickResponse: function (objEvt){
		this.hideAllMessages();
  		this.dati=objEvt.target.getMetaData();
		var response;

		if (this.dati.nickbusy=="1"){
			if(this.section=='nick'){
				this.formFieldUsername.value="";
			}
			var dataLength=objEvt.target.getLength();
      var response='';
      if (this.config.altNickListLen > 0){
  			
  			this.dati=objEvt.target.getMetaData();
  			this.dati.altnick=new Array();
  			var i;
  			response+='<ul>';
  			for(i=0;i<dataLength;i++){
  				var me=this.generalParams.instanceName;
  				var altnick=objEvt.target.getItemAt(i).altnick;
  					
  				this.dati.altnick[i]=altnick;
  				response+="<li><input";
  				response+=" type=\"radio\""; 
  				response+=" name=\"alt_username\"";
  				response+=" value=\""+altnick+"\"";
  				response+=" onclick=\""+me+".updateFieldNick(this.value);\" />";
  				response+=altnick;
  				response+="</li>\n";
  
  			}
  			response+='</ul>';
  		}	
			response+="<input type=\"hidden\" name=\""+this.section+"busy\" value=\"1\">\n";
			this.nickBusy=1;
		  this.elementUpdate(this.def_div_resp_pars,response );
		  this.elementUpdate(this.def_div_resp,this.generalParams.messages['nickBusy'] );
			Element.show(this.def_div_resp);
			Element.show(this.def_div_resp_pars);

		}else{
		  this.elementUpdate(this.def_div_resp,this.generalParams.messages['nickFree'] );
			this.elementUpdate(this.def_div_resp_pars,'' );
			this.nickBusy=0;
			response+="<input type=\"hidden\" name=\""+this.section+"busy\" value=\"0\">\n";
			Element.show(this.def_div_resp);
		}
		
  
  },

  updateFieldNick: function(newnick){
		this.formFieldUsername.value=newnick;
		this.checkNick(this.formFieldUsername);
		this.hideAllMessages();
	},
	elementUpdate: function(element, content){
		if ( $(element)){
			$(element).innerHTML=content;
		}
  },
	hideAllMessages: function(){
		if($(this.def_div_resp)){
			Element.hide(this.def_div_resp);
		}
		if($(this.def_div_resp_pars)){
			Element.hide(this.def_div_resp_pars);
		}
	},
  //-----------------------------------Listener
  onDataChange: function(objEvt){
		this.checkNickResponse( objEvt);
  },
  onDataError: function(){
  	
  }
  

 }


