

function group_superinvite(subject, message, link, group_id) {

  //var group_id = SocialEngine.Group.groupInfo.group_id;
  var group_id = semods_supershare_group_id;

  SEMods.Sharer.share({'Xsubject': subject,
					   'Xmessage' : message,
					   'link' : link,
					   'media' : '',
					   'friends_object_id' : group_id,
					   'friends_type'	: 'friends_exclude_group',
					   'actiontype' : 'invitegroup',
					   'message_template' : 'invitegroup',
					   'message_template_object_id' : group_id,
					   'edit_subject' : false,
					   'edit_message' : false
  });
}

function group_mass_send(subject, message, link, group_id) {

  var group_id = semods_supershare_group_id;

  if(typeof subject == 'undefined') {
	subject = '';
  }
  if(typeof message == 'undefined') {
	message = '';
  }

  SEMods.Sharer.share({'subject': subject,
					   'message' : message,
					   'link' : link,
					   'media' : '',
					   'actiontype' : 'send',
					   'friends_object_id' : group_id,
					   'friends_type'	: 'group'
  });
}




function supershare_setup_event() {
  var invite = $('eventProfileMenuInvite');
  if(invite) {
	var a = invite.getElement("a");
	if(a) {
	  if((typeof SocialEngine != 'undefined') && (typeof SocialEngine.Event != 'undefined') && (typeof SocialEngine.Event.memberInvitePopulate != 'undefined')) {
		SocialEngine.Event.memberInvitePopulate = event_superinvite;
	  } else {
		a.onclick = null;
	  a.addEvent('click',event_superinvite);
	}
	}
	
  }
}

function supershare_setup_group() {
  
  $$("A").each( function(el) {
	if((/void/.test(el.href)) && (/user_group_invite.php/.test(el.onclick))) {
	  el.onclick = null;
	  el.addEvent('click',group_superinvite);
	}
  });

  
}

function event_superinvite(subject, message, link, event_id) {
  
  //var event_id = SocialEngine.Event.eventInfo.event_id;
  var event_id = semods_supershare_event_id;
  
  SEMods.Sharer.share({'Xsubject': subject,
					   'Xmessage' : message,
					   'link' : link,
					   'media' : '',
					   'friends_object_id' : event_id,
					   'friends_type'	: 'friends_exclude_event',
					   'actiontype' : 'inviteevent',
					   'message_template' : 'inviteevent',
					   'message_template_object_id' : event_id,
					   'edit_subject' : false,
					   'edit_message' : false
  });
}

function event_mass_send(subject, message, link, event_id) {

  //var event_id = SocialEngine.Event.eventInfo.event_id;
  var event_id = semods_supershare_event_id;

  if(typeof subject == 'undefined') {
	subject = '';
  }
  if(typeof message == 'undefined') {
	message = '';
  }

  SEMods.Sharer.share({'subject': subject,
					   'message' : message,
					   'link' : link,
					   'media' : '',
					   'actiontype' : 'send',
					   'friends_object_id' : event_id,
					   'friends_type'	: 'event'
  });
}





function supershare(subject, message, link) {

  SEMods.Sharer.share({'subject': subject,
					   'message' : message,
					   'link' : link
  });
  
}


// type:
// include friends, type - group,event,friends, obj id?(event_id)
// whether to import contacts
// template_id or title, subject
// share url
function semods_share (subject, message, link) {

  SEMods.Sharer.share({'subject': subject,
					   'message' : message,
					   'link' : link,
					   'media' : ''
  });
  
}

SEMods.Sharer = function() {

}

