
/*****************************************************************************************\
| the Lightning Box Content Management System (LBX CMS) developed by Lightning Box Studios.
| http://www.lightningboxstudios.com
| =========================================================================================
|
| All source codes & content (c) Copyright 2007-2009, Lightning Box Studios
| unless specifically noted otherwise.
| =========================================================================================
|
| By using this software, you acknowledge having read the terms of the contract and/or
| license and agree to be bound thereby.
\******************************************************************************************/


//SFX
function trash_content(div_name) {
	window.addEvent('domready', function(){
		//$(div_name).fade('out');
		new Fx.Slide($(div_name), {
			duration: 250,
			onComplete: function() {
				$(div_name).dispose();
				}
			}).slideOut();
		});
	}
function trash_contentTR(div_name) {
	window.addEvent('domready', function(){
		//$(div_name).fade('out');
		new Fx.Slide($(div_name), { duration: 250 }).slideOut();
		});
	}
	
function fetch_unix_timestamp() {
	return parseInt(new Date().getTime().toString().substring(0, 10))
	}
	
function sleep(milliseconds) {
	var start = new Date().getTime();
	for (var i = 0; i < 1e7; i++) {
		if ((new Date().getTime() - start) > milliseconds){
			break;
			}
		}
	}
	
function notification(the_ID, the_title, the_message, the_sticky) {
	window.addEvent('domready', function(){
		notimooManager.show({
			id: 'notification_'+the_ID,
			title: the_title,
			message: the_message,
			sticky: the_sticky
			});
		});
	}


	
//COOKIE RELATED FUNCTIONS
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function eraseCookie(name) {
	createCookie(name,"",-1);
}

function logout(link) {
	//cookies, 
	//alert(cookies);
	//erase = document.cookie.split(","); //cookies.split(",");
	//alert(erase);
	//for (eraseme in erase) {
	//	alert(eraseme);
		//alert(erase[x] + " is being erased");
		//eraseCookie(erase[x]);
	//	}
	eraseCookie('authorized_user');
	eraseCookie('authorized_administrator');
	eraseCookie('authorized_username');
	eraseCookie('authorized_permissions');
	eraseCookie('authorized_ID');
	getURL(link);
	}
	

var inputs;
var imgFalse = 'images/unchecked.png';
var imgTrue = 'images/checked.png'; 
function replaceChecks() {
    
    //get all the input fields on the page
    inputs = document.getElementsByTagName('input');

    //cycle trough the input fields
    for(var i=0; i < inputs.length; i++) {

        //check if the input is a checkbox
        if(inputs[i].getAttribute('type') == 'checkbox') {
            
            //create a new image
            var img = document.createElement('img');
            
            //check if the checkbox is checked
            if(inputs[i].checked) {
                img.src = imgTrue;
            } else {
                img.src = imgFalse;
				}
			
			
            //set image ID and onclick action
            img.id = 'checkImage'+i;
			img.className = 'pointer submit_checkbox';
            //set image
            img.onclick = new Function('checkChange('+i+');replacedchecks_onclick(inputs['+i+']);');
            //place image in front of the checkbox
            inputs[i].parentNode.insertBefore(img, inputs[i]);
            
            //hide the checkbox
            inputs[i].style.display='none';
        }
    }
}

//change the checkbox status and the replacement image
function checkChange(i) {

    if(inputs[i].checked) {
        inputs[i].checked = '';
        $('checkImage'+i).src=imgFalse;
    } else {
        inputs[i].checked = 'checked';
        $('checkImage'+i).src=imgTrue;
    }
} 


function setBookmark(url, title) {
	if (title=='') { title=url; }
	if (window.sidebar) { // firefox
		window.sidebar.addPanel(title, url,"");
	} else if( document.all ) { //MSIE
		window.external.AddFavorite(url, title);
	} else {
		alert('Press CTRL and D to add a bookmark to:\n"'+url+'".');
		}
	}



	
//FORM-RELATED FUNCTIONS
function check_all(n) {
	var elems = n;
	var these = elems.split(",");
	for (y = 0; y < these.length; y++) {
		var elements = named(these[y]);
		for (var i = 0; i < elements.length; i++) {
			elements[i].checked = true;
			}
		}
	}
	function check_none(n) {
		var elems = n;
		var these = elems.split(",");
		for (y = 0; y < these.length; y++) {
			var elements = named(these[y]);
			for (var i = 0; i < elements.length; i++) {
				elements[i].checked = false;
				}
			}
		}
function toggle_all_checks(n) {
	var elems = n;
	var these = elems.split(",");
	for (y = 0; y < these.length; y++) {
		var elements = named(these[y]);
		for (var i = 0; i < elements.length; i++) {
			if (elements[i].checked == true) {
				elements[i].checked = false;
			} else if (elements[i].checked == false) {
				elements[i].checked = true;
				}
			}
		}
	}
