
function isValidURL(url){
    var theRegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
    if(theRegExp.test(url)){
        return true;
    }else{
        return false;
    }
}

function isValidEmail(email){
    return (email.indexOf('.') > 0) && (email.indexOf('@') > 0);
}

function strip_spaces(string){
    return string.replace(/(^\s*|\s*$)/, '');
}

function setElementValue(elementId, value) {
  element = f$(elementId);
  element.setValue(value);
}

function setImageSrc(imageId, src) {
  image = f$(imageId);
  image.setSrc(src);
  text = f$('uploaded_image_text');
  if (text != null) {
    text.setStyle('display','block');
  }
}

// check dialogue isn't too far right or to bottom...
function check_review_box_position(review_box_id) {
  var content = f$('entire_content');
  var obj = f$(review_box_id);
  
  var thisAbsoluteOffsetLeft = obj.getAbsoluteLeft();
  var canvasAbsoluteOffsetLeft = content.getAbsoluteLeft();
  var canvasWidth = content.getOffsetWidth();
  var thisWidth = obj.getOffsetWidth();
  var objMoveLeft = thisAbsoluteOffsetLeft - canvasAbsoluteOffsetLeft;
  
  var contentAbsoluteOffsetTop = content.getAbsoluteTop();
  var contentHeight = content.getOffsetHeight();
  var objAbsoluteOffsetTop = obj.getAbsoluteTop();
  var objHeight = obj.getOffsetHeight();
  var objTop = objAbsoluteOffsetTop - contentAbsoluteOffsetTop;
  var farBottom = objTop + objHeight;
  
  if (farBottom > contentHeight) {
    margin = (farBottom-contentHeight);
    obj.setStyle('marginTop','-'+margin+'px');
  }
  
  if ((objMoveLeft+thisWidth) > canvasWidth) {
    var margin = (objMoveLeft+thisWidth) - canvasWidth;
    obj.setStyle('marginLeft','-'+ margin +'px');
  }
  obj.setStyle('display','block');
}

function toggle(id) {
  if (typeof id == 'object') {
    obj = id;
  } else {
    obj = f$(id);
  }
  if (obj.getStyle('display') == 'none') {
    obj.setStyle('display','block');
  } else {
    obj.setStyle('display','none');
  }
}

function track_link(obj) {
  var obj = bantr.rereg(obj);
  var out_url = obj.getHref();
  if (!out_url.match(bantr.app_url)) {
    var url = bantr.app_url+'track_link.php?url='+escape(out_url);
    obj.setHref(url);
    obj.setTarget('_blank');
  } else if (!out_url.match(bantr.app_url+'track_link.php?')) {
    obj.setTarget('');
  }
  return false;
}

function contains_spam(content) {
  content = content.toLowerCase();
  var theRegExp = /work from home|home based biz|workathomeunited|work at home|avon|candles|candle party|gold canyon|m.o.m.|great opportunity|start your own business|truly legitimate|are you looking for|motivated moms|motivatedmoms|freedom to be a mom|entertaining at home|monavie|arbonne|business opportunity|no start up|eahweb|scent-team|nutritionaljuice|freedomwithmyfamily|thefreedomunitedteam|uffproductvideo|themomteam|livetotalwellness|busymomshappilyworkfromhome|tsginfo|purseparty|ecotrustenergy|truewealthathome|crystalinternationalassociates|celebrate-in-style|lbri|no start-up|make more money|make extra money|foodforcraft|sensiblebiz4you|mygc|azuliskye|earn more money|earn extra money/;
  if (theRegExp.test(content)) {
    return true;
  } else {
    return false;
  }
}

// a couple form validation helpers.
function clear_validation_errors(form_id) {
  var form_obj = f$(form_id);
  var inputs = [];
  var counter = 0;
  var counter2 = 0;
  inputs[0] = form_obj.getElementsByTagName('input');
  inputs[1] = form_obj.getElementsByTagName('textarea');
  inputs[2] = form_obj.getElementsByTagName('select');
  inputs[3] = form_obj.getElementsByTagName('div');
  
  for (counter=0;counter<inputs.length;counter++) {
    sub_set = inputs[counter];
    for (counter2=0;counter2<sub_set.length;counter2++) {
      sub_set[counter2].removeClassName('input_element_error');
    }
  }
  var divs = inputs[3];
  for (counter=0;counter<divs.length;counter++) {
      if (divs[counter].getClassName() == 'error_message') {
          var par = divs[counter].getParentNode();
          par.removeChild(divs[counter]);
      }
  }
}