SEMods.Sharer = {
  api_endpoint : 'ajax_semods_share.php?',
  status : 0,
  control_elem : null,
  control_elem_iframe : null,
  control_elem_html : '',
  accordion : null,
  
  sharer_height : 700,
  
  left_pane_exploded : false,
  
  friends : true,
  
  invite : true,
  
  friends_checked : [],
  friends_checked_total : 0,
  
  html : false,
  template_id : 0,
  
  options : {'subject' : null,
			 'message' : null,
			 'link' : '',
			 'friends_type' : 'friends',
			 'friends_object_id' : 0,
			 'actiontype' : 'send',
			 'message_template' : '',
			 'message_template_object_id' : '',
			 'edit_subject' : true,
			 'edit_message' : true
			},
  
  social_contacts : false,
  import_session : '',
  
  share : function(params) {
	
	//old_options = this.options.clone();

	var old_options = {};
	for (i in this.options) {
	  old_options[i] = this.options[i];
	}
	
	// defaults
	this.options.subject = null;
	this.options.message = null;
	this.options.edit_subject = true;
	this.options.edit_message = true;
	this.options.message_template = '';
	this.options.message_template_object_id = '';
	this.options.actiontype = 'send';
	
	if(typeof params != 'undefined') {
	  for (var param in params) {
		this.options[param] = params[param];
	  }
	}

	// see if params changed and need reload
    if ((this.status >= 2) &&
		((this.options.friends_type != old_options.friends_type) ||
		(this.options.friends_object_id != old_options.friends_object_id) 
		)) {
	  
	  // cleanup
	  this.status = 0;
	  this.accordion = null;
	  this.friends_checked = [];
	  this.friends_loaded = [];
	  this.friends_checked_total = 0;
	}


	this.sharer_load();
  },
  
  sharer_load: function() {
    if (this.status >= 2) {
      this.sharer_show();
      return;
    }
    if (!$("semods_share_overlay")) {
      new Element('div').setProperty('id', 'semods_share_overlay').inject(document.body);
    }
    $('semods_share_overlay').setStyle('display', 'block')
    $('semods_share_overlay').setOpacity(0.6)
    if (!$("semods_share_load")) {
      new Element('div').setProperty('id', 'semods_share_load').inject(document.body);
      $('semods_share_load').innerHTML = "<img src='./images/tbex_loadingAnimation.gif' alt='Loading' />"
    }
    $('semods_share_load').setStyle('display', 'block');
	
    if (!$("semods_share_wrapper")) {
	  this.control_elem = new Element('div').setProperty('id', 'semods_share_wrapper').inject(document.body);
	}

	// clean up
	$('semods_share_wrapper').innerHTML = '';
    $('semods_share_wrapper').setStyle('display', 'none');
	  
    if (!$("semods_share_wrapper_iframe")) {
	  this.control_elem_iframe = new Element('IFRAME').setProperty('id', 'semods_share_wrapper_iframe').inject(document.body);
	  $('semods_share_wrapper_iframe').setStyle('frameBorder', 0);
	}
    $('semods_share_wrapper_iframe').setStyle('display', 'none');
	
    var ajax = new SEMods.Ajax(this.onLoadSharerSuccess.bind(this), this.onLoadSharerFail.bind(this));
    var params = 'task=loadsharer' +
				 '&actiontype=' + this.options.actiontype +
				 '&message_template=' + this.options.message_template+
				 '&message_template_object_id=' + this.options.message_template_object_id;
    ajax.post(this.api_endpoint, params)
  },

  onLoadSharerSuccess : function(obj, responseText) {
    var r = [];
    try {
      r = eval('(' + responseText + ')')
    } catch(e) {
      r.status = 1
    };
    $('semods_share_load').setStyle('display', 'none');
    if (r.status == 0) {
      this.status = 2;
      this.control_elem_html = r.html;
      this.control_elem.innerHTML = this.control_elem_html;

	  if(r.can_import) {
		this.load_importer();
	  }

	  // template subject
	  if(r.subject) {
		$('semods_sharer_subject').value = r.subject;
	  }

	  if(r.message) {
		$('semods_sharer_message').value = r.message;
	  }
	  
	  // set subject
	  if(this.options.subject != null) {
		$('semods_sharer_subject').value = this.options.subject;
	  }
	  if(this.options.message != null) {
		$('semods_sharer_message').value = this.options.message;
	  }

	  if(!this.options.edit_subject) {
		$('semods_sharer_subject').disabled = true;
		$('semods_sharer_subject').readonly = true;
		$("semods_sharer_subject").addClass('semods_sharer_disabled');
	  } else {
		$('semods_sharer_subject').disabled = false;
		$('semods_sharer_subject').readonly = false;
		$("semods_sharer_subject").removeClass('semods_sharer_disabled');
	  }

	  if(!this.options.edit_message) {
		$('semods_sharer_message').disabled = true;
		$('semods_sharer_message').readonly = true;
		$("semods_sharer_message").addClass('semods_sharer_disabled');
	  } else {
		$('semods_sharer_message').disabled = false;
		$('semods_sharer_message').readonly = false;
		$("semods_sharer_message").removeClass('semods_sharer_disabled');
	  }
	  
      this.sharer_show();
	  
    } else {
	  
      this.status = 0;
      $('semods_share_overlay').setStyle('display', 'none');
      //show_error_message(r.err_msg ? r.err_msg: '')
    }
  },

  onLoadSharerFail: function(obj, responseText) {
    $('semods_share_load').setStyle('display', 'none');
    $('semods_share_overlay').setStyle('display', 'none');
    //show_error_message()
  },

  sharer_close: function() {
    $('semods_share_wrapper').setStyle('display', 'none');
    $('semods_share_wrapper_iframe').setStyle('display', 'none');
    $('semods_share_overlay').setStyle('display', 'none')
  },
  

  sharer_show : function() {

    var window_height = window.getHeight();
	var insider_height = 640;

	var window_top = (window.getHeight() - insider_height) / 2;
	
	if(window_top < 0) {
	  window_top = 0;
	}
	
    $('semods_share_wrapper').setStyle('left', (window.getWidth() - this.sharer_height) / 2 + 'px');
    $('semods_share_wrapper').setStyle('top',  window_top + 'px');
    $('semods_share_wrapper').setStyle('display', 'block');

    $('semods_share_wrapper_iframe').setStyle('height', insider_height + 'px');
    $('semods_share_wrapper_iframe').setStyle('left', (window.getWidth() - this.sharer_height) / 2 + 'px');
    $('semods_share_wrapper_iframe').setStyle('top', (window.getHeight() - insider_height) / 2 + 'px');
    $('semods_share_wrapper_iframe').setStyle('display', 'block');

    $('semods_share_overlay').setStyle('display', 'block');
	
	if(!this.accordion) {
	  
      jclex.LoadBehaviour("semods_sharer_options", AccordionBehaviourEx);
	  this.accordion = true;
	  
	}

    if (this.status < 3) {
	}

    if (this.status < 3) {
	  if(this.friends) {
		this.load_friends();
	  }
    }
	
	this.status = 3;
	
  },

  load_friends : function() {
	this.paginator_friends = new SEMods.Sharer.Paginator(this.api_endpoint);

	this.paginator_friends.paginator_element = 'semods_sharer_paginator_friends';
	
	this.paginator_friends.paginator_left = 'semods_sharer_paginator_friends_left',
	this.paginator_friends.paginator_right = 'semods_sharer_paginator_friends_right',
	this.paginator_friends.paginator_content = 'semods_sharer_scroller_friends',


	this.paginator_friends.paginator_progress = 'semods_sharer_scroller_friends_progress',
	this.paginator_friends.paginator_from = 'semods_sharer_paginator_friends_page_from',
	this.paginator_friends.paginator_to = 'semods_sharer_paginator_friends_page_to',
	this.paginator_friends.paginator_total = 'semods_sharer_paginator_friends_total_items',
	
	this.paginator_friends.paginator_disabled = 'semods_sharer_paginator_disabled';
	
	this.paginator_friends.ajax_task = 'getfriends';
	this.paginator_friends.set_params('&friends_type='+this.options.friends_type+'&friends_object_id='+this.options.friends_object_id);
	this.paginator_friends.set_onComplete(this.onFriendsLoaded.bind(this));
	
	this.paginator_friends.refresh();
  },
  
  onFriendsLoaded : function(r) {

	this.friends_loaded = [];
	
	this.friends_total = r.total;
	this.friends_displayed = r.to - r.from + 1;
	
	if(r.total == 0) {

	  $('semods_sharer_scroller_friends_empty').setStyle('display', 'block');
	  $('semods_sharer_paginator_friends').setStyle('display', 'none');
	  $('semods_sharer_selector_friends').setStyle('display', 'none');
	  $('semods_sharer_paginator_friends_checker').setStyle('display', 'none');

	} else {

	  var holder = SEMods.B.ge('semods_sharer_scroller_friends');
	  holder.innerHTML = '<div></div>';

	  
	  for(var i=0;i<r.friends.length;i++) {
		var el = $('semods_sharer_friendrow').cloneNode(true);
		el.id = '';
		el = $(el);
  
		var control_elem = el.getElement('.semods_sharer_friend_id');
		control_elem.value = r.friends[i].username;
		el.getElement('.semods_sharer_friend_photo').src = r.friends[i].photo;
		el.getElement('.semods_sharer_friend_name').innerHTML = r.friends[i].name;

		this.friends_loaded[r.friends[i].username] = control_elem;

		if(this.friends_checked[r.friends[i].username]) {
		  control_elem.checked = true;
		}
		
		holder.insertBefore(el,holder.firstChild);
		
	  }
	}

  },

  import_contacts : function(source,hint) {
    $('semods_sharer_send').setStyle('display', 'none');
    $('semods_sharer_import').setStyle('display', 'block');
	
	SEMods.ContactsImporter.setContactsImporterCallback(this.onContactsImported.bind(this));
	SEMods.ContactsImporter.show_importer_dialog(source,hint);
	
  },
  
  cancel_import_contacts : function() {
    $('semods_sharer_send').setStyle('display', 'block');
    $('semods_sharer_import').setStyle('display', 'none');
  },
  
  onContactsImported : function(contacts, social_contacts, session) {
	
	this.social_contacts = social_contacts;
	
	if(social_contacts) {

	  this.import_session = session;
	  
	  var holder = SEMods.B.ge('semods_sharer_scroller');
	  holder.innerHTML = '';
	  
	  for(var i=0;i<contacts.length;i++) {
		var el = $('semods_sharer_socialcontactrow').cloneNode(true);
		el.id = '';
		el = $(el);
  
		el.getElement('.semods_sharer_friend_id').value = contacts[i].uid;
		el.getElement('.semods_sharer_friend_photo').src = contacts[i].pic_square;
		el.getElement('.semods_sharer_friend_name').innerHTML = contacts[i].name;
		
		holder.appendChild(el);
		
	  }
	  
	} else {

	  this.import_session = '';
	  var holder = SEMods.B.ge('semods_sharer_scroller');
	  holder.innerHTML = '';
	
	  for(var i=0;i<contacts.length;i++) {

		var el = $('semods_sharer_emailrow2').cloneNode(true);
		el.id = '';
		el = $(el);
  
		el.getElement('.semods_sharer_contact_id').value = contacts[i].email;
		el.getElement('.semods_sharer_contact_info').innerHTML = contacts[i].name + ' &lt;' + contacts[i].email + '&gt;';
		
		holder.appendChild(el);

	  }

	  //$('semods_sharer_scroller').innerHTML = text;

	}

    $('semods_sharer_manualhint').setStyle('display', 'none');
    $('semods_sharer_selector').setStyle('display', 'block');

	this.cancel_import_contacts();
	
  },
  
  
  

  add_email_row : function () {
	var el = SEMods.B.ge("semods_sharer_emailrow").cloneNode(true);
	el.id = '';
	var moreRow = SEMods.B.ge("semods_sharer_addmorerow");
	moreRow.parentNode.insertBefore(el, moreRow)
  },

  validate_email : function (element) {
	if (element.value != "") {
	  if (!this.is_email(element.value)) {
		element.style.border = "1px solid red";
		// set checkbox value for collection
		element.previousSibling.previousSibling.value = '';
	  } else {
		element.style.border = "1px solid lightgreen";
		// set checkbox value for collection
		element.previousSibling.previousSibling.value = element.value;
	  }
	} else {
		element.previousSibling.previousSibling.value = '';
	}
  },

  is_email : function (email) {
	return /^[\w!.%+]+@[\w]+(?:\.[\w]+)+$/.test(email)
  },
  
  toggle_current_div : function (e, elem) {

    var e = e ? e: window.event;
    var src = (e.srcElement) ? e.srcElement: e.target;
	if((src.tagName == "INPUT") && (src.type == "checkbox")) {
	  return;
	}

	var inputs = elem.getElementsByTagName('input');
	inputs[0].checked = !inputs[0].checked ;
  },
  
  friends_show_selected : function() {
    $('semods_sharer_scroller_friends').setStyle('display', 'none');
    $('semods_sharer_scroller_friends_checked').setStyle('display', 'block');

    $('semods_sharer_paginator_friends_checker').setStyle('display', 'none');
    $('semods_sharer_paginator_friends_checker_checked').setStyle('display', 'block');

	$('semods_share_friends_show_all').setStyle('font-weight', 'normal');
	$('semods_share_friends_show_selected').setStyle('font-weight', 'bold');

	$('semods_sharer_paginator_friends').setStyle('display', 'none');
  },
  
  friends_show_all : function() {
    $('semods_sharer_scroller_friends_checked').setStyle('display', 'none');
    $('semods_sharer_scroller_friends').setStyle('display', 'block');

    $('semods_sharer_paginator_friends_checker_checked').setStyle('display', 'none');
    $('semods_sharer_paginator_friends_checker').setStyle('display', 'block');

	$('semods_share_friends_show_all').setStyle('font-weight', 'bold');
	$('semods_share_friends_show_selected').setStyle('font-weight', 'normal');

	if(this.friends_total > this.friends_displayed) {
	  $('semods_sharer_paginator_friends').setStyle('display', 'block');
	}

  },
  
  update_checked_friends : function() {
	$('sharer_friends_selected_count').innerHTML = this.friends_checked_total;
  },
  
  remove_all_checked_friends : function() {
	this.friends_checked_total = 0;
	$('semods_sharer_scroller_friends_checked').innerHTML = '';
	this.friends_checked = [];
	for(var i in this.friends_loaded) {
	  this.friends_loaded[i].checked = false;
	}
	this.update_checked_friends();
  },

  toggle_friend_row : function (e, elem) {

	this.toggle_current_div(e, elem);

	var inputs = elem.getElementsByTagName('input');

	var input = inputs[0];
	
	this.manage_friend_element(input, elem);
	
	this.update_checked_friends();
	
  },
  
  manage_friend_element : function(input, elem) {

	if(!input.checked) {

	  // remove from checked
	  var el = this.friends_checked[input.value];
	  el.parentNode.removeChild(el);
	  this.friends_checked[input.value] = null;
	  
	  this.friends_checked_total--;
	  
	  // update currently displayed friends
	  if(this.friends_loaded[input.value]) {
		this.friends_loaded[input.value].checked = false;
	  }
	  
	} else {
	  // add to checked

	  var holder = SEMods.B.ge('semods_sharer_scroller_friends_checked');
	  
	  if(typeof elem == 'undefined') {
		elem = input.parentNode.parentNode;
	  }
	  var el = elem.cloneNode(true);

	  el.getElement('.semods_sharer_friend_id').checked = true;

	  holder.appendChild(el);
	  this.friends_checked[input.value] = el;
	  this.friends_checked_total++;

	}
	
  },
  
  toggle_current_row : function (td) {
	var row = this.get_parent_row(td);
	var inputs = row.getElementsByTagName('input');
	inputs[0].checked = !inputs[0].checked ;
  },

  get_parent_row : function (el) {
	el = ge(el);
	while (el.tagName && el.tagName != "TR") {
	  el = el.parentNode;
	}
	return el;
  },

  toggle_all : function (which,root_checkbox, wrapper) {
	this.toggle_all_ex(which, root_checkbox, wrapper);
	return false;
  },

  toggle_all_ex : function (which, root_checkbox_s, wrapper_s) {
	var root_checkbox = SEMods.B.ge(root_checkbox_s);
	if (which) {
	  i = 1;
	  var new_value = root_checkbox.checked
	} else {
	  i = 0;
	  var new_value = !root_checkbox.checked
	}
	var wrapper = SEMods.B.ge(wrapper_s);
	var all_inputs = wrapper.getElementsByTagName('input');
	for (i = 0; i < all_inputs.length; i++) {
	  if (all_inputs[i].type == 'checkbox') {
		old_val = all_inputs[i].checked;
		all_inputs[i].checked = new_value
		if((wrapper_s == 'semods_sharer_scroller_friends') && ( old_val != new_value)) {
		  this.manage_friend_element(all_inputs[i]);
		}
	  }
	}
	
	if(wrapper_s == 'semods_sharer_scroller_friends') {
	  this.update_checked_friends();
	}

	return false;
  },

  show_left_section : function (section) {
	if (SEMods.Browser.isIE) {
	  SEMods.B.ge('semore_sharer_option_' + section).fireEvent("onclick")
	} else {
	  var evt = document.createEvent("MouseEvents");
	  evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
	  SEMods.B.ge('semore_sharer_option_' + section).dispatchEvent(evt)
	}
  },

  collect_checked_values : function(list, separator) {
	var list = $(list);
	var values = [];
	var all_inputs = list.getElementsByTagName('input');
	for (i = 0; i < all_inputs.length; i++) {
	  if ((all_inputs[i].type == 'checkbox') && all_inputs[i].checked && (all_inputs[i].value != '')) {
		values.push(encodeURIComponent(all_inputs[i].value));	// need encode to encode emails ?
	  }
	}
	return values;
  },
	
  
  send : function() {
	
	var subject = $('semods_sharer_subject').value;
	var message = $('semods_sharer_message').value;
	//var personal_message = $('personal_message').value;
	var personal_message = '';
	

	var source = friends ? 'semods_sharer_scroller_friends_checked' : 'semods_sharer_scroller';
	
	var type = this.social_contacts ? 'socialcontacts' : 'contacts';
	
	var friends = this.collect_checked_values('semods_sharer_scroller_friends_checked');
	friends = friends.join(',');

	var contacts = this.collect_checked_values('semods_sharer_scroller');
	contacts = contacts.join(',');
	
	$('semods_sharer_send').setStyle('display', 'none');
	$('semods_sharer_progress').setStyle('display', 'block');
	
	// send
    var ajax = new SEMods.Ajax(this.onSendSuccess.bind(this), this.onSendFail.bind(this));
    var params = 'task=send' +
				 '&subject=' + encodeURIComponent(subject) +
				 '&message=' + encodeURIComponent(message) +
				 '&personal_message=' + encodeURIComponent(personal_message) +
				 '&actiontype=' + this.options.actiontype +
				 '&friends_type=' + this.options.friends_type +
				 '&friends_object_id=' + this.options.friends_object_id +
				 '&session=' + this.import_session +
				 '&friends=' + friends +
				 '&type=' + type +
				 '&contacts=' + contacts;
				 
    ajax.post(this.api_endpoint, params)
	
  },
  

  onSendSuccess : function(obj, responseText) {
    var r = [];
    try {
      r = eval('(' + responseText + ')')
    } catch(e) {
      r.status = 1
    };

	$('semods_sharer_send').setStyle('display', 'block');
	$('semods_sharer_progress').setStyle('display', 'none');

    if (r.status == 0) {

	  // let user now all ok
      this.sharer_close();
	  
    } else {
	  
      this.sharer_close();
      //show_error_message(r.err_msg ? r.err_msg: '')
    }
  },

  onSendFail: function(obj, responseText) {

	$('semods_sharer_send').setStyle('display', 'block');
	$('semods_sharer_progress').setStyle('display', 'none');
      //show_error_message(r.err_msg ? r.err_msg: '')

    this.sharer_close();

  },
  
  friends_prev : function() {
	this.paginator_friends.paginate_left();
  },
  
  friends_next : function() {
	this.paginator_friends.paginate_right();
  },
  
  explode_left : function() {
	if(this.left_pane_exploded) {
	  $('semods_sharer_left').setStyle('width', 220 + 'px');
	  $('semods_sharer_scroller_friends_wrapper').setStyle('max-width', 220 + 'px');
	  $('semods_sharer_scroller').setStyle('max-width', 220 + 'px');
	  SEMods.B.show('semods_sharer_right');

	  SEMods.B.show('semods_sharer_selector_extender_left');
	  SEMods.B.hide('semods_sharer_selector_extender_right');
	  SEMods.B.show('semods_sharer_selector_contacts_extender_left');
	  SEMods.B.hide('semods_sharer_selector_contacts_extender_right');
	  
	} else {
	  
	  SEMods.B.show('semods_sharer_selector_extender_right');
	  SEMods.B.hide('semods_sharer_selector_extender_left');
	  SEMods.B.show('semods_sharer_selector_contacts_extender_right');
	  SEMods.B.hide('semods_sharer_selector_contacts_extender_left');

	  SEMods.B.hide('semods_sharer_right');
	  $('semods_sharer_left').setStyle('width', 680 + 'px');
	  $('semods_sharer_scroller_friends_wrapper').setStyle('max-width', 680 + 'px');
	  $('semods_sharer_scroller').setStyle('max-width', 680 + 'px');
	}
	this.left_pane_exploded = !this.left_pane_exploded;
  },
  
  load_importer : function() {
	// check if loaded
	var src = 'friendsinviter.js';
	var scripts = document.getElementsByTagName("script"); 
	for (var i=0; i<scripts.length; i++) {
	  if (scripts[i].src.match(src)) {
		return;
	  }
	} 
	
	this.import_script('friendsinviter');
	this.import_css('styles_invite');
  },
  
  import_script : function(path){ 
	path = path + '.js';
	var base, src = "semods_supershare.js", scripts = document.getElementsByTagName("script"); 
	for (var i=0; i<scripts.length; i++) {
	  if (scripts[i].src.match(src)) {
		base = scripts[i].src.replace(src, "");
		break;
	  }
	} 
	//document.write("<" + "script src=\"" + base + path + "\"></" + "script>"); 
	var s = document.createElement('script');
	s.src = base + path ;
	if (navigator.userAgent.indexOf('Safari'))
	  s.charset = 'utf-8';
	document.getElementsByTagName('head')[0].appendChild(s)
  },
  
  import_css : function (path){ 
	path = path + '.css';
	var base, src = "styles_supershare.css", styles = document.getElementsByTagName("link"); 
	for ( var i=0; i<styles.length; i++) {
	  if (styles[i].href.match(src)) {
		base = styles[i].href.replace(src, "");
		break;
	  }
	} 
	//document.write("<" + "link rel=\"stylesheet\" type=\"text/css\" href=\"" + base + path + "\"></" + "link>"); 
	var s = document.createElement('link');
	s.rel = 'stylesheet';
	s.type = 'text/css';
	s.href = base + path ;
	document.getElementsByTagName('head')[0].appendChild(s)
  } 
  
}


