Evento Google Apps Script  
25 Abril 2012


Script do formulário exemplo usado na palestra 



//
//
//   Script contact form slim
//
//   This is a example script used in a GTUG-BH event 25 04 2012
//
//
//   Autor Jacob van den Berg jacob@lagaroo.com.br jacob@gtugs.org
//   Date 26 04 2012
//   Version 00
//   Services : Spreadsheet
//              UI
//              Mail
//              Contact
//
function doGet() {

var app = UiApp.createApplication().setTitle("contact form slim");

  
  
///////////////////////////////////////////
//
//  Style sheet 
//
//
///////////////////////////////////////////

  var _mainpanel = {
    "background-color":"none",
    "width":"100%",
  }
      
  var _titlepanel = {
   "background-color": "#DDDDFF",
   "padding":"0.3em",
   "border-top":"3px solid #FF9900",
    "text-align":"center",
    "border-top-left-radius":"10px 10px",
    "border-top-right-radius":"10px 10px",
    "border-bottom-left-radius":"5px 5px",
    "border-bottom-right-radius":"5px 30px",
  }      

  var _title = {
   "color":"#003399",
   "font-family": "Architects Daughter",
   "font-size":"1.8em",
   "font-weight":"bolder",
  }                

  var _mandatory = {
   "color":"#FF9900",
   "font-family": "Architects Daughter",
   "font-size":"1em",
   "font-weight":"normal",
   "margin-top":"0.5em",
   "margin-left":"1em",
  }
  var _feedback = {
   "color":"#FF9900",
   "font-family": "Architects Daughter",
   "font-size":"1.2em",
   "font-weight":"normal",
   "margin-top":"0.5em",
   "margin-left":"1em",
  }
  
  var _label =  {
   "color":"#003399",
   "font-family": "arial",
   "font-size":"1.2em",
   "font-weight":"bold",
   "margin-top":"0.5em",
   "margin-left":"1em",
  }
  var _chckbxlabel =  {
   "color":"#003399",
   "font-family": "arial",
   "font-size":"0.8em",
   "font-weight":"bold",
   "margin-top":"2px",   
  }
  
  var _panel =  {
    "background-color": "#f3f3f3",
    "margin-left":"0.6em", 
         } 
      
  var    _cimgpanel =  {
    "background-color": "white",
    "margin-left":"0.6em",    
         }  
  

  var  _textbox=  {
    "font-family":"Arial" ,    
    "font-size":"normal",
    "width":"180px",
    "height":"21px",
         }      

    var    _textarea=  {
    "font-family":"Arial" ,    
    "font-size":"normal",
    "width":"260px",
    "height":"100px",
         }  
        
    var _captchatextbox=  {
    "font-family":"Arial" ,    
    "font-size":"normal",
    "width":"80px",
    "height":"21px",
         }    
          
    var _refresh = {
    "width":"21px",
    "height":"21px",
      }    
        
    var _btnrefresh = {   
    "height":"22px",
    "width":"22px",
    "color": "none",
    "background":"none",
    "border":"0px",
    "opacity":"0,1", 
      }
         
   var _btn = {
   "color":"#003399",
   "font-family": "arial",
   "font-size":"1.2em",
   "font-weight":"bold",
   "background-color": "transparent",
   "padding":"0.1em",
   "border":"0px",
   "border-top":"3px solid #FF9900",
   "text-align":"center",
   "width":"80px",
   "height":"24px",
  }      

///////////////////////////////////////////
//
//  End Style sheet 
//
//
///////////////////////////////////////////

      
  var verPanel = app.createVerticalPanel().setVisible(true);
  applyCSS(verPanel, _mainpanel);
  
  //
  // Title
  //
  var titlePanel = app.createAbsolutePanel().setVisible(true);
  applyCSS(titlePanel, _titlepanel);
  var titleLabel = app.createLabel('Formulário de contato').setId('titellabel').setVisible(true);
  applyCSS(titleLabel, _title);
  
   titlePanel.add(titleLabel);

  var mandatoryLabel = app.createLabel('* Obrigatório').setId('mandatorylabel').setVisible(true);
  applyCSS(mandatoryLabel, _mandatory);
  
  var feedBackLabel = app.createLabel("Feedback").setId('feedbacklabel').setVisible(false);
  applyCSS(feedBackLabel,_feedback)

//  
//  Name  
//    
  var namePanel = app.createAbsolutePanel().setVisible(true).setId('namePanel').setWidth('95%').setHeight('55px');
  applyCSS(namePanel,_panel)
    
  var nameLabel = app.createLabel("Nome").setId('namelabel').setVisible(true);
  applyCSS(nameLabel,_label)
  var nameTextBox = app.createTextBox().setName('nametextbox').setId('nametextbox').setVisible(true);
  applyCSS(nameTextBox, _textbox);  
  var nameMandatory = app.createLabel("*").setId('namemandatory').setVisible(true);
  applyCSS(nameMandatory, _mandatory);    
  

  // X , Y
  namePanel.add(nameLabel,10,10);
  namePanel.add(nameTextBox,10,34);
  namePanel.add(nameMandatory,180,34);

    
//    
//  Telephone    
//    
  var telPanel = app.createAbsolutePanel().setVisible(true).setId('telPanel').setWidth('95%').setHeight('55px');
  applyCSS(telPanel,_panel)
  var telLabel = app.createLabel("Telefone").setId('tellabel').setVisible(true);
  applyCSS(telLabel,_label)
  var telTextBox = app.createTextBox().setName('teltextbox').setId('teltextbox').setVisible(true);
  applyCSS(telTextBox, _textbox);  
  var telMandatory = app.createLabel("*").setId('telmandatory').setVisible(true);
  applyCSS(telMandatory, _mandatory);    
  telPanel.add(telLabel,10,10);
  telPanel.add(telTextBox,10,34);
//  telPanel.add(telMandatory,180,23);

//    
//  Email    
//    
  var mailPanel = app.createAbsolutePanel().setVisible(true).setId('mailPanel').setWidth('95%').setHeight('55px');
  applyCSS(mailPanel,_panel)
  var mailLabel = app.createLabel("Email").setId('maillabel').setVisible(true);
  applyCSS(mailLabel,_label)
  var mailTextBox = app.createTextBox().setName('mailtextbox').setId('mailtextbox').setVisible(true);
  applyCSS(mailTextBox, _textbox);  
  var mailMandatory = app.createLabel("*").setId('mailmandatory').setVisible(true);
  applyCSS(mailMandatory, _mandatory);    
  mailPanel.add(mailLabel,10,10);
  mailPanel.add(mailTextBox,10,34);
  mailPanel.add(mailMandatory,180,34);  
  
//    
//  Interest    
//    
  var intPanel = app.createAbsolutePanel().setVisible(true).setId('intPanel').setWidth('95%').setHeight('55px');
  applyCSS(intPanel,_panel)
  var intLabel = app.createLabel("Área de interesse").setId('intlabel').setVisible(true);
  applyCSS(intLabel,_label)
  var intListBox = app.createListBox().setName('intlistbox').setId('intlistbox').setVisible(true);
  applyCSS(intListBox, _textbox);  
  var intMandatory = app.createLabel("*").setId('intmandatory').setVisible(true);
  applyCSS(intMandatory, _mandatory);   
  
  intListBox.addItem("...","...").addItem("Informação","Informação").addItem("Eventos","Eventos").addItem("Hackathon","Hackathon").addItem("Documentação","Documentação")
  
  intPanel.add(intLabel,10,10);
  intPanel.add(intListBox,10,34);
//  intPanel.add(intMandatory,180,23);   
      
//    
//  Comments   
//    
  var commentPanel = app.createAbsolutePanel().setVisible(true).setId('commentPanel').setWidth('95%').setHeight('140px');
  applyCSS(commentPanel,_panel)
  var commentLabel = app.createLabel("Comentários").setId('commentlabel').setVisible(true);
  applyCSS(commentLabel,_label)
  var commentTextArea = app.createTextArea().setName('commenttextarea').setId('commenttextarea').setVisible(true);
  applyCSS(commentTextArea, _textarea);  
  var commentMandatory = app.createLabel("*").setId('commentmandatory').setVisible(true);
  applyCSS(commentMandatory, _mandatory);    
  commentPanel.add(commentLabel,10,10);
  commentPanel.add(commentTextArea,10,34);
  commentPanel.add(commentMandatory,260,34);  

//    
//  Checkboxes
//    
  var chckbxPanel = app.createAbsolutePanel().setVisible(true).setId('chckbxPanel').setWidth('95%').setHeight('40px');
  applyCSS(chckbxPanel,_panel)
  var chckbxLabel = app.createLabel("Gostaria de receber informações da Interpretar").setId('chckbxlabel').setVisible(true);
  applyCSS(chckbxLabel,_chckbxlabel)
  var checkbox = app.createCheckBox().setName('checkbox').setId('checkbox').setValue(false);  
  chckbxPanel.add(chckbxLabel,30,10);
  chckbxPanel.add(checkbox,10,10);
  
//
//
// captcha
//  
//
  
  var captchaPanel = app.createAbsolutePanel().setVisible(true).setId('captchapanel').setWidth('95%').setHeight('45px');
  applyCSS(captchaPanel,_panel)
  var cimgPanel = app.createAbsolutePanel().setVisible(true).setId('cimgpanel').setWidth('115px').setHeight('36px');
  applyCSS(cimgPanel,_cimgpanel)
  var File = DocsList.find("Copyof_XYZ");     
  var Id =  File[0].getId();
  var Ss = SpreadsheetApp.openById(Id);
  var Sheet = Ss.getSheetByName("kaptcha");
  
  var captcha = 4;
  var numLabel = new Array();
  var numLabela = new Array();
  var colLabel = new Array() ;     
  var cimg =  new Array() ; 
  var x = 4;
  var y = 4;
      
  for (i=0; i < captcha  ; i++){
    var num =  Math.round(Math.random()*100);
    var col =  Math.round(Math.random()*10);
    if( col < 2  ){ 
        var col = 2
      }
    if( col > 10  ){ 
        var col = 9
      }
    
    if( num > 36  && num < 73){ 
        var num = Math.round(num/2)
      }
    if( num > 72  && num < 101){ 
        var num = Math.round(num/3)
      }
    if (num < 2){ 
        var num = 2
      }
    if
      (num > 101){ 
        var num = 37
      }
    //numLabel[i] = app.createLabel(num.toString()).setId('numlabel'+[i]).setVisible(false);
    
    
    if (i ==0) {
    var numLabel0 = app.createTextBox().setValue(num.toString()).setName('numlabel0').setId('numlabel0').setVisible(false);
    applyCSS(numLabel0,_label);  
    var curl = Sheet.getRange( num, col).getValues();     
    cimg[i] = app.createImage().setId('cimg'+[i]).setUrl(curl.toString()).setVisible(true);  
    cimgPanel.add(numLabel0,x,y);
    cimgPanel.add(cimg[i],x,y);
      }
    if (i ==1) {
    var numLabel1 = app.createTextBox().setValue(num.toString()).setName('numlabel1').setId('numlabel1').setVisible(false);
    applyCSS(numLabel1,_label);  
    var curl = Sheet.getRange( num, col).getValues();     
    cimg[i] = app.createImage().setId('cimg'+[i]).setUrl(curl.toString()).setVisible(true);  
    cimgPanel.add(numLabel1,x,y);
    cimgPanel.add(cimg[i],x,y);
      }
    if (i ==2) {
    var numLabel2 = app.createTextBox().setValue(num.toString()).setName('numlabel2').setId('numlabel2').setVisible(false);
    applyCSS(numLabel2,_label);  
    var curl = Sheet.getRange( num, col).getValues();     
    cimg[i] = app.createImage().setId('cimg'+[i]).setUrl(curl.toString()).setVisible(true);  
    cimgPanel.add(numLabel2,x,y);
    cimgPanel.add(cimg[i],x,y);
      }
    if (i ==3) {
    var numLabel3 = app.createTextBox().setValue(num.toString()).setName('numlabel3').setId('numlabel3').setVisible(false);
    applyCSS(numLabel3,_label);  
    var curl = Sheet.getRange( num, col).getValues();     
    cimg[i] = app.createImage().setId('cimg'+[i]).setUrl(curl.toString()).setVisible(true);  
    cimgPanel.add(numLabel3,x,y);
    cimgPanel.add(cimg[i],x,y);
      }
    
    numLabela[i] = app.createLabel("num:" + num.toString()+" col:" + col.toString()).setId('numlabela'+[i]).setVisible(false);
    verPanel.add(numLabela[i]);
        
    
    
    
//    cimgPanel.add(numLabel[i],x,y);
//    cimgPanel.add(cimg[i],x,y);
    
    var x = x + 28;
     
    }
  
  var captchaTextBox = app.createTextBox().setName('captchatextbox').setId('captchatextbox').setVisible(true);
  applyCSS(captchaTextBox, _captchatextbox);  
  var captchaLabel = app.createLabel("repete as letras e os numeros").setId('captchalabel').setVisible(true);
  applyCSS(captchaLabel,_chckbxlabel)
  var captchaMandatory = app.createLabel("*").setId('captchamandatory').setVisible(true);
  applyCSS(captchaMandatory, _mandatory);   
  var captRefresh = app.createImage().setId('caprefresh').setUrl("https://lh6.googleusercontent.com/-0bwtIEA560E/TuKG0v8d6II/AAAAAAAAAUA/0S_8WCjitgY/s128/refresh.png").setVisible(true);
  applyCSS(captRefresh, _refresh); 
  var btnRefresh = app.createButton('-').setId('btnrefresh').setVisible(true)
  applyCSS(btnRefresh, _btnrefresh);  
  
  captchaPanel.add(cimgPanel,0 ,0);
  captchaPanel.add(captchaTextBox,125,0);
  captchaPanel.add(captchaLabel,125,20);  
  captchaPanel.add(captchaMandatory,195,0);
  captchaPanel.add(captRefresh,235,0);
  captchaPanel.add(btnRefresh,235,0);
  
  var clickHandlerr = app.createServerClickHandler("refreshCaptcha");
  btnRefresh.addClickHandler(clickHandlerr);
  clickHandlerr.addCallbackElement(verPanel);

  
//    
//  Button   
//    
  var btnPanel = app.createAbsolutePanel().setVisible(true).setId('btnPanel').setWidth('95%').setHeight('40px');
  applyCSS(btnPanel,_panel)
  var btnSubmit = app.createButton('Enviar').setId('btnsubmit').setVisible(true)
  applyCSS(btnSubmit, _btn);  
  btnPanel.add(btnSubmit,10,5);  

  var clickHandler = app.createServerClickHandler("respondToSubmit");
  btnSubmit.addClickHandler(clickHandler);
  clickHandler.addCallbackElement(verPanel);

  verPanel.add(titlePanel);
  verPanel.add(mandatoryLabel);
  verPanel.add(feedBackLabel);
  verPanel.add(namePanel);
  verPanel.add(telPanel);
  verPanel.add(mailPanel);
  verPanel.add(intPanel);
  verPanel.add(commentPanel);
  verPanel.add(chckbxPanel);
  verPanel.add(captchaPanel);
  verPanel.add(btnPanel);
  
  app.add(verPanel);
  
   
  return app.close();
}

