// ***********************************
//
// Atrixware Utility Function Library
//
// ***********************************

/*
 * returns DOM element
 *
 */
function $ ( in_element_id ) {
	return document.getElementById(in_element_id);
}

/*
 * Toggles view to/from visible
 * accepts $('element_name'), $(element_var) or 'element_name'
 * and 'element1,element2,element3,element4,etc'
 *
 */
function fx_toggle ( in_element ) {
	if (in_element.id) {
		// they sent dom object as parameter
		if (in_element.style.display == "block") { 	
			in_element.style.display = "none"; 
		} else { 
			in_element.style.display = "block"; 
		} 		
	} else {
		// it may be a list of items, or just a single one
		var element;
		var elements = in_element.split(",");
		for (i=0; i < elements.length; i++) {
			try {
				element = $(elements[i]);
				if (element.style.display == "block") {
					element.style.display = "none";
				} else {
					element.style.display = "block";
				} 	
			} catch(e) {
				// catch invalid dom elements
			}
		}			
	}
}

/*
 * Shows element(s)
 * accepts $('element_name'), $(element_var) or 'element_name'
 * and 'element1,element2,element3,element4,etc'
 *
 */
function fx_show ( in_element ) {
	if (in_element.id) {
		// they sent dom object as parameter
		in_element.style.display = "block"; 
	} else {
		// it may be a list of items, or just a single one
		var element;
		var elements = in_element.split(",");
		for (i=0; i < elements.length; i++) {
			try {
				element = $(elements[i]);
				element.style.display = "block";
			} catch(e) {
				// catch invalid dom elements
			}
		}			
	}
}


/*
 * Hides element(s)
 * accepts $('element_name'), $(element_var) or 'element_name'
 * and 'element1,element2,element3,element4,etc'
 *
 */
function fx_hide ( in_element ) {
	if (in_element.id) {
		// they sent dom object as parameter
		in_element.style.display = "none"; 
	} else {
		// it may be a list of items, or just a single one
		var element;
		var elements = in_element.split(",");
		for (i=0; i < elements.length; i++) {
			try {
				element = $(elements[i]);
				element.style.display = "none";
			} catch(e) {
				// catch invalid dom elements
			}
		}			
	}
}


/* MINI AJAX LIBRARY 
 *
 * ajax.update ( url_of_ajax_page, element_id_as_string ) ~ updates element with contents of url, can pass query string
 * ajax.submit ( url_of_ajax_page, element_id_as_string, id_of_form_as_string ) ~ updates element with contents of url after form post
 * ajax.clear  ( element_id_as_string ) ~ updates element with null - ADDED BY CHRIS 11/21/2008
 *
 */
	function collect(a,f){var n=[];for(var i=0;i<a.length;i++){var v=f(a[i]);if(v!=null)n.push(v)}return n};
	ajax={};
	ajax.x=function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}};
	ajax.serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&&i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);var t=collect(g('textarea'),nv);return i.concat(s).concat(t).join('&');};
	ajax.send=function(u,f,m,a){var x=ajax.x();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseText)};if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a)};
	ajax.get=function(url,func){ajax.send(url,func,'GET')};
	ajax.gets=function(url){var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText};
	ajax.post=function(url,func,args){ajax.send(url,func,'POST',args)};
	ajax.update=function(url,elm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.get(url,f)};
	ajax.clear=function(elm){var e=$(elm);e.innerHTML="";};
	ajax.submit=function(url,elm,frm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.post(url,f,ajax.serialize(frm))};



/*
 * Displays Screenshots
 * 
 * Use via PHP functions show_overlay(HTML code)
 *
 */

document.write('<div id="screenshot_outer" style="visibility:hidden"><div id="screenshot_inner"></div></div>');
document.write('<div id="screenshot_shade"></div>');