SEMods.Sharer.Paginator = function(ajax_endpoint) {
  this.ajax_endpoint = ajax_endpoint;
}
SEMods.Sharer.Paginator.prototype = {
  obj: null,
  ajax_endpoint: '',
  ajax_task : 'getitems',
  current_page: 1,
  total_items: 0,
  last_visible_item: 1,
  nohide: false,
  params: '',
  onError_callback: null,
  onComplete_callback: null,

  paginator_left : 'left_paginator',
  paginator_right : 'right_paginator',
  paginator_content : 'ajax_content',
  paginator_element : 'paginator',
  paginator_progress : 'paginator_ajax_progress',
  paginator_from : 'page_from',
  paginator_to : 'page_to',
  paginator_total : 'total_items',
  paginator_disabled : 'paginator_disabled',
  
  
  set_url: function(url) {
    this.ajax_endpoint = url
  },
  set_params: function(params) {
    this.params = params
  },
  set_onComplete : function(callback) {
	this.onComplete_callback = callback;
  },
  paginate_left: function() {
    SEMods.B.ge(this.paginator_left).blur();
    if (this.current_page == 1) return false;
    this.paginate(this.current_page - 1)
  },
  paginate_right: function() {
    SEMods.B.ge(this.paginator_right).blur();
    if (this.total_items == this.last_visible_item) return false;
    this.paginate(this.current_page + 1)
  },
  paginate: function(page) {
    SEMods.B.toggle(this.paginator_progress, this.paginator_content);
    var ajax = new SEMods.Ajax(this.onPaginateSuccess.bind(this), this.onPaginateFail.bind(this));
    var params = "task=" + this.ajax_task + "&p=" + page + this.params;
    ajax.post(this.ajax_endpoint, params)
  },
  refresh: function() {
    this.paginate(this.current_page)
  },
  hideAll: function() {
    SEMods.B.hide(this.paginator_progress, paginator_content, this.paginator_element)
  },
  showAll: function() {
    SEMods.B.show(this.paginator_content);
    if ((this.current_page == 1) && (this.last_visible_item == this.total_items)) {} else SEMods.B.show(this.paginator_element)
  },
  onPaginateSuccess: function(ajaxObj, responseText) {
    var r = [];
    try {
      r = eval('(' + responseText + ')')
    } catch(e) {
      r.status = 1;
      r.html = 'Error loading content.'
    };
    if (typeof r != 'object') {
      r = [];
      r.status = 1;
      r.html = 'Error loading content.'
    }
    if (r.status == 0) {
	  
      this.current_page = r.page;
      this.total_items = r.total;
      this.last_visible_item = r.to;
	  
      SEMods.B.ge(this.paginator_from).innerHTML = r.from;
      SEMods.B.ge(this.paginator_to).innerHTML = r.to;
      SEMods.B.ge(this.paginator_total).innerHTML = r.total;
	  
      if (this.total_items == 0) {} else {
        if ((this.current_page == 1) && (this.last_visible_item == this.total_items)) {
          if (!this.nohide) SEMods.B.hide(this.paginator_element)
        } else {
          SEMods.B.show(this.paginator_element)
        }
      }
      if (this.current_page == 1) {
        SEMods.B.ge(this.paginator_left).className = this.paginator_disabled;
      } else {
        SEMods.B.ge(this.paginator_left).className = ""
      }
      if (r.total == r.to) {
        SEMods.B.ge(this.paginator_right).className = this.paginator_disabled;
      } else {
        SEMods.B.ge(this.paginator_right).className = ""
      }
    } else if (this.onError_callback) {
      this.onError_callback()
    }
    //SEMods.B.ge(this.ajaxContentElem).innerHTML = r.html;
    SEMods.B.toggle(this.paginator_progress, this.paginator_content)
    if (this.onComplete_callback) {
      this.onComplete_callback(r);
    }
  },
  onPaginateFail: function(ajaxObj, respText) {
    SEMods.B.ge(this.paginator_content).innerHTML = "Error";
    SEMods.B.toggle(this.paginator_progress, this.paginator_content);
    if (this.onError_callback) {
      this.onError_callback()
    }
  }
}



