// on document ready
$j(function(){

  // attach listener to the FR create buttons
  $j('.btn-act-create').click(function()
  {
    //ab_log('click','create_button_'+button_ab_info.testname,button_ab_info.locate);
    window.location = '/fundraisers/create';
  });

  $j('.fund-start').click(function()
  { 
    ab_log('click','create_button_'+button_ab_info.testname,button_ab_info.locate);
    window.location = '/signup';
  });

});

/**
 * this is used for AB test info toggling
 *
 */
function button_ab_info(locate,testname)
{
  button_ab_info.locate = locate;
  button_ab_info.testname = testname; 
}


// includes js files at js runtime
include = function(filename)
{
  var head = document.getElementsByTagName('head')[0];
  script = document.createElement('script');
  script.src = filename;
  script.type = 'text/javascript';
  head.appendChild(script)
}

// adding some additional methods to validator
if ($j.validator)
{
  $j.validator.setDefaults({
      onkeyup:false,
      errorClass: "error",
      errorPlacement: function(error, element)
      {
        error.appendTo($j(element).parent().parent());
      }
  });

  $j.validator.addMethod("complete_url", function(val, elem) {
      // if no url, don't do anything
      if (val.length == 0) { return true; }

      // if user has not entered http:// https:// or ftp:// assume they mean http://
      if(!/^(https?|ftp):\/\//i.test(val)) {
          val = 'http://'+val; // set both the value
          $j(elem).val(val); // also update the form element
      }
      // now check if valid url
      // http://docs.jquery.com/Plugins/Validation/Methods/url
      // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
      return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(val);
  });
}
// '

$j(function(){
    // Datepicker
    if(document.getElementById('datepicker')){
    $j('#datepicker').datepicker({
      inline: true,
      numberOfMonths: 1,
      dateFormat: 'dd-mm-yy',
      onSelect: function(dateText, inst) { get_end_date(dateText);}
    });
  }
  }
);


$j(document).ready(function() {


  if(document.getElementById("join_group_modal")) {
    $j('#join_group_modal').dialog({
      title: "Join this Group",
      autoOpen: false,
      dialogClass: 'inv-dialog',
      width: 580,
      height: 400,
      modal: true,
      resizable: false,
      autoResize: true
    }).width(580).height(425);
  }

  if(document.getElementById("datepicker") && $j('#end_date').val() != ''){
      arr_date = $j('#end_date').val().split('-');
      var date = arr_date[2]+"-"+arr_date[1]+"-"+arr_date[0];
      $j('#datepicker').datepicker( "setDate" , date );
  }
});


GF.partners_create  = function() {
// TODO handle errors
  $j("#partners_create").validate({
    rules: {
        ignore: ":hidden",
        title:
        {
          required: true
        },
        description:
        {
          required: true
        },
        blurb:
        {
          required: true
        }
      }
  });
}



/**
 *
 *    Validator Added Methods   *
                                *
                                **/
                                 

$j.validator.addMethod("element_label", function(value, element) {
  label = '';
  switch(element.id){
    case "bill_fname":    label = "First Name:"; break;
    case "bill_lname":    label = "Last Name:"; break;
    case "bill_address1":   label = "Address:"; break;
    case "bill_city":     label = "City:"; break;
    case "bill_zip":    label = "Zip:"; break;
    case "bill_email":    label = "Email Address:"; break;
    case "cc_name":     label = "Name on the card:"; break;
    case "cc_number":     label = "Credit card number:"; break;
    case "cc_expiration":   label = "XX/XXXX"; break;
    /******************************************/
    case "address":     label ="Address:"; break;
    case "city":      label ="City:"; break;
    case "zip":       label ="Zip:"; break;
    case "postal_code":   label ="Zip:"; break;
    case "phone":   label ="Phone:"; break;
    case "mailing_address": label ="Mailing Address:"; break;
  }
  if(value == label || value == ""){
    return false;
  }
  return true;
}, "This field is required.");

/**
 * refreshes hidden INPUT for widgEditor TEXTAREAS
 */
$j.validator.addMethod("check_widg", function(value, element) {
  for (i=0;i<widgEditors.length;i++){
    if (widgEditors[i].theTextarea.id == element.id + "WidgTextarea"){
      widgEditors[i].updateWidgInput();
      if($j("#"+element.id).val() == "") return false;
    }
  }

  return true;
}, "An entry is required.");



$j.validator.addMethod("date_check", function(value, element) {
  date_val = element.value.split('-');
  valid = 0;
  month = '';
  if(!date_val[0]){ return false;}
  if(!date_val[1]){ return false;}
  if(!date_val[2]){ return false;}
  switch(date_val[0]){
    case '1':  case '01': case 'January': case 'Jan':   month = '01';break;
    case '2':  case '02': case 'February': case 'Feb':  month = '02';break;
    case '3':  case '03': case 'March': case 'Mar':   month = '03';break;
    case '4':  case '04': case 'April': case 'Apr':   month = '04';break;
    case '5':  case '05': case 'May': case 'May':     month = '05';break;
    case '6':  case '06': case 'June': case 'June':   month = '06';break;
    case '7':  case '07': case 'July': case 'July':   month = '07';break;
    case '8':  case '08': case 'August': case 'Aug':  month = '08';break;
    case '9':  case '09': case 'September': case 'Sept':month = '09';break;
    case '10': case '10': case 'October': case 'Oct':   month = '10';break;
    case '11': case '11': case 'November': case 'Nov':  month = '11';break;
    case '12': case '12': case 'December': case 'Dec':  month = '12';break;
    default: return false;
  }
  switch(month){
    case '01': case '03': case '05': case '07': case '08': case '10': case '12':if(date_val[1] > 31 || date_val[1] < 0){return false;} break;
    case '02': val = 28; if(date_val[2] % 4 == 0){ val = 29;}
        if(date_val[1] > val || date_val[1] < 0){return false;} break;
    case '04': case '06': case '09': case '11': if(date_val[1] > 30 || date_val[1] < 0){ return false;}break;
    default: return false;

  }
  return true;
}, "Please enter a date in the format Month-Day-Year.");

