var vt_open = 0;
var re_open = 1;
var privatepage = 0;

var myimages=[];

function preloadimages() {
	for (var i=0;i<preloadimages.arguments.length;i++) {
		myimages[i]=new Image();
		myimages[i].src=preloadimages.arguments[i];
	}
}

function externalLinks() {
	if (!document.getElementsByTagName) {
		return false;
	}
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") {
			anchor.target = "_blank";
		}
	}
}

window.onload = externalLinks;

function toggle(src) {
	if(getLayer(src).display ==  "none") {
		blockLayer(src);
		killLayer(src+"2");
	} else {
		killLayer(src);
		blockLayer(src+"2");
	}
}


function person_version_tracker() {
	x = $('version_tracker');
	y = $('coglink');
	if(x.className == "closed") {
		Effect.Fade($('coglink'),{duration: 0.5});
		Effect.Appear($('versions'),{duration: 0.5}); //,{afterFinish: function(e){ $('version_tracker').className = "open"; }}
		x.className = "open";
		vt_open = 1;
	} else if(x.className == "open") {
		//  x.className = "closed";
		Effect.Fade($('versions'),{duration: 0.5, afterFinish: function(e){ $('version_tracker').className = "closed"; }});
		Effect.Appear($('coglink'),{duration: 0.5});
		vt_open = 0;
	}
}

function version_tracker() {
	x = $('version_tracker');
	y = $('comment_engine');
	z = $('reco_engine');
	if(x.className == "closed") {
		if(y.className == "open") {
			Effect.Fade($('comments'),{duration: 0, afterFinish: function(e){ $('comment_engine').className = "closed"; }});
			re_open = 0;
		}
		if(z.className == "open") {
			Effect.Fade($('recos'),{duration: 0, afterFinish: function(e){ $('reco_engine').className = "closed"; }});
			re_open = 0;
		}
		Effect.Appear($('versions'),{duration: 0.5}); //,{afterFinish: function(e){ $('version_tracker').className = "open"; }}
		x.className = "open";
		vt_open = 1;
		if(y.className == "open") {
			y.className = "closed";
		}
	} else if(x.className == "open") {
//  x.className = "closed";
		Effect.Fade($('versions'),{duration: 0.5, afterFinish: function(e){ $('version_tracker').className = "closed"; }});
		vt_open = 0;
	}
}

function comment_engine() {
	x = $('comment_engine');
	z = $('reco_engine');
	if(x.className == "closed") {
		if(z.className == "open") {
			Effect.Fade($('recos'),{duration: 0, afterFinish: function(e){ $('reco_engine').className = "closed"; }});
			re_open = 0;
		}
		Effect.Appear($('comments'),{duration: 0.5}); //,{afterFinish: function(e){ $('version_tracker').className = "open"; }}
		x.className = "open";
		re_open = 1;
	} else if(x.className == "open") {
		//  x.className = "closed";
		Effect.Fade($('comments'),{duration: 0.5, afterFinish: function(e){ $('comment_engine').className = "closed"; }});
		re_open = 0;
	}
}

function reco_engine() {
	x = $('reco_engine');
	if(x.className == "closed") {
		Effect.Appear($('recos'),{duration: 0.5}); //,{afterFinish: function(e){ $('version_tracker').className = "open"; }}
		x.className = "open";
		comment_open = 1;
	} else if(x.className == "open") {
		//  x.className = "closed";
		Effect.Fade($('recos'),{duration: 0.5, afterFinish: function(e){ $('reco_engine').className = "closed"; }});
		comment_open = 0;
	}
}

var boxhandle;

function closepop() {
	if(boxhandle && typeof(boxhandle) != 'undefined' && boxhandle !== 0) {
		boxhandle.internalremove();
		try {
			boxhandle.remove();
		}
		catch(err) {}
	}
	//	boxhandle = 0;
}

function fadeTableRow(rowid, opts) {
	if(!opts) {
		opts = {};
	}
	var row  = $(rowid);
	var cells= row.childNodes;
	for(var i=0;i<cells.length;i++){
		if(cells[i].tagName == 'TD') {
			Effect.Fade(cells[i],opts);
		}
	}
	Effect.Fade(row,opts);
}