function refreshCaptcha(e){
  var app = UiApp.getActiveApplication();
  var File = DocsList.find("Copyof_XYZ");     
  var Id =  File[0].getId();
  var Ss = SpreadsheetApp.openById(Id);
  var Sheet = Ss.getSheetByName("kaptcha");
  var captcha = 4;
      
  for (i=0; i < captcha  ; i++){
    var num =  Math.round(Math.random()*100);
    var col =  Math.round(Math.random()*10);
    if( col < 2  ){ 
        var col = 2
      }
    if( col > 10  ){ 
        var col = 9
      }
    
    if( num > 36  && num < 73){ 
        var num = Math.round(num/2)
      }
    if( num > 72  && num < 101){ 
        var num = Math.round(num/3)
      }
    if (num < 2){ 
        var num = 2
      }
    if
      (num > 101){ 
        var num = 37
      }
    app.getElementById('numlabel'+[i]).setText(num.toString());
    app.getElementById('numlabela'+[i]).setText("num:" + num.toString()+" col:" + col.toString()) ;     
        
    var curl = Sheet.getRange( num, col).getValues();     
    app.getElementById('cimg'+[i]).setUrl(curl.toString());
    }
  
  return app.close();
}

function respondToSubmit(e){
  var app = UiApp.getActiveApplication();

  //
  // Compare the Captcha 
  //                  1   2   3   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29 30  31  32  33  34   35  36  37    39                      
  var ln = new Array("-","-","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9") 
  var num0 = ln[e.parameter.numlabel0];
  var num1 = ln[e.parameter.numlabel1];
  var num2 = ln[e.parameter.numlabel2];
  var num3 = ln[e.parameter.numlabel3];
  var captcha = num0 + num1 + num2 + num3;
  var ctb = lower(e.parameter.captchatextbox);
    
  
  if ( ctb == captcha ) {
     //for (i=0; i < 4  ; i++){
     // app.getElementById('numlabela'+[i]).setText("num:" + num0+ num1+ num2+ num3+" ctb: " + ctb +" captcha: "+ captcha ).setVisible(true) ; 
     //}
  //
  // The captcha is ok so we can continue.
  //
  // Check the mandatory input.
     var name = proper(e.parameter.nametextbox);                // requiered
     var telefone = e.parameter.teltextbox;
     var email = e.parameter.mailtextbox;               // requiered
     var int = e.parameter.intlistbox;                
     var comment = e.parameter.commenttextarea;         // requiered
     if ( e.parameter.checkbox == 'true')   {var chckbx = 'Sim'} else { var chckbx = 'Não'}    

     if ( isNotEmpty(name)) {
        if ( isNotEmpty(email)) {  
            var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
            if (email != '' & emailPattern.test(email) == true){
              
                if ( isNotEmpty(comment)) {    
                //
                // The required fields seem to be filledout correctly
                //
                
                // disable the submit button a moment
                app.getElementById('btnsubmit').setEnabled(false);
                
              
                //
                // lock this part of the script 
                // 
                //  
                var lock = LockService.getPublicLock();
                if (lock.tryLock(10000))  {
                //
                // Got the lock can do the sheet stuff now
                //
                  var aFile = DocsList.find("CopyofSite_contacts");                    // Note: DocsList.find returns an array into your variable.
                  var aId =  aFile[0].getId();
                  var aSs = SpreadsheetApp.openById(aId);
                  var aSheet = aSs.getSheetByName("Contacts");

               // find out the number of rows and columns of the sheet.
               var newRow = aSheet.getLastRow()+1;
    
                aSheet.getRange([newRow],[1]).setValue(genTimestamp());
                aSheet.getRange([newRow],[2]).setValue(whoIs());
                aSheet.getRange([newRow],[3]).setValue(genTimestamp()); 
                aSheet.getRange([newRow],[4]).setValue(whoIs()); 
                aSheet.getRange([newRow],[5]).setValue(name); 
                aSheet.getRange([newRow],[6]).setValue(telefone);
                aSheet.getRange([newRow],[7]).setValue(email);               
                aSheet.getRange([newRow],[8]).setValue(int);                
                aSheet.getRange([newRow],[9]).setValue(comment);         
                aSheet.getRange([newRow],[10]).setValue(chckbx);    

                
                } else {  // lock 
                //
                // I couldn’t get the lock, now for plan B :(
                //
                app.getElementById('feedbacklabel').setVisible(true).setText( "Teve um erro, tenta de novo por favor.");
    
                }
                lock.releaseLock();
                
                //
                // clean up the sheet and leave a message
                //  
                app.getElementById('btnsubmit').setEnabled(true);
                  
                // Check if this user allready contacted interpretar
                var oc = oldContact(name, email);  
                
                //return app.close();  
                if ( oc == 'true'){ 
                    app.getElementById('feedbacklabel').setVisible(true).setText( "Obrigado " + name + ", pelo retorno . Em breve lhe contatomos.");   
                 }
                  else { 
                      app.getElementById('feedbacklabel').setVisible(true).setText( "Obrigado " + name + ", pelo interesse . Em breve responderemos a sua pergunta.");   
                 } 
                 app.getElementById('nametextbox').setValue('');
                 app.getElementById('teltextbox').setValue('');
                 app.getElementById('mailtextbox').setValue('');
                 app.getElementById('intlistbox').setSelectedIndex(0); 
                 app.getElementById('commenttextarea').setValue('');
                 app.getElementById('checkbox').setValue(false);
                 app.getElementById('captchatextbox').setValue('');
                 //
                 // refresh the captcha
                 //
                 var File = DocsList.find("Copyof_XYZ");     
                 var Id =  File[0].getId();
                 var Ss = SpreadsheetApp.openById(Id);
                 var Sheet = Ss.getSheetByName("kaptcha");
                 var captcha = 4;
      
                 for (i=0; i < captcha  ; i++){
                   var num =  Math.round(Math.random()*100);
                   var col =  Math.round(Math.random()*10);
                   if( col < 2  ){ 
                       var col = 2
                     }
                   if( col > 10  ){ 
                       var col = 9
                     }
                   
                   if( num > 36  && num < 73){ 
                       var num = Math.round(num/2)
                     }
                   if( num > 72  && num < 101){ 
                       var num = Math.round(num/3)
                     }
                   if (num < 2){ 
                       var num = 2
                     }
                   if
                     (num > 101){ 
                       var num = 37
                     }
                   app.getElementById('numlabel'+[i]).setText(num.toString());
                   app.getElementById('numlabela'+[i]).setText("num:" + num.toString()+" col:" + col.toString()) ;     
                       
                   var curl = Sheet.getRange( num, col).getValues();     
                   app.getElementById('cimg'+[i]).setUrl(curl.toString());
                   
                       } // refresh captcha
                 //
                 // 
                 // 
                 // Send an email to the people interested in this contact. 
                 //
                                   MailApp.sendEmail('jacob@gtugs.org' , '[GTUG-BH], Formulario exemplo do evento abril 2012 ' 
                                   ,'textBody', {htmlBody: 
                                   'Caro/a ' + name +  
                                   ',<br><br> A GTUG-BH agradece a sua interesse.'+ 
                                   '<br><br>A seguir os detalhes do Evento:  <b>' + eName + 
                                   '</b><br>' + 
                                   '<img border="0" height="200" src="http://4.bp.blogspot.com/-jHMG0LKH5zA/T49jF3tW-lI/AAAAAAAAD_o/ITSleKnrsAw/s400/GoogleAppsScript.png" style="display:block;margin-top:10px;margin-right:10px;margin-bottom:10px;margin-left:20px" width="350">'+              
                                   '<br/>O patrocinador e a<b> '+ eSponsor + 
                                   '</b><br/>O Endereço do evento <b>'+ eLoc +
                                   '</b><br/>Data e horario : <b>'+ eTime + '</b> <font size="0.6em"> (e bom chegar um pouco mais cedo)</font>'+
                                   '<br/>Seu Email de contato <b>: ' + email + 
                                   '</b><br><br>' +                              
                                   '<b>Dicas</b> '+ 
                                   '<br>- Leva um computador com a bateria cheia não sempre tem tomadas disponiveis para todo o mundo.'+
                                   '<br>- Lembra que o transito em esse horario pode ser terivel.'+              
                                   '<br><br>' +                              
                                   '<b>Atenção</b> Quem reservar vaga, não comparecer e não avisar até 24horas '+
                                   'antes não poderá participar dos próximos dois encontros. Então, se estiver inscrito e '+
                                   'acontecer um imprevisto, <font color="red">AVISE </font>por email na lista do grupo até o dia anterior ao encontro'+
                                   'para não ser penalizado. </b>'+              
                                   '<br><br>Obrigado,<br><a href="http://bh.gtugs.org/"><img border="0" height="65" src="https://sites.google.com/a/gtugs.org/bh/_/rsrc/1299800911717/config/customLogo.gif?revision=4" style="display:inline;float:left;margin-top:10px;margin-right:10px;margin-bottom:10px;margin-left:10px" width="175"></a>'
                                   ,replyTo: 'jacob@gtugs.org'});

                 //
                 // 
                 // 
                 // Send an email to the user who placed the doubt. 
                 //
                 
                         MailApp.sendEmail(email, '[GTUG-BH], Inscrição Evento ' 
                                   ,'textBody', {htmlBody: 
                                   'Caro/a ' + name +  
                                   ',<br><br> A GTUG-BH agradece a sua interesse.'+ 
                                   '<br><br>A seguir os detalhes do Evento:  <b>' + eName + 
                                   '</b><br>' + 
                                   '<img border="0" height="200" src="http://4.bp.blogspot.com/-jHMG0LKH5zA/T49jF3tW-lI/AAAAAAAAD_o/ITSleKnrsAw/s400/GoogleAppsScript.png" style="display:block;margin-top:10px;margin-right:10px;margin-bottom:10px;margin-left:20px" width="350">'+              
                                   '<br/>O patrocinador e a<b> '+ eSponsor + 
                                   '</b><br/>O Endereço do evento <b>'+ eLoc +
                                   '</b><br/>Data e horario : <b>'+ eTime + '</b> <font size="0.6em"> (e bom chegar um pouco mais cedo)</font>'+
                                   '<br/>Seu Email de contato <b>: ' + email + 
                                   '</b><br><br>' +                              
                                   '<b>Dicas</b> '+ 
                                   '<br>- Leva um computador com a bateria cheia não sempre tem tomadas disponiveis para todo o mundo.'+
                                   '<br>- Lembra que o transito em esse horario pode ser terivel.'+              
                                   '<br><br>' +                              
                                   '<b>Atenção</b> Quem reservar vaga, não comparecer e não avisar até 24horas '+
                                   'antes não poderá participar dos próximos dois encontros. Então, se estiver inscrito e '+
                                   'acontecer um imprevisto, <font color="red">AVISE </font>por email na lista do grupo até o dia anterior ao encontro'+
                                   'para não ser penalizado. </b>'+              
                                   '<br><br>Obrigado,<br><a href="http://bh.gtugs.org/"><img border="0" height="65" src="https://sites.google.com/a/gtugs.org/bh/_/rsrc/1299800911717/config/customLogo.gif?revision=4" style="display:inline;float:left;margin-top:10px;margin-right:10px;margin-bottom:10px;margin-left:10px" width="175"></a>'
                                   ,replyTo: 'jacob@gtugs.org'});
                 //
                 // 
                 // 
                 // Add the contact to the Contacts of interpretar 
                 // if they want to receive Information about Interpretar
                 // we add the user to the maillist group.
                 //
                 // check if the contact is allready exiting.
//                 var group = ContactsApp.findContactGroup("maillist");
//  
//                 if(group==null){
//                      group = ContactsApp.createContactGroup("maillist");
//                  }
                 if(ContactsApp.findContactGroup("maillist")==null){
                          ContactsApp.createContactGroup("maillist");
                   }
                 if ( ContactsApp.getContact(email)== null) { 
                    // add the contact
                    ContactsApp.createContact(name,'-',email).setWorkPhone(telefone);    
//                    //chckbx = 'Sim'} 
                    if( e.parameter.checkbox == 'true' ){ 
                       // add the email data to the contacts and to the mail list.
                        var group = ContactsApp.findContactGroup("maillist")
                        var myContact = ContactsApp.getContact(email);    
                        group.addContact(myContact);
                        }
                  }
    
                  
                }  // comment is not okay
            else { 
                app.getElementById('feedbacklabel').setVisible(true).setText( "Por favor deixe um Comentário.");
             }  
           }  // email pattern false
       else {
               app.getElementById('feedbacklabel').setVisible(true).setText("Email errado.");
            }     
           }  // email is not okay
        else { 
            app.getElementById('feedbacklabel').setVisible(true).setText( "Por favor adicione um Email.");
        }  
       }  // name is not okay
  else { 
      app.getElementById('feedbacklabel').setVisible(true).setText( "Por favor adicione um nome.");
  }
  
  } // the end of the captcha check
  else { 
        //The Captcha seems to be wrong, leave a feedback msg
        app.getElementById('feedbacklabel').setText("Não se esqueça de digitar a imagem"  ).setVisible(true) ; 
  }
  


  
  
return app.close();

}



  
// This comes from https://sites.google.com/site/scriptsexamples/gs-interactive
// James Fereira 
//
function applyCSS(element, style){
  for (var key in style){
    element.setStyleAttribute(key, style[key]); 
  }  
}

