// ==UserScript==
// @name          Gmail Delete Button
// @namespace     http://www.arantius.com/article/arantius/gmail+delete+button/
// @description	  Add a "Delete" button next to Gmail's "Archive" button.
// @include       http://gmail.google.com/gmail*
// @include       https://gmail.google.com/gmail*
// ==/UserScript==

//
// Originally written by Anthony Lieuallen of http://www.arantius.com/
// Please do not remove this text when creating modified versions.
// If possible, please contact me regarding new features, bugfixes
// or changes that I could integrate into the existing code instead of
// creating different versions.  Thank you
//

var _gd_js_frame=null,
	_gd_main_frame=null,
	_gd_message_frame=null,
	_gd_insert_timer=null,
	_gd_button_num=0;

function _gd_gmail_delete(delete_button){
	//find the command box
	var command_box=delete_button.parentNode.getElementsByTagName('select')[0];
	command_box.onfocus();

	//find the command index for 'move to trash
	var delete_index=-1;
	for (var i=0; i<command_box.options.length; i++) {
		if ('tr'==command_box.options[i].value && !command_box.options[i].disabled ) {
			delete_index=i;
			break;
		}
	}
	if (-1==delete_index) return;

	//_gd_remove_delete_buttons();

	//set the command index and fire the change event
	command_box.selectedIndex=delete_index;
	command_box.onchange();
}

function _gd_element(id, cont) {
	if (!cont) cont=_gd_main_frame;
	if (!cont) return false;
	var el=cont.document.getElementById(id);
	if (el) return el;
	return false;
}

function _gd_make_dom_button(id) {
	var delete_button=_gd_main_frame.document.createElement('button');
	delete_button.setAttribute('class', 'ab');
	delete_button.setAttribute('id', '_gd_delete_button'+id);
	delete_button.setAttribute('onclick', 'top._gd_gmail_delete(this);');
	delete_button.innerHTML='<b>Delete</b>'/*+(_gd_button_num++)*/;
	return delete_button;
}

function _gd_insert_delete_button(insert_container, id, cont) {
	if (!insert_container) return false;
	if (_gd_element('_gd_delete_button'+id, cont)) {
		return false;
	}

	//check for existance of an archive button
	var has_archive=false;
	var btns=insert_container.getElementsByTagName('button');
	for (var i=0; i<btns.length; i++) {
		//alert('['+btns[i].textContent+']');
		if ('Archive'==btns[i].textContent) has_archive=true;
	}
	//if there's no archive button we want no delete button
	if (!has_archive) return;

	var spacer, delete_button;

	delete_button=_gd_make_dom_button(id);
	spacer=insert_container.firstChild.nextSibling.cloneNode(false);

	var insert_point=insert_container.firstChild;
	if (2==id || 3==id) insert_point=insert_point.nextSibling.nextSibling;

	insert_container.insertBefore(spacer, insert_point);
	insert_container.insertBefore(delete_button, spacer);
}

function _gd_place_delete_buttons() {
	var top_menu=_gd_element('tamu');
	if (top_menu) _gd_insert_delete_button(top_menu.parentNode, 0);

	var bot_menu=_gd_element('bamu');
	if (bot_menu) _gd_insert_delete_button(bot_menu.parentNode, 1);
	
	var mtp_menu=_gd_element('ctamu', _gd_message_frame);
	if (mtp_menu) _gd_insert_delete_button(mtp_menu.parentNode, 2, _gd_message_frame);

	var mbt_menu=_gd_element('cbamu', _gd_message_frame);
	if (mbt_menu) _gd_insert_delete_button(mbt_menu.parentNode, 3, _gd_message_frame);
}

function _gd_remove_delete_buttons() {
	var b;
	for (var i=0; i<4; i++) {
		b=_gd_element('_gd_delete_button'+i);
		if (!b) b=_gd_element('_gd_delete_button'+i, _gd_message_frame);
		//alert(b);
		if (b) b.parentNode.removeChild(b);
	}
}

function _gd_magic() {
	_gd_js_frame=top.frames['js'];
	_gd_main_frame=top.frames['main'].frames[0];
	_gd_message_frame=top.frames['main'].frames[1];
	_gd_place_delete_buttons();
}

if ('undefined'==typeof(top._gd_loaded)) {
	top._gd_loaded=true;
	_gd_insert_timer=setInterval('_gd_magic();', 500);
}
