/** 
	Get Element()
	parameters: 
		- element_id - id of element to retrieve
*/

function GetElement(element_id)
{
	return document.getElementById(element_id);
}


/** 
	Set Element()
	parameters: 
		- element_id - id of element to retrieve
		- value 	 - value to set
*/

function SetElement(element_id, value)
{
	element = GetElement(element_id);
	element.value = value;
}

function parseScript(_source) {
		var source = _source;
		var scripts = new Array();
		
		// Strip out tags
		while(source.indexOf("<script") > -1 || source.indexOf("</script") > -1) {
			var s = source.indexOf("<script");
			var s_e = source.indexOf(">", s);
			var e = source.indexOf("</script", s);
			var e_e = source.indexOf(">", e);
			
			// Add to scripts array
			scripts.push(source.substring(s_e+1, e));
			// Strip from source
			source = source.substring(0, s) + source.substring(e_e+1);
		}
		
		// Loop through every script collected and eval it
		for(var i=0; i<scripts.length; i++) {
			try {
				eval(scripts[i]);
			}
			catch(ex) {
				// do what you want here when a script fails
			}
		}
		
		// Return the cleaned source
		return source;
	}
/** 
	Send ()
	parameters: 
		- replace - element to replace
		- page - page to send data to
		- method  - how to send data: GET or POST
		- data    - parameters to pass
*/
function Send( parameters )
{
		
	if (window.XMLHttpRequest)
	{// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp=new XMLHttpRequest();
	}
	else
	{// code for IE6, IE5
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	if( parameters['replace'] != null )
	{
		xmlhttp.onreadystatechange=function()	
			{
				if (xmlhttp.readyState==4 && xmlhttp.status==200)
				{
				element = GetElement(parameters['replace']);
			
				element.innerHTML=xmlhttp.responseText;
				
				parseScript(xmlhttp.responseText);
				//alert(xmlhttp.responseText);
				//alert('evaluated');	

				}
			}
	}		
	
	
	var data = '';
	if(parameters['data'] != null)
	{
		data = parameters['data'];
		//alert(data);
	}
	
	//parameters = document.getElementById(field_id).value
	page = parameters['page'];
	
	var method = 'POST';
	if( parameters['method'] != null)
	{	
		method = parameters['method'];
	}
	
	xmlhttp.open(method,page, true);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlhttp.setRequestHeader("Content-length",
        parameters.length);
	xmlhttp.send( data );	

}

/* 
	SendForm() - takes the form and all elements and passes as data and calls Send()
	parameters: 
		- page - page to submit form to
		- form - form to take values from
		- replace - element to replace
		- method  - how to send data: GET or POST
*/

function SendForm( parameters )
{
	page = parameters['page'];
	
	
	form_elements = GetElement( parameters['form'] );
	
	var data = '';
	
	for(i=0; i < form_elements.elements.length; i++)
	{
		if(i>0) { data += '&'; }
			data += form_elements.elements[i].id + '=' + form_elements.elements[i].value;
	}
	
	parameters['data'] = parameters['data'] + '&' + data;
	//alert(data);

	
	Send( parameters );	
	
}

function GetPage( parameters )
{
	element = parameters['element'];
	page = parameters['page'];
	data = parameters['data'];
	Replace(element, page);
	//alert ( page + ' ' + data);
}


/* 
	Clear() - clears the innerHTML of a region (sets it to "");
	parameters: 
		- region_id - element to clear
	
*/

function Clear(region_id)
{
	document.getElementById(region_id).innerHTML="";
}



/* 
	SetUpLightBox() - sets up the black overlay for lightbox 
	parameters: 
		- none
	
*/
function SetUpLightBox()
{
	// create black overlay
	black_overlay = document.createElement('div');
	black_overlay.setAttribute('id', 'waves_black_overlay');
	black_overlay.setAttribute('class', 'black_overlay');


	text = document.createTextNode('chris');
	
	//black_overlay.appendChild(text);

	document.body.insertBefore(black_overlay, document.body.firstChild);
	
	// create whitebox
	whitebox = document.createElement('div');
	whitebox.setAttribute('id', "whitebox");

}


/** 
	ShowLightBox() - displays the element in a light box
	parameters: 
		- element_id - id of element to display
	
*/

function ShowLightBox(element_id)
{
	black_overlay = GetElement('waves_black_overlay');
	if( black_overlay == null )
	{
		SetUpLightBox();
	}
	GetElement(element_id).style.display='block';
	GetElement('waves_black_overlay').style.display='block';
	
	//lb_width = element.getPropertyValue('width');
	//alert(lb_width);
	width = GetWidth()/3;
	//height = GetHeight()/3;
	height = GetHeight()/3 + GetVerticalScroll();
	

	//height = -height;
	//SetStyle(element_id, 'margin-top', height);
	//SetStyle(element_id, 'margin-left', width);
	//GetElement(element_id).SetStyle('margin-right', width);
	Center(element_id);
	
	window.onresize = function (e) { 
			Center(element_id);
		}
	window.onscroll = function (e) {
  		
  		Center(element_id);
			
	}
	
}

/** Center('element_id')
	centers the element with id element_id

*/

function Center(element_id)
{
	element = GetElement(element_id);
	
	// determine left side based on width
	width = GetWidth()/2; 
	w = element.clientWidth;
	w = w/2;
	horizontal_scroll = GetHorizontalScroll(); 
	left = width - w + horizontal_scroll;
	right = width + w + horizontal_scroll;
	
	// determine top side based on height
	height = GetHeight()/2;
	h = element.clientHeight;
	h = h/2;
	vertical_scroll = GetVerticalScroll(); 
	t = height - h + vertical_scroll;
	b = height + h + vertical_scroll;

	//alert( 'height ' + height + ' and h ' + h + ' and vertical scroll ' + vertical_scroll + ' and top ' + t);
	//height = GetHeight()/3 + GetVerticalScroll();
	
	SetStyle(element_id, 'top', t);
	SetStyle(element_id, 'left', left);
	//SetStyle(element_id, 'right', right);
	//SetStyle(element_id, 'bottom', b);
	



	
	
}

/** 
	HideLightBox() - hides the specified element and black overlay
	parameters: 
		- element_id - id of element to hide
	
*/

function HideLightBox(element_id)
{
	black_overlay = GetElement('waves_black_overlay');
	if( black_overlay == null )
	{
		SetUpLightBox();
	}
	GetElement(element_id).style.display='none';
	GetElement('waves_black_overlay').style.display='none';
}

function SetStyle( element_id, property, value)
{
	element = GetElement(element_id);
	element.style.setProperty(property, value);

}

function GetWidth()
{
        var x = 0;
        if (self.innerHeight)
        {
                x = self.innerWidth;
        }
        else if (document.documentElement && document.documentElement.clientHeight)
        {
                x = document.documentElement.clientWidth;
        }
        else if (document.body)
        {
                x = document.body.clientWidth;
        } else if (document.body.scrollWidth) {
        		x = document.body.scrollWidth;
        }
        return x;
}
 
function GetHeight()
{
        var y = 0;
        if (self.innerHeight)
        {
                y = self.innerHeight;
        }
        else if (document.documentElement && document.documentElement.clientHeight)
        {
                y = document.documentElement.clientHeight;
        }
        else if (document.body)
        {
                y = document.body.clientHeight;
        } else if (document.body.scrollHeight) {
        		y	 = document.body.scrollHeight;
        }
        return y;
}


/**
	GetVerticalScroll()
	
*/
function GetVerticalScroll()
{
	//alert('in center');
	var my_width  = 0;
	var my_height = 0;
	
	
	var scrollY = 0;
	
	if ( document.documentElement && document.documentElement.scrollTop )
	{
		scrollY = document.documentElement.scrollTop;
	}
	else if ( document.body && document.body.scrollTop)
	{
		scrollY = document.body.scrollTop;
	}
	else if ( window.pageYOffset )
	{
		scrollY = window.pageYOffset;
	}
	else if ( window.scrollY )
	{
		scrollY = window.scrollY;
	} 
	
	//alert(scrollY);
	return scrollY;
	
}


function GetHorizontalScroll()
{
	//alert('in center');
	var my_width  = 0;
	var my_height = 0;
	
	
	var scrollX = 0;
	
	if ( document.documentElement && document.documentElement.scrollLeft )
	{
		scrollX = document.documentElement.scrollLeft;
	}
	else if ( document.body && document.body.scrollLeft)
	{
		scrollX = document.body.scrollLeft;
	}
	else if ( window.pageXOffset )
	{
		scrollX = window.pageXOffset;
	}
	else if ( window.scrollX )
	{
		scrollX = window.scrollX;
	} 
	
	//alert(scrollX);
	return scrollX;
	
}

function Redirect( to_page )
{
	window.location(to_page);
}

function Include(filename)
{
var body = document.getElementsByTagName('body').item(0);
script = document.createElement('script');
script.src = filename;
script.type = 'text/javascript';
body.appendChild(script)
}

function SyncValues(element1, element2)
{
	textArea = GetElement(element1);
	div = GetElement(element2);
	user_entered = element1.value;
	syntax_highlighted = HighlightSyntax(user_entered);
	div.innerHTML = syntax_highlighted;
	
}

function HighlightSyntax(user_entered)
{
	return "<font color='#ff0000'><b>"+user_entered+"</b></font>";
}