function appearTableRow(rowid, opts) {
	if(!opts) {
		opts = {};
	}
	var row  = $(rowid);
	var cells= row.childNodes;
	Effect.Appear(row,opts);
	for(var i=0;i<cells.length;i++){
		if(cells[i].tagName == 'TD') {
			Effect.Appear(cells[i],opts);
		}
	}
}

function goSearch() {
	var err = "";
	var frm = document.forms.search_form;
	if(isWhitespace(frm.searchtxt.value)) {
		err += "\nSearch Phrase is blank";
	}
	if(frm.searchtxt.value.length < 2) {
		err += "\nSearch Phrase is less than 2 characters";
	}
	if(frm.searchtxt.value == 'Search for a map/person') {
		err += "Please enter something to search for";
	}

	if(err !== "") {
		alert("You must correct the following errors:\n"+err);
	} else {
		frm.submit();
	}
	return false;
}

function item_clicked(foo) {
	return false;
}

function hide_box(element, update) {
	Element.setStyle($('sugg'),{display: 'none'});
	Element.removeClassName($('search_assist_container'),'assist_active');
	Element.addClassName($('search_assist_container'),'inactive');
}

function show_box(element, update) {
	Element.removeClassName($('search_assist_container'),'inactive');
	Element.addClassName($('search_assist_container'),'assist_active');
	Effect.Appear($('sugg'),{duration: 0.5});
}

function search_init() {
	if(typeof(document.forms.search_form) != "undefined") {
		var myAutoCompleter = new Ajax.Autocompleter("searchtxt", "sugg", "/chart_lookup.php?s=1", {paramName: "lookup", minChars: 2, indicator: 'ind', updateElement: item_clicked, onShow: show_box, onHide: hide_box});
	}
}

Event.observe(window, 'load', search_init);

function compare_chart() {
	var err="";
	var frm = document.forms.compare_charts;
	var num = 0;

	for(var i=0; i < frm.elements['v[]'].length; i++) {
		if(frm.elements['v[]'][i].checked) {
			num ++;
		}
	}

	if(num < 2) {
		err += "\nYou must select 2 chart versions to compare.";
	}
	if(num > 2) {
		err += "\nYou have selected "+num+" chart versions to compare.  You may only select 2.";
	}

	if(err !== "") {
		alert("You must correct the following errors:\n"+err);
		return false;
	} else {
		frm.submit();
		return false;
	}
}

function compare_person() {
	var err="";
	var frm = document.forms.compare_persons;
	var num = 0;

	for(var i=0; i < frm.elements['v[]'].length; i++) {
		if(frm.elements['v[]'][i].checked) {
			num ++;
		}
	}

	if(num < 2) {
		err += "\nYou must select 2 profile versions to compare.";
	}
	if(num > 2) {
		err += "\nYou have selected "+num+" profile versions to compare.  You may only select 2.";
	}

	if(err !== "") {
		alert("You must correct the following errors:\n"+err);
		return false;
	} else {
		frm.submit();
		return false;
	}
}

function np(form_name, var_name, val, var2_name, current) {
	eval('var val = document.forms.' + form_name + '.' + var_name + '.value =' + val);
	eval('var val = document.forms.' + form_name + '.' + var2_name + '.value =' + current);
	eval('var val = document.forms.' + form_name + '.submit()');
	return false;
}