// returns 1 on errors, 0 otherwise.
// field_id can also be an f$ object.
function validate_field(field_id,error_message,validation_type,default_value,error_location_id) {
  var counter = 0;
  var error = false;
  var found_checked = false;
    if (validation_type == 't_and_c') {
      if (f$('terms_and_conditions_container').getStyle('display') == '') {
        field_id = 'upload_terms_and_conditions';
        error_message = 'You must accept the terms of use';
        validation_type = 'checked';
        error_location_id = 't_and_c_error_message';
      } else {
        return 0;
      }
    }
    if (typeof field_id == 'object') {
      var field = field_id;
    } else {
      var field = f$(field_id);
    }
    if (typeof default_value == 'undefined') {
      default_value = '';
    }
    if (typeof validation_type == 'undefined') {
        validation_type = 'exists';
    }
    if (typeof error_location_id == 'undefined') {
      error_location_id = '';
    }
    
    if (validation_type == 'exists') {
      if (!field.getValue() || field.getValue() == default_value) {
        error = true;
        if (default_value != '') {
          field.setValue('');
        }
      }
    /*  if (!error) {
        val = field.getValue();
        if (val == val.toUpperCase() && val.length > 5 && parseInt(val) != val) {
          field.setValue(val.toLowerCase());
          error_message = 'Please do not SHOUT. The ALL CAPS have been removed from your text. Please review these changes before continuing.';
          error = true;
          validation_type = 'shouted';
        }
      }        */
    } else if (validation_type.substring(0,7) == 'min_int') {
      var ar = validation_type.split(':');
      var min = ar[1];
      if (parseInt(field.getValue()) < min) {
        error = true;
      }
    } else if (validation_type == 'numeric') {
      if (parseInt(field.getValue()) != field.getValue()) {
        error = true;
      }
    } else if (validation_type == 'upload_required') {
      var thumb_holder = f$('uploaded_thumbs');
      var pics = thumb_holder.getChildNodes();
      if (pics.length < 1) {
        error_message = 'You must upload a picture';
        error_location_id = 'uploaded_thumbs';
        error = true;
      }
    } else if (validation_type == 'zip_code') {
        if (!isZip(field.getValue())) {
           error = true;
        }
    } else if (validation_type == 'checked') {
      if (field.getChecked() != true) {
        error = true;
      }
    } else if (validation_type == 'email') {
      if (field.getValue() != '' && isValidEmail(field.getValue()) == false) {
        error = true;
      }
    } else if (validation_type == 'radios') {
      fields = field.getElementsByTagName('input');
      for (counter=0;counter<fields.length;counter++) {
        if (fields[counter].getChecked() == true) {
          found_checked = true;
          break;
        }
      }
      if (!found_checked) {
        error = true;
      }
    } else if (validation_type == 'check_at_least_one') {
      checkboxes = f$(field_id).getElementsByTagName('input');
      for (counter=0;counter<checkboxes.length;counter++) {
        if (checkboxes[counter].getChecked() == true) {
          found_checked = true;
          break;
        }
      }
      if (!found_checked) {
        error = true;
      }
    } else if (validation_type == 'detect_match') {
      if (typeof 'repeat_'+field_id == 'object') {
        var field2 = 'repeat_'+field_id;
      } else {
        var field2 = f$('repeat_'+field_id);
      }
 
      if (!field.getValue()) error = true;
      if (!field2.getValue()) error = true;
      if (field.getValue() != field2.getValue()) {
        field.setValue('');
        field2.setValue('');
        error = true;
      }
  }
    
    if (error) {
      if (error_message != '') {
        show_error_message(field_id,error_message,validation_type,error_location_id);
      }
      return 1;
    } else {
      return 0;
    }
}