function remove_element(parent, element) {
	el = $(element);
	$(parent).removeChild(el);
	}
	function clear_id(element) {
		$(element).id = '';
		}
function check_form(n, avar, msg) {
	var elems = $(n).elements;
	var elems_count = elems.length;
	var error = "";
	
	if (cssjs("check",n,"cms_form_send") == true) { var cms_form = true; }
	if (cssjs("check",n,"cms_form_redirect") == true) { var cms_form = true; }
	
	for (i=0; i < elems_count; i++) {
		if (elems[i].getAttribute("required")!=null && !(elems[i].disabled)) {
			if ((elems[i].value == "") || (elems[i].value == elems[i].title)) {
				cssjs("add",elems[i],"form_error");
				if (elems[i].title != "") {
					error +="\n'" + elems[i].title + "' is empty";
				} else {
					error +="\n'" + elems[i].name + "' is empty";
					}
			} else if ((elems[i].name.search(/^email$/gi) != -1) || elems[i].title.search(/^email$/gi) != -1) {
				if (isEmail(elems[i].value) == false) {
					cssjs("add",elems[i],"form_error");
					if (elems[i].title != "") {
						error +="\n'" + elems[i].title + "' is not a valid email address";
					} else {
						error +="\n'" + elems[i].name + "' is not a valid email address";
						}
					}
			} else {
				cssjs("remove",elems[i],"form_error");
				}
			}
		}
	
	if (error != "") {
		alert("The following errors were found:\n" + error);
		return false ;
	} else {
		for (i=0; i < elems_count; i++) {
			if ((elems[i].value == elems[i].title)) {
				elems[i].value = "";
				}
			}
		if (msg != null) {
			var agree=confirm(msg);
			if (agree) {
				setActionVar(avar);
				if (cms_form !== true) { $(n).submit(); }
			} else {
				return false ;
				}
		} else if(avar != null) {
			setActionVar(avar);
			if (cms_form !== true) { $(n).submit(); }
		} else {
			if (cms_form !== true) { $(n).submit(); }
			}
		}
	}
	function checkForm_setActionVar(n, avar) {
		var elems = $(n).elements;
		var elems_count = elems.length;
		var error = "";
		
		for (i=0; i < elems_count; i++) {
			if (elems[i].getAttribute("required")!=null && !(elems[i].disabled)) {
				if (elems[i].value == "") {
					cssjs("add",elems[i],"form_error");
					if (elems[i].title != "") {
						error +="\n'" + elems[i].title + "' is empty";
					} else {
						error +="\n--" + elems[i].name + " is empty";
						}
				} else {
					cssjs("remove",elems[i],"form_error");
					}
				}
			}
		
		if(error !="") {
			alert("The following errors were found:\n" + error);
			return false ;
		} else { //submit form
			setActionVar(avar);
			$(n).submit();
			}
		}
	function check_set_confirm(n, avar, msg) {
		var elems = $(n).elements;
		var elems_count = elems.length;
		var error = "";
		
		for (i=0; i < elems_count; i++) {
			if (elems[i].getAttribute("required")!=null && !(elems[i].disabled)) {
				if (elems[i].value == "") {
					cssjs("add",elems[i],"form_error");
					if (elems[i].title != "") {
						error +="\n'" + elems[i].title + "' is empty";
					} else {
						error +="\n--" + elems[i].name + " is empty";
						}
				} else {
					cssjs("remove",elems[i],"form_error");
					}
				}
			}
		
		if(error !="") {
			alert("The following errors were found:\n" + error);
			return false ;
		} else { //submit form
			var agree=confirm(msg);
			if (agree) {
				setActionVar(avar);
				$(n).submit();
				//return true ;
			} else {
				return false ;
				}
			}
		}
	function isEmail(string) {
		return (string.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1);
		}
function setTarget(el, n) {
	$(el).target = n;
	}
function setFormAction(link) {
	var forms = document.forms;
	for (var i = 0; i < forms.length; i++) {
		forms[i].action = link;
		}
	}
function setFormMethod(meth) {
	var forms = document.forms;
	for (var i = 0; i < forms.length; i++) {
		forms[i].method = meth;
		}
	}
function setActionVar(v) {
	var actionVar = named("actionVar");
	for (var i = 0; i < actionVar.length; i++) {
		actionVar[i].disabled = false;
		actionVar[i].value = v;
		}
	}
function setIDsName(id, n) {
	$(id).name = n;
	}
	
function setValue(el, v) {
	var item = named(el);
	for (var i = 0; i < item.length; i++) {
		item[i].disabled = false;
		item[i].value = v;
		}
	}
	function setIDvalue(id, v) {
		$(id).value = v;
		}
	function toggleValue(n, v1, v2) {
		if ($(n).value == v1) {
			$(n).value = v2;
		} else { 
			$(n).value = v1; 
			}
		}
	
