var win=null;

function NewWindow(mypage,myname,w,h,pos,infocus){
	if(pos=="random"){
		myleft=(screen.width)?Math.floor(Math.random()*(screen.width-w)):100;
		mytop=(screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;
	}
	if(pos=="center"){
		myleft=(screen.width)?(screen.width-w)/2:100;
		mytop=(screen.height)?(screen.height-h)/2:100;
	}
	else if((pos!='center' && pos!="random") || pos==null){
		myleft=0;
		mytop=20
	}
	settings="width=" + w + ",height=" + h + ",top=" + mytop + ",left=" + myleft + ",scrollbars=yes,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes";
	win=window.open(mypage,myname,settings);
	win.focus();
}

//is there an open popout?
var open_popout = false;

function popout_close(popout_id) {
	var popout = document.getElementById(popout_id);
	if (popout) {
		document.body.removeChild(open_popout);
		open_popout = false;
	}
}

function popout_open(obj, popout_id, text) {
	
	if (!document.getElementById(popout_id)) {
		//create popout
		var popout = createElement('div');
		popout.id = popout_id;
		popout.className = 'popout_help';
		
		//add text
		var popout_text = createElement('div');
		popout_text.className = 'popout_text';
		popout_text.innerHTML = text;
		popout.appendChild(popout_text);
		
		//close function
		var this_popout_close = function() {
			if (popout && document.getElementById(popout_id)) {
				document.body.removeChild(popout);
				open_popout = false;
			}
		};
		
		//create close link
		var close_link = createElement('a');
		close_link.className = 'popout_close';
		close_link.setAttribute('href','javascript:void(0);');
		close_link.innerHTML = 'Close';
		close_link.onclick = this_popout_close;
		popout.appendChild(close_link);					
		
		obj.onblur = this_popout_close;
		
		//onmouseover
		popout.onmouseover = function() {
			obj.onblur = '';
			popout.focus();
		};
		
		//onmouseout
		popout.onmouseout = function() {
			obj.onblur = this_popout_close;
			obj.focus();
		};	
		
		popout.style.display = 'block';
		popout.style.visibility = 'hidden';
		
		//if there's an open popout
		if (open_popout) {
			document.body.removeChild(open_popout);
			open_popout = false;
		}
		
		document.body.appendChild(popout);
		open_popout = popout;
		
		//position the popout
		
		//get screen width/height
		var screenRes = getScreenRes();
		var screenWidth = screenRes[0];
		
		//get scroll offset
		var scrollOffset = getScrollOffset();
		
		//get position
		var position = findPos(obj);
		var obj_width = obj.offsetWidth;						
		
		//determine where to position the popout		
		
		//default is centered, above link
		var leftPos = parseInt(position[0]+(obj_width/2)-(popout.offsetWidth/2));
		var topPos = parseInt(position[1]-popout.offsetHeight-9);
		var popout_arrow_class = 'popout_arrow_down';		
		
		//if popout goes off top of screen
		if (topPos-scrollOffset[1]-10 < 0) { 
			//position below link			
			topPos = parseInt(position[1]+obj.offsetHeight+9);
			popout_arrow_class = 'popout_arrow_up';
		}	
		
		//create popout arrow
		var popout_arrow = createElement('img');
		popout_arrow.setAttribute('src', '/assets/images/'+popout_arrow_class+'.gif');
		popout_arrow.className = popout_arrow_class;
		popout_arrow.setAttribute('alt', '');
		popout.appendChild(popout_arrow);
				
		//check horizontal position
		if (leftPos-scrollOffset[0]-10 < 0) { //on the left
			leftPos = parseInt(position[0]-10);
			popout_arrow.style.left = (obj_width/2) + 'px';
		} else if ((leftPos-scrollOffset[0]+popout.offsetWidth)>(screenWidth-10)) { //on the right			
			leftPos = parseInt(position[0]+obj_width-popout.offsetWidth+10);
			popout_arrow.style.left = (popout.offsetWidth-16-(obj_width/2)) + 'px';
		} 
		
		popout.style.left = leftPos + 'px';		
		popout.style.top = topPos + 'px';								
		
		popout.style.visibility = 'visible';
	} else {
		popout_close(popout_id);
	}
}

function createElement(element) {
	if (typeof document.createElementNS != 'undefined') {
		return document.createElementNS('http://www.w3.org/1999/xhtml', element);
	}
	if (typeof document.createElement != 'undefined') {
		return document.createElement(element);
	}
	return false;
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}	
	return [curleft,curtop];
}

function getScreenRes() {
	var screenWidth = 0, screenHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		screenWidth = window.innerWidth;
		screenHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		screenWidth = document.documentElement.clientWidth;
		screenHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		screenWidth = document.body.clientWidth;
		screenHeight = document.body.clientHeight;
	}
	return [screenWidth,screenHeight];
}

function getScrollOffset() {
	var x=0, y=0;
	if (document.pageYOffset || document.pageXOffset) // all except Explorer
	{
		x = self.pageXOffset;
		y = self.pageYOffset;
	}
	else if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft))
		// Explorer 6 Strict
	{
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}
	return [x,y];
}

function attachOnEvent(obj, evt, func) {
	if (func) {
		if (window.addEventListener) {
			obj.addEventListener(evt,func,false);
		} else if (window.attachEvent) {
			obj.attachEvent('on'+evt, func);
		}
	}
}

function update_char_count(obj, count_text, limit) {
	var char_count = 0;
	if (obj.value.length) {
		char_count = obj.value.length;	
	}	
	count_text.innerHTML = (char_count==1)?char_count + ' character':char_count + ' characters';
	count_text.style.color = (char_count>=limit)?count_text.style.color = 'green':count_text.style.color = 'red';
}






