/**
 * Libreria la condivisione di post su social network
 * @name		toolbox_sharesocial.js
 * @encoding	UTF-8
 * @project		Socialnet - Libero
 * @package		js
 * @author		Giorgio tonelli <g.tonelli@staff.libero.it>, <giorgio.tonelli@email.it>,www.thantalas.net
 * @creation	16/dec/09
 * @version		1.0
 *
 <code>
  <script>
  // primo parametro id del div contenitore
  // secondo parametro, oggetto, tutte le opzioni come nei commeti dell a classe
  var slide=new Libero.slidingDiv("slidetop","slideHtmlContainer",{
			onCloseComplete:function(){
				alert('chiuso');
			},
			onOpenComplete:function(){
				alert('aperto');
			}
		}
	);
  </script>
 </code>
 */




Libero.shareSocial=Class.create();
Libero.shareSocial.prototype = {
	options: {
		 position:'bottom-right' // bottom, top-left top-right bottom-left bottom-right (bottom *  nn funziona in ie 6)
		 ,itemElementHeight: 21  // altesa in px della riga contenente i social network
		 ,cssFile:'/css/skin/1/default.css' // utl file css del template
		 ,tabMailLoadUrl:'ajax_mailsharesocial.php' // url del box mail da caricare tramite ajax e dove inviare le richieste di invio mail
		 ,formFieldDefaultColor:'#999999'
		 ,captchaUrl:''// obbligatorio!!!!
	},
	/**
	 * @param {Object} oggetto js collezione socialnetwork
	 * @param {Object} options opzioni
	 */
	initialize: function(socialNetworkObj,options){
		this._setoptions(options);
		this.numSocial=socialNetworkObj.length;
		this.socialNetworkObj=socialNetworkObj;
		this.isOpen=false;
		this.openedId=false;
		this.iframe=false;
		this.iframeDocument=false;
		this.iframeWidth=false;
		this.tabOpen='socialNetworkShare';
		this.elementClicked=false;
		this.formMail=false;
		this.boxMessage=false;
		this.closeTimeout=false;
		this.currentItesting=false;
		this.ready=false;
		this.linkCache=[];

	},
	checkReady:function(el,postId,postTitle,permalink){
		if(this.currentItesting==true)return false;
	 	if(!this.ready){
			this.currentItesting=true;
			this.createIframe();
		 	var tm=setInterval(function(){
				if(this.ready){
					this.open(el,postId,postTitle,permalink);
					clearInterval(tm);
				}
			}.bind(this),10);
		}
	},
	open: function(el,postId,postTitle,permalink){
		if(!this.ready){
			this.checkReady(el,postId,postTitle,permalink);
			return;
		}
		if(this.openedId == postId && this.isOpen){
			this.close();
			return;
		}
		this._hideError();
		this.elementClicked=el;
		this.switchTab('socialNetworkShare',this.tabShareElement['socialNetworkShare']);
	    coords = getPageCoords(el.parentNode); 
		setStyles(this.iframe,{
			left: (coords.x - this.iframeWidth + (el.parentNode.offsetWidth)) + 'px',
			top: (coords.y + 20) + 'px',
			display: 'block'
		});
		for (var socialIndex = 0; socialIndex < this.numSocial; socialIndex++) {
			if(typeof(this.linkCache[socialIndex])=='undefined') this.linkCache[socialIndex]=this.iframeDocument.getElementById('socialWebLink_'+socialIndex);
			shareName=this.socialNetworkObj[socialIndex].name.toLowerCase();
			if(shareName=='facebook' || shareName=='stambleupon' || shareName=='tecnorati'){
				this.linkCache[socialIndex].href=this.socialNetworkObj[socialIndex].url+permalink;
			}else{
				url=this.socialNetworkObj[socialIndex].url.replace('##LINK##',permalink)
				url=url.replace('##TITLE##',postTitle)
				this.linkCache[socialIndex].href=url;
			}
			this.linkCache[socialIndex].onclick=function(){this.close();}.bind(this);
		}
		
		if(this.formMail){
			this.formMail.sharePostUrl.value=permalink;
			this.formMail.sharePostId.value=postId;
			this.formMail.sharePostTitle.value=postTitle;
		}else{
			// da ottimizzare
			//this.open(el,postId,postTitle,permalink);
		}
		this.isOpen=true;
		this.openedId=postId;
		this.permalink=permalink;
		this.postTitle=postTitle;
	},
	close: function(){
		if(this.isOpen==false) return;
		clearTimeout(this.closeTimeout);
		this.isOpen=false;
		this.openedId=false;
		this.permalink=false;
		this.postTitle=false;
		this.elementClicked=false;
		this.switchTab('socialNetworkShare',this.tabShareElement['socialNetworkShare']);
		$s(this.iframe).display='none';
	},
	createIframe: function(){
		itemH=(this.options.itemElementHeight*parseInt((this.numSocial/2))+70);
		var iFrame = document.createElement("IFRAME");
		iFrame.setAttribute("src", "");
		iFrame.setAttribute("frameborder", "0");
		iFrame.setAttribute("border", "0");
		iFrame.setAttribute("scrolling", "no");
		iFrame.setAttribute("hspace", "0");
		iFrame.setAttribute("vspace", "0");
		iFrame.setAttribute("name", "shareSocialFrame");
		iFrame.setAttribute("id", "shareSocialFrame");
		iFrame.setAttribute("class", "shareSocialFrame");

		setStyles(iFrame,{
			border:"1px solid #9D9D9D"
			,position:"absolute"
			,display:""
			,visibility:"hidden"
			,width :'410px'
			,top:0
			,zIndex:1001
			,overflowX:'hidden'
		});


		document.body.appendChild(iFrame);
	   if(iFrame.contentDocument)   	      // Firefox, Opera  
	      this.iframeDocument = iFrame.contentDocument;   
	   else if(iFrame.contentWindow)   // Internet Explorer   
	      this.iframeDocument = iFrame.contentWindow.document;   
	   else if(iFrame.document)    // Others?  
	      this.iframeDocument = iFrame.document; 

		HTML='<html style="heigth:100%;"><head><link href="'+this.options.cssFile+'" type="text/css" rel="stylesheet"></head>';
		HTML+='<body style="background-color:#FFFFFF;border:0px; margin:0">';
		HTML+='<div id="socialnetworkContainer">';
			HTML+='<div id="socialnetworkContainerMenu"><ul>';
				HTML+='<li id="socialNetworkShare" class="active"><a href="javascript:;">Social Web</a></li>';
				HTML+='<li id="socialNetworkShareMail" ><a href="javascript:;">Invia Mail</a></li>';
				HTML+='<li id="" style="position:absolute;right:0;"><a href="javascript:void(0);" id="shareSocialCloseLink">chiudi</a></li>';
			HTML+='</ul></div>';
			HTML+='<div class="hack">&nbsp;</div>';
			// tab social network
			HTML+='<div id="socialNetworkShareContainer" class="socialNetworkShareContainer">';
				HTML+='<div class="socialNetworkShareSubtitle">Clicca sul servizio web nel quale vuoi condividere questo post</div>';
				HTML+='<div class="hack">&nbsp;</div>';
				HTML+='<div class="">';
				for(var socialIndex=0; socialIndex<this.numSocial;socialIndex++){
					if(socialIndex%2 == 0) HTML+='<div class="hack"></div>';
					HTML+='<div class="socialwebIcon floatleft ' + this.socialNetworkObj[socialIndex].icon + '"></div>';
					HTML+='<div class="socialwebElementLinkContainer" title="' + this.socialNetworkObj[socialIndex].name + '">';
					HTML+='<a href="javascript:;"  id="socialWebLink_' + socialIndex + '" target="_blank">'+this.socialNetworkObj[socialIndex].name+'</a>';
					HTML+='</div>';
				}
				HTML+='<div class="hack"></div>';
				HTML+='</div>';
			HTML+='</div>';
			
			// tab mail
			HTML+='<div id="socialNetworkShareMailContainer" class="socialNetworkShareContainer" style="display:none;"></div>';
			HTML+='<div id="shareMail-okmessage" class="failure" style="display:none;padding:5px;margin: 0 10px;"></div>';
		HTML+='</div>';
		HTML+='</body></html>';
		this.iframeDocument.open();   
	 	this.iframeDocument.write(HTML);  
		this.iframeDocument.close();
		this.iframeHeight=iFrame.offsetHeight+25;
		this.iframeWidth=iFrame.offsetWidth;
		setStyles(iFrame,{display:"none",visibility:"visible",height:this.iframeHeight+'px'});
		
		
		var _this=this;
		this.iframeDocument.getElementById('shareSocialCloseLink').onclick=function(){this.close();}.bind(this);
		this.boxMessage=this.iframeDocument.getElementById('shareMail-okmessage');
		this.tabShareElement=[];
		this.tabShareElement['socialNetworkShare']={};
		this.tabShareElement['socialNetworkShare'].menulink=this.iframeDocument.getElementById('socialNetworkShare');
		this.tabShareElement['socialNetworkShare'].tab=this.iframeDocument.getElementById('socialNetworkShareContainer');
		this.tabShareElement['socialNetworkShare'].loaded=true;
		this.tabShareElement['socialNetworkShareMail']={};
		this.tabShareElement['socialNetworkShareMail'].menulink=this.iframeDocument.getElementById('socialNetworkShareMail');
		this.tabShareElement['socialNetworkShareMail'].tab=this.iframeDocument.getElementById('socialNetworkShareMailContainer');
		this.tabShareElement['socialNetworkShareMail'].loaded=false;
		this.tabShareElement['socialNetworkShare'].menulink.onclick=function(){_this.switchTab('socialNetworkShare');};
		this.tabShareElement['socialNetworkShareMail'].menulink.onclick=function(){_this.switchTab('socialNetworkShareMail');};
		this.iframe=iFrame;
		this.loadTabMail();
		window.shareSocialReady=true;
		window.onresize=function(){
			_this._onResize();
		}
	},
	_onResize: function(){
		if(this.isOpen){
		   var  coords; 
		 	coords = getPageCoords(this.elementClicked.parentNode); 
			leftP=(coords.x-this.iframeWidth+(this.elementClicked.parentNode.offsetWidth))+ 'px'
			setStyles(this.iframe,{
				left: leftP
				,top:(coords.y + 20)+ 'px'
				,display:'block'
			});
		}
	},
	switchTab: function(wich){
		clearTimeout(this.closeTimeout);
		if(this.tabOpen==wich) return;
		this._hideError();
		$s(this.tabShareElement[wich].tab).display='block';
		addClass(this.tabShareElement[wich].menulink,'active')
		this.resizeIframe(this.tabShareElement[this.tabOpen].tab,this.tabShareElement[wich].tab,wich);
		$s(this.tabShareElement[this.tabOpen].tab).display='none';
		removeClass(this.tabShareElement[this.tabOpen].menulink,'active')
		this.tabOpen=wich;
	},
	loadTabMail: function(){
		var _this=this;
		 var hxr=new Libero.Request({
			url: _this.options.tabMailLoadUrl,
			method: 'get',
			requestType: 'html',
			update : _this.tabShareElement['socialNetworkShareMail'].tab,
			data : {'ajax':true}
		});
		hxr.onSuccess=function(){
			_this.formMail=_this.iframeDocument.forms[0];
			if(typeof(_this.formMail.socialNetworkShareSubmitButton)){
				_this.formMail.socialNetworkShareSubmitButton.onclick=function(){_this.sendFormMail();}
				_this.captchaRefreshLink.onclick=function(){
					_this.refreshCaptcha();
				}
			}
			_this.ready=true;
		}
		hxr.onFailure = function(){
			_this.ready=true;
			$s(_this.tabShareElement['socialNetworkShareMail'].menulink).display='non';
		}.bind(this);
		hxr.send();
	},
	sendFormMail:function(){
		var _this=this,error=false,errMesg= [],form=this.formMail, resetFields=[];
		if(typeof(form.userMailSender)!='undefined'){
			if(rel=form.userMailSender.getAttribute('rel')){
				resetFields.push({field:form.userMailSender,defval:rel});
				mailValue=getFieldValue(form.userMailSender).text;
				mailValue=mailValue.trim();
				if((rel.toLowerCase() == mailValue.toLowerCase()) || (mailValue == '') || !validateMail(mailValue)){
					error=true;
					errMesg.push('<p>Inserisci correttamente la tua e-mail.</p>');
				}
			}
			if (rel = form.screenNameSender.getAttribute('rel')) {
				screenNameSender = getFieldValue(form.screenNameSender).text;
				screenNameSender = screenNameSender.trim();
				resetFields.push({field:form.screenNameSender,defval:rel});
				if ((rel.toLowerCase() == screenNameSender.toLowerCase()) || (screenNameSender == '')) {
					error = true;
					errMesg.push('<p>Inserisci correttamente il tuo nome.</p>');
				}
			}
		}
		if(rel=form.userMailDest.getAttribute('rel')){
			userMailDest=getFieldValue(form.userMailDest).text;
			userMailDest=userMailDest.trim();
			resetFields.push({field:form.userMailDest,defval:rel});
			if((rel.toLowerCase() == userMailDest.toLowerCase()) || (userMailDest == '') || !validateMail(userMailDest)){
				error=true;
				errMesg.push('<p>Inserisci correttamente la mail del destinatario.</p>');
			}
		}
		if (rel = form.screenNameDest.getAttribute('rel')) {
			screenNameDest = getFieldValue(form.screenNameDest).text;
			screenNameDest = screenNameDest.trim();
			resetFields.push({field:form.screenNameDest,defval:rel});
			if ((rel.toLowerCase() == screenNameDest.toLowerCase()) || (screenNameDest == '')) {
				error = true;
				errMesg.push('<p>Inserisci correttamente il nome del destinatario.</p>');
			}
		}
		if(error){
			Msg='';
			for(i=0;i<errMesg.length;i++)  Msg+=errMesg[i];
			this._showError(Msg);
			return false
		}
		if(rel=form.shareMailMessage.getAttribute('rel')){
			resetFields.push({field:form.shareMailMessage,defval:rel});
			messageValue=getFieldValue(form.shareMailMessage).text;
			if(rel.toLowerCase() == messageValue.toLowerCase())form.shareMailMessage.value="";
		}
		var hxr = new Libero.Request({
			url: _this.options.tabMailLoadUrl,
			method: 'post',
			secure : true, 
			requestType: 'json',
			data: {
				'ajax': true,
				'json': true
			}
		});
		hxr.onSuccess = function(){
			_this.refreshCaptcha();
			if (rel = _this.captchaField.getAttribute('rel')) {
				resetFields.push({field: _this.captchaField,defval:rel});
			}
			if(json.status==true){
				_this._showSuccess('<p>Il tuo messaggio &egrave; stato inviato con successo a '+screenNameDest+' all\'indirizzo <em>'+userMailDest+'</em>.</p>');
				for(i=0;i<resetFields.length;i++){
					setFieldValue(resetFields[i].field,resetFields[i].defval);
					$s(resetFields[i].field).color=_this.options.formFieldDefaultColor;
				}
			}else{
				_this._showError(json.errmsg);
			}
		}
		hxr.onFailure = function(){
			_this.refreshCaptcha();
			_this._showError('<h2>Servizio momentaneamente non raggiungibile!</h2> <p>Prego riprovare più tardi.</p>');
		};
		hxr.send(form);
	},
	refreshCaptcha: function(){
		//this.captchaImage.src=this.options.captchaUrl+'&kk='+Math.random();
		$s(this.captchaImage).background='url('+this.options.captchaUrl+'&kk='+Math.random()+')';
		this.captchaField.focus();
	},
	_showSuccess: function(message){
		setClass(this.boxMessage,'success');
		this.boxMessage.innerHTML=message;
		setStyles(this.boxMessage,{marginTop:'40px',display:'block'});
		$s(this.tabShareElement['socialNetworkShareMail'].tab).display='none';
		this.closeTimeout=window.setTimeout(function(){this.close();}.bind(this), 6000);
		this.resizeIframe(this.tabShareElement['socialNetworkShareMail'].tab,this.boxMessage,'');
		
	},
	_showError: function(message){
		this.boxMessage.innerHTML=message;
		setClass(this.boxMessage,'failure');
		setStyles(this.boxMessage,{marginTop:'0',display:'block'});
		$s(this.iframe).height=(this.iframe.offsetHeight+this.boxMessage.offsetHeight)+'px';
		this.closeTimeout=window.setTimeout(function(){
			bh=this.boxMessage.offsetHeight;
			this._hideError();
			$s(this.iframe).height=(this.iframe.offsetHeight-bh)+'px';
			clearTimeout(this.closeTimeout);
		}.bind(this), 6000);
	},
	_hideError: function(){
		this.boxMessage.style.display='none';
		this.boxMessage.innerHTML='';
	},	
	resizeIframe: function(oldTab,newTab,wich){
		if(wich=='socialNetworkShare'){
			$s(this.iframe).height=this.iframeHeight+'px';
			return;
		}
		h=this.iframe.offsetHeight;
		h=this.iframeHeight;
		if(oldTab.offsetHeight<newTab.offsetHeight){
			diffH=newTab.offsetHeight-oldTab.offsetHeight;
			$s(this.iframe).height=(diffH+h)+'px';
		}else{
			diffH=oldTab.offsetHeight-newTab.offsetHeight;
			$s(this.iframe).height=(h-diffH)+'px';
		}
	},
	/**
	 * override delle opzioni di default
	 * @param {Object} opzioni passate come oggetto
	 */
	_setoptions : function (options){
		if (typeof(options)=='object') {
			var result={};
			for (var i in this.options) {
				if(typeof(options[i])!='undefined') result[i]=options[i];
				else result[i]=this.options[i];	
			}
		}else{ result=this.options;}
		this.options=result;
	}
}