/*
 * loosely based on.... (but heavily edited by now, and now depends on mootools)
 * DTSL - Dynamic text submission links 
 * written by Chris Heilmann (http://www.icant.co.uk)
 *
 * 
 * - scans a document for submit buttons and replaces them with text links
 *   with the same ID and text value and a predefined class 
*/
var btl = {
	NEWLINK_CLASS: '',
	CONFIRM_SUFFIX: '-confirm',
	HIDE_SUFFIX: '-hide',
	BLOCK_SUFFIX: '-block',
	BUTTONTOLINK_CLASS: 'textlink',
	
	init:function(){
		var i;
		//check it's doable?
		if(!document.getElementById || !document.createTextNode){return;}

		var buttons = $$('button');
		for(i=0;i<buttons.length;i++){
			var button = buttons[i];
			if(button.hasClass(btl.BUTTONTOLINK_CLASS)){
				btl.convertButtonToLink(button);
			} else if(Browser.Engine.trident){
				btl.convertButtonToInput(button);
			}
		}
	},
	convertButtonToInput: function(submitButton){
		//if (! window.ie) return;
		var newinput = $(document.createElement('input'));
		newinput.setAttribute('type', 'submit');
		var parentNode = submitButton.parentNode;
		parentNode.insertBefore(newinput, submitButton);
		parentNode.removeChild(submitButton);

		/*var debuginput = $(document.createElement('pre'));
		var msg = 'My new thingy here:\n';
		for(i in submitButton){
			msg = msg+i+"="+submitButton[i]+",\n ";	
		}
		debuginput.set('text', msg);
		parentNode.insertBefore(debuginput, newinput);
		*/
		
		var submitButtonText = submitButton.get('text');
		if(Browser.Engine.trident){
			/* This is the mad bit that makes IE get the value from the form */
			submitButton.outerHTML = submitButton.outerHTML;
		}
		var value = submitButton.value;
		newinput.setAttribute('value', submitButtonText);
		var name = submitButton.getProperty('name');
		
		if (name){	
			newinput.setAttribute('xname', name);
			newinput.setAttribute('xvalue', submitButton.value);
		}
		btl.addClickFunctionEvent(newinput, btl.submitFromConvertedInput);
		
	},
	getNamedElement: function(elements,name){
		for (var i=0; i<elements.length();i++){
			var elem = $(elements[i]);
			if (elem.name==name){
				return elem;
			}
		}
	},
	convertButtonToLink: function(submitButton){
		var newspan=document.createElement('span');
		var form = submitButton.form
		
		newspan.setAttribute('class','deletebutton');
		var submitLink=$(document.createElement('a'));
		submitLink.setAttribute('href','#');
		var submitButtonId = submitButton.getAttribute('id');
		submitLink.setAttribute('id',submitButtonId);
		submitLink.className=btl.NEWLINK_CLASS;
		submitLink.setProperty("formId", form.getAttribute('id'));
		submitLink.setProperty("buttonName",submitButton.getAttribute('name'));
		var submitButtonText = submitButton.get('text');
			
		var parentNode = submitButton.parentNode;
		parentNode.insertBefore(newspan,submitButton);
		parentNode.removeChild(submitButton);
		if(window.ie){
			submitButton.outerHTML = submitButton.outerHTML;
		}
		
		submitLink.setProperty("buttonValue", submitButton.value);
		submitLink.onclick=function(){return false;} // Safari
		var confirmTextId = submitButtonId+btl.CONFIRM_SUFFIX;
		var confirmText = $(confirmTextId);
		if (confirmText){
			var confirmLink = $(document.createElement('a'));
			confirmLink.setProperty('href', '#');
			confirmLink.appendChild(document.createTextNode(submitButtonText));
			confirmLink.setProperty('id', submitButtonId+btl.CONFIRM_SUFFIX);
			btl.addClickFunctionEvent(confirmLink, btl.showSubmitBlock);
			
			submitLink.appendChild(document.createTextNode(confirmText.get('text')));
		 	
			var cancelLink = $(document.createElement('a'));
			cancelLink.setProperty('href', '#');
			cancelLink.appendChild(document.createTextNode("Cancel"));
			cancelLink.setProperty('id', submitButtonId+btl.HIDE_SUFFIX);
			btl.addClickFunctionEvent(cancelLink, btl.hideSubmitBlock);
			
			var submitBlock = $(document.createElement('div'));
			submitBlock.setProperty('id', submitButtonId+btl.BLOCK_SUFFIX);
			submitBlock.addClass('hideme');
			var deleteTextSpan = $(document.createElement('span'));
			deleteTextSpan.addClass('deletetext');
			deleteTextSpan.appendChild(document.createTextNode("Are you sure?"));
			var confirmButtonSpan = $(document.createElement('span'));
			confirmButtonSpan.addClass('confirmbutton');
			confirmButtonSpan.appendChild(submitLink);
			confirmButtonSpan.appendChild(document.createTextNode(" "));
			confirmButtonSpan.appendChild(cancelLink);
			submitBlock.appendChild(deleteTextSpan);
			submitBlock.appendChild(document.createTextNode(" "));
			submitBlock.appendChild(confirmButtonSpan);
			
			confirmText.parentNode.removeChild(confirmText);
			newspan.appendChild(confirmLink);
			newspan.appendChild(submitBlock);
		} else {
			submitLink.appendChild(document.createTextNode(submitButtonText));
			newspan.appendChild(submitLink);
		} 
		btl.addClickFunctionEvent(submitLink, btl.sendForm);
		
	},
	addClickFunctionEvent:function(elem, onclickFunction){
		if (onclickFunction){
			btl.addEvent(elem, 'click', onclickFunction, false);
		}
	},
	describe:function(myObj, name){
		var debug=name+" "+myObj+":\n";
		for (var i in myObj){
    		debug += i+" , ";
		}
		alert(debug);
	},
	showSubmitBlock:function(e){
		var elem;
		if (e.srcElement){
			elem = $(e.srcElement);
		} else{
			elem = $(this);
		}
		var id = elem.getAttribute('id');
		var baseId = id.substring(0, id.length - btl.CONFIRM_SUFFIX.length);
		var confirmLink = $(baseId + btl.CONFIRM_SUFFIX);
		//confirmLink.addClass('hideme');
		var block = $(baseId + btl.BLOCK_SUFFIX);
		block.removeClass('hideme');
	},
	hideSubmitBlock:function(e){
		var elem;
		if (e.srcElement){
			elem = $(e.srcElement);
		} else{
			elem = $(this);
		}
		var id = elem.getAttribute('id');
		var baseId = id.substring(0, id.length - btl.HIDE_SUFFIX.length);
		var confirmLink = $(baseId + btl.CONFIRM_SUFFIX);
		//confirmLink.removeClass('hideme');
		var block = $(baseId + btl.BLOCK_SUFFIX);
		block.addClass('hideme');
	},
	sendForm:function(e){
		btl.cancelClick(e);
		if (e.btlCancelled)
			return;
		var elem;
		if (e.srcElement){
			elem = $(e.srcElement);
		} else{
			elem = $(this);
		}
		var buttonName = elem.getProperty("buttonName");
		var buttonValue = elem.getProperty("buttonValue");
		var newinput = document.createElement("input");
		newinput.setAttribute("type","hidden");
		newinput.setAttribute("name",buttonName);
		newinput.setAttribute("value",buttonValue);		
		elem.parentNode.insertBefore(newinput,elem);
		var formId = elem.getProperty("formId");
		$(formId).submit();
	},
	submitFromConvertedInput: function(e){
		var elem;
		if (e.srcElement){
			elem = $(e.srcElement);
		} else{
			elem = $(this);
		}
		var name = elem.getProperty('xname');
		if (name){
			var value = elem.getProperty('xvalue');
			var hidden = $(document.createElement("input"));
			hidden.setProperty('type','hidden');
			hidden.setProperty('name',name);
			hidden.setProperty('value', value);
			elem.parentNode.insertBefore(hidden, elem);
			//elem.injectBefore(hidden);
		}
		elem.form.submit();
	},
	check:function(checkType, event){
		if (checkType=="delete"){
			msg = "This will delete this item permanently. ";
		} else if (checkType="private"){
			msg = "This will mean your item will be invisible to anyone but you. ";
		} else {
			msg = "";
		}
		var answer = window.confirm(msg+"This will break any links. Continue?");
		alert('answer:'+answer);
		if (event.srcElement){
			//btl.describe(e.srcElement, 'e.srcElement');
			$(event.srcElement).setProperty('shouldContinue', answer?'yes':'no');
		}
		if (!answer){
			if(event){
				event.btlCancelled = true;
				event = new Event(event);
				alert('event.stop'+event.stop);
				if (event.cancelBubble)
					event.cancelBubble();
				event.stopPropagation();
				event.preventDefault();
				event.btlCancelled = true;
			} else {
				btl.cancelClick(event);
			}
			//alert("tried to stop propagation");
			return void(0);
		} else {
			//alert("not trying to stop propagation");
			return true;
		}
	},
	cancelClick:function(e){
		if (window.event){
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			return;
		}
		if (e){
			e.stopPropagation();
			e.preventDefault();
		}
	},
	addEvent: function(elm, evType, fn, useCapture){
		if (elm.addEventListener) 
		{
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	}
}
btl.addEvent(window, 'load', btl.init, false);