function labelClick(el) {
	var id = el.id;
	var a = id.match(/(.*)_label/);
	id = a[1];
	$(id).focus();
}
function focusLabel(el) {
	id = el.id + "_label";
	Element.toggle(id);
}
function blurLabel(el) {
	id = el.id + "_label";
	Element.toggle(id);
	Element.setOpacity(id, '0.5');
}

function generate_captcha(el) {
	el = $(el);
	
	var num1 = Math.round(Math.random()*10) + 1;
	var num2 = Math.round(Math.random()*10);
	el.innerHTML = "" + num1 + " + " + num2;
}

function check_captcha(el, input, toggle, feedback) {
	el = $(el);
	input = $F(input);
	toggle = $(toggle);
	feedback = document.getElementById(feedback);
	if (eval(el.innerHTML) == input) {
		toggle.value = input;
		return true;
	} else {
		feedback.innerHTML = 'You need to complete the captcha';
		return false;
	}
}

/* Check if the select-value is -1. If it is, fetch the createurl from the 
 * select-element and open that.
 */
function checkCreateNew(select) {
	select = $(select);
	var val = $F(select);
	if (val == -1) {
		var url = select.getAttribute('createurl');
		var toupdate = select.getAttribute('toupdate');
		window.open(url,'createNew',"locattion=no,width=740,height=500");
	}
}

/* Will update a category select-dropdown with new items from the server */

function updateCategorySelect(select, selected) {
	select = $(select);
	new Ajax.Request(select.getAttribute('categoryurl') + "&selected=" + selected,
	{
		onComplete: function(transport, object){
			doUpdateCategorySelect(transport, object);
		}
	});
	return false;
}
function testWindowClose() {
	var win = window.open('', 'testWindowWin');
	win.close();
}
function testWindow() {
	var win = window.open("about:blank", 'testWindowWin', "location=no,width=100,height=100");
	win.document.open();
	win.document.writeln('<html><body><form><button type="button" onclick="');
	win.document.writeln("window.opener.focus();");
	win.document.writeln('">Test</button></form></body></html>');
	win.document.close();
	
}
function doUpdateCategorySelect(transport, object) {
	var json = eval("(" + transport.responseText + ")");
	var select = $(json.api_select);
	var create_new = select.options[select.options.length - 1];
	
	var selectedIndex = 0;
	
	while (select.options[0]) {
		select.options[0] = null;
	}
	for (var i = 0; i < json.api_categories.length; i++) {
		if (json.api_categories[i][0] == json.api_selected) {
			selectedIndex = select.options.length;
		}
		var optn = new Option(json.api_categories[i][1], json.api_categories[i][0]);
		select.options[select.options.length] = optn;
	}
	select.options[select.options.length] = create_new;
	
	select.selectedIndex = selectedIndex;
	var winCreateNew = window.open('', 'createNew');
	winCreateNew.moveBy(0, 100);
	winCreateNew.close();
}
/*
 * This is the original function from Stuart Langridge at http://www.kryogenix.org/
 * This is the update function from Jeff Minard - http://www.jrm.cc/
*/
function superTextile(s) {
    var r = s;
    // quick tags first
    qtags = [['\\*', 'strong'],
             ['\\?\\?', 'cite'],
             ['\\+', 'ins'],  //fixed
             ['~', 'sub'],   
             ['\\^', 'sup'], // me
             ['@', 'code']];
    for (var i=0;i<qtags.length;i++) {
        ttag = qtags[i][0]; htag = qtags[i][1];
        re = new RegExp(ttag+'\\b(.+?)\\b'+ttag,'g');
        r = r.replace(re,'<'+htag+'>'+'$1'+'</'+htag+'>');
    }
    // underscores count as part of a word, so do them separately
    re = new RegExp('\\b_(.+?)_\\b','g');
    r = r.replace(re,'<em>$1</em>');
    
    //jeff: so do dashes
    re = new RegExp('[\s\n]-(.+?)-[\s\n]','g');
    r = r.replace(re,'<del>$1</del>');

    // links
    re = new RegExp('"\\b(.+?)\\(\\b(.+?)\\b\\)":([^\\s]+)','g');
    r = r.replace(re,'<a href="$3" title="$2">$1</a>');
    re = new RegExp('"\\b(.+?)\\b":([^\\s]+)','g');
    r = r.replace(re,'<a href="$2">$1</a>');

    // images
    re = new RegExp('!\\b(.+?)\\(\\b(.+?)\\b\\)!','g');
    r = r.replace(re,'<img src="$1" alt="$2">');
    re = new RegExp('!\\b(.+?)\\b!','g');
    r = r.replace(re,'<img src="$1">');
    
    // block level formatting
    
        // Jeff's hack to show single line breaks as they should.
        // insert breaks - but you get some....stupid ones
        re = new RegExp('(.*)\n([^#\*\n].*)','g');
        r = r.replace(re,'$1<br />$2');
        // remove the stupid breaks.
        re = new RegExp('\n<br />','g');
        r = r.replace(re,'\n');
    
    lines = r.split('\n');
    nr = '';
    for (var i=0;i<lines.length;i++) {
        line = lines[i].replace(/\s*$/,'');
        changed = 0;
        if (line.search(/^\s*bq\.\s+/) != -1) { 
            line = line.replace(/^\s*bq\.\s+/,'\t<blockquote>')+'</blockquote>'; 
            changed = 1; 
        }
        
        // jeff adds h#.
        if (line.search(/^\s*h[1|2|3|4|5|6]\.\s+/) != -1) { 
            re = new RegExp('h([1|2|3|4|5|6])\.(.+)','g');
            line = line.replace(re,'<h$1>$2</h$1>');
            changed = 1; 
        }
        
        if (line.search(/^\s*\*\s+/) != -1) { line = line.replace(/^\s*\*\s+/,'\t<liu>') + '</liu>'; changed = 1; } // * for bullet list; make up an liu tag to be fixed later
        if (line.search(/^\s*#\s+/) != -1) { line = line.replace(/^\s*#\s+/,'\t<lio>') + '</lio>'; changed = 1; } // # for numeric list; make up an lio tag to be fixed later
        if (!changed && (line.replace(/\s/g,'').length > 0)) line = '<p>'+line+'</p>';
        lines[i] = line + '\n';
    }
    
    // Second pass to do lists
    inlist = 0; 
    listtype = '';
    for (var i=0;i<lines.length;i++) {
        line = lines[i];
        if (inlist && listtype == 'ul' && !line.match(/^\t<liu/)) { line = '</ul>\n' + line; inlist = 0; }
        if (inlist && listtype == 'ol' && !line.match(/^\t<lio/)) { line = '</ol>\n' + line; inlist = 0; }
        if (!inlist && line.match(/^\t<liu/)) { line = '<ul>' + line; inlist = 1; listtype = 'ul'; }
        if (!inlist && line.match(/^\t<lio/)) { line = '<ol>' + line; inlist = 1; listtype = 'ol'; }
        lines[i] = line;
    }

    r = lines.join('\n');
    // jeff added : will correctly replace <li(o|u)> AND </li(o|u)>
    r = r.replace(/li[o|u]>/g,'li>');

    return r;
}


function reloadPreviewDiv() { 
    var commentString = document.getElementById('contentarea').value;
    var con = superTextile(commentString);
    var c = document.getElementById('cpreview');
    c.innerHTML = con;
}

