var checkedCB;

var modeQA = false;//set to false for launch
var useEmail = (modeQA)? SiteVars.useremail : 'events@golfbc.com';

//function updateEvent(newstatus, eventPath) {
function updateEvent(newstatus, eventPath, cancelForm) {

  //checked radio:
  if(cancelForm){
    var checked = Form.getInputs(cancelForm,'radio').find(
          function(el) {return el.checked;}
        );
    var cancellationReason = $(checked).id;
  }
  //alert(cancellationReason);
  
  var cfrm = true; 
  var url;
  
  if(newstatus == '5' ){ 
    var url = SiteVars.cmscontext+'/transform_event/'+eventPath+'?newStatus='+newstatus+'&cancellationReason='+cancellationReason+'&cancellationNotes='+$F('cancellationNotes'); 
  } else {
    var url = SiteVars.cmscontext+'/transform_event/'+eventPath+'?newStatus='+newstatus; 
  }
  //alert(url);
  //document.write(url);
  
  switch (newstatus) {
    case '6': // Complete
      cfrm = confirm('Are you sure you wish to Complete the Event?\n\nPress OK to Complete the Event\nPress Cancel to cancel this action');
    //case '': // something else?
  }    

  if(cfrm) {
  
    /* AJAX call to update the status */
    var req = new Ajax.Request(
      url,
      {
        method: 'post',
        onFailure:  function(req) { alert('Event Update Failed.'); return false;},
        onComplete: function(req) {
          if(newstatus == '5' ){ //AS: if 'Cancel' - this function was called from popup window
            window.opener.location.reload();//AS: timeout needed??
            window.close();
          } else if(newstatus != '3'){ 
            window.location.reload();
          }
          return true;
          
        }
      }
    ); /* Ajax.Request */
  }
}

function activateEvent(options){
  var emailAddress = options.emailAddress;
  var eventPath    = options.eventPath;
  var eventName    = options.eventName;
  var locationName = options.locationName;
  
  //console.log(eventName);
  //console.log(locationName);
  
  var url = SiteVars.cmscontext+'/events/event_admin_utils';
  var req = new Ajax.Request(
    url,
    {
      method: 'post',
      parameters:'emailAddress='+emailAddress,
      onFailure:  function(req) { alert('Event Activation Failed.'); return false;},
      onComplete: function(req) {
        var cleanReq = req.responseText.replace(/\s/gi, "");
        var urlTransform = SiteVars.cmscontext+'/transform_event/'+eventPath
        var reqTransform = new Ajax.Request(
          urlTransform,
          {
            method: 'post',
            parameters:'?'+cleanReq+'newStatus=2',
            onFailure:  function(req) { alert('Event Activation Update Failed.'); return false;},
            onComplete: function(req) {
              emailParams = cleanReq + 'toEmail='+useEmail+'&fromEmail='+useEmail+'&EventName='+eventName+'&LocationName='+locationName;
              //console.log(emailParams);
              sendEmailAlert({emailAlertUrl:'/events/send_activate_email',params:emailParams,reloadOnComplete:true});
            }
          }
        );
        
      }
    }
  );
}


/* JJ-2008.3.6: this is used everywhere that needs to send email alert (without doing anything onComplete */
function sendEmailAlert(options) {
  var emailAlertUrl = options.emailAlertUrl;
  var params = (options.params)?options.params:'';
  var url = SiteVars.cmscontext + emailAlertUrl;
  var reloadOnComplete = (options.reloadOnComplete)? options.reloadOnComplete : false
  
  //console.log('sending email');
  //console.dir(options);
  /* AJAX call to update the status */
  var req = new Ajax.Request(
    url,
    {
      method: 'post',
      parameters: params,
      onFailure:  function(req) { alert('Email has not been sent successfully.'); return false;},
      onComplete: function(req) { 
        if(reloadOnComplete==true){
          location.reload();
        }
        else{
          return true;
        }
      }
    }
  );  /* Ajax.Request */
}

