// check xid
var checking_xid = 0;
var check_xid_interval = 5000; // wait time in seconds between checking xid on mouseover
// main xid function
function check_xid() {
	// only check when checking_xid is zero
	if (checking_xid == 0) {
		checking_xid = 1;
		do_check_xid();
	}	
}
function do_check_xid() {

	var xid = "";
	// find XID hidden form element
	var elements = document.getElementsByName("XID");
	for (i=0; i<elements.length; i++) {
		if (xid == '') { 
			element = elements[i];
			xid = element.value;
			xid_element = elements[i];
		}
	} 
	if (xid != "") {		
		// $('debuginside').insert({before: '<br>xid = '+xid})
		new Ajax.Request('/js/check_xid.php?xid='+xid, {
	     	method:'get',
	          onSuccess: function(transport){
	          	var response = transport.responseText;
	               if (response.length == 40) {
	               	// this is a new hash
	               	// update in form
	               	xid_element.value = response;
	               	// $('debuginside').insert({before: '<br>updated xid to '+response})
	               } 
	               if (response == "positive") {
	               	// xid is good
	               	// $('debuginside').insert({before: '<br>xid is good'})
	               }
	               if (response == "") {
	               	// no response from ajax script
	               	// $('debuginside').insert({before: '<br>no ajax response'})
	               }
           
				         
			},
			onFailure: function() { 
				// something went wrong with ajax script
				// $('debuginside').insert({before: '<br>ajax error'})
			}
	     });
	} else {
		// xid not found
		// $('debuginside').insert({before: '<br>no xid found'})
	}	
	// done checking
	// wait some time before setting checking_xid to zero
	setTimeout("done_check_xid()",check_xid_interval);	
} // end do_check_xid()
function done_check_xid() {
	checking_xid = 0;
}	

// Toggle sidebar lists (eg years on Awards page)
function toggleListItems(list) {
	// var currentClass=$(list).className;
	if ($(list).hasClassName('list_minimized')) {
		$(list).addClassName('list_expanded');
		$(list).removeClassName('list_minimized');
	} else {
		$(list).addClassName('list_minimized');
		$(list).removeClassName('list_expanded');
	}	
}


// Extend String with getHash()
String.prototype.getHash = function() {
 var hash = this.split('#');
 return (hash[1]) ? hash[1] : false;
}

// add target to external links
function externalLinks() {   
	if (!document.getElementsByTagName) return;   
 	var anchors = document.getElementsByTagName("a");   
 	for (var i=0; i<anchors.length; i++) {   
   		var anchor = anchors[i];   
   		var href = anchor.getAttribute("href");
   		if (href) {
   			if (href.indexOf("http") != -1 && href.indexOf("http://www.chatbots.org") != 0 && href.indexOf("http://chatbots.org") != 0) {
	   			anchor.target = "_blank"; 
   			}
   		}
   		
	}   
} 

// function to allow multiple load events
function addLoadEvent(func) {
  	var oldonload = window.onload;
  	if (typeof window.onload != 'function') {
    		window.onload = func;
  	} else {
    		window.onload = function() {
  		    	if (oldonload) {
        			oldonload();
      		}
      		func();
    		}
  	}
}

// Links
var Links = {
 	domain : undefined,
 	init : function() {
 		if (document.location.protocol == "http:") {
  			Links.domain = location.href.match(/http:\/\/([\-\.0-9a-z]*)\/.*/)[1] || false;
  		} else {
  			Links.domain = location.href.match(/https:\/\/([\-\.0-9a-z]*)\/.*/)[1] || false;
  		}
  		// add document event handler
  		document.onclick = Links.clicked;
  		// loop thru links to set external
//  		var A = document.getElementsByTagName('a');
//  		for (var i = 0; i < A.length; i++) {
//   			if (!(A[i].href.match(Links.domain))) A[i].className += ' external';
//  		} 
 	},
	clicked : function(e) {
  		var event = e || window.event;
		if(event.ctrlKey || event.shiftKey || event.altKey) return true;
		if(event.which && event.which != 1) return true;
		var target = event.target || event.srcElement;
		while(target && !/^a$/i.test(target.nodeName)) {
   			target = target.parentNode;
		}

		if(!target || !target.className) return true;

  		var this_class = target.className;
  		var href = target.getAttribute('href');
  		switch(this_class) {
   			case 'toggle':
    				ToggleElement(target);
    				break;
   			case 'toggle_sidebar':
    				ToggleSidebarElement(target);
    				break;
    		//	case 'toggle_topics':
    		//		ToggleTopicsElement(target);
    		//		break;
   			case 'popup':
    				window.open(href,'_blank','width=400,height=440');
    				break;
		//   case 'external':
		//    	window.open(href, '_blank');
		//    	break;
   			case 'print':
    				self.print();
    				break;
   			default:
    				return true;
  		}

  		try { event.preventDefault(); } catch(e){}
  		return false;
	}
}