var jclex = {
    isIE: (/msie/i.test(navigator.userAgent) || /opera/i.test(navigator.userAgent)),
    List: [],
    LoadBehaviour: function(obj, behaviour) {
        if ((obj) && (obj.constructor == String)) obj = document.getElementById(obj);
        if (obj == null) {
            alert("LoadBehaviour: obj argument is missing.")
        } else if (behaviour == null) {
            alert("LoadBehaviour: behaviour argument is missing.")
        } else {
            if (behaviour.inheritFrom) {
                this.LoadBehaviour(obj, behaviour.inheritFrom);
                this.List.pop()
            }
            if ((!this.isIE) && (obj.attributes)) {
                for (var n = 0; n < obj.attributes.length; n++) if (obj[obj.attributes[n].name] == null) obj[obj.attributes[n].name] = obj.attributes[n].value
            }
            for (var p in behaviour) {
                if (p.substr(0, 2) == "on") {
                    this.AttachEvent(obj, p, behaviour[p].bind(obj))
                } else if ((behaviour[p] == null) || (behaviour[p].constructor != Function)) {
                    if (obj[p] == null) obj[p] = behaviour[p]
                } else {
                    obj[p] = behaviour[p]
                }
            }
            obj._attachedBehaviour = behaviour
        }
        if (obj) this.List.push(obj)
    },
    FindBehaviourElement: function(obj, behaviourDef) {
        while ((obj) && (obj._attachedBehaviour != behaviourDef)) obj = obj.parentNode;
        return (obj)
    },
    getElementsByClassName: function(obj, cName) {
        var ret = new Array();
        var allNodes = obj.getElementsByTagName("*");
        for (var n = 0; n < allNodes.length; n++) {
            if (allNodes[n].className == cName) ret.push(allNodes[n])
        }
        return (ret)
    },
    getElementsByName: function(obj, cName) {
        var ret = new Array();
        var allNodes = obj.getElementsByTagName("*");
        for (var n = 0; n < allNodes.length; n++) {
            if (allNodes[n].name == cName) ret.push(allNodes[n])
        }
        return (ret)
    },
    AttachEvent: function(obj, eventname, handler) {
        if (this.isIE) {
            obj.attachEvent(eventname, handler)
        } else {
            obj.addEventListener(eventname.substr(2), handler, false)
        }
    },
    DetachEvent: function(obj, eventname, handler) {
        if (this.isIE) {
            obj.detachEvent(eventname, handler)
        } else {
            obj.removeEventListener(eventname.substr(2), handler, false)
        }
    },
    CloneObject: function(srcObject) {
        var tarObject = new Object();
        for (var p in srcObject) tarObject[p] = srcObject[p];
        return (tarObject)
    },
    absolutePosition: function(obj) {
        var pos = null;
        if (obj) {
            pos = new Object();
            pos.top = obj.offsetTop;
            pos.left = obj.offsetLeft;
            pos.width = obj.offsetWidth;
            pos.height = obj.offsetHeight;
            obj = obj.offsetParent;
            while (obj) {
                pos.top += obj.offsetTop;
                pos.left += obj.offsetLeft;
                obj = obj.offsetParent
            }
        }
        return (pos)
    },
    BuildFullEventname: function(obj) {
        var en = null;
        if (!obj) {
            return (null)
        } else if ((obj.eventname) && (obj.eventname.length > 0)) {
            en = obj.eventname
        } else if ((obj.attributes["eventname"]) && (obj.attributes["eventname"].value.length > 0)) {
            en = obj.attributes["eventname"].value
        }
        if ((en) && (en.indexOf('.') < 0)) {
            while ((obj) && (!obj.eventnamespace) && ((obj.attributes) && (!obj.attributes["eventnamespace"]))) obj = obj.parentNode;
            if (obj == document) {
                en = "jclex." + en
            } else if ((obj) && (obj.eventnamespace)) {
                en = obj.eventnamespace + "." + en
            } else if ((obj) && (obj.attributes["eventnamespace"])) {
                en = obj.attributes["eventnamespace"].value + "." + en
            }
        }
        return (en)
    },
    LocalEventName: function(evn) {
        var idx;
        if (evn) {
            idx = evn.lastIndexOf('.');
            if (idx >= 0) evn = evn.substr(idx + 1)
        }
        return (evn)
    },
    EventNameSpace: function(evn) {
        var idx;
        if (evn) {
            idx = evn.lastIndexOf('.');
            if (idx >= 0) evn = evn.substr(0, idx);
            else evn = null
        }
        return (evn)
    },
    GetControlsPath: function() {
        var path = "../controls/";
        var s;
        for (var n in document.scripts) {
            s = String(document.scripts[n].src);
            if ((s) && (s.length >= 6) && (s.substr(s.length - 6).toLowerCase() == "jclex.js")) path = s.substr(0, s.length - 6)
        }
        return (path)
    },
    onload: function(evt) {
        var obj, c;
        evt = evt || window.event;
        for (c in jclex.List) {
            obj = jclex.List[c];
            if ((obj) && (obj.init)) obj.init()
        }
        for (c in jclex.List) {
            obj = jclex.List[c];
            if ((obj) && (obj.afterinit)) obj.afterinit()
        }
    },
    onunload: function(evt) {
        evt = evt || window.event;
        for (var n in jclex.List) {
            var obj = jclex.List[n];
            if ((obj) && (obj.term)) obj.term()
        }
    },
    onkeypress: function(evt) {
        evt = evt || window.event;
        if (evt.keyCode == 13) {
            var obj = document.activeElement;
            while ((obj) && (obj.nosubmit == null)) obj = obj.parentNode;
            if ((obj) && ((obj.nosubmit == true) || (obj.nosubmit.toLowerCase() == "true"))) {
                evt.cancelBubble = true;
                evt.returnValue = false
            }
        }
    },
    getCookie: function(aName) {
        var start = document.cookie.indexOf(" " + aName + "=");
        if (start >= 0) {
            start += 1
        } else if (document.cookie.indexOf(aName + "=") == 0) {
            start = 0
        }
        if ((!start) && (aName != document.cookie.substring(0, aName.length))) return null;
        var len = start + aName.length + 1;
        if (start == -1) return null;
        var end = document.cookie.indexOf(';', len);
        if (end == -1) end = document.cookie.length;
        return unescape(document.cookie.substring(len, end))
    },
    setCookie: function(aName, value, path, expire) {
        if ((path == null) || (path == "")) {
            path = String(window.location.href).split('/');
            path = '/' + path.slice(3, path.length - 1).join('/')
        }
        if (expire) {
            var today = new Date();
            expire = parseInt(expire, 10) * 1000 * 60 * 60 * 24;
            expire = new Date(today.getTime() + expire)
        } else {
            expire = null
        }
        window.document.cookie = aName + "=" + escape(value) + ((path) ? ';path=' + path: "") + ((expire) ? ";expires=" + expire.toGMTString() : "")
    },
    addClassName: function(elem, className) {
        if (elem.nodeType != 3) {
            jclex.removeClassName(elem, className);
            if (className) elem.className = (elem.className + " " + className)
        }
    },
    removeClassName: function(elem, className) {
        if (elem.nodeType != 3) {
            var cn = " " + elem.className + " ";
            if (className) cn = cn.replace(" " + className + " ", "");
            cn = cn.replace(/^\s+|\s+$/g, "");
            elem.className = cn
        }
    },
    init: function() {
        this.AttachEvent(window, "onload", this.onload);
        this.AttachEvent(window, "onunload", this.onunload);
        this.AttachEvent(document, "onkeypress", this.onkeypress)
    }
};
//if (document.jclex_isinit) alert("multiple jclex includes detected !");
document.jclex_isinit = true;
jclex.init();
if (!jclex.isIE) {
    HTMLElement.prototype.__defineGetter__("innerText",
    function() {
        return (this.textContent)
    });
    HTMLElement.prototype.__defineSetter__("innerText",
    function(txt) {
        this.textContent = txt
    });
    HTMLElement.prototype.__defineGetter__("XMLDocument",
    function() {
        return ((new DOMParser()).parseFromString(this.innerHTML, "text/xml"))
    });
    Event.prototype.__defineGetter__("srcElement",
    function() {
        var node = this.target;
        while (node.nodeType != 1) {
            node = node.parentNode
        };
        if (node != this.target) alert("Unexpected event.target!");
        return node
    });
    Event.prototype.__defineSetter__("cancelBubble",
    function(b) {
        if (b) this.stopPropagation()
    });
    Event.prototype.__defineSetter__("returnValue",
    function(b) {
        if (!b) this.preventDefault()
    });
    XMLDocument.prototype.selectSingleNode = function(xPath) {
        var doc = this;
        if (doc.nodeType != 9) doc = doc.ownerDocument;
        if (doc.nsResolver == null) doc.nsResolver = function(prefix) {
            return (null)
        };
        var node = doc.evaluate(xPath, this, doc.nsResolver, XPathResult.ANY_UNORDERED_NODE_TYPE, null);
        if (node) node = node.singleNodeValue;
        return (node)
    };
    Node.prototype.selectSingleNode = function(xPath) {
        var doc = this;
        if (doc.nodeType != 9) doc = doc.ownerDocument;
        if (doc.nsResolver == null) doc.nsResolver = function(prefix) {
            return (null)
        };
        var node = doc.evaluate(xPath, this, doc.nsResolver, XPathResult.ANY_UNORDERED_NODE_TYPE, null);
        if (node) node = node.singleNodeValue;
        return (node)
    };
    Node.prototype.__defineGetter__("text",
    function() {
        return (this.textContent)
    })
};