function notifyConvenor(options){
  
  var eventPath =  options.eventPath;
  var emailAddress = options.emailAddress;
  var convenorInvitationUrl = options.convenorInvitationUrl;
  var eventName    = options.eventName;
  var locationName = options.locationName;
  
  /* JJ:2008.3.6: if you need to change "title" param value, you also need to update overrides/Events/public_email.xsl */
  var url = SiteVars.cmscontext+'/events/send_public_email';
  /* AJAX call to update the status */
  var req = new Ajax.Request(
    url,
    {
      method: 'post',
      parameters:'title=Please%20Confirm%20your%20event%20-%20'+eventName+'&toEmail='+emailAddress+'&fromEmail='+useEmail+'&ConvenorInvitationUrl='+convenorInvitationUrl+'&EventName='+eventName+'&LocationName='+locationName+'&convenorAction=notify',
      onFailure:  function(req) { alert('Notification Email has not been sent successfully.  Please try again.'); return false;},
      onSuccess: function(req) {
          //set status to "Pending Confirmation"
          updateEvent('3', eventPath);
          $('notify_convenor').innerHTML = '<div class="text">Notification email has been sent successfully.<br/></div>';
          return true;
        
      }
    }
  ); /* Ajax.Request */  
}

function confirmEvent(options){
  var userkey = options.userkey;
  var status = options.status;
  var emailAddress = options.emailAddress;
  var eventPath = options.eventPath;
  var homepageUrl = options.homepageUrl;
  var eventName    = options.eventName;
  var locationName = options.locationName;
  
  var urlTransform = SiteVars.cmscontext+'/transform_event/'+eventPath;
  var reqTransform = new Ajax.Request(
    urlTransform,
    {
      method: 'post',
      parameters:'newStatus=4&convenorKey='+userkey,
      onFailure:  function(req) { alert('Event Confirmation Failed.'); return false;},
      onComplete: function(req) {
        /* sendEmailAlert({emailAlertUrl:'/events/send_public_email'}); */
        /* JJ:2008.3.6: if you need to change "title" param value, you also need to update overrides/Events/public_email.xsl */
        sendEmailAlert({emailAlertUrl:'/events/send_public_email', params:'title=Your%20Event%20Homepage%20for%20'+eventName+'%20is%20ready%21&fromEmail='+useEmail+'&toEmail='+emailAddress+'&homepageUrl='+homepageUrl+'&EventName='+eventName+'&LocationName='+locationName});
        //location.reload(); 
        Element.toggle('review_txt');
        Element.toggle('confirmed_txt');
        Element.toggle('confirm_event');
        
      }
    }
    ); 

}