function toggle_div_vis(n) {
	var elems = n;
	var these = elems.split(",");
	for(i = 0; i < these.length; i++){
		if ($(these[i]).style.display == "none") {
			$(these[i]).style.display = "block"; //"inline";
		} else {
			$(these[i]).style.display = "none";
			}
		}
	}
	function toggle_display(n) {
		var elems = n;
		var these = elems.split(",");
		for(i = 0; i < these.length; i++){
			if ($(these[i])) {
				if ($(these[i]).style.display == "none") {
					$(these[i]).style.display = "block";
				} else {
					$(these[i]).style.display = "none";
					}
				}
			}
		}
	function display_block(n) {
		$(n).style.display = "block";
		}
	function display_blocks(n) {
		var elems = n;
		var these = elems.split(",");
		for(i = 0; i < these.length; i++){
			$(these[i]).style.display = "block";
			}
		}
	function display_none(n) {
		var elems = n;
		var these = elems.split(",");
		for(i = 0; i < these.length; i++){
			$(these[i]).style.display = "none";
			}}
	function display_inline(n) {
		var elems = n;
		var these = elems.split(",");
		for(i = 0; i < these.length; i++){
			$(these[i]).style.display = "inline";
			}}
function vis_show(n) {
	var elems = n;
	var these = elems.split(",");
	for(i = 0; i < these.length; i++){
		$(these[i]).style.visibility = "visible";
		}}
function show_div(n) {
	var elems = n;
	var these = elems.split(",");
	for(i = 0; i < these.length; i++){
		$(these[i]).style.display = "inline";
		}
	}
function hide_div(n) {
	var elems = n;
	var these = elems.split(",");
	for(i = 0; i < these.length; i++){
		$(these[i]).style.display = "none";
		}
	}
function toggleTR(n) {
	var elems = n;
	var these = elems.split(",");
	for(i = 0; i < these.length; i++){
		if ($(these[i]).style.display == "") {
			$(these[i]).style.display = "none";
		} else if ($(these[i]).style.display == "none") {
			$(these[i]).style.display = ""; //table-row";
			}
		}
	}
	function show_tr(n) {
		var elems = n;
		var these = elems.split(",");
		for(i = 0; i < these.length; i++){
			$(these[i]).style.display = ""; //"table-row"; //disabled = false;
			}
		//$(n).style.display = "table-row";
		}
	function hide_tr(n) {
		var elems = n;
		var these = elems.split(",");
		for(i = 0; i < these.length; i++){
			$(these[i]).style.display = "none";
			}
		//$(n).style.display = "hidden";
		}
function toggleYN(n) {  
	//if ($(n).disabled == true) {
		$(n).disabled = false;
	//	}
	if ($(n).value == 'Y') {
		$(n).value = 'N';
	} else if ($(n).value == 'N') {
		$(n).value = 'Y';
	} else {
		$(n).value = 'Y';
		}
	}
	function toggleYB(n) {  
		if ($(n).disabled == true) {
			$(n).disabled = false;
			}
		if ($(n).value == 'Y') {
			$(n).value = '';
		} else {
			$(n).value = 'Y';
			}
		}
function toggleDis(n) {
	var elems = n;
	var these = elems.split(",");
	for(i = 0; i < these.length; i++){
		if ($(these[i]).disabled == true) {
			$(these[i]).disabled = false;
		} else if ($(these[i]).disabled == false) {
			$(these[i]).disabled = true;
			}
		} 
	/* if ($(n).disabled == true) {
		$(n).disabled = false;
	} else if ($(n).disabled == false) {
		$(n).disabled = true;
		} */
	}
	function disableY(n) {
		var elems = n;
		var these = elems.split(",");
		for(i = 0; i < these.length; i++){
			$(these[i]).disabled = true;
			}
		}
		function disableNamedY(n) {
			var elems = n;
			var these = elems.split(",");
			for (y = 0; y < these.length; y++) {
				var item = named(these[y]);
				for (var i = 0; i < item.length; i++) {
					item[i].disabled = true;
					}
				}
			}
		function removeClass(n) {
			var elems = n;
			var these = elems.split(",");
			for(i = 0; i < these.length; i++){
				$(these[i]).className = '';
				}
			}
	function disableN(n) {
		var elems = n;
		var these = elems.split(",");
		for(i = 0; i < these.length; i++){
			$(these[i]).disabled = false;
			}
		}
		function addClass(c,n) {
			var elems = n;
			var these = elems.split(",");
			for(i = 0; i < these.length; i++){
				$(these[i]).className = c;
				}
			}
		function disableNamedN(n) {
			var elems = n;
			var these = elems.split(",");
			for (y = 0; y < these.length; y++) {
				var item = named(these[y]);
				for (var i = 0; i < item.length; i++) {
					item[i].disabled = false;
					}
				}
			}