var AccordionBehaviourEx = {
    _timer: null,
    _openarea: 0,
	resize_step : 150,
	resize_step_k : 3,
	timer_delta : 10,
	allElements : null,
	allContentElements : null,
    init: function() {
        var area = -1;
        c = this.firstChild;
        if (c.tagName == "INPUT") this._openarea = c.value;
		{
            var allElements = this.getElementsByTagName("div");
            for (var n = 0; n < allElements.length; n++) {
                var obj = allElements[n];
                if ((obj.className == "VEACCORDIONHEADER") || (obj.className == "VEACCORDIONHEADERACTIVE")) {} else if ((obj.className == "VEACCORDIONCONTENT") || (obj.className == "VEACCORDIONCONTENTACTIVE")) {
				  //this.allElements.push(obj);
				}
            }
        }
        if (this._openarea) {
            var allElements = this.getElementsByTagName("div");
            for (var n = 0; n < allElements.length; n++) {
                var obj = allElements[n];
                if ((obj.className == "VEACCORDIONHEADER") || (obj.className == "VEACCORDIONHEADERACTIVE")) {
                    area++;
                    obj.className = "VEACCORDIONHEADER" + (area == this._openarea ? "ACTIVE": "")
                } else if ((obj.className == "VEACCORDIONCONTENT") || (obj.className == "VEACCORDIONCONTENTACTIVE")) {
                    obj.className = "VEACCORDIONCONTENT" + (area == this._openarea ? "ACTIVE": "")
                }
            }
        }
    },
    onclick: function(evt) {
        evt = evt || window.event;
        if (this._timer == null) this.SlideOpen(evt.srcElement)
    },
	getAllElements : function() {
	  if(!this.allElements) {
		this.allElements = [];
		//this.allContentElements = [];
		var allElements = this.getElementsByTagName("div");
		for (var n = 0; n < allElements.length; n++) {
			var obj = allElements[n];
			//if ((obj.className == "VEACCORDIONHEADER") || (obj.className == "VEACCORDIONHEADERACTIVE")) {} else if ((obj.className == "VEACCORDIONCONTENT") || (obj.className == "VEACCORDIONCONTENTACTIVE")) {
			if ((obj.className == "VEACCORDIONHEADER") || (obj.className == "VEACCORDIONHEADERACTIVE") || (obj.className == "VEACCORDIONCONTENT") || (obj.className == "VEACCORDIONCONTENTACTIVE")) {
			  this.allElements.push(obj);
			}
		}
	  }
	  return this.allElements;
	},
    SlideOpen: function(obj) {
        var h, c;
        var area = 0;
        while ((obj != null) && (obj != this) && (obj.className != "VEACCORDIONHEADER")) obj = obj.parentNode;
        if ((obj != null) && (obj != this) && (obj.className == "VEACCORDIONHEADER")) obj.className = "VEACCORDIONHEADERACTIVE";
        h = obj;
        while ((obj != null) && (obj != this) && (obj.className != "VEACCORDIONCONTENT")) obj = obj.nextSibling;
        if ((obj != null) && (obj != this) && (obj.className == "VEACCORDIONCONTENT")) {
            c = obj;
            c.style.display = "block";
            c.style.height = "0px";
            c.className = "VEACCORDIONCONTENTACTIVE";
            //var allElements = this.getElementsByTagName("div");
            var allElements = this.getAllElements();
            for (var n = 0; n < allElements.length; n++) {
                var obj = allElements[n];
                if ((obj.className == "VEACCORDIONCONTENTACTIVE") && (obj != c)) {
                    obj.className = "VEACCORDIONCONTENT"
                }
                if ((obj.className == "VEACCORDIONHEADERACTIVE") && (obj != h)) obj.className = "VEACCORDIONHEADER";
                if (obj.className == "VEACCORDIONHEADER") area++;
                if (obj.className == "VEACCORDIONHEADERACTIVE") this._openarea = area
            }
            c = this.firstChild;
            if (c.tagName == "INPUT") c.value = this._openarea;
            this._timer = window.setTimeout(this._resizeItem.bind(this), 5)
        }
    },
    _resizeItem: function(obj) {
        var allElements = this.getAllElements();
		//var allElements = this.getElementsByTagName("div");
		var isFinished = true;
        var delta;
        this._timer = null;
        for (var n = 0; n < allElements.length; n++) {
            var obj = allElements[n];
            if (obj.className == "VEACCORDIONCONTENTACTIVE") {
                delta = obj.scrollHeight - obj.offsetHeight;
                if (delta <= 0) {} else if ((delta <= 2) && (delta > 0)) {
                    obj.style.height = obj.offsetHeight + "px"
                } else {
                    obj.style.height = Math.round(obj.offsetHeight + Math.max(2, Math.min(this.resize_step, delta / this.resize_step_k))) + "px";
                    isFinished = false
                }
            } else if (obj.className == "VEACCORDIONCONTENT") {
                    //obj.style.height = "0px"
			  
                delta = obj.offsetHeight;
                if (delta <= 0) {} else if (delta <= 2) {
                    obj.style.height = "0px"
                } else {
                    obj.style.height = Math.round(obj.offsetHeight - Math.max(2, Math.min(this.resize_step, delta / 2))) + "px";
                    isFinished = false
                }
			  
            }
        }
        if (!isFinished) this._timer = window.setTimeout(this._resizeItem.bind(this), this.timer_delta)
    }
};










