function rollover(imgID, suffix) {
	// get the image object we're referring to
	var thisimg = document.getElementById(imgID);
	
	// and add "suffix" to its src
	thisimg.src = thisimg.src.replace(/(\.[a-z0-9]+)$/i,'_' + suffix + '$1');
}

function rollout(imgID, suffix) {
	// get the image object we're referring to
	var thisimg = document.getElementById(imgID);
	
	// and remove "suffix" from its src
	patt = '_' + suffix + '(\.[a-z0-9]+)$';
	thisimg.src = thisimg.src.replace(/patt/i,'$1');
}

function getY()
{
	//get the position of the top of the scroll bars
	if (document.layers) {
		//nn
		y = e.pageYOffset;
	} else if (document.all && !window.opera) {
		//ie
		y = document.body.scrollTop;
	} else if (document.getElementById) {
		//dom
		nav = document.getElementById("navBar");
		y = nav.offsetTop;
	}
	
	return y;
}

function sortRotationGrid(sb, ud)
{
	y = getY();
	location.href = '?sb=' + sb + '&ud=' + ud + '&scroll=' + y;
}

function scrollDoc(n)
{
	if (n) {
		window.scrollTo(0,n);
	}
}

function popWindow(url, name, features)
{
	window.open(url, name, features);
}

function openNewWindow(URLtoOpen, windowName, windowFeatures) {
	newWindow = window.open(URLtoOpen, windowName, windowFeatures); 
}


var ajaxRequest = function(method, url, params, responseTo, chatty)
{
	var http_request = false;
	var outcome = document.getElementById(responseTo);
	var readyState = "";
	
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
            // See note below about this line
        }
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!http_request) {
        alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }
    
    var handlerFunc = function() {
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				outcome.innerHTML = http_request.responseText;
			} else {
				alert('There was a problem loading ' + params + '.');
			}
		} else {
			if (chatty == 99) {
				switch(http_request.readyState) {
					case 1:
						readyState = " Request opened...";
						break;
						
					case 2:
						readyState = " Sending request...";
						break;
						
					case 3:
						readyState = " Receiving response...";
						break;
					
					case 4:
						readyState = " Response loaded...";
						break;
						
					default:
						readyState = " Waiting for an answer...";
						break;
				}
				
				outcome.innerHTML += readyState;
			}
		}
        
    }
    
	http_request.onreadystatechange = handlerFunc;
	http_request.open(method, url, true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http_request.send(params);
	
	
	return false;
}

function insertTag(targetId, t)
{
	var e = document.getElementById(targetId);
	var val = "";
	var sTxt = "";
	
	//get selected text
	//insert val at cursor
	if (document.selection) {
		//IE support
		e.focus();
		sel = document.selection.createRange();
		sTxt = sel.text;
	} else if (e.selectionStart || e.selectionStart == "0") {
		//MOZILLA/NETSCAPE support
		var sPos = e.selectionStart;
		var ePos = e.selectionEnd;
		var sTxt = e.value.substring(sPos, ePos);
	}
	
	switch (t) {
		case "h1":
		if (sTxt) {
			val = "<h1>" + sTxt + "</h1>";
		} else {
			val = prompt("Text:");
		
			if (val && val != null) {
				val = "<h1>" + val + "</h1>";
			}
		}
		break;
		
		case "h2":
		if (sTxt) {
			val = "<h2>" + sTxt + "</h2>";
		} else {
			val = prompt("Text:");
		
			if (val && val != null) {
				val = "<h2>" + val + "</h2>";
			}
		}
		break;
		
		case "h3":
		if (sTxt) {
			val = "<h3>" + sTxt + "</h3>";
		} else {
			val = prompt("Text:");
		
			if (val && val != null) {
				val = "<h3>" + val + "</h3>";
			}
		}
		break;
		
		case "bold":
		if (sTxt) {
			val = "<strong>" + sTxt + "</strong>";
		} else {
			val = prompt("Text:");
		
			if (val && val != null) {
				val = "<strong>" + val + "</strong>";
			}
		}
		break;
		
		case "italic":
		if (sTxt) {
			val = "<em>" + sTxt + "</em>";
		} else {
			val = prompt("Text:");
		
			if (val && val != null) {
				val = "<em>" + val + "</em>";
			}
		}
		break;
		
		case "break":
		val = "<br/>";
		break;
		
		case "img":
		val = prompt("Enter image file location and name:");
		
		if (val && val != null) {
			val = "<img src=\"" + val + "\" border=\"0\" alt=\"\"/>";
		}
		break;
		
		case "ul":
		val = prompt("Enter first item in list:");
		
		if (val && val != null) {
			val = "[bulleted-list]\\n[item]" + val + "[/item]\\n[/bulleted-list]";
		}
		break;
		
		case "ol":
		val = prompt("Enter first item in list:");
		
		if (val && val != null) {
			val = "[numbered-list]\\n[item]" + val + "[/item]\\n[/numbered-list]";
		}
		break;
		
		case "link":
		url = prompt("Enter URL:");
		
		if (url && url != null) {
			if (!sTxt) {
				txt = prompt("Enter text of link (optional):");
			} else {
				txt = sTxt;
			}
			
			if (txt && txt != null) {
				val = "<a href=\"" + url + "\">" + txt + "</a>";
			} else {
				val = "<a href=\"" + url + "\">" + url + "</a>";
			}
		}
		break;
	}
	
	if (val) {
		//insert val at cursor
		if (document.selection) {
			//IE support
			e.focus();
			sel = document.selection.createRange();
			sel.text = val;
		} else if (e.selectionStart || e.selectionStart == "0") {
			//MOZILLA/NETSCAPE support
			var sPos = e.selectionStart;
			var ePos = e.selectionEnd;
			e.value = e.value.substring(0, sPos) + val + e.value.substring(ePos, e.value.length);
		} else {
			e.value += val;
		}
	}
		
}

function parseTags(text)
{
	text = text.replace("href='www", "href='http://www");
	text = text.replace("[h1]", "<h1>");
	text = text.replace("[/h1]", "</h1>");
	text = text.replace("[h2]", "<h2>");
	text = text.replace("[/h2]", "</h2>");
	text = text.replace("[h3]", "<h3>");
	text = text.replace("[/h3]", "</h3>");
	text = text.replace("[bold]", "<strong>");
	text = text.replace("[/bold]", "</strong>");
	text = text.replace("[italic]", "<em>");
	text = text.replace("[/italic]", "</em>");
	text = text.replace("[break]", "<br>");
	text = text.replace("[bulleted-list]", "<ul>");
	text = text.replace("[/bulleted-list]", "</ul>");
	text = text.replace("[numbered-list]", "<ol>");
	text = text.replace("[/numbered-list]", "</ol>");
	text = text.replace("[item]", "<li>");
	text = text.replace("[/item]", "</li>");
	text = text.replace(/[\r\n]{2}/, "<br/><br/>");
	text = text.replace("[\r\n]+", " ");

	return text;
}

function ajaxPopulate(send_to_target, call_from_page, params) {
	//uses Script.aculo.us Ajax library
	//todo: make sure params is querystring formatted
	var target = document.getElementById(send_to_target);
	var http_request = false;
	target.innerHTML = "Requesting information...<br/>" + target.innerHTML;
	ajaxRequest('post', call_from_page, params, send_to_target, 1);
	return false;
}

function ajaxFormUpdate(sender, target, send_to_page, params)
{
	ajaxPopulate(target, send_to_page, params);
	return false;
}