function ToggleElement(a) {
	var href = a.href;
 	var hash = href.getHash();
 	if (!hash) return;
 	var el = document.getElementById(hash);
 	if (!el) return;
 	var isHidden = (el.className == 'hidden') ? true : false;
 	el.className = (isHidden) ? '' : 'hidden';

 	var currentCookie = Cookie.get('open_on_load') || '';
 
 	if (isHidden) {
  		a.style.backgroundImage = a.style.backgroundImage.replace('uit-','in-');
  		Cookie.set('open_on_load',currentCookie+'|'+hash);
 	} else {
  		a.style.backgroundImage = a.style.backgroundImage.replace('in-','uit-');
  		Cookie.set('open_on_load',currentCookie.replace('|'+hash,''));
 	}
}

//// toggles browse topics element
//function ToggleTopicsElement(a) {
//	var href = a.href;
// 	var hash = href.getHash();
// 	if (!hash) return;
// 	
// 	var el = document.getElementById(hash);
// 	if (!el) return;
// 	var isHidden = (el.className == 'hidden') ? true : false;
// 	el.className = (isHidden) ? '' : 'hidden';
// 	
// 	if (isHidden) {
//  		
//  		// switch arrow image
//	 	var switch_image = document.getElementById('switch_'+hash);
// 		if (switch_image) { switch_image.src = '/design/icons/icon_10x10_up.png'; } 		
// 		// add sidebar_minimized class to sidebar div
// 		var switch_div = document.getElementById('div_'+hash);
// 		// if (switch_div) { switch_div.removeClassName('sidebar_minimized'); }  		
// 		// if (switch_div) { Element.toggleClassName('switch_div', ''); }
// 		if (switch_div) { switch_div.className = 'sidebar'; }
// 		Cookie.set('browse_topics','open');
// 	} else {
//		
//		// switch arrow image
//  		var switch_image = document.getElementById('switch_'+hash);
// 		if (switch_image) { switch_image.src = '/design/icons/icon_10x10_down.png'; } 		
// 		// remove sidebar_minimized class to sidebar div
// 		var switch_div = document.getElementById('div_'+hash);
// 		// if (switch_div) { switch_div.addClassName('sidebar_minimized'); }
// 		// if (switch_div) { Element.toggleClassName('switch_div', ''); }
// 		if (switch_div) { switch_div.className = 'sidebar sidebar_minimized'; }
// 		Cookie.set('browse_topics','closed');
// 	}
//}

// toggles div.sidebar box on directory pages
function ToggleSidebarElement(a) {
	var href = a.href;
 	var hash = href.getHash();
 	if (!hash) return;
 	
 	var el = document.getElementById(hash);
 	if (!el) return;
 	var isHidden = (el.className == 'hidden') ? true : false;
 	el.className = (isHidden) ? '' : 'hidden';
 	
 	// cookie close_on_load remembers which elements are closed on load
 	var currentCloseCookie = Cookie.get('close_on_load') || '';
 
 	if (isHidden) {
  		
  		// switch arrow image
	 	var switch_image = document.getElementById('switch_'+hash);
 		if (switch_image) { switch_image.src = '/design/icons/icon_10x10_up.png'; } 		
 		// add sidebar_minimized class to sidebar div
 		var switch_div = document.getElementById('div_'+hash);
 		// if (switch_div) { switch_div.removeClassName('sidebar_minimized'); }  		
 		// if (switch_div) { Element.toggleClassName('switch_div', ''); }
 		if (switch_div) { switch_div.className = 'sidebar'; }
 		Cookie.set('close_on_load',currentCloseCookie.replace('|'+hash,''));
 	} else {
		
		// switch arrow image
  		var switch_image = document.getElementById('switch_'+hash);
 		if (switch_image) { switch_image.src = '/design/icons/icon_10x10_down.png'; } 		
 		// remove sidebar_minimized class to sidebar div
 		var switch_div = document.getElementById('div_'+hash);
 		// if (switch_div) { switch_div.addClassName('sidebar_minimized'); }
 		// if (switch_div) { Element.toggleClassName('switch_div', ''); }
 		if (switch_div) { switch_div.className = 'sidebar sidebar_minimized'; }
 		Cookie.set('close_on_load',currentCloseCookie+'|'+hash);  		
 	}
}