// 
// 
// Format string to proper case 
// this comes from http://www.google.com/support/forum/p/apps-script/thread?tid=32bc3464b80f6bf2&hl=en
// Henrique Abreu 
//
//
function proper(string) {
  return string.replace(/\w\S*/g, function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase();});
}
function lower(string) {
  return string.replace(/\w\S*/g, function(t){return t.toLowerCase();});
}


function genTimestamp(){
 return Utilities.formatDate(new Date(), "GMT-2", "MM/dd/yyyy'T'HH:mm:ss'Z'");
}  

function whoIs(){
  var whoIs = Session.getActiveUser().getEmail();
  if (isNotEmpty(whoIs)) {
  return whoIs
  }
  else {return "Unknown"}
    
}
function oldContact(name, email){
  var cfile = DocsList.find("CopyofSite_contacts");                    // Note: DocsList.find returns an array into your variable.
  var cid =  cfile[0].getId();
  var css = SpreadsheetApp.openById(cid);
  var csheet = css.getSheetByName("Contacts");

    // find out the number of rows and columns of the sheet.
    var num_rows = csheet.getLastRow();
    //var col_num = csheet.getLastColumn();
    var iname =new Array();
    var imail =new Array();

    for (var i = 1; i < num_rows ; i++) { 
        iname[i]  = csheet.getRange( [i], [5]).getValues();   
        imail[i]  = csheet.getRange( [i], [7]).getValues();
        if ( iname[i]== name && imail[i] == email) {
              var oc = 'true';
        }else {
              var oc = 'false';
      }    
    }   
  return oc;
}  
//
// This comes from http://www.google.com/support/forum/p/apps-script/thread?tid=37f6b2089a6a96a6&hl=en
// App Salad
//
function isNotEmpty(string) 
    {
        
        if(!string)             return false;         
        if(string == '')        return false;
        if(string === false)    return false; 
        if(string === null)     return false; 
        if(string == undefined) return false;
        string = string+' '; // check for a bunch of whitespace
        if('' == (string.replace(/^\s\s*/, '').replace(/\s\s*$/, ''))) return false;       
        return true;        
    }