function toggleDisVis(n) {
	var elems = n;
	var these = elems.split(",");
	for(i = 0; i < these.length; i++){
		if ($(these[i]).disabled == true) {
			$(these[i]).visibility = "visible";
			$(these[i]).disabled = false;
		} else if ($(these[i]).disabled == false) {
			$(these[i]).disabled = true;
			$(these[i]).visibility = "hidden";
			}
		} 
	}
function hide_elem(n) {
	if ($(n).disabled == false) {
		$(n).type = 'hidden';
		$(n).disabled = true;
		}
	}
function show_elem(n, n_type) {
	$(n).type = n_type;
	$(n).disabled = false;
	}
function checkY(n) {
	var elems = n;
	var these = elems.split(",");
	for(i = 0; i < these.length; i++){
		$(these[i]).checked = true;
		}
	}
function requiredY(n) {
	var elems = n;
	var these = elems.split(",");
	for(i = 0; i < these.length; i++){
		$(these[i]).required = "required";
		}
	}
	
function toggle_visibility(n) {
	var elems = n;
	var these = elems.split(",");
	for(i = 0; i < these.length; i++){
		if ($(these[i]).style.display == "") {
			$(these[i]).style.display = "none";
		} else if ($(these[i]).style.display == "none") {
			$(these[i]).style.display = "";
			}
		}
	}
	
function country_and_state(country, state) {
	var state_text = state + "_text";
	var state_select = state + "_select";
	
	var country_value = $(country).value;
	
	if (country_value == 'CA') {
		toggle_visibility(state_select+','+state_text);
	} else if (country_value == 'USA') {
		toggle_visibility(state_select+','+state_text);
		}
	}
	
function compare_values(check1, check2, div_response, submit_button) {
	if ($(check1).value != $(check2).value) {
		$(div_response).innerHTML = "<span style=\"color: #f00;\">Passwords Do Not Match.</span>";
		$(submit_button).disabled = true;
	} else if ($(check1).value == $(check2).value) {
		$(div_response).innerHTML = "<span style=\"color: #0f0;\">Passwords Match.</span>";
		$(submit_button).disabled = false;
		}	
	}
function generic_compare(check1, check2, div_response, hidden) {
	if ($(check1).value != $(check2).value) {
		$(div_response).innerHTML = "<span style=\"color: #f00;\">Values Do Not Match.</span>";
		$(hidden).value = '';
	} else if ($(check1).value == $(check2).value) {
		$(div_response).innerHTML = "<span style=\"color: #0f0;\">Values Match.</span>";
		$(hidden).value = $(check2).value;
		}
	}
	
//OTHER FUNCTIONS
function preloader(n) {
	// create object
	imageObj = new Image();
	
	// set image list
	var elems = n;
	var images = elems.split(",");
	
	// start preloading
	for(i = 0; i < images.length; i++){
		imageObj.src=images[i];
		}
	}

function mailto(user, domain, tier) {
	var address = user + '@' + domain + tier;
	getURL('mailto:'+address);
	}
	
function moo_send(form, action, mod, container) {
	$(form).action = 'modules/' + mod;
	$(form).actionVar.value = action;
	$(form).update.value = container;
	var options = {}
	$(form).getFormElements().each(function(el){
		var name = el.name;
		var value = el.getValue();
		
		if (value === false || !name || el.disabled) options[value] = false;
		else if (name == 'update') options[name] = value;
		else options[value] = true;
	});
	$(form).send(options);
	}
	
function NewWindow(mypage, myname, w, h, scroll) {
    LeftPosition = screen.width ? (screen.width - w) / 2 : 0;
    TopPosition = screen.height ? (screen.height - h) / 2 : 0;
    settings = "height=" + h + ",width=" + w + ",scrollbars=" + scroll + ",resizable";
    newwin = window.open(mypage, myname, settings);
	}

function $() {
    var elements = new Array;
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        if (typeof element == "string") {
            element = document.getElementById(element);
			}
        if (arguments.length == 1) {
            return element;
			}
        elements.push(element);
		}
    return elements;
	}
function named() {
    var elements = new Array;
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        if (typeof element == "string") {
            element = document.getElementsByName(element);
			}
        if (arguments.length == 1) {
            return element;
			}
        elements.push(element);
		}
    return elements;
	}

function docWrite(text) {
    document.write(text);
	}

function divWrite(tag, text) {
    $(tag).innerHTML = text;
	}

function getURL(link, check) {
	if (check == undefined) {
		window.location = link;
		}
	if ((check != undefined) && (check != "")) {
		window.location = link;
		}
	}
	function getURLwait(link, n) {
		setTimeout('getURL(\''+link+'\')',n);
		}
	function getURLnew(link) {
		new_window = window.open(link,'','');
		if (window.focus) { new_window.focus(); }
		}
		