function CheckToggleElements() {
	checkOpenOnLoad();		
	CheckClosedElements();
 	checkBrowseTopics(); 	
 	return;
}

function checkOpenOnLoad() {	
	var current = Cookie.get('open_on_load');
 	if (current == null) return;
 	var openThese = current.split('|');
 	for (var i = 0; i < openThese.length; i++) {
  		var thisone = openThese[i];
  		if (!thisone) continue;
  		var el = document.getElementById(thisone);
  		if (!el) continue;
  		el.className = '';
 	}	
 	return;
}

function checkBrowseTopics() {
	var current = Cookie.get('browse_topics');
	var thisone = 'filter_browse_topics';
	// if no cookie or set to closed close the topics
 	if (current == null || current == 'closed') {
 	 	var el = document.getElementById(thisone);
		if (el) {
			el.className = 'hidden';
			var switch_image = document.getElementById('switch_'+thisone)
			if (switch_image) { switch_image.src = '/design/icons/icon_10x10_down.png'; }
			var switch_div = document.getElementById('div_'+thisone);
			if (switch_div) { switch_div.className = 'sidebar sidebar_minimized'; }
		}
	}
 	return;
}

function CheckClosedElements() {
 	// check close_on_load
 	var current = Cookie.get('close_on_load');
 	if (current == null) return;
 	var openThese = current.split('|');
 	for (var i = 0; i < openThese.length; i++) {
  		var thisone = openThese[i];
  		if (!thisone) continue;
  		var el = document.getElementById(thisone);
  		if (!el) continue;
  		el.className = 'hidden';
  		var switch_image = document.getElementById('switch_'+thisone)
 		if (switch_image) { switch_image.src = '/design/icons/icon_10x10_down.png'; }
 		var switch_div = document.getElementById('div_'+thisone);
 		if (switch_div) { switch_div.className = 'sidebar sidebar_minimized'; }
	}
	return;
}

function initPage() {
 	
 	// unhide sidebar switch images
 	var switch_images=$$("img.switch_sidebar");
	switch_images.each(function(element) {
		element.show();
	});

}




function PrintCheck() {
 var hash = location.href.getHash();
 if (!hash) return;
 if (hash == 'print') self.print();
}

function ValidateForm() {
 var form = document.getElementById('searchform');
 if (!form) return;
 var keywords = document.getElementById('searchterm');
 if (!keywords) return;
 
 var inputs = form.getElementsByTagName('input');
 var select = form.getElementsByTagName('select');

 
 form.onsubmit = function() {
  /*
  var form = document.getElementById('searchform');
  var keywords = document.getElementById('searchterm');
  var inputs = form.getElementsByTagName('input');
  var select = form.getElementsByTagName('select');
  */
  var kw = keywords.value;
  if (!kw || kw.length < 3) { return false; }
  for (var i = 0; i < inputs.length; i++) {
   var el = inputs[i];
   if (!el.id || el.type == 'hidden') continue;
   if (el.type == 'text') 
    var value = el.value;
   else
    var value = el.checked ? 'checked' : '';
   Cookie.set(el.id,value);
  }
  for (var i = 0; i < select.length; i++) {
   var el = select[i];
   if (!el.id) continue;
   Cookie.set(el.id,el.selectedIndex);
  }
 }
 
 for (var i = 0; i < inputs.length; i++) {
  var el = inputs[i];
  if (!el.id || el.type == 'hidden') continue;
  var checked = Cookie.get(el.id);
  if (checked == null) continue;
  if (el.type == 'text') {
   el.value = checked;
  } else {
   if (checked == 'checked') el.checked = 'checked';
  }
 }

 for (var i = 0; i < select.length; i++) {
  var el = select[i];
  if (!el.id) continue;
  var selected = Cookie.get(el.id);
  if (selected != null) el.selectedIndex = selected;
 }

}

