/*
 * In order to have fancy buttons, links need to be used that submit the
 * form with javascript.
 */
function validateAndSubmit() {
	var frm = document.getElementById('mainform');
	if(validate(frm))
		frm.submit();
}

/*
 * Puts the focus onto the first element of the specified
 * form that is a visible input/select/textarea.
 */
function focusOnFirstField(frm) {
	if(frm && frm.elements) {
		for(var i=0;i<frm.elements.length;i++) {
			if(frm.elements[i].type && frm.elements[i].type != 'hidden' && !frm.elements[i].disabled) {
				frm.elements[i].focus();
				return;
			}
		}
	}
}

/*
 * Changes the content of an object
 */
function changeElementValue(id,value) {
	document.getElementById(id).innerHTML = value; 
}

/*
 * Changes the class assignment of an object
 */
function changeElementClass(id,value) {
	document.getElementById(id).className = value;
}

/*
 * Changes the image source of an image object
 */
function changeImageSrc(id,value) {
	document.getElementById(id).src=value;
}

/*
 * Used to show session messages
 */
function showMessage(message,result) {
	clearTimeout(sliderTimer);
	changeElementValue("message_text",message);
	changeElementDisplay("message","show");
	if(result=="error") {
		clearTimeout(sliderTimer);
		changeElementClass("message","error");
		changeImageSrc("message_icon","/admin/images/layout/message_error.gif");
	}
	else {
		changeElementClass("message","success");
		changeImageSrc("message_icon","/admin/images/layout/message_success.gif");
	}
}


/*
 * Changes the display property of an object
 */ 
var slider = null;
var sliderTimer = null;
function changeElementDisplay(id,value) {
	if(!slider) slider = new Fx.Slide(id);
	document.getElementById(id).parentNode.style.marginBottom = "10px";
	
	if(value == "hide"){
		slider.slideOut().chain(function(){
			document.getElementById(id).style.display = "none";
			// Get rid of the "residual margin"
			document.getElementById(id).parentNode.style.margin = "0px";
		});
	}else{
		if(document.getElementById(id).style.display != ""){
			sliderTimer = setTimeout("changeElementDisplay('"+id+"','hide');",15000);
			document.getElementById(id).style.display = "";
			slider.hide();
			slider.slideIn();
		}else{
			sliderTimer = setTimeout("changeElementDisplay('"+id+"','hide');",15000);
			slider.slideIn();
			Lyra.Effects.style(document.getElementById(id), 
				{duration:300}, 
				{'color': '#ffffff'}
			).chain(
				function(){
						Lyra.Effects.style(document.getElementById(id), 
						{duration:300}, 
						{'color': document.getElementById(id).className == 'error' ? '#990000' : '#41611a'}
					);
				}
			);
		}
	}
}

/*
 * This little series of stuff is for putting a listener on the form to turn "enter" into
 * a "submit"
 */
function addListener(a,b,c,d) {
	if (a.addEventListener) {
		a.addEventListener(b,c,d);
		return true;
	} else if (a.attachEvent) {
		var e=a.attachEvent("on"+b,c);
		return e;
	} else {
		alert("Handler could not be attached");
	}
}

function bind(a,b,c,d) {
	return window.addListener(a,b,function() {d.apply(c,arguments)});
}

function handleKeystroke(evt) {
	// Grab the cross browser event
	if( !evt ) evt = window.event;
	// Character code of key pressed
	var asc = !evt.keyCode ? (!evt.which ? evt.charCode : evt.which) : evt.keyCode;
	// ASCII character of above code
	var chr = String.fromCharCode(asc).toLowerCase();
	for (var i in this) {
		if (asc == i) {
			this[i](evt);
			break;
		}
	}
}

// KEY COMMANDS
var keyMap = new Array();
keyMap[13] = pressedEnter;

function pressedEnter(evt) {
	if (document.getElementById("mainform")) {
		frm = document.getElementById("mainform");
		if (frm.v_fields) {
			// Call the validation first
			if (validate(frm)) 
				document.getElementById("mainform").submit();
		}
		else {
			document.getElementById("mainform").submit();
		}
	}
}

// Add the keydown listner to the document object for global capture
bind(document, 'keydown', keyMap, handleKeystroke);

// Toggles the checked/unchecked status of checkbox arrays
function checkboxToggle(isChecked,checkboxArray) {
	if (checkboxArray) {
		if (checkboxArray.length) {
			for (var i = 0; i < checkboxArray.length; i++) {
				checkboxArray[i].checked = isChecked;
			}
		}
		else {
			checkboxArray.checked = isChecked;
		}
	}
}

// For Lyra Filebrowser Module
function setDisplay(id, d){
	document.getElementById(id).style.display = d;
}