function show_error_message(input_id,error_message_string,validation_type,error_location_id) {
  if (typeof input_id == 'object') {
    var obj = input_id;
  } else {
    var obj = f$(input_id);
  }
  
  var obj_error = bantr.create_element('div');
  obj_error.setClassName('error_message');
  obj_error.setTextValue(error_message_string);
  
  if (typeof error_location_id == 'undefined' || error_location_id == '') {
    var par = obj.getParentNode();
    par.insertBefore(obj_error,obj);
  } else {
    var par = f$(error_location_id);
    par.appendChild(obj_error);
  }
  if (validation_type == 'upload_required') {
    f$('photo_form').addClassName('input_element_error');
    f$('photo_form').addEventListener('change', 
                function(event) {
                  try {
                    par.removeChild(obj_error);
                    obj.removeClassName('input_element_error');
                    validate_field(obj,error_message_string,validation_type,default_value,error_location_id);
                  } catch(ignore){}
                }.bind(this));
  } else {
    if (validation_type != 'shouted') {
      obj.addClassName('input_element_error');
    }
    obj.addEventListener('keydown', 
                function(event) {
                  try {
                    par.removeChild(obj_error);
                    obj.removeClassName('input_element_error');
                    validate_field(obj,error_message_string,validation_type,default_value,error_location_id);
                  } catch(ignore){}
                }.bind(this));
    obj.addEventListener('change', 
                function(event) {
                  try {
                    par.removeChild(obj_error);
                    obj.removeClassName('input_element_error');
                    validate_field(obj,error_message_string,validation_type,default_value,error_location_id);
                  } catch(ignore){}
                }.bind(this));
  }
}

function isZip(s) {
  // valid zip code
  var reZip = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
  if (!reZip.test(s)) {
    return false;
  }
  return true;
}


function toggle_tabs(caller_tab,content_show_id,content_container_id) {
  var caller_tab = bantr.rereg(caller_tab);
  var tab_holder = caller_tab.getParentNode();
  var tabs = tab_holder.getElementsByTagName('li');
  for (i=0;i<tabs.length;i++) {
    tabs[i].addClassName('cust_fs_tab');
    tabs[i].removeClassName('cust_fs_tab_on');
  }
  caller_tab.addClassName('cust_fs_tab_on');
  var container = f$(content_container_id);
  children = container.getChildNodes();
  for (i=0;i<children.length;i++) {
    children[i].setStyle('display','none');
  }
  f$(content_show_id).setStyle('display','block');
}

function getPos(obj) {
  var all_content = f$('entire_content');
  var width = obj.getOffsetWidth();
  var height = obj.getOffsetHeight();
  var contentAbsoluteOffsetLeft = all_content.getAbsoluteLeft();
  var objAbsoluteOffsetLeft = obj.getAbsoluteLeft();
  var contentAbsoluteOffsetTop = all_content.getAbsoluteTop();
  var objAbsoluteOffsetTop = obj.getAbsoluteTop();
  var objMoveTop = objAbsoluteOffsetTop - contentAbsoluteOffsetTop;
  var objMoveLeft = objAbsoluteOffsetLeft - contentAbsoluteOffsetLeft;
  var result = {'top': objMoveTop , 'left': objMoveLeft , 'width': width , 'height': height}
  return result;
}

var mini_profile_hover_t // timeout holder
var mini_profile_hover_t_position // keep checking position
var mini_profile_hover_current // currently on
var mini_profile_mouse_position = 0;
// gets the appropriate user info and fills the mini-profile element
function get_mini_profile(caller_id,bantr_uid) {
  mini_profile_mouse_position = 1;
  mini_profile_clear_timeout();
  if (mini_profile_hover_current != caller_id) {
    // get new one
    real_hide_mini_profile();
    mini_profile_hover_current = caller_id;
    f$('mini_profile_hover_inner_orig').setStyle('display','block');
    function callback() {
      show_mini_profile(caller_id);
    }
    custom_ajax('index.php?action_type=get_mini_profile',{'rewrite_id':'mini_profile_hover_inner_orig','parameters':{'bantr_uid':bantr_uid},"on_done_call_function":callback});
  }
}

// displays and positions the popup
function show_mini_profile(caller_id){
  if (mini_profile_hover_current == caller_id && mini_profile_mouse_position == 1) {
    clearTimeout(mini_profile_hover_t_position);
    f$('mini_profile_hover').setStyle('display','block');
    position_mini_profile(caller_id);
  }
}