var Cookie = {
 set : function (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=/";
 },

 get : function(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;
},

 remove : function(name) { Cookie.set(name,"",-1); }
}

function showLargeTab(icon,txt,seconds) {
	$('large_tab').setStyle({ top: '103px' }); // reset
	$('large_tab_container').show(); // show it
     if (icon == "info" || icon == "stop" || icon == "alert") {
     	$('large_tab_icon').setAttribute("src","/design/icons/icon_37x35_"+icon+".png");
     }
     if (icon == "x") {
     	$('large_tab_icon').setAttribute("src","/design/icons/icon_29x29_stop.png");
     } 
     $('large_tab_content').update(txt)
     new Effect.Move('large_tab', { x: 0, y: -103 });
     t=setTimeout(hideLargeTab,(seconds*1000));
}
function hideLargeTab() {
     new Effect.Move('large_tab', { x: 0, y: 103 });
     t=setTimeout(hideLargeTabContainer,2000);
}
function hideLargeTabContainer() {
	$('large_tab_container').hide();
}


// from http://sixrevisions.com/tutorials/javascript_tutorial/create_lightweight_javascript_tooltip/
var tooltip=function(){
 var id = 'tt';
 var top = 3;
 var left = 3;
 var maxw = 350;
 var speed = 10;
 var timer = 20;
 var endalpha = 95;
 var alpha = 0;
 var tt,t,c,b,h;
 var ie = document.all ? true : false;
 return{
  show:function(v,w){
   if(tt == null){
    tt = document.createElement('div');
    tt.setAttribute('id',id);
    t = document.createElement('div');
    t.setAttribute('id',id + 'top');
    c = document.createElement('div');
    c.setAttribute('id',id + 'cont');
    b = document.createElement('div');
    b.setAttribute('id',id + 'bot');
    tt.appendChild(t);
    tt.appendChild(c);
    tt.appendChild(b);
    document.body.appendChild(tt);
    tt.style.opacity = 0;
    tt.style.filter = 'alpha(opacity=0)';
    document.onmousemove = this.pos;
   }
   tt.style.display = 'block';
   c.innerHTML = v;
   tt.style.width = w ? w + 'px' : 'auto';
   if(!w && ie){
    t.style.display = 'none';
    b.style.display = 'none';
    tt.style.width = tt.offsetWidth;
    t.style.display = 'block';
    b.style.display = 'block';
   }
  if(tt.offsetWidth > maxw){tt.style.width = maxw + 'px'}
  h = parseInt(tt.offsetHeight) + top;
  clearInterval(tt.timer);
  tt.timer = setInterval(function(){tooltip.fade(1)},timer);
  },
  pos:function(e){
   var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
   var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
   tt.style.top = (u - h) + 'px';
   tt.style.left = (l + left) + 'px';
  },
  fade:function(d){
   var a = alpha;
   if((a != endalpha && d == 1) || (a != 0 && d == -1)){
    var i = speed;
   if(endalpha - a < speed && d == 1){
    i = endalpha - a;
   }else if(alpha < speed && d == -1){
     i = a;
   }
   alpha = a + (i * d);
   tt.style.opacity = alpha * .01;
   tt.style.filter = 'alpha(opacity=' + alpha + ')';
  }else{
    clearInterval(tt.timer);
     if(d == -1){tt.style.display = 'none'}
  }
 },
 hide:function(){
  clearInterval(tt.timer);
   tt.timer = setInterval(function(){tooltip.fade(-1)},timer);
  }
 };
}();


addLoadEvent(Links.init);
addLoadEvent(PrintCheck);
addLoadEvent(ValidateForm);
addLoadEvent(CheckToggleElements);
addLoadEvent(initPage);