/**
 * adds a NOT EQUAL method
 *
 */
$j.validator.addMethod("notEqual", function(value, element, param) {
  return this.optional(element) || value != param;
}, "This field is required.");


function display_latest(field){
  if($j(field).css('display') == "none"){
    $j(field).show();
  }else{
    $j(field).hide();
  }
}



function display_wg_elem(elem1, elem2, elem3){
  $j('#'+elem1).css('display','block');
  $j('#'+elem2).css('display','none');
  $j('#'+elem3).css('display','none');
  $j('#'+elem1+'-btn').css('background-image', 'url("'+GF.static_url+'/images/btn-wdg-act.gif")');
  $j('#'+elem2+'-btn').css('background-image', 'url("'+GF.static_url+'/images/btn-wdg-inact.gif")');
  $j('#'+elem3+'-btn').css('background-image', 'url("'+GF.static_url+'/images/btn-wdg-inact.gif")');
  $j('#'+elem1+'-btn').css('color', '#4c83c5');
  $j('#'+elem2+'-btn').css('color', '#FFFFFF');
  $j('#'+elem3+'-btn').css('color', '#FFFFFF');
}



function close_dialog(elem){
  $j("#"+elem).dialog('close');
}

GF.placeholder_forms = [];
GF.placeholder_memory = {};

GF.placeholders = function(placeholders)
{
  $j.each(placeholders, function(id,text)
  {
    var f = $j("#" + id);

    if (!f.val())
      f.val(text);

    f.bind('blur', function()
    {
      if (!$j(this).val()) $j(this).val(text);
    });

    f.bind("focus", function()
    {
      if ($j(this).val() == text) $j(this).val("");
    });

    var found = false;
    f = f.closest("form")[0];
    if (f)
    {
      GF.placeholder_memory[id] = text;
      $j.each(GF.placeholder_forms, function(a, b)
      {
        if (b == f)
        {
          found = true;
          return;
        }
      });

      if (!found)
      {
        GF.placeholder_forms.push(f);

        $j(f).bind("submit", function(event)
        {
          $j.each(this.elements, function()
          {
            if (GF.placeholder_memory[this.id])
            {
              if ($j(this).val() == GF.placeholder_memory[this.id])
              {
                $j(this).val("");
              }
            }
          });
        });
      }
    }
  });
};





GF.update_organization = function()
{
  $j("#update_organization").validate({
    rules: {
      title:{
        required  : true
      }
    }
  });
}







function show_members_page(scope, page, limit, id, search_text)
{
  var _url = '/'+scope+'/ajax_group_members';
  $j.post(
    _url,
    {
      page: page,
      limit: limit,
      search_text : search_text,
      id: id
    },
    function(data)
    {
      arr = data.split('#/#');
      html_val = '<ul>';
      start = (limit*(page-1));
      last = start+limit-1;
      total = arr.length;
      for (var x=0; x<total; x++)
      {
        if(x >= start && x <= last)
        {
        element = arr[x].split('#-#');
          html_val += '<li class="span-8 last" style="list-style:none;">';
            html_val += '<p class="span-2 wz-photos-margin50x50">'+element[3]+'</p>';
            html_val += '<p class="span-6 last">';
            html_val += '<a href="'+element[1]+'">'+element[0]+'</a> has raised <strong class="raised-amount">'+element[2]+'</strong>';
            html_val += '</p>';
          html_val += '</li>';
        }
      }
      html_val += '</ul>';
      if(total>limit)
      {
        html_val += '<div class="span-11 right-pad">';
        urls = new Array();
        for(var y = 1; y <= Math.ceil(total/limit); y++)
        {
          if(y == page)
            urls.push('<strong>'+y+'</strong>');
          else
            urls.push('<a onclick="show_members_page('+y+','+limit+',\''+id+'\',\''+search_text+'\');">'+y+'</a>');
        }
        html_val += urls.join(' - ');
        html_val += '</div>';
      }
      $j('#members-pages').html(html_val);
      presents_details('#members','#content','#donors','#events','#updates');
    });
}

function search_members_page(scope, page, limit, fundraiser_id)
{
  show_members_page(scope, page, limit, fundraiser_id, $j('#search_group_member').val());
}

/**
 * generated the state/prov list
 *
 */
GF.set_states = function(element)
{
  $j.post(
    '/ajax/load_states',
    {
      country : $j('#'+element+'_country').val(),
      field : element+'_state'
    },
    function(data) 
    {
      // fills in the state_prov tag with the generated result
      $j('#state_prov').html(data);
    }
  );
}


GF.join_group = function()
{
  $j('#join_group_modal').dialog('open');
  return false;
}


/**
 * shortens a URL via AJAX
 *
 */
GF.shorten_url = function(url)
{
  url = encodeURIComponent(url);
  var short;
  $j.ajax({
    async: false,
    url: '/ajax/url_shorten',
    type: "POST",
    data: "url="+url,
    success: function(data) 
    {
      //console.log(data);
      short = data;
    }
  });
  return short;
}