function reloadLater(time) {
	var timer = (time * 1000);
	setTimeout("window.location.href=window.location.href", timer);
	}

function playerURL(link) {
	if (screen.height>=775) { 
		var wheight = 775;
	} else {
		var wheight = screen.height+',scrollbars=yes';
		}
		wheight=420;
	broadcast_player = window.open(link,'broadcast_player','width=725,height='+wheight+',resizable=yes');
	if (window.focus) {broadcast_player.focus()}
	//return false;
	}

function divSwitch(divname1, divname2) {
    $(divname1).style.display = "none";
    $(divname2).style.display = "block";
	}
	
function confirmSubmit() {
	var agree=confirm("Are you sure you wish to continue?");
		if (agree)
		return true ;
	else
		return false ;
	}
	function confirmation(msg) {
		var agree=confirm(msg);
			if (agree)
			return true ;
		else
			return false ;
		}
	
function pageChange(n, thisform, link) {
	$(thisform).pageNum.value = n;
	$(thisform).action = link;
	$(thisform).submit();
	}
	
function submitForm(thisform, link) {
	if(link != null) {
		$(thisform).action = link;
		}
	$(thisform).submit();
	}
	function submitThisForm(thisform) {
		$(thisform).submit();
		}
	
function reset_element(element, n) {
	$(element).value = n;
	}
	
function showtext(text) {
	window.alert(text);
	}
	
function defaultPlayer(loc, surl) { 
	$(loc).innerHTML="<embed src='"+surl+"' autostart=true height='45' width='600' loop=false>"; 
	}
	
function qtPlayer(loc, surl) {
	$(loc).innerHTML="<object classid='clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B' codebase='http://www.apple.com/qtactivex/qtplugin.cab' type='application/x-oleobject' height='20' width='600'>   <param name='src' value='"+surl+"'>   <param name='controller' value='true'>   <param name='autostart' value='true'>   <!--[if !IE]>   <-->   <object data='"+surl+"' type='audio/mpeg' height='20' width='600'>   <param name='autostart' value='true'>   </object><!-->   <![endif]>   </object>";
	}
	
function wmPlayer(loc, surl) { 
	$(loc).innerHTML="<OBJECT ID='MediaPlayer1' height='45' width='600' classid='CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95' codebase='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,0,02,902' standby='Loading Microsoft® Windows® Media Player components...' type='application/x-oleobject'>   <PARAM NAME='FileName' VALUE='"+surl+"'>   <PARAM NAME='animationatStart' VALUE='true'>   <PARAM NAME='transparentatStart' VALUE='true'>   <PARAM NAME='autoStart' VALUE='true'>   <PARAM NAME='showControls' VALUE='true'>   <EMBED type='application/x-mplayer2' pluginspage = 'http://www.microsoft.com/Windows/MediaPlayer/' SRC='"+surl+"' name='MediaPlayer1' height='45' width='600' AutoStart=true>   </EMBED>   </OBJECT>"; 
	}
	
function pageType(n) {
	if (n == "N") {
		$(page_type_row).innerHTML="<td align='right'>File Name</td><td>&nbsp; &nbsp;<input type='text' name='file_name' size='60'>&nbsp; &nbsp;</td><td>File Name <i>without</i> extension. I.E., \"company\", not \"company.php\"</td>"; }
	else if (n == "D") {
		$(page_type_row).innerHTML="<td align='right'>File Name</td><td>&nbsp; &nbsp;<input type='text' name='file_name' size='60'>&nbsp; &nbsp;</td><td>File Name <i>without</i> extension. I.E., \"company\", not \"company.php\"</td>"; }
	else if (n == "L") {
		$(page_type_row).innerHTML="<td align='right'>Link Name</td><td>&nbsp; &nbsp;<input type='text' name='file_name' size='60'>&nbsp; &nbsp;</td><td>File Name <i>without</i> extension. I.E., \"company\", not \"company.php\"</td>"; }
	else if (n == "E") {
		$(page_type_row).innerHTML="<td align='right'>External Path</td><td>&nbsp; &nbsp;<input type='text' name='file_name' size='60'>&nbsp; &nbsp;</td><td>File Name <i>without</i> extension. I.E., \"company\", not \"company.php\"</td>"; }
	}

/**
 * marks all rows and selects its first checkbox inside the given element
 * the given element is usaly a table or a div containing the table or tables
 *
 * @param    container    DOM element
 */
function markAllRows( container_id ) {
    var rows = document.getElementById(container_id).getElementsByTagName('tr');
    var unique_id;
    var checkbox;

    for ( var i = 0; i < rows.length; i++ ) {

        checkbox = rows[i].getElementsByTagName( 'input' )[0];

        if ( checkbox && checkbox.type == 'checkbox' ) {
            unique_id = checkbox.name + checkbox.value;
            if ( checkbox.disabled == false ) {
                checkbox.checked = true;
                if ( typeof(marked_row[unique_id]) == 'undefined' || !marked_row[unique_id] ) {
                    rows[i].className += ' marked';
                    marked_row[unique_id] = true;
                }
            }
        }
    }

    return true;
}