// positions
function position_mini_profile(caller_id) {
  var pop = f$('mini_profile_hover');
  var popWidth = pop.getOffsetWidth();
  var popHeight = pop.getOffsetHeight();
  var all_content = f$('entire_content');
  var contentAbsoluteOffsetLeft = all_content.getAbsoluteLeft();
  var contentWidth = all_content.getOffsetWidth();
  var caller = f$(caller_id);
  var callerAbsoluteOffsetLeft = caller.getAbsoluteLeft();
  var callerWidth = caller.getOffsetWidth();
  var objMoveLeft = callerAbsoluteOffsetLeft - contentAbsoluteOffsetLeft;
  // heights
  var contentAbsoluteOffsetTop = all_content.getAbsoluteTop();
  var contentHeight = all_content.getOffsetHeight();
  var callerAbsoluteOffsetTop = caller.getAbsoluteTop();
  var callerHeight = caller.getOffsetHeight();
  var objMoveTop = callerAbsoluteOffsetTop - contentAbsoluteOffsetTop;
  
  var posLeft = objMoveLeft + callerWidth;
  var posTop = objMoveTop;
  
  var farRight = posLeft + popWidth;
  var farBottom = posTop + popHeight;
  
  // check bottom
  if (farBottom > contentHeight) {
    posTop = posTop - (farBottom-contentHeight);
  }
  pop.setStyle('top',posTop+'px');
  // check right
  if (farRight > contentWidth) {
    
    posLeft = objMoveLeft - popWidth;
    f$('pop_dialogue_left_border').setClassName('bantr_pop_border');
    f$('pop_dialogue_right_border').setClassName('bantr_pop_border speech_right');
  } else {
    f$('pop_dialogue_left_border').setClassName('bantr_pop_border speech_left');
    f$('pop_dialogue_right_border').setClassName('bantr_pop_border');
  }
  pop.setStyle('left',posLeft+'px');
  
  // set a timeout to keep checking this, because the size of the popup can change...
  mini_profile_hover_t_position = setTimeout(function(){position_mini_profile(caller_id)},100);
}

function hide_mini_profile() {
  mini_profile_mouse_position = 0;
  mini_profile_hover_t = setTimeout(function(){real_hide_mini_profile()},1000);
}

function is_mini_profile_loading_something() {
  var do_hide = true;
  var root = f$('mini_profile_hover');
  var mini_divs = root.getElementsByTagName('div');
  for (var i = 0; i < mini_divs.length; i++) {
    if (mini_divs[i].getStyle('display') == 'block') {
      if (mini_divs[i].getClassName() == 'ajax_loading_bar') {
        mini_profile_clear_timeout();
        return true;
      }
      if (mini_divs[i].getId() == 'mini_profile_hover_inner_rewrite') {
        mini_divs_2 = mini_divs[i].getElementsByTagName('div');
        if (mini_divs_2[0].getClassName() == 'ajax_loading_bar') {
          mini_profile_clear_timeout();
          return true;
        }
      }
      if (mini_divs[i].getId() == 'mom_wall_greetings_posting') {
        mini_profile_clear_timeout();
        return true;
      }
    }
  }
  return false;
}
function real_hide_mini_profile() {
  if (!is_mini_profile_loading_something()) {
    f$('mini_profile_hover').setStyle('display','none');
    f$('mini_profile_hover_inner_orig').setTextValue('');
    real_hide_mini_profile_reset_loading_div();
    f$('mini_profile_hover_inner_rewrite').setStyle('display','none');
    mini_profile_hover_current = null;
    clearTimeout(mini_profile_hover_t_position);
  }
}

function real_hide_mini_profile_reset_loading_div() {
  var par = f$('mini_profile_hover_inner_rewrite')
  show_loading(par);
}

function show_loading(el) {
  el.setTextValue('\u00a0');
  var div = bantr.create_element('div');
  div.setClassName('ajax_loading_bar');
  el.appendChild(div);
}

function mini_profile_clear_timeout() {
  clearTimeout(mini_profile_hover_t);
}

function reset_profile_hover() {
  real_hide_mini_profile_reset_loading_div();
  f$('mini_profile_hover_inner_rewrite').setStyle('display','none');
  f$('mini_profile_hover_inner_orig').setStyle('display','block');
}

function badge_show_details(badge_type) {
  right_side = f$('mini_profile_right_side');
  children = right_side.getChildNodes();
  for (child in children) {
    if (typeof children[child] == 'object') {
      try {
        children[child].setStyle('display','none');
      } catch(err) {
        // ignore
      }
    }
  }
  f$('mini_profile_right_'+badge_type).setStyle('display','block');
  
  left_side = f$('profile_hover_badges');
  children = left_side.getChildNodes();
  for (child in children) {
    if (typeof children[child] == 'object') {
      try {
        children[child].removeClassName('active');
      } catch(err) {
        // ignore
      }
    }
  }
  f$('mini_profile_badge_'+badge_type).addClassName('active');
}