/* AT, AS: 2008-03 RT-44249 */
var inviteManager = {
  //{{{ sendInvites:function()
  sendInvites:function(){
    var inviteForm = $('addInvites');
    var convenorEmail = $('convenorEmail').value;
    var eventId = $('eventId').value;
    var eventHome = $('eventHomePage').value;
    var eventName = $('eventName').value;
    var eventLocation = 'events/'+eventId+'/'+eventHome;
    var trInviteLocation = '/transform_invites/'+eventId+'/'+eventHome;
    var inviteRows = inviteForm.getElementsByClassName('inviteInfo'); //li
    var eventName    = escape($('eventName').value);
    var locationName = escape($('locationName').value);
    var eventDate = escape($('eventDate').value);
    var eventTime = escape($('eventTime').value);
    var eventHost = escape($('eventHost').value);
    
    var total = inviteRows.length;
    var count1 = 0;
    var count2 = 0;
    var count3 = 0;

    var errorMessage = 'Incorrect email(s) format:\n';
    var formatError = false;
    
    /* AS: */
    var emailFields=$A($('guestlistinvites').getElementsByClassName('email'));
    emailFields.each(function(emailField){
      
      if ($F(emailField).strip() !='') {
        var objRegExp  = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*(\.[a-z]{2,4})$/;
        var res = objRegExp.test($F(emailField).strip());
        //alert(res+'['+$F(emailField)+']');
        if (!res) {
          formatError = true;
          errorMessage += ' '+$F(emailField)+'\n' ;
          return false;
        }  
      }  
    });
    
    if (formatError) { //incorrectly formatted
      alert(errorMessage);
    } else { //correctly formatted or empty emails
      
      $A(inviteRows).each(function(invite){
        
        invite.email = invite.getElementsByClassName('email'); //input email
        invite.first = invite.getElementsByClassName('firstname'); //input firstname
        invite.last = invite.getElementsByClassName('lastname'); //input lastname
  
        invite.emailAddress = invite.email[0].value.strip();
        invite.firstName = invite.first[0].value.strip();
        invite.lastName = invite.last[0].value.strip();
        
        if(invite.emailAddress!=''){
          var url = SiteVars.cmscontext+'/events/event_admin_utils';
          var req = new Ajax.Request(url,{
              method: 'post',
              parameters:'action=getConvenorInvitationUrl&emailAddress='+invite.firstName+invite.lastName+invite.emailAddress,
              onFailure:  function(req) { alert('Invite RSVP link Failed.'); return false;},
              onSuccess: function(req) {
                var cleanReq = req.responseText.replace(/\s/gi, ""); // '?newInvitationUrl=XYZ'
                var urlTransform = SiteVars.cmscontext+'/'+eventLocation+'/generate_invites';
                //var params = '?'+cleanReq+'firstName='+invite.firstName+'&lastName='+invite.lastName+'&emailAddress='+invite.emailAddress+'&convenorEmail='+convenorEmail+'&title='+eventName;
                var params = '?'+cleanReq+'firstName='+invite.firstName+'&lastName='+invite.lastName+'&emailAddress='+invite.emailAddress+'&convenorEmail='+convenorEmail+'&title=You\'re invited to '+eventName+'&trInviteLocation='+trInviteLocation+'&eventLocation='+eventLocation+'&EventName='+eventName+'&LocationName='+locationName+'&eventDate='+ eventDate +'&eventTime='+eventTime+'&eventHost='+eventHost;
                var reqTransform = new Ajax.Request(urlTransform,{
                    method: 'post',
                    parameters:params,
                    onFailure:  function(req) { alert('Invite Creation Failed.'); return false;},
                    onSuccess: function(req) {
                      var sendEmail = new Ajax.Request('/events/send_invite_email',{
                          method: 'post',
                          parameters: params,
                          onFailure:  function(req) { alert('Email has not been sent successfully.'); return false;},
                          onComplete: function(req) { 
                            count1++;
                            //alert(count1);
                            if(count1+count2+count3==total) {location.reload();}
                          }
                        }
                      );
                    }
                  }
                );
              }
            }
          );
        }  else {
          if(invite.firstName!='' || invite.lastName!='') {
          
            alert('Please, note:\n '+invite.firstName+' '+invite.lastName+' has empty email address. You will have to manage this invitation manually.');
            
            var urlTransform = SiteVars.cmscontext+'/'+eventLocation+'/generate_invites';
            //var params = '?'+cleanReq+'firstName='+invite.firstName+'&lastName='+invite.lastName+'&emailAddress='+invite.emailAddress+'&convenorEmail='+convenorEmail+'&title='+eventName;
            var params = '?newInvitationUrl='+invite.firstName+'_'+invite.lastName+'&firstName='+invite.firstName+'&lastName='+invite.lastName+'&emailAddress='+invite.emailAddress+'&convenorEmail='+convenorEmail+'&title='+eventName+'&eventDate='+ eventDate +'&eventTime='+eventTime+'&eventHost='+eventHost+'&Response=';
            var reqTransform = new Ajax.Request(urlTransform,{
                method: 'post',
                parameters:params,
                onFailure:  function(req) { alert('Invite Creation Failed.'); return false;},
                onSuccess: function(req) {
                  /* no emails */
                  count2++;
                  if(count1+count2+count3==total) {location.reload();}
                }
              }
            ); 
          } else {
             count3++;
             if(count1+count2+count3==total) {location.reload();}
          }
        }
      });
    
    } //if
    
    return false;
  }, //}}}
  
  //{{{ addGuest:function(resp)
  addGuest:function(resp){
    //var inviteForm = $('addInvites');
    var convenorEmail = $('convenorEmail').value;
    var eventId = $('eventId').value;
    var eventHome = $('eventHomePage').value;
    var eventName = $('eventName').value;
    var eventLocation = '/events/'+eventId+'/'+eventHome;
    var trInviteLocation = '/transform_invites/'+eventId+'/'+eventHome;

    var firstName = $F(resp + 'AddFirstName'); //vavoue for id = yesAddFirstName   etc
    var lastName = $F(resp + 'AddLastName');
    
    if(firstName!='' || lastName!='') {
      //alert('Adding '+firstName+' '+lastName+' to the ['+resp+'] column');
      
      var urlTransform = SiteVars.cmscontext+eventLocation+'/generate_invites';
      var params = '?newInvitationUrl='+firstName+'_'+lastName+'&firstName='+firstName+'&lastName='+lastName+'&emailAddress=&convenorEmail='+convenorEmail+'&title='+eventName+'&newResponse='+resp;
      var reqTransform = new Ajax.Request(urlTransform,{
          method: 'post',
          parameters:params,
          onFailure:  function(req) { alert('Invite Creation Failed.'); return false;},
          onSuccess: function(req) {
            location.reload();
          }
        } 
      ); 
    }
  },   //}}}
  
  //{{{ chooseAct:function(act)
  chooseAct:function(act){
    
    var allCB=$A(document.getElementsByClassName('InviteeCB'));
    checkedCB = allCB.findAll(function(cb) {  return cb.checked == true; }); //all checked check boxes
    
    if (checkedCB.size()>0) {
      switch (act) {
        case 'groupUninvite':
          inviteManager.groupUninvite(checkedCB);
          break;
        case 'groupSendMSG':
          inviteManager.groupSendMSG();
          break;
        case 'groupEditReply':
          inviteManager.groupEditReply();
          break;
        default:
          //alert('unknown act in inviteManager.chooseAct');
      }   
    } else { alert('Please select invitee(s)');}
  }, //}}}
  
  //{{{ groupUninvite:function(checkedCB)
  groupUninvite:function(checkedCB){

    var eventId = $('eventId').value;
    var eventHome = $('eventHomePage').value;
    //var eventName = $('eventName').value;
    var eventLocation = '/events/'+eventId+'/'+eventHome;
    var trInviteLocation = '/transform_invites/'+eventId+'/'+eventHome;

    var count = 0;
    var total = checkedCB.size();
    var popupResponse;

    var conf = 'no';  
    
    cfrm = confirm('Are you sure you wish to uninvite these guest(s)?\n\nPress OK to uninvite guest(s)\nPress Cancel to cancel this action');

    if(cfrm) {
       
       checkedCB.each(function(cb){
        var currDiv = cb.up();
        var firstName = currDiv.getElementsByClassName('FirstName')[0].innerHTML;
        var lastName = currDiv.getElementsByClassName('LastName')[0].innerHTML;
        var invitationUrl = currDiv.getElementsByClassName('InvitationUrl')[0].innerHTML;
        
        //transform invite:
        if((firstName!='' || lastName!='') && invitationUrl!='') {
          var urlTransform = SiteVars.cmscontext+trInviteLocation+'/'+invitationUrl;
          var params = '?newInviteStatus=uninvited';
          var reqTransform = new Ajax.Request(urlTransform,{
              method: 'post',
              parameters:params,
              onFailure:  function(req) { alert('Invite Edit Failed.'); return false;},
              onSuccess: function(req) {
                count++;
                if(count==total) {
                  Form.reset($('manageForm'));
                  location.reload();
                }
              }
            } 
          ); 
        } else {alert('names are empty - wrong entry');} 
        //erase checks:
        cb.checked = false;
       
        
      }); 
    } 
  }, //}}}
  
  //{{{ groupSendMSG:function()
  groupSendMSG:function(){
    win = window.open(SiteVars.cmscontext+"/invite_msg_popup", "inviteWin","no,no,width=450,height=450");
  }, //}}}
  
  //{{{ popupGroupSendMSG:function(popupResponse)
  popupGroupSendMSG:function(popupResponse){
    //newResponse - 
    var wOpener = window.opener;
    var convenorEmail = wOpener.$('convenorEmail').value;
    var eventId = wOpener.$('eventId').value;
    var eventHome = wOpener.$('eventHomePage').value;
    var eventName = wOpener.$('eventName').value;
    var eventLocation = '/events/'+eventId+'/'+eventHome;
    var trInviteLocation = '/transform_invites/'+eventId+'/'+eventHome;

    var count = 0;
    var total = wOpener.checkedCB.size(); //checkedCB comes from chooseAct()
    
    popupResponse = $('popupFormMsg').serialize();
    //alert('total='+total+'|'+popupResponse);

    //OK alert(wOpener.$('allYesCB','allNoCB','allNyrCB').invoke('hide'));
    //bad alert(wOpener.$('allYesCB','allNoCB','allNyrCB').invoke('reset'));
    //////////////////////////////wOpener.$('allYesCB','allNoCB','allNyrCB').each(function(cb){ Element.checked = false; } );

    wOpener.checkedCB.each(function(cb){
      var currDiv = cb.up();
      var firstName = currDiv.getElementsByClassName('FirstName')[0].innerHTML;
      var lastName = currDiv.getElementsByClassName('LastName')[0].innerHTML;
      var invitationUrl = currDiv.getElementsByClassName('InvitationUrl')[0].innerHTML;
      var currResponse = currDiv.getElementsByClassName('CurrResponse')[0].innerHTML;
      var emailAddress = currDiv.getElementsByClassName('EmailAddress')[0].innerHTML;
      
      //send email:
      if((firstName!='' || lastName!='') && invitationUrl!='') {
        var params = '?newInvitationUrl=' +invitationUrl+ '&firstName=' +firstName+ '&lastName=' +lastName+ '&emailAddress=' +emailAddress+ '&convenorEmail=' +convenorEmail+ '&title=' +eventName+ '&trInviteLocation=' +trInviteLocation+ '&currResponse=' +currResponse+ '&' +popupResponse;
        //console.log(params);
        //alert(popupResponse);
        var sendEmail = new Ajax.Request('/events/send_msg_email',{
            method: 'post',
            parameters: params,
            onFailure:  function(req) { alert('Email has not been sent successfully.'); return false;},
            onComplete: function(req) { 
              count++;
              //alert(count);
              if(count==total) {
                alert(count+' message(s) sent succesfully');
                Form.reset(wOpener.$('manageForm'));
                wOpener.location.reload();
                window.close();
              }
            }
          }
        );
      } else {alert('names are empty - wrong entry');count++;alert('count2='+count);} 
      //erase checks:
      cb.checked = false;
     
      
    });
    return false;
  },  //}}} 

  //{{{ groupEditReply:function(checkedCB)
  groupEditReply:function(checkedCB){
    win = window.open(SiteVars.cmscontext+"/invite_response_popup", "inviteWin","no,no,width=400,height=300");
   }, //}}}  

  //{{{ popupGroupEditReply:function(popupResponse)
  popupGroupEditReply:function(){
    //newResponse - 
    var wOpener = window.opener;
    var eventId = wOpener.$('eventId').value;
    var eventHome = wOpener.$('eventHomePage').value;
    //var eventName = $('eventName').value;
    var eventLocation = '/events/'+eventId+'/'+eventHome;
    var trInviteLocation = '/transform_invites/'+eventId+'/'+eventHome;

    var count = 0;
    var total = wOpener.checkedCB.size(); //checkedCB comes from chooseAct()
    
    popupResponse = Form.serializeElements($('popupForm').getInputs('radio'));
    Form.disable($('popupForm'));
    
    //console.log(popupResponse);
    //should be like newResponse=yes
    
    $A(wOpener.checkedCB).each(function(cb){
      var currDiv = cb.up();
      var firstName = currDiv.getElementsByClassName('FirstName')[0].innerHTML;
      var lastName = currDiv.getElementsByClassName('LastName')[0].innerHTML;
      var invitationUrl = currDiv.getElementsByClassName('InvitationUrl')[0].innerHTML;
      //console.log(firstName + ' ' + lastName + ': ' + invitationUrl);
      
      //transform invite:
      if((firstName!='' || lastName!='') && invitationUrl!='') {
        var urlTransform = SiteVars.cmscontext+trInviteLocation+'/'+invitationUrl;
        var params = '?'+popupResponse;  //newResponse:  'newResponse=yes' etc
        //console.log(urlTransform+params);
        //should be like /transform_invites/E0TNOdy~A-cC17LNuxvqeg__/de8b4b702bfaf66660e96cdef0d8834326ebdaf8/E0TNOdy~A-eNTPMp39oHxk4A5SGD55i8p5wuLD2Mqk2RqRxEF19zmQ__?newResponse=yes
        var reqTransform = new Ajax.Request(urlTransform,{
            method: 'post',
            parameters:params,
            onFailure:  function(req) { alert('Invite Edit Failed.'); return false;},
            onSuccess: function(req) {
              count++;
              if(count==total) {
                Form.reset(wOpener.$('manageForm'));
                wOpener.location.reload();
                window.close();
              }
            }//, onComplete: function(req) { alert('onComplete')}
          } 
        );
      } else {alert('names are empty - wrong entry');count++;alert('count2='+count);} 
      //erase checks:
      cb.checked = false;
      
    });
    return false;
  }, //}}}  

 //{{{ checkColumn:function(columnCB, resp)
 checkColumn:function(columnCB, resp){
    allYesCB=$A(document.getElementsByClassName(resp+'Response')); //all check boxes
    allYesCB.each(function(invitee){
      invitee.checked = (columnCB.checked == true) ? true : false;
    });     
  }, //}}}  

  //{{{ AddLine:function()
  AddLine:function() {
   
    //??lastdiv.previous(1).toggleClassName('middle'); //  toggle Class Name 'last' -> 'middle'

    
    //worked fine befor i removed  'lastdiv'  -  changed structure: 
    //$('lastdiv').previous(1).removeClassName('last').addClassName('middle');



    lastLi = document.getElementsByClassName('last',$('guestlistinvites')); 
    
    //alert(lastLi.invoke('classNames')); // -> 'last inviteInfo'
/////    alert(lastLi.invoke('classNames'));
    
    //lastLi.classNames(); ///AS why it doesn't work?? why this one worked? - $('lastdiv').previous(1).removeClassName('last').addClassName('middle');
    //-- document.getElementsByClassName('last',$('guestlistinvites')).removeClassName('last').addClassName('middle'); 
    //ok document.getElementsByClassName('last', $('guestlistinvites'));
    //OK alert(document.getElementsByClassName('last',$('guestlistinvites'))); 
    
    
    
    //$($('lastdiv').previous(1));
//    document.getElementsByClassName('addCtrl').invoke('setStyle',{'visibility':'hidden'});
//    document.getElementsByClassName('addCtrl').invoke('setStyle',{'visibility':'hidden'});
    
    
    //alert(document.getElementById('rowTemplate').cloneNode(true));
    templClone = $('rowTemplate').down().cloneNode(true);
    $('guestlistinvites').appendChild(templClone); // ul


    return false;
  }, //}}}

  //{{{ DeleteLine:function(currElement)
  DeleteLine:function(options) {
    
    var currElement = options.currElement;
    var liClass     = options.liClass;
    
    myLI = Element.ancestors(currElement);
    Element.remove(myLI[0]);
    
    var allRows = document.getElementsByClassName(liClass);
    var lastIdx = allRows.length-2;
    var lastAdd = allRows[lastIdx].getElementsByClassName('addCtrl');
    Element.show(lastAdd[0]);
    
  } //}}}

}

