/*
 * Javascript helper functions for handling ea3 campaign/form behavior.
 * NOTE: These js functions require at least jquery 1.3.2
 * Last Updated: 04/12/2010
 *
 */

   var a, pageTimer, warnMessage;
   function startClock(warnMsg) { 
      pageTimer = 0;
      warnMessage = warnMsg;
      a = window.setInterval('tick()', 60000); 
   }

   function tick() { 
      pageTimer++; 
      if (pageTimer == 28) { 
         warnuser(); 
      }
   }
   
   function warnuser() { 
      if (confirm(warnMessage)) {
         var url = CONTEXT_ROOT + '/action.retrievefile.do?sess=true';
         $.post(url, function(data) {pageTimer = 0;});
      }
   }

   function validateEAform(form) {
      // call validatefield to do all dynamic validations first
      var emptyparams = '';
      for(x = 0; x < form.elements.length; x++) {
         var ele = form.elements[x];
         if(ele.type != 'button' && ele.type != 'submit' && ele.type != 'reset') {
            if($(ele).attr("onBlur") != undefined) {
               if(ele.type != 'checkbox' && ele.type != 'radio') {
                  validatefield(ele);
               } else {
                  var val = $('input[name=' + ele.name + ']:checked').val();
                  if(!val) {
                     validatefield(ele);
                     if(emptyparams.indexOf(ele.name) == -1) {
                        emptyparams = emptyparams + '&' + escape(ele.name) + '=';
                     }
                  }
               }
            }
         }
      }

      // check entire form if anything is invalid
      var isValid = true;
      var params = $(form).serialize();
      var url = CONTEXT_ROOT + '/form.validate.do?' + params + emptyparams;
      var resp = $.ajax({type: 'post', url: url, async: false}).responseText;
      if(resp != '') {
         isValid = false;
         $('#eaerrors').html(resp);
         $('html, body').animate( {scrollTop: 0}, 'slow' );
         $('#errorheading').focus();
      }

      return isValid;
   }

   function validatefield(ele) {
      // ajax in the validation text
      var params = $(ele).serialize();
      params = params + '&name=' + escape(ele.name);
      params = params + '&ea.form.id=' + $('[name=ea.form.id]').val();
      params = params + '&ea.campaign.id=' + $('[name=ea.campaign.id]').val();
      var url = CONTEXT_ROOT + '/formfield.validate.do?' + params;
      $.post(url, function(data) {
         var divId = ele.name;
         divId = divId.replace(/ /g, '_') + 'Error';
         if(data == '') {
            $('#' + divId).addClass('eaErrorMessageHide');
         $('#' + divId).html(data);
         } else {
            $('#' + divId).removeClass('eaErrorMessageHide');
            $('#' + divId).html(data);
         }
      });

      // ajax in the validation icon (if configured)
      url = CONTEXT_ROOT + '/formfield.icon.do?' + params;
      $.post(url, function(data) {
         var divId = ele.name;
         divId = divId.replace(/ /g, '_') + 'Icon';
         $('#' + divId).html(data);
      });

      // ajax in the error highlight color (if configured)
      url = CONTEXT_ROOT + '/formfield.color.do?' + params;
      $.post(url, function(data) {
         var divId = ele.name;
         divId = divId.replace(/ /g, '_') + 'Div';
         if(data == '') {
            $('#' + divId).removeClass('eaFieldErrorHighlightColor');
         } else {
            $('#' + divId).addClass('eaFieldErrorHighlightColor');
         }
      });

      return false;
   }

   function checkdep(ele) {
      var frm = ele.form;
      var params = $(frm).serialize();
      params = params + '&ea.dependency.param=' + escape(ele.name);
      var url = CONTEXT_ROOT + '/formfield.dependency.do?' + params;
      $.post(url, function(jsondata) {
         if(jsondata) {
            for(var x = 0; x < jsondata.length; x++) {
               var data = jsondata[x];
               for(var key in data) {
                  if(key.indexOf("redirect") != -1) {
                     var redirectUrl = data[key];
                     if(redirectUrl.indexOf(CONTEXT_ROOT) != -1) {
                        redirectUrl = redirectUrl + '&' + getRedirectParameters(frm);
                     }
                     window.location.href = redirectUrl;
                  }
                  else if(key == "display_textfield") {
                     // disable current fields with this name
                     var eles = document.getElementsByName(ele.name);
                     if(eles) {
                        for(x = 0; x < eles.length; x++) {
                           eles[x].disabled = true;
                        }
                     }

                     // add new field text field for this element
                     var divId = ele.name;
                     divId = divId.replace(/ /g, '_') + 'Div';
                     $('#' + divId).append(data[key]);
                  }
                  else if(key == "hide") {
                     changefield(key, data[key]);
                  }
                  else if(key == "display") {
                     changefield(key, data[key]);
                  }
                  else if(key == "changeoptions") {
                     changeoptions(data[key]);
                  }
                  else {  // calculation
                     divId = key;
                     divId = divId.replace(/ /g, '_');
                     $('#' + divId).val(data[key]);
                     $('#' + divId).attr("readonly", true);
                  }
               }
            }
         }
      }, "json");

      return false;
   }

   function getRedirectParameters(form) {
      var params = '';
      for(x = 0; x < form.elements.length; x++) {
         var ele = form.elements[x];
         if(ele.type != 'button' && ele.type != 'submit' && ele.type != 'reset') {
            if($(ele).attr("onBlur") != undefined) {
               if(ele.type != 'checkbox' && ele.type != 'radio') {
                  params = params + '&' + escape(ele.name) + '=' + escape(ele.value);
               } 
               else {
                  var val = $('input[name=' + ele.name + ']:checked').val();
                  if(val && params.indexOf(ele.name) == -1) {
                     params = params + '&' + escape(ele.name) + '=' + escape(val);
                  }
               }
            }
         }
      }

      return params;
   }

   function changeoptions(values) {
      var options = values.split('~');
      if(options.length > 1) {
         var field = options[0];
         $('#' + options[0]).children().remove().end();
         for(x = 1; x < options.length; x++) {
            var vals = options[x].split('||');
            $('#' + options[0]).append('<option value="' + vals[1] + '">' + vals[0] + '</option>');
         }
         changefield('display', field);   
      }
   }

   function changefield(action, field) {
      if(action == 'display') {
         field = field.replace(/ /g, '_') + 'Div';
         $('#' + field).show();
      }
      else if(action == 'hide') {
         field = field.replace(/ /g, '_') + 'Div';
         $('#' + field).hide();
      }
   }

   function removeother(id) {
      var eles = document.getElementsByName(id);
      var other = id.replace(/ /g, '_') + 'OtherSpan';
      if(eles && eles.length > 0) {
         $('#' + other).remove();
         for(x = 0; x < eles.length; x++) {
            eles[x].disabled = false;
            if(eles[x].type == 'radio') {
               eles[x].checked = false;
            } else {
               $(eles[x]).val(1);
            }
         }
      }
   }
   
   function doEAPageRefresh(theForm) {
      if(theForm) {
         theForm.ea_requested_action.value = "campaign_page_refresh";
         theForm.submit();
      }
   }
   
   function doEAAjaxPageRefresh(theForm) {
      if(theForm) {
         theForm.ea_requested_action.value = "campaign_page_refresh";
         doAJAXForm(theForm, "eaAjaxContent", false);
      }
   }
   
   function hideFormButtons(pageNumber) {
      var divName = "eaFormClose_" + pageNumber;
      var theDiv = document.getElementById(divName);
      if (theDiv) {
         theDiv.style.display = "none";
      }
   }