function home_page_suggested_communities(previous_recommended_communities) {
  var table = f$('recommended_communities_home');
  if (table) {
    var inputs = table.getElementsByTagName('input');
    this.community_ids = [];
    for (this.i=0;this.i<inputs.length;this.i++) {
      if (inputs[this.i].getType() == 'hidden' && inputs[this.i].getName() == 'community_ids[]') {
        this.community_ids.push(inputs[this.i].getValue());
      }
    }
    this.these_community_ids_as_string = this.community_ids.join(',');
    this.previous_recommended_communities = previous_recommended_communities;
    var previous_ar = previous_recommended_communities.split('|');
    if (this.previous_recommended_communities.length == 0 || index_of(previous_ar,this.these_community_ids_as_string.toString()) == 0) {
      f$('recommended_communities_prev').setStyle('display','none');
    }
  }
  this.submited = false;
}

home_page_suggested_communities.prototype.join = function join() {
  var error_count = 0;
  this.set_saving_text('Saving');
  if (!this.submited) {
    clear_validation_errors('recommended_communities_home_form');
    error_count += validate_field('recommended_communities_home','You must select at least one community to join','check_at_least_one');
    if (error_count == 0) {
      this.submit_visual();
      custom_ajax('index.php?action_type=recommended_communities_home_join',{'rewrite_form':'recommended_communities_home_form','rewrite_id':'recommended_communities_home_outer'});
    }
  }
};
home_page_suggested_communities.prototype.submit_visual = function submit_visual() {
  if (f$('recommended_communities_join_submit')) {
    f$('recommended_communities_join_submit').addClassName('clicked');
    f$('recommended_communities_home_form').addClassName('fade_out');
    f$('form_submitted_animation').setStyle('display','');
    this.submited = true;
  }
};       
home_page_suggested_communities.prototype.next = function next() {
  this.submit_visual();
  this.set_saving_text('Loading');
  custom_ajax('index.php?action_type=recommended_communities_home_join&next=1',{'rewrite_id':'recommended_communities_home_outer','rewrite_form':'recommended_communities_home_form'});
};
home_page_suggested_communities.prototype.prev = function prev() {
  this.submit_visual();
  this.set_saving_text('Loading');
  custom_ajax('index.php?action_type=recommended_communities_home_join&prev=1',{'rewrite_id':'recommended_communities_home_outer','rewrite_form':'recommended_communities_home_form'});
};
home_page_suggested_communities.prototype.set_saving_text = function set_saving_text(text) {
  if (f$('recommended_communities_home_form_saving_text')) {
    f$('recommended_communities_home_form_saving_text').setTextValue(text);
  }
};

function show_feed_dialog(response,callback) {
  if (typeof(callback) == 'undefined') {
    callback = null;
  }
  if (bantr.script_location == bantr.APP_ID_BANTR) {
    FB_RequireFeatures(["XFBML"], function() {
      FB.init(bantr.api_key, bantr.local_url+"xd_receiver.htm");                
      FB.Connect.showFeedDialog(response.template_bundle_id, response.template_data, null, null, null, FB.RequireConnect.require, callback, response.user_message_prompt, response.user_message);
    });
  } else {
    Facebook.showFeedDialog(response.template_bundle_id, response.template_data, response.body_general, null, callback, response.user_message_prompt, response.user_message);
  }
}

function validate_and_submit_header_search_form(){
  if (f$('header_search_text_input').getValue() == '' || f$('header_search_text_input').getValue() == 'enter something') {
     f$('header_search_text_input').setValue('enter something');
  } else {
     f$('header_search_form').submit()
  }
}
function check_and_reset_header_search_form(){
  if (f$('header_search_text_input').getValue() == 'enter something' || f$('header_search_text_input').getValue() == 'search') {
     f$('header_search_text_input').setValue('');
  }
}

function index_of(search_array,needle) {
  for(var i=0; i<search_array.length; i++){
    if(search_array[i]==needle){
      return i;
    }
  }
  return -1;
}

function is_poll_valid(poll_id) {
  var form = f$('poll_question_'+poll_id);
  var inputs = form.getElementsByTagName('input');
  for (input in inputs) {
    if (typeof inputs[input] == 'object') {
      try {
        if (inputs[input].getChecked()) {
          return true;
        }
      } catch (ignore) {}
    }
  }
}

