/*
 * 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 dtsl = {
	NEWLINK_CLASS: '',
	HIDEME_CLASS: 'hideme',
	CONFIRMBLOCK_SUFFIX: '-confirmblock',
	CONFIRMTEXT_SUFFIX: '-confirm',
	CANCEL_SUFFIX: '-cancel',
	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(dtsl.BUTTONTOLINK_CLASS)){
				dtsl.convertButtonToLink(button);
			} else if(window.ie){
				dtsl.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 submitButtonText = submitButton.getText();
		if(window.ie){
			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);
		}
		dtsl.addClickFunctionEvent(newinput, dtsl.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 form = submitButton.form
		
		var link=$(document.createElement('a'));
		link.setAttribute('href','#');
		var submitButtonId = submitButton.getAttribute('id');
		link.setAttribute('id',submitButtonId);
		link.className=dtsl.NEWLINK_CLASS;
		var formId = form.getAttribute('id');
		var submitButtonText = submitButton.getText();
		link.appendChild(document.createTextNode(submitButtonText));
        var name = submitButton.getAttribute('name');
	    submitButton.replaceWith(link);
        var buttonValue = false;
        if (name){
			if(window.ie){
				submitButton.outerHTML = submitButton.outerHTML;
			}
            buttonValue = submitButton.value;
		}
        var confirmBlockId = submitButtonId+dtsl.CONFIRMBLOCK_SUFFIX;
		var confirmBlock = false;
		if (submitButtonId){
			var confirmBlock = $(confirmBlockId);
		}
		if (submitButtonId && confirmBlock){
			var confirmLink = dtsl.getId(submitButtonId+dtsl.CONFIRMTEXT_SUFFIX, " within #"+confirmBlockId);
            dtsl.makeSubmitLink(confirmLink, formId, name, buttonValue)
					 	
			var cancelLink = dtsl.getId(submitButtonId+dtsl.CANCEL_SUFFIX, " within #"+confirmBlockId);
			dtsl.addClickFunctionEvent(cancelLink, dtsl.hideSubmitBlock);

			dtsl.addClickFunctionEvent(link, dtsl.showSubmitBlock);
		} else {
			dtsl.makeSubmitLink(link, formId, name, buttonValue)
		} 
	},
	makeSubmitLink: function(link, formId, name, value){
	   link.setProperty("formId", formId);
       if (name){
           link.setProperty("buttonName",name);
           link.setProperty("buttonValue", value);
       }
       link.onclick=function(){return false;} // Safari
       dtsl.addClickFunctionEvent(link, dtsl.sendForm);
	},
	getId: function(id, msg){
		var elem = $(id);
		if (!elem){
			alert("need #"+id+msg);
			return false;
		}
		return elem;
	},
	addClickFunctionEvent:function(elem, onclickFunction){
		if (onclickFunction){
			dtsl.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);
		var link = $(baseId);
		link.addClass(dtsl.HIDEME_CLASS);
		var blockId = baseId + dtsl.CONFIRMBLOCK_SUFFIX;
		var block = $(blockId);
		block.removeClass(dtsl.HIDEME_CLASS);
	},
	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 - dtsl.CANCEL_SUFFIX.length);
		var link = $(baseId);
		link.removeClass(dtsl.HIDEME_CLASS);
		var blockId = baseId + dtsl.CONFIRMBLOCK_SUFFIX;
		var block = $(blockId);
		block.addClass(dtsl.HIDEME_CLASS);
	},
	sendForm:function(e){
		dtsl.cancelClick(e);
		if (e.dtslCancelled)
			return;
		var elem;
		if (e.srcElement){
			elem = $(e.srcElement);
		} else{
			elem = $(this);
		}
		var formId = elem.getProperty("formId");
		var form = $(formId);		
		
        var buttonName = elem.getProperty("buttonName");
		if(buttonName){
		  var newinput = $(document.createElement("input"));
          newinput.setAttribute("type","hidden");
		  var buttonValue = elem.getProperty("buttonValue");
		  newinput.setAttribute("name",buttonName);
		  newinput.setAttribute("value",buttonValue);		
          newinput.injectInside(form);
		}
    	form.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){
			//dtsl.describe(e.srcElement, 'e.srcElement');
			$(event.srcElement).setProperty('shouldContinue', answer?'yes':'no');
		}
		if (!answer){
			if(event){
				event.dtslCancelled = true;
				event = new Event(event);
				alert('event.stop'+event.stop);
				if (event.cancelBubble)
					event.cancelBubble();
				event.stopPropagation();
				event.preventDefault();
				event.dtslCancelled = true;
			} else {
				dtsl.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;
		}
	}
}
dtsl.addEvent(window, 'load', dtsl.init, false);