function generate_np(parent, form_name, var_name, current, num_per_page, total, var2_name, current2) {
	var errmsg = "Error generating next/previous nav";
	eval("var frm = document.forms." + form_name);
	if(typeof(frm) == "undefined") {
		alert(errmsg);
		return false;
	}
	eval("var val = frm." + var_name);
	if(typeof(val) == "undefined") {
		alert(errmsg);
		return false;
	}
	if(current > 0) {
		var newval = current - num_per_page;
		if(newval < 0) {
			newval = 0;
		}
		var newLink =
				Builder.node('a', {
					href: '#',
					onclick: 'return np(\'' + form_name + '\',\'' + var_name + '\',' + newval + ',\'' + var2_name + '\',' + current2 + ')'
				}, '<< previous ' );
		newLink.style.display = 'none';
		$(parent).appendChild(newLink);
		Effect.Appear(newLink);
	}
	var page_num = 1;
	for(var i=0; i < total; i += num_per_page) {
		if(i == current) {
			s = 'text-decoration: overline';
		} else {
			s = '';
		}
		var newLink =
				Builder.node('a', {
					href: '#',
					onclick: 'return np(\'' + form_name + '\',\'' + var_name + '\',' + i + ',\'' + var2_name + '\',' + current2 + ')',
					style: s
				}, (page_num) + ' ' );
		page_num++;
		newLink.style.display = 'none';
		$(parent).appendChild(newLink);
		Effect.Appear(newLink);
	}
	if((current + num_per_page) < total) {
		var newval = current + num_per_page;
		if(newval > total) {
			newval = total;
		}
		var newLink =
				Builder.node('a', {
					href: '#',
					onclick: 'return np(\'' + form_name + '\',\'' + var_name + '\',' + newval + ',\'' + var2_name + '\',' + current2 + ')'
				}, 'next >> ' );
		newLink.style.display = 'none';
		$(parent).appendChild(newLink);
		Effect.Appear(newLink);
	}
}

var logging_in = 0;
var jump_refer = 0;