function vote_on_poll_thread(poll_id,entity_id,entity_type,show_results_over_home_page) {
  var callback = function(data) {
    vote_on_poll_send_home(data,poll_id);
  }
  if (!is_poll_valid(poll_id)) {
    f$('poll_error_'+poll_id).setStyle('display','block');
  } else {
    f$('poll_error_'+poll_id).setStyle('display','none');
    f$('poll_submit_button_'+poll_id).addClassName('clicked');
    if (!show_results_over_home_page) {
      f$('interstitial_outer').setStyle('display','');
      custom_ajax("index.php?action_type=poll_vote&context=interstitial", {"rewrite_form":"poll_question_"+poll_id, "parameters":{"entity_id":entity_id,"entity_type":entity_type},"rewrite_id": "interstitial_content"});
    } else {
      custom_ajax("index.php?action_type=poll_vote&context=show_res_over_home_page",{"rewrite_form":"poll_question_"+poll_id, "parameters":{"entity_id":entity_id,"entity_type":entity_type}, 'response_type':'JSON','on_done_call_function':callback});
    }
  }
}

function vote_on_poll(poll_id,show_results_over_home_page) {
  if (typeof show_results_over_home_page == 'undefined') {
    show_results_over_home_page = false;
  }
  vote_on_poll_thread(poll_id,null,null,show_results_over_home_page);
}
function vote_on_poll_send_home(data,poll_id) {
  if (typeof data != 'object') {
    bantr.show_error('Oops','There was a problem');
  } else {
    var form = bantr.create_element('form');
    form.setAction(bantr.app_url + 'home.php');
    form.setMethod('post');
    var input = bantr.create_element('input');
    input.setValue(poll_id).setName('poll_result_id');
    form.appendChild(input);
    f$('entire_content').appendChild(form);
    form.submit();  
  }
} 
function fade_poll_save(poll_id) {
  if (f$('poll_submit_button_'+poll_id)) {
    f$('poll_submit_button_'+poll_id).removeClassName('clicked');
  }
}
function toggle_poll_view(poll_id,direction) {
  if (direction == 1) {
    f$('poll_question_'+poll_id).setStyle('display','block');
    f$('poll_results_'+poll_id).setStyle('display','none');
  } else if (direction == 2) {
    f$('poll_question_'+poll_id).setStyle('display','none');
    f$('poll_results_'+poll_id).setStyle('display','block');
  } else {
    f$('poll_question_'+poll_id).setStyle('display','none');
    f$('poll_results_'+poll_id).setStyle('display','none');
  }
}

// depreciated - use custom_ajax instead
function customMockAjax(formname, posturl, rewriteid) {
  crw_id   = f$(rewriteid);
  crw_form = f$(formname);
  crw_ajax = new Ajax();
  crw_ajax.responseType = Ajax.FBML;
  crw_ajax.requireLogin = false;
  crw_ajax.ondone = function(data) {
    crw_id.setInnerFBML(data);
  }
  crw_formdata = crw_form.serialize();
  crw_ajax.post(posturl, crw_formdata);
}
function pingURL(posturl) {
  crw_ajax = new Ajax();
  crw_ajax.responseType = Ajax.FBML;
  crw_ajax.requireLogin = false;
  crw_ajax.ondone = function(data) {
  }
  crw_ajax.post(posturl);
}