/**
 * marks all rows and selects its first checkbox inside the given element
 * the given element is usaly a table or a div containing the table or tables
 *
 * @param    container    DOM element
 */
function unMarkAllRows( container_id ) {
    var rows = document.getElementById(container_id).getElementsByTagName('tr');
    var unique_id;
    var checkbox;

    for ( var i = 0; i < rows.length; i++ ) {

        checkbox = rows[i].getElementsByTagName( 'input' )[0];

        if ( checkbox && checkbox.type == 'checkbox' ) {
            unique_id = checkbox.name + checkbox.value;
            checkbox.checked = false;
            rows[i].className = rows[i].className.replace(' marked', '');
            marked_row[unique_id] = false;
        }
    }

    return true;
}

//var xmlHttp
/* var div = "ajaxtest";

function ajax_action(loc, geturl, actionVar, id) { 
	div = loc;
	xmlHttp=GetXmlHttpObject()
	if (xmlHttp==null) {
		alert ("Browser does not support HTTP Request")
		return
		}
	var url = geturl
		url = url + "?actionVar=" + actionVar + "&id=" + id
		//url=url+"&sid="+Math.random()
	xmlHttp.onreadystatechange=stateChanged; 
	xmlHttp.open("GET",url,true)
	xmlHttp.send(null)
	}

function stateChanged() { 
	var dir = div;
	//var id = div + "_details";
	//var close = "close" + div;
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { 
		document.getElementById(dir).innerHTML=xmlHttp.responseText
		} 
	}

function GetXmlHttpObject() {
	var xmlHttp=null;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
		}
	catch (e) {
		//Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
		catch (e) {
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
	return xmlHttp;
	}
 */	
// Browser Window Size and Position
// copyright Stephen Chapman, 3rd Jan 2005, 8th Dec 2005
// you may copy these functions but please keep the copyright notice as well
function pageWidth() {
	return window.innerWidth != null? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;
	}
function pageHeight() {
	return  window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ?  document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
	}
function posLeft() {
	return typeof window.pageXOffset != 'undefined' ? window.pageXOffset :document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;
	}
function posTop() {
	return typeof window.pageYOffset != 'undefined' ?  window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;
	}
function posRight() {
	return posLeft()+pageWidth();
	}
function posBottom() {
	return posTop()+pageHeight();
	}
                    
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
				}
			func();
			}
		}
	}

/*
 * cssjs
 * written by Christian Heilmann (http://icant.co.uk)
 * eases the dynamic application of CSS classes via DOM
 * parameters: action a, object o and class names c1 and c2 (c2 optional)
 * actions: swap exchanges c1 and c2 in object o
 *			add adds class c1 to object o
 *			remove removes class c1 from object o
 *			check tests if class c1 is applied to object o
 * example:	cssjs('swap',document.getElementById('foo'),'bar','baz');
 */

