/**
 * @author Abdellah Boutmouzzar abdellah@3wkom.net
 * TODO:
 */
var abShare=new Class({Implements:Options,options:{abSharedUrl:'http://3wkom.ma:6012/',abShareTrigger:'email-share',abShareForm:'abShareForm',abShareAction:'/sendmail_share.php',abLangId:1,abFxDuration:'short',abCenter:false,abFromLightBox:false,abOnClick:function(){},abOnClose:function(){}},initialize:function(options){this.setOptions(options);this.abSharedUrl=this.options.abSharedUrl;this.abShareTrigger=this.options.abShareTrigger;this.abShareForm=this.options.abShareForm;this.abShareAction=this.options.abShareAction;this.abLangId=this.options.abLangId;this.abFxDuration=this.options.abFxDuration;this.abFromLightBox=this.options.abFromLightBox;this.abCenter=this.options.abCenter;this.abIsOpen=false;this.abReadyToShare=true;this.abInitLocale();this.abInitOverlay();this.abInitEvents();},abInitEvents:function(){$(this.abShareTrigger).addEvent("click",function(e){e.stop();this.abEvent=e;if(this.abIsOpen&&$type(this.abForm)=='element'){this.abReset();}else{this.abCreateForm();$$(this.abForm.getElement('input.abDoReset'),this.abForm.getElement('div.abCloser')).addEvent('click',function(e){e.stop();this.abReset();}.bind(this));this.abForm.getElement('input.abDoSend').addEvent('click',function(e){e.stop();this.abCheckFields();if(this.abReadyToShare){new Request.HTML({url:this.abShareAction,data:this.abForm.toQueryString(),onSuccess:function(responseTree,responseElements,responseHTML){this.abSpinner.setStyle('display','none');if(responseHTML=='STOP'){this.abCheckFields();}else{this.abShareInner.set('html','<div class="abCloser"></div>');this.abShareInner.adopt(responseTree);this.abShareInner.tween('height',this.abShareInner.getSize().y-45);this.abMorph.start({height:(this.abShareInner.getSize().y-45)+28});this.abIsOpen=true;this.abForm.getElement('div.abCloser').addEvent('click',function(e){e.stop();this.abReset();}.bind(this));}}.bind(this),onRequest:function(){this.abSpinner.setStyle('display','block');}.bind(this)}).send();}}.bind(this));}this.options.abOnClick();}.bind(this));},abCreateForm:function(){this.abForm='<form action="" method="post" accept-charset="utf-8" class="'+this.abShareForm+'">'+'<div class="abShareInner">'+'<h1>'+this.abLocale.frmTtl+'</h1>'+'<p>'+'<label>'+this.abLocale.frmLblTo+' : <span class="error">(*)</span></label>'+'<input type="text" name="share_recipient" class="shareRecipient" />'+'</p>'+'<p>'+'<label>'+this.abLocale.frmLblFrom+' : <span class="error">(*)</span></label>'+'<input type="text" name="share_sender" class="shareSender" />'+'</p>'+'<p class="abAutoHeight">'+'<label>'+this.abLocale.frmLblMsg+' <sup>1</sup></label>'+'<textarea name="share_message" class="shareMessage"></textarea>'+'</p>'+'<p class="abSmall">1 - '+this.abLocale.frmEnvoi+' "'+this.abSharedUrl+'"'+'</p>'+'<p class="abButtons">'+'<strong class="abSendHolder"><input type="submit" name="submit" value="'+this.abLocale.frmLblSend+'" class="abDoSend" /></strong>'+'<strong class="abResetHolder"><input type="reset" name="reset" value="'+this.abLocale.frmLblCancel+'" class="abDoReset" /></strong>'+'<input type="hidden" name="share_url" value="'+this.abSharedUrl+'" />'+'<input type="hidden" name="share_lang_id" value="'+this.abLangId+'" />'+'</p>'+'<div class="abSpinner"></div>'+'<div class="abCloser"></div>'+'</div>'+'</form>';this.abForm.clean();this.abForm=Elements.from(this.abForm);this.abForm=this.abForm[0];this.abForm.setStyles({position:'absolute','z-index':999999,visibility:'hidden',overflow:'hidden'});this.abForm.inject(this.abFromLightBox?parent.document.body:document.body);this.abPosition();this.abSpinner=this.abForm.getElement('div.abSpinner').setStyle('height',this.abFormHeight);this.abShareInner=this.abForm.getElement('div.abShareInner');this.abOverlay.open();this.abMorphForm();},abPosition:function(){this.abFormWidth=this.abForm.getSize().x-this.abForm.getStyle("border").toInt()*2;this.abFormHeight=this.abForm.getSize().y-this.abForm.getStyle("border").toInt()*2;if(this.abCenter){var abPositions=this.abFromLightBox?parent.window.getSize():window.getSize();var t=(abPositions.y/2)-(this.abFormHeight/2)+getScrollTop();var l=(abPositions.x/2)-(this.abFormWidth/2);this.abForm.setStyles({top:t,left:l});}else{var size=window.getSize(),scroll=window.getScroll(),offSets={x:0,y:0},props={x:'left',y:'top'},obj={};for(var z in props){obj[props[z]]=this.abEvent.page[z];if((obj[props[z]]+offSets[z]-scroll[z])>size[z])obj[props[z]]=this.abEvent.page[z]-offSets[z];}this.abForm.setStyles(obj);}},abMorphForm:function(){this.abForm.setStyles({width:0,height:0});this.abMorph=new Fx.Morph(this.abForm,{duration:this.abFxDuration,link:'cancel'}).start({opacity:1,width:this.abFormWidth,height:this.abFormHeight});this.abIsOpen=true;},abReset:function(){this.abMorph.start({opacity:0,width:0,height:0});(function(){this.abForm.dispose();}.bind(this)).delay(500);this.abOverlay.close();this.abIsOpen=false;this.options.abOnClose();},abCheckFields:function(){var shareRecipients=this.abForm.getElements('.shareRecipient');var shareSenders=this.abForm.getElements('.shareSender');$$(shareRecipients,shareSenders).each(function(el){if(!this.abIsValidEmail(el.value)){this.abReadyToShare=false;el.highlight('#ff0000');}else{this.abReadyToShare=true;}}.bind(this));},abInitOverlay:function(){this.abOverlay=new dwOverlay(this.abFromLightBox?parent.document.body:document.body,{onClick:function(){this.abReset();}.bind(this)});},abInitLocale:function(){switch(this.abLangId){case 1:this.abLocale={frmTtl:'Email à un ami',frmLblTo:'À',frmLblFrom:'De',frmLblMsg:'Message',frmLblSend:'Envoyer',frmLblCancel:'Annuler',frmEnvoi:'Votre message contiendra la mention suivante: <br />Envoi depuis la page'};break;case 2:this.abLocale={frmTtl:'Email to a friend',frmLblTo:'To',frmLblFrom:'From',frmLblMsg:'Message',frmLblSend:'Send',frmLblCancel:'Cancel',frmEnvoi:'Your message will contain the following: <br />Sent from'};break;case 3:this.abLocale={frmTtl:'E-mail ad un amico',frmLblTo:'To',frmLblFrom:'Da',frmLblMsg:'Messaggio',frmLblSend:'Trasmettere',frmLblCancel:'Annulla',frmEnvoi:'Il tuo messaggio conterr&agrave; il seguente: <br />Sent from'};break;case 4:this.abLocale={frmTtl:'Enviar a un amigo',frmLblTo:'Para',frmLblFrom:'De',frmLblMsg:'Mensaje',frmLblSend:'Enviar',frmLblCancel:'Cancelar',frmEnvoi:'Tu mensaje contendrá la siguiente: <br />Sent from'};break;case 5:this.abLocale={frmTtl:'E-Mail an einen Freund',frmLblTo:'Zu',frmLblFrom:'Von',frmLblMsg:'Message',frmLblSend:'Versenden',frmLblCancel:'Abbrechen',frmEnvoi:'Ihre Nachricht wird die folgenden: <br />Sent from'};break;case 6:this.abLocale={frmTtl:'Email to a friend',frmLblTo:'To',frmLblFrom:'From',frmLblMsg:'Message',frmLblSend:'Send',frmLblCancel:'Cancel',frmEnvoi:'Your message will contain the following: <br />Sent from'};break;default:this.abLocale={frmTtl:'Email à un ami',frmLblTo:'À',frmLblFrom:'De',frmLblMsg:'Message',frmLblSend:'Envoyer',frmLblCancel:'Annuler',frmEnvoi:'Votre message contiendra la mention suivante: <br />Envoi depuis la page'};break;}},abIsValidEmail:function isValidEmail(str){var rx=/^[\w\.-]+@[\w\.-]+\.\w+$/i;return rx.test(str);},abClassExists:function(c){return typeof(c)=="function"&&typeof(c.prototype)=="object"?true:false;}});var dwOverlay=new Class({Implements:[Options,Events],options:{id:'dwOverlay',color:'#000',duration:500,opacity:0.5,zIndex:5000},initialize:function(container,options){this.setOptions(options);this.container=$(container);this.overlay=new Element('div',{id:this.options.id,opacity:0,styles:{position:'absolute',background:this.options.color,left:0,top:0,'z-index':this.options.zIndex,cursor:'pointer'},events:{click:function(){this.fireEvent('click');}.bind(this)}}).inject(this.container);this.tween=new Fx.Tween(this.overlay,{duration:this.options.duration,link:'cancel',property:'opacity',onStart:function(){this.overlay.setStyles({width:'100%',height:this.container.getScrollSize().y});}.bind(this),onComplete:function(){this.fireEvent(this.overlay.get('opacity')==this.options.opacity?'show':'hide');}.bind(this)});},open:function(){this.fireEvent('open');this.tween.start(this.options.opacity);return this;},close:function(){this.fireEvent('close');this.tween.start(0);return this;}});