function login_loaded(req) {
	notloggedin = 0;
	logging_in = 0;
	//	if(typeof($('indl')) != 'undefined') {
	//		new Effect.Fade('indl',{queue: {scope: 'login', position: 'end'}});
	//	}
	//	if(typeof($('indl_pop')) != 'undefined') {
	//		new Effect.Fade('indl_pop',{queue: {scope: 'login', position: 'end'}});
	//	}
	if(req.responseText == 1) {
		if(jump_refer == 1 && goto_ref.indexOf('sign_up') == -1) {
	 		location.href = goto_ref;
			// Try to redirect people from home page to my cogmap if they login from home page - buggy?
			//	 else if(window.location.href.indexOf('/') != -1)
			//	 {
			//	 	location.href = '/my_cogmap.php';
			//	 }
		} else if (privatepage == 1) {
			location.href = location.href;
		} else {
			closepop();
			Effect.Fade($('user_options_out'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
			Effect.Appear($('user_options_in'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
			Effect.Fade($('comment_login'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
			Effect.Appear($('comment_button'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
			return false;
		}
	} else if(req.responseText == 2) {
		alert("Sorry, your email address has not been validated yet.  Please check your email and follow the instructions.");
	} else {
		alert("Sorry, your user name or password is incorrect");
	}
}

function openidlogin_loaded(req) {
	logging_in = 0;
	notloggedin = 0;
	//	if(typeof($('indl')) != 'undefined') new Effect.Fade('indl',{queue: {scope: 'login', position: 'end'}});
	//	if(typeof($('indl_pop')) != 'undefined') new Effect.Fade('indl_pop',{queue: {scope: 'login', position: 'end'}});
	if(req == 1) {
		if(jump_refer == 1 && typeof(goto_ref) != "undefined" && goto_ref.indexOf('sign_up') == -1) {
			location.href = goto_ref;
	//		} else if(window.location.href.indexOf('/') != -1) {
	//			location.href = '/my_cogmap.php';
		} else if (privatepage == 1) {
			location.href = location.href;
		} else {
			closepop();
			Effect.Fade($('user_options_out'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
			Effect.Appear($('user_options_in'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
			Effect.Fade($('comment_login'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
			Effect.Appear($('comment_button'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
			return false;
		}
	} else {
		alert("Sorry, your login failed");
	}
}

function processLogin(val) {
	if(logging_in == 1) {
		return false;
	}
	if(typeof(val) == "undefined") {
		val = "";
	}
	eval("var frm = document.forms.sign_in_form" + val);
	if(typeof(frm) == "undefined") {
		return false;
	}
	var un = frm.userName.value;
	var pw = frm.userPass.value;
	var keep = frm.keep_logged_in;

	var post = "";

	if(!un || un.length === 0 || isWhitespace(un)) {
		alert("Please enter your user name or email address to login.");
		return false;
	}

	if(!pw || pw.length === 0 || isWhitespace(pw)) {
		alert("Please enter your password to login.");
		return false;
	}

	if(isEmail(un)) {
		post += "em=1&";
	} else {
		post += "em=0&";
	}

	if(keep.checked) {
		post += "k=1&";
	} else {
		post += "k=0&";
	}

	post += "un=" + encodeURIComponent(un) + "&";
	post += "pw=" + encodeURIComponent(pw) + "&";

	logging_in = 1;
	Effect.Appear('indl' + val,{queue: {scope: 'login', position: 'end'}});
  	ajaxloginreq = new Ajax.Request('/processlogin.php',{method: 'post', parameters: post, onComplete: login_loaded });

  	frm.userName.focus();

	return false;
}

var newwindow = '';

function processOpenIDLogin(val) {
	if(logging_in == 1) {
		return false;
	}
	if(typeof(val) == "undefined") {
		val = "";
	}
	eval("var frm = document.forms.sign_in_open_form" + val);
	if(typeof(frm) == "undefined") {
		return false;
	}
	var openid_identifier = frm.openid_identifier.value;
	var keep = frm.keep_logged_in;
	var post = "";
	if(!openid_identifier || openid_identifier.length === 0 || isWhitespace(openid_identifier)) {
		alert("Please enter your OpenID login to login to Cogmap.");
		return false;
	}

	if(keep.checked) {
		post += "k=1&";
	} else { 
		post += "k=0&";
	}
	post += "action=login&openid_identifier=" + encodeURIComponent(openid_identifier);
	url = '/openid_try_auth.php?'+post;
	logging_in = 1;
	if (!newwindow.closed && newwindow !== '') {
		newwindow.close();
	}
	//	if (!newwindow.closed && newwindow.location) {
	//		newwindow.location.href = url;
	//	}
	//	else {
	newwindow=window.open(url,'name','location=1,scrollbars=1,resizable=1,height=400,width=500');
	if (!newwindow.opener) {
		newwindow.opener = self;
	}
	//	}
	if (window.focus) {
		newwindow.focus();
	}

	//	Effect.Appear('indl' + val,{queue: {scope: 'login', position: 'end'}});
	//  	var ajaxloginreq = new Ajax.Request('try_auth_login.php',{method: 'post', parameters: post, onComplete: login_loaded });
	//  	frm.openid_identifier.focus();

	return false;
}

function pop_login() {
	closepop();
	boxhandle = new LITBox('/sign_in_pop.php?pop=1',{type:'window',overlay:true, width: 475, height: 260});
	document.forms.sign_in_form_pop.userName.focus();
	return false;
}

function logout_loaded() {
	notloggedin = 1;
	Effect.Fade($('user_options_in'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
	Effect.Appear($('user_options_out'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
  	Effect.Fade($('comment_button'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
  	Effect.Appear($('comment_login'), { queue: {scope:'ep', position:'end'}, duration: 0.5});
	return false;
}

function logout() {
	var ajaxlogoutreq = new Ajax.Request('/processlogin.php',{method: 'get', parameters: 'logout=1', onComplete: logout_loaded });
	return false;
}

var openid = 1;

function show_loginfields() {
	if(openid == 1) {
		return false;
	}
	Effect.Fade('openidlogin', { queue: {scope:'ep', position:'end'}, duration: 0.5});
	Effect.Appear('regularlogin', { queue: {scope:'ep', position:'end'}, duration: 0.5});
	openid = 1;
	return false;
}

function show_openidfields() {
	if(openid == 2) {
		return false;
	}
	Effect.Fade($('regularlogin'), {queue:{scope:'ep', position:'end'}, duration: 0.5});
	Effect.Appear($('openidlogin'), {queue:{scope:'ep', position:'end'}, duration: 0.5});
	openid = 2;
	return false;
}

var sending_pw = 0;

function forgot_pw() {
	closepop();
	boxhandle = new LITBox('/forgot_pw.php', {type:'window',overlay:true, width: 475, height: 260});
	document.forms.forgot_pw.email.focus();
	return false;
}

function forgotPW_loaded(req) {
	pageTracker._trackPageview("/send_password.php");
	Effect.Fade('ind_send',{queue: {scope: 'forgot_pw', position: 'end'}});
	sending_pw = 0;
	if(req.responseText == 1) {
		closepop();
		alert("Your password has been sent. You should receive an email shortly.");
	} else if (req.responseText == 2) {
		alert("That email address is not linked to an account.");
	} else {
		closepop();
		alert("Email cogmap@cogmap.com, because I have no idea what just happened.");		
	}
}

function processForgotPW() {
	if(sending_pw == 1) {
		return false;
	}
	var frm = document.forms.forgot_pw;
	if(isEmail(frm.email.value)) {
		sending_pw = 1;
		Effect.Appear('ind_send',{queue: {scope: 'forgot_pw', position: 'end'}});
		var post = "email="+encodeURIComponent(frm.email.value)+"&page=" + location.href;
  		var ajaxsendreq = new Ajax.Request('/send_password.php',{method: 'post', parameters: post, onComplete: forgotPW_loaded });
	} else {
		alert("Please enter a valid email address to retrieve your password.");
	}
	return false;
}

function sendfriend(notloggedin) {
	closepop();
	if(notloggedin) {
		boxhandle = new LITBox('/send_friend.php?notloggedin=1',{type:'window',overlay:true,width:475,height:260});
	} else {
		boxhandle = new LITBox('/send_friend.php',{type:'window',overlay:true, width: 475, height: 260});
	}
	document.forms.send_friend.email.focus();
	pageTracker._trackPageview("/send_friend.php");
	return false;
}

function requestaccess(id, map) {
	closepop();
	boxhandle = new LITBox('/request_access.php?email=' + id + '&map=' + map,{type:'window',overlay:true, width: 475, height: 260});
	document.forms.request_access.yemail.focus();
	pageTracker._trackPageview("/request_access.php");
	return false;
}

var sending_friend = 0;

function sendfriend_loaded(notloggedin) {
	pageTracker._trackPageview("/send_page.php?title="+document.title);
	sending_friend = 0;
	Effect.Fade('ind_send',{queue: {scope: 'send_friend', position: 'end'}});
	alert("A link to  \'" + document.title + "\'  has been sent to " + document.forms.send_friend.email.value + ".");	
	closepop();
}

function processSendFriend(notloggedin) {
	if(sending_friend == 1) {
		return false;
	}
	var frm = document.forms.send_friend;
	if(isEmail(frm.email.value)) {
		var post;
		sending_friend = 1;
		Effect.Appear('ind_send',{queue: {scope: 'send_friend', position: 'end'}});
		if(notloggedin > 0) {
			post = "notloggedin=1&yemail="+encodeURIComponent(frm.yemail.value)+"&email="+encodeURIComponent(frm.email.value)+"&page=" + location.href;
		} else {
			post = "notloggedin=0&email="+encodeURIComponent(frm.email.value)+"&page=" + location.href;
  		}
		var ajaxsendreq = new Ajax.Request('/send_page.php',{method: 'post', parameters: post, onComplete: sendfriend_loaded });
	}
	else {
		alert("Please enter a valid email address to send this page to.");
	}
	return false;
}

function sendrequestaccess_loaded(req) {
	Effect.Fade('ind_send',{queue: {scope: 'request_access', position: 'end'}});
	pageTracker._trackPageview("/send_request_access.php");
	sending_friend = 0;
	alert("An access request has been emailed to the chart owner.");
	closepop();
}

function processRequestAccess() {
	if(sending_friend == 1) {
		return false;
	}
	var frm = document.forms.request_access;
	if(isEmail(frm.yemail.value)) {
		sending_friend = 1;
		Effect.Appear('ind_send',{queue: {scope: 'request_access', position: 'end'}});
		var post = "yemail="+encodeURIComponent(frm.yemail.value)+"&map="+encodeURIComponent(frm.map.value)+"&email="+encodeURIComponent(frm.email.value)+"&page=" + location.href;
  		var ajaxsendreq = new Ajax.Request('/send_request_access.php',{method: 'post', parameters: post, onComplete: sendrequestaccess_loaded });
	} else {
		alert("Please enter a valid email address to send this page to.");
	}
	return false;
}