function showScreenshot(image_path, image_number) {		
	position_screenshot();		
	
	var screenshotobj = document.getElementById("screenshot_inner");
	
	var screenshot_title = document.getElementById('screenshot_gallery').getElementsByTagName('img')[image_number].alt;	

	screenshotobj.innerHTML = "<div id='screenshot_title'><table width=100% height=30px><tr><td>" + screenshot_title + "</td><td align=right><a href='javascript:;' onclick='close_screenshot()'><img src=http://www.atrixware.com/site/subsites/wide/inc/lib/js/video_close.gif border=0></a></tr></table></div>";
	screenshotobj.innerHTML = screenshotobj.innerHTML + "<div id='screenshot_container'><img src=" + image_path + " onClick='next_screenshot(" + image_number + ")'></div><br>";
	screenshotobj.innerHTML = screenshotobj.innerHTML + "<div id='screenshot_navigation'><table width=100%><tr><td align=left><a href='javascript:;' onClick='previous_screenshot(" + image_number + ")'> << Previous</a></td><td align=right><a href='javascript:;' onClick='next_screenshot(" + image_number + ")'>Next >></a></td></tr></table></div>";

	document.getElementById("screenshot_shade").style.width = document.documentElement.offsetWidth + "px";
	document.getElementById("screenshot_shade").style.height = document.documentElement.offsetHeight + "px";	

	document.getElementById("screenshot_outer").style.visibility = "visible";		
	document.getElementById("screenshot_shade").style.visibility = "visible";
}

function position_screenshot(){	
	my_div=document.getElementById("screenshot_inner")
	
	var screenheight= ie4&&!window.opera? iecompattest().clientHeight: window.innerHeight;
	var screenwidth= ie4&&!window.opera? iecompattest().clientWidth: window.innerWidth;
	
	my_div.style.left=((screenwidth - 650) / 2) + "px";	
	my_div.style.top=((screenheight - 520) / 2) + "px";	
}


function next_screenshot (image_number) {

	screenshotobj=document.getElementById? document.getElementById("screenshot_inner") : screenshot_inner	
	
	var images = document.getElementById('screenshot_gallery').getElementsByTagName('img');
	
	if ((image_number+1) == images.length) {
		next_imagenumber = 0;
	} else {
		next_imagenumber = image_number + 1;
	}
		
	next_image = document.getElementById('screenshot_gallery').getElementsByTagName('img')[next_imagenumber];
	
	var next_image_src = next_image.src;		
	next_image_src = next_image_src.replace("t_screenshot", "screenshot");				
	preload_image = new Image();
	preload_image.src = next_image_src;
	
	preload_image.onload = load_shot(next_image.alt, preload_image.src, next_imagenumber);
	
}


function previous_screenshot (image_number) {

	screenshotobj=document.getElementById? document.getElementById("screenshot_inner") : screenshot_inner	
	
	var images = document.getElementById('screenshot_gallery').getElementsByTagName('img');
	
	if (image_number == 0) {
		prev_imagenumber = (images.length - 1);
	} else {
		prev_imagenumber = image_number - 1;
	}
		

	prev_image = document.getElementById('screenshot_gallery').getElementsByTagName('img')[prev_imagenumber];	
	prev_image_src = prev_image.src;
	prev_image_src = prev_image_src.replace("t_screenshot", "screenshot");
	preload_image = new Image();
	preload_image.src = prev_image_src;
	
	preload_image.onload = load_shot(prev_image.alt, preload_image.src, prev_imagenumber);
		
}


function load_shot(title, image_src, image_number) {
	screenshotobj.innerHTML = "<div id='screenshot_title'><table width=100% height=30px><tr><td>" + title + "</td><td align=right><a href='javascript:;' onclick='close_screenshot()'><img src=http://www.atrixware.com/site/subsites/wide/inc/lib/js/video_close.gif border=0></a></tr></table></div>";
	screenshotobj.innerHTML = screenshotobj.innerHTML + "<div id='screenshot_container'><img src=" + image_src + " onClick='next_screenshot(" + image_number + ")'></div>";
	screenshotobj.innerHTML = screenshotobj.innerHTML + "<div id='screenshot_navigation'><table width=100%><tr><td align=left><a href='javascript:;' onClick='previous_screenshot(" + image_number + ")'> << Previous</a></td><td align=right><a href='javascript:;' onClick='next_screenshot(" + image_number + ")'>Next >></a></td></tr></table></div>";
}


function close_screenshot() {
	document.getElementById("screenshot_outer").style.visibility = "hidden";	
	document.getElementById("screenshot_shade").style.visibility = "hidden";
}


/*
 * Displays Tooltips
 * 
 * Use via PHP functions show_tooltip_html(HTML code, width) and show_tooltip_include(Include Page, width)
 *
 */
var tipwidth='150px' //default tooltip width
var disappeardelay=1  //tooltip disappear speed onMouseout (in miliseconds)
var vertical_offset="20px" //horizontal offset of tooltip from anchor link
var horizontal_offset="-1px" //horizontal offset of tooltip from anchor link