function cssjs(a,o,c1,c2) {
	switch (a) {
		case 'swap':
			o.className=!cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
		break;
		case 'add':
			if(!cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
		break;
		case 'remove':
			var rep=o.className.match(' '+c1)?' '+c1:c1;
			o.className=o.className.replace(rep,'');
		break;
		case 'check':
			return new RegExp('\\b'+c1+'\\b').test(o.className)
		break;
		}
	}
	
function com_stewartspeak_replacement(tag) {
/*
	Dynamic Heading Generator
    By Stewart Rosenberger
    http://www.stewartspeak.com/headings/

	This script searches through a web page for specific or general elements
	and replaces them with dynamically generated images, in conjunction with
	a server-side script.
*/
replaceSelector(tag,"./scripts/textimage.php",true);
var testURL = "./images/test.png" ;

var doNotPrintImages = false;
var printerCSS = "./scripts/replacement-print.css";

var hideFlicker = true;
var hideFlickerCSS = "./scripts/replacement-screen.css";
var hideFlickerTimeout = 1000;




/* ---------------------------------------------------------------------------
    For basic usage, you should not need to edit anything below this comment.
    If you need to further customize this script's abilities, make sure
	you're familiar with Javascript. And grab a soda or something.
*/

var items;
var imageLoaded = false;
var documentLoaded = false;

function replaceSelector(selector,url,wordwrap)
{
	if(typeof items == "undefined")
		items = new Array();

	items[items.length] = {selector: selector, url: url, wordwrap: wordwrap};
}

if(hideFlicker)
{		
	document.write('<link id="hide-flicker" rel="stylesheet" media="screen" href="' + hideFlickerCSS + '" />');		
	window.flickerCheck = function()
	{
		if(!imageLoaded)
			setStyleSheetState('hide-flicker',false);
	};
	setTimeout('window.flickerCheck();',hideFlickerTimeout)
}

if(doNotPrintImages)
	document.write('<link id="print-text" rel="stylesheet" media="print" href="' + printerCSS + '" />');

var test = new Image();
test.onload = function() { imageLoaded = true; if(documentLoaded) replacement(); };
test.src = testURL + "?date=" + (new Date()).getTime();

addLoadHandler(function(){ documentLoaded = true; if(imageLoaded) replacement(); });


function documentLoad()
{
	documentLoaded = true;
	if(imageLoaded)
		replacement();
}

function replacement()
{
	for(var i=0;i<items.length;i++)
	{
		var elements = getElementsBySelector(items[i].selector);
		if(elements.length > 0) for(var j=0;j<elements.length;j++)
		{
			if(!elements[j])
				continue ;
		
			var text = extractText(elements[j]);
    		while(elements[j].hasChildNodes())
				elements[j].removeChild(elements[j].firstChild);

			var tokens = items[i].wordwrap ? text.split(' ') : [text] ;
			for(var k=0;k<tokens.length;k++)
			{
				var url = items[i].url + "?text="+escape(tokens[k]+' ')+"&selector="+escape(items[i].selector);
				var image = document.createElement("img");
				image.className = "replacement";
				image.alt = tokens[k] ;
				image.src = url;
				elements[j].appendChild(image);
			}

			if(doNotPrintImages)
			{
				var span = document.createElement("span");
				span.style.display = 'none';
				span.className = "print-text";
				span.appendChild(document.createTextNode(text));
				elements[j].appendChild(span);
			}
		}
	}

	if(hideFlicker)
		setStyleSheetState('hide-flicker',false);
}

function addLoadHandler(handler)
{
	if(window.addEventListener)
	{
		window.addEventListener("load",handler,false);
	}
	else if(window.attachEvent)
	{
		window.attachEvent("onload",handler);
	}
	else if(window.onload)
	{
		var oldHandler = window.onload;
		window.onload = function piggyback()
		{
			oldHandler();
			handler();
		};
	}
	else
	{
		window.onload = handler;
	}
}

function setStyleSheetState(id,enabled) 
{
	var sheet = document.getElementById(id);
	if(sheet)
		sheet.disabled = (!enabled);
}

function extractText(element)
{
	if(typeof element == "string")
		return element;
	else if(typeof element == "undefined")
		return element;
	else if(element.innerText)
		return element.innerText;

	var text = "";
	var kids = element.childNodes;
	for(var i=0;i<kids.length;i++)
	{
		if(kids[i].nodeType == 1)
		text += extractText(kids[i]);
		else if(kids[i].nodeType == 3)
		text += kids[i].nodeValue;
	}

	return text;
}

/*
	Finds elements on page that match a given CSS selector rule. Some
	complicated rules are not compatible.
	Based on Simon Willison's excellent "getElementsBySelector" function.
	Original code (with comments and description):
		http://simon.incutio.com/archive/2003/03/25/getElementsBySelector
*/
function getElementsBySelector(selector)
{
	var tokens = selector.split(' ');
	var currentContext = new Array(document);
	for(var i=0;i<tokens.length;i++)
	{
		token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');
		if(token.indexOf('#') > -1)
		{
			var bits = token.split('#');
			var tagName = bits[0];
			var id = bits[1];
			var element = document.getElementById(id);
			if(tagName && element.nodeName.toLowerCase() != tagName)
				return new Array();
			currentContext = new Array(element);
			continue;
		}

		if(token.indexOf('.') > -1)
		{
			var bits = token.split('.');
			var tagName = bits[0];
			var className = bits[1];
			if(!tagName)
				tagName = '*';

			var found = new Array;
			var foundCount = 0;
			for(var h=0;h<currentContext.length;h++)
			{
				var elements;
				if(tagName == '*')
					elements = currentContext[h].all ? currentContext[h].all : currentContext[h].getElementsByTagName('*');
				else
					elements = currentContext[h].getElementsByTagName(tagName);

				for(var j=0;j<elements.length;j++)
					found[foundCount++] = elements[j];
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			for(var k=0;k<found.length;k++)
			{
				if(found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b')))
					currentContext[currentContextIndex++] = found[k];
			}

			continue;
	    }

		if(token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/))
		{
			var tagName = RegExp.$1;
			var attrName = RegExp.$2;
			var attrOperator = RegExp.$3;
			var attrValue = RegExp.$4;
			if(!tagName)
				tagName = '*';

			var found = new Array;
			var foundCount = 0;
			for(var h=0;h<currentContext.length;h++)
			{
				var elements;
	        	if(tagName == '*')
					elements = currentContext[h].all ? currentContext[h].all : currentContext[h].getElementsByTagName('*');
				else
					elements = currentContext[h].getElementsByTagName(tagName);

				for(var j=0;j<elements.length;j++)
					found[foundCount++] = elements[j];
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			var checkFunction;
			switch(attrOperator)
			{
				case '=':
					checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
					break;
				case '~':
					checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
					break;
				case '|':
					checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
					break;
				case '^':
					checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
					break;
				case '$':
					checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
					break;
				case '*':
					checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
					break;
				default :
					checkFunction = function(e) { return e.getAttribute(attrName); };
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			for(var k=0;k<found.length;k++)
			{
				if(checkFunction(found[k]))
					currentContext[currentContextIndex++] = found[k];
			}

			continue;
		}

		tagName = token;
		var found = new Array;
		var foundCount = 0;
		for(var h=0;h<currentContext.length;h++)
		{
			var elements = currentContext[h].getElementsByTagName(tagName);
			for(var j=0;j<elements.length; j++)
				found[foundCount++] = elements[j];
		}

		currentContext = found;
	}

	return currentContext;
}


}

/*
Copyright (c) 2005, 2008 Marcel Ward

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

// FormatMoney() - returns a string represenation of the numeric value in _amount_ using the given formatting & currency settings.
//
// Preconditions:
//		display_after_decimal_pt >= 0
//		
// Notes:
//		- Usually you'll want significant_after_decimal_pt to be less than or equal to display_after_decimal_pt.
//		- The returned value is automatically rounded to the nearest significant digit.
//		- An invalid (NaN) input amount is replaced by 0 (zero).
//		- If the combined number of visible digits would exceed 21, the digits are replaced by "#".
//		- Negative amounts are fully supported; the (optional) currency symbol is prefixed by a minus.
function FormatMoney(amount, currency_symbol_before,
	currency_symbol_after, thousands_separator, decimal_point,
	significant_after_decimal_pt, display_after_decimal_pt)
{
	// 30JUL2008 MSPW  Fixed minus display by moving this line to the top
	// We need to know how the significant digits will alter our displayed number
	var significant_multiplier = Math.pow(10, significant_after_decimal_pt);

	// Only display a minus if the final displayed value is going to be <= -0.01 (or equivalent)
	var str_minus = (amount * significant_multiplier <= -0.5 ? "-" : "");

	// Sanity check on the incoming amount value
	amount = parseFloat(amount);
	if( isNaN(amount) || Math.LOG10E * Math.log(Math.abs(amount)) +
			Math.max(display_after_decimal_pt, significant_after_decimal_pt) >= 21 )
	{
		return str_minus + currency_symbol_before +
			(isNaN(amount)? "#" : "####################".substring(0, Math.LOG10E * Math.log(Math.abs(amount)))) +
			(display_after_decimal_pt >= 1?
				(decimal_point + "##################".substring(0, display_after_decimal_pt)) : "") +
			currency_symbol_after;
	}
	
	// Make +ve and ensure we round up/down properly later by adding half a penny now.
	amount = Math.abs(amount) + (0.5 / significant_multiplier);

	amount *= significant_multiplier;
	
	var str_display = parseInt(
		parseInt(amount) * Math.pow(10, display_after_decimal_pt - significant_after_decimal_pt) ).toString();
			
	// Prefix as many zeroes as is necessary and strip the leading 1
	if( str_display.length <= display_after_decimal_pt )
		str_display = (Math.pow(10, display_after_decimal_pt - str_display.length + 1).toString() +
			str_display).substring(1);
			
	var comma_sep_pounds = str_display.substring(0, str_display.length - display_after_decimal_pt);
	var str_pence = str_display.substring(str_display.length - display_after_decimal_pt);
	
	if( thousands_separator.length > 0 && comma_sep_pounds.length > 3 )
	{
		comma_sep_pounds += ",";

		// We need to do this twice because the first time only inserts half the commas.  The reason is
		// the part of the lookahead ([0-9]{3})+ also consumes characters; embedding one lookahead (?=...)
		// within another doesn't seem to work, so (?=[0-9](?=[0-9]{3})+,)(.)(...) fails to match anything.
		if( comma_sep_pounds.length > 7 )
			comma_sep_pounds = comma_sep_pounds.replace(/(?=[0-9]([0-9]{3})+,)(.)(...)/g, "$2,$3");

		comma_sep_pounds = comma_sep_pounds.replace(/(?=[0-9]([0-9]{3})+,)(.)(...)/g, "$2,$3");

		// Remove the fake separator at the end, then replace all commas with the actual separator
		comma_sep_pounds = comma_sep_pounds.substring(0, comma_sep_pounds.length - 1).replace(/,/g, thousands_separator);
	}

	return str_minus + currency_symbol_before +
		comma_sep_pounds + (display_after_decimal_pt >= 1? (decimal_point + str_pence) : "") +
		currency_symbol_after;
}