function resize_image(image_id,maxX,maxY,center_within_containing_element,enlarge) {
  if (typeof vertical_center_within_containing_element == 'undefined') {
    vertical_center_within_containing_element = false;
  }
  if (typeof enlarge == 'undefined') {
    enlarge = false;
  }
  if (typeof image_id == 'string') {
    var image = f$(image_id);
  } else {
    image = image_id; // object itself
  }
  image.setStyle({'display':'block','visibility':'hidden'});
  var width=parseInt(image.getOffsetWidth());
  var height=parseInt(image.getOffsetHeight());
  if ((width < 35 && width > 0) && (height < 35 && height > 0)) {
    // if image hasn't loaded yet, let's try again later
    setTimeout(function() { resize_image(image,maxX,maxY,center_within_containing_element); },500); 
    return false;
  }
  if(width>0&&height>0){
    if(width>maxX||height>maxY){
      var desired_ratio=maxY/maxX;
      var actual_ratio=height/width;
      if(actual_ratio>desired_ratio){
        width=width*(maxY/height);
        height=maxY;
      }else{
        height=height*(maxX/width);
        width=maxX;
      }
    }
  }
  height = parseInt(height);
  width = parseInt(width);
  if ((height < image.getOffsetHeight() && width < image.getOffsetWidth()) || enlarge) {
    image.setStyle({'height':height+'px', 'width':width+'px'});
  }
  if (center_within_containing_element) {
    var par = image.getParentNode();
    var par_height = par.getOffsetHeight();
    var par_width = par.getOffsetWidth();
    // try to catch weird errors
    if ((width < 50 && width > 0) || (height < 50 && height > 0)) {
      setTimeout(function() { resize_image(image,maxX,maxY,center_within_containing_element); },500); 
      return false;
    }
    // facebook getOffsets should include borders, but they don't seem to - at least when it's an image element.
    var y_border_width = parseInt(remove_trailing_chars_from_integer(image.getStyle('borderRightWidth'))) + parseInt(remove_trailing_chars_from_integer(image.getStyle('borderLeftWidth')));
    var x_border_width = parseInt(remove_trailing_chars_from_integer(image.getStyle('borderTopWidth'))) + parseInt(remove_trailing_chars_from_integer(image.getStyle('borderBottomWidth')));
    height = height+x_border_width;
    width = width+y_border_width;
    var margin_top = (parseInt((par_height-height)/2));
    var margin_left = (parseInt((par_width-width)/2));
    image.setStyle('marginTop',margin_top+'px');
    image.setStyle('marginLeft',margin_left+'px');
  }
  image.setStyle('visibility','visible');
}
function remove_trailing_chars_from_integer(input_str) {
  var loop_length = input_str.length;
  var ar = input_str.split();
  var out = '';
  for (var i=0;i<loop_length;i++) {
    if (isNaN(parseInt(ar[i]))) {
      break;
    } else {
      out += ar[i];  
    }    
  }
  return parseInt(out);
}

function resize_images(center_within_containing_element) {
  if (typeof center_within_containing_element == 'undefined') {
    center_within_containing_element = false;
  }
  var images = f$('entire_content').getElementsByTagName('img');
  for (var i=0;i<images.length;i++) {
    image = images[i];
    class_name = image.getClassName();
    if (class_name && class_name.match('resize_image-')) {
      ar = class_name.split(' ');
      for (z=0;z<ar.length;z++) {
        if (ar[z].match('resize_image-')) {
          ar2 = ar[z].split('-');
          ar3 = ar2[1].split('x');
          resize_image(image,ar3[0],ar3[1],center_within_containing_element);
          break;
        }
      }
    }
  }
}

function shuffle ( myArray ) {
  var i = myArray.length;
  if ( i == 0 ) return false;
  while ( --i ) {
     var j = Math.floor( Math.random() * ( i + 1 ) );
     var tempi = myArray[i];
     var tempj = myArray[j];
     myArray[i] = tempj;
     myArray[j] = tempi;
   }
  return myArray;
}

function reset_interstitial() {
  f$('interstitial_content').setInnerFBML(reset_loading_div);
  f$('interstitial_content').removeClassName('error');
  f$('interstitial_outer').setStyle('display','none');
  f$('entire_content').removeClassName('fade_out');
}


function show_error() {
  f$('interstitial_outer').setStyle('display','block');
  f$('interstitial_content').addClassName('error');
  f$('interstitial_content').setInnerXHTML('<div><h2>Uh-oh.</h2>There was an error. Try refreshing the page.<div class="submit_button clear_above"><a href="#_" id="reset_interstitial">OK</a></div></div>');
  f$('reset_interstitial').addEventListener('click',function(event){reset_interstitial();}.bind(this));
}