/////No further editting needed

var ie4=document.all
var ns6=document.getElementById&&!document.all

if (ie4||ns6)
document.write('<div id="fixedtipdiv" style="visibility:hidden;width:'+tipwidth+';" ></div>')

function getposOffset(what, offsettype){
var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
var parentEl=what.offsetParent;
while (parentEl!=null){
totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
parentEl=parentEl.offsetParent;
}
return totaloffset;
}


function showhide(obj, e, visible, hidden, tipwidth){
if (ie4||ns6)
dropmenuobj.style.left=dropmenuobj.style.top=-500
if (tipwidth!=""){
dropmenuobj.widthobj=dropmenuobj.style
dropmenuobj.widthobj.width=tipwidth
}
if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
obj.visibility=visible
else if (e.type=="click")
obj.visibility=hidden
}

function iecompattest(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function clearbrowseredge(obj, whichedge){
var edgeoffset=(whichedge=="rightedge")? parseInt(horizontal_offset)*-1 : parseInt(vertical_offset)*-1
if (whichedge=="rightedge"){
var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15
dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)
edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth
}
else{
var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure)
edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight
}
return edgeoffset
}

function fixedtooltip(menucontents, obj, e, tipwidth){
if (window.event) event.cancelBubble=true
else if (e.stopPropagation) e.stopPropagation()
clearhidetip()
dropmenuobj=document.getElementById? document.getElementById("fixedtipdiv") : fixedtipdiv
dropmenuobj.innerHTML = "<div id=innerdiv>" + menucontents + "</div>";
document.body.style.cursor = "default";
enabletip=true


if (ie4||ns6){
showhide(dropmenuobj.style, e, "visible", "hidden", tipwidth)
dropmenuobj.x=(ns6)?e.pageX : event.clientX+iecompattest().scrollLeft;
dropmenuobj.y=(ns6)?e.pageY : event.clientY+iecompattest().scrollTop;
dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px"
dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px"
}
}

function hidetip(e){
if (typeof dropmenuobj!="undefined"){
if (ie4||ns6)
dropmenuobj.style.visibility="hidden"
enabletip=false
document.body.style.cursor = "auto";
}
}

function delayhidetip(){
if (ie4||ns6)
delayhide=setTimeout("hidetip()",disappeardelay)
}

function clearhidetip(){
if (typeof delayhide!="undefined")
clearTimeout(delayhide)
}


document.onmousemove=positiontip

var offsetxpoint=-1 //Customize x offset of tooltip
var offsetypoint=20 //Customize y offset of tooltip
var enabletip=false


function positiontip(e){
if (enabletip){
var curX=(ns6)?e.pageX : event.clientX+iecompattest().scrollLeft;
var curY=(ns6)?e.pageY : event.clientY+iecompattest().scrollTop;
//Find out how close the mouse is to the corner of the window
var rightedge=ie4&&!window.opera? iecompattest().clientWidth-event.clientX-offsetxpoint : window.innerWidth-e.clientX-offsetxpoint-20
var bottomedge=ie4&&!window.opera? iecompattest().clientHeight-event.clientY-offsetypoint : window.innerHeight-e.clientY-offsetypoint-20

var leftedge=(offsetxpoint<0)? offsetxpoint*(-1) : -1000

//if the horizontal distance isn't enough to accomodate the width of the context menu
if (rightedge<dropmenuobj.offsetWidth)
//move the horizontal position of the menu to the left by it's width
dropmenuobj.style.left=ie4? iecompattest().scrollLeft+event.clientX-dropmenuobj.offsetWidth+"px" : window.pageXOffset+e.clientX-dropmenuobj.offsetWidth+"px"
else if (curX<leftedge)
dropmenuobj.style.left="5px"
else
//position the horizontal position of the menu where the mouse is positioned
dropmenuobj.style.left=curX+offsetxpoint+"px"

//same concept with the vertical position
if (bottomedge<dropmenuobj.offsetHeight)
dropmenuobj.style.top=ie4? ietruebody().scrollTop+event.clientY-tipobj.offsetHeight-offsetypoint+"px" : window.pageYOffset+e.clientY-dropmenuobj.offsetHeight-offsetypoint+"px"
else
dropmenuobj.style.top=curY+offsetypoint+"px"
dropmenuobj.style.visibility="visible"
}

}