// a replacement for the smarty function.output_custom_ajax
function custom_ajax(url,parameters) {
  var timeout = 7000; // miliseconds
  if (typeof parameters == 'undefined') {
    parameters = {};
  }
  if (!url.match('http')) {
    url = bantr.local_url+url;
  }
  if (typeof parameters.response_type == 'undefined') {
    parameters.response_type = 'FBML';
  }
  if (typeof parameters.on_done_call_function != 'undefined' && typeof parameters.callback == 'object') {
    parameters.on_done_call_function = parameters.callback;
  }
  var post_params = {};
  if (typeof parameters.rewrite_form != 'undefined' && parameters.rewrite_form) {
    if (bantr.script_location == bantr.APP_ID_FACEBOOK) {
      post_params = f$(parameters.rewrite_form).serialize();
    } else {
      post_params = $('#'+parameters.rewrite_form).serialize();
    }
  } else if (typeof parameters.parameters != 'undefined' && parameters.parameters) {
    post_params = parameters.parameters;
  }
  // login users who we only have an fb_fromhas for
  if (typeof bantr.url_login_params == 'object') {
    for (key in bantr.url_login_params) {
      post_params[key] = bantr.url_login_params[key];
    }
  }
  var var_data = '';  
  if (bantr.script_location == bantr.APP_ID_FACEBOOK) {
    var var_ajax = new Ajax();
    var_ajax.onerror = function() {
      show_error();
    }
    if (parameters.response_type == 'FBML') {
      var_ajax.responseType = Ajax.FBML;
    } else {
      var_ajax.responseType = Ajax.JSON;
    }
    var_ajax.requireLogin = false;
    var_ajax.ondone = function(data) {
      clearTimeout(t);
      var_data = data;
      if (typeof parameters.rewrite_id != 'undefined' && parameters.rewrite_id) {
        f$(parameters.rewrite_id).setInnerFBML(var_data);
      }
      if (typeof parameters.on_done_call_function != 'undefined') {
        parameters.on_done_call_function(var_data);
      }
    }
    var_ajax.post(url, post_params);
    var t = setTimeout(function() {var_ajax.abort();show_error();},timeout);
  } else {
    if (parameters.response_type == 'FBML') {
      response_type = 'html';
    } else {
      response_type = 'json';
    }
    $.ajax({'cache':false,'data':post_params,'dataType':response_type,'error':function() {show_error();},'type':'POST','timeout':timeout,'url':url,'success':function(data,textStatus){
      var var_data = data;
      if (typeof parameters.rewrite_id != 'undefined' && parameters.rewrite_id) {
        $('#'+parameters.rewrite_id).html(var_data);
      }
      if (typeof parameters.on_done_call_function != 'undefined') {
        parameters.on_done_call_function(var_data);
      }
    }
    });
  } 
}

function fb_parse_dom() {
  if (bantr.script_location == bantr.APP_ID_BANTR) {
    FB_RequireFeatures(["XFBML"], function(){
      FB.init(bantr.api_key, bantr.local_url+"xd_receiver.htm");
      if ( FB.XFBML.Host.parseDomTree ) {
        setTimeout( FB.XFBML.Host.parseDomTree, 500 );
      }
    });
  }
  resize_images();
}

// add random QS variable to ad iframes to force refresh
function refresh_ads() {
  var entire_content = f$('entire_content');
  var iframes = entire_content.getElementsByTagName('iframe');
  for (var i=0;i<iframes.length;i++) {
    if (iframes[i].hasClassName('ad_iframe')) {
      force_refresh_iframe(iframes[i]);
    }
  }
}

function force_refresh_iframe(iframe) {
  var src = iframe.getSrc();
  if (src.indexOf('?') != -1) {
    src += '&';
  } else {
    src += '?';
  }
  if (src.indexOf('bantr_force_new_iframe') != -1) {
    src = src.substring(0,src.indexOf('bantr_force_new_iframe'));
  }
  var localtime = new Date();
  localtime = Math.floor(localtime.getTime());
  src += 'bantr_force_new_iframe=' + localtime;
  iframe.setSrc(src);
}

function flag_inappropriate_thread_post(thread_post_id) {
  f$('inappropriate_flag_form_li_'+thread_post_id).setInnerXHTML('<span>Saving...</span>'); 
  custom_ajax('index.php?action_type=flag_inappropriate_thread_post',{'parameters':{'thread_post_id':thread_post_id},'rewrite_id':'inappropriate_flag_form_li_'+thread_post_id});
}

getElementsByClassName = function(obj,cl) {
  var retnode = [];
  var myclass = new RegExp('\\b'+cl+'\\b');
  var elem = obj.getElementsByTagName('*');
  for (var i = 0; i < elem.length; i++) {
    var classes = elem[i].getClassName();
    if (myclass.test(classes)) retnode.push(elem[i]);
  }
  return retnode;
}; 
function log_ajax_page(page_key, trk) {
  custom_ajax('index.php?action_type=log_ajax_page',{'parameters':{'page_key':page_key,'trk':trk}});
}
