// JavaScript Document

var previousSort = "default";
var firstSearch = true;

$(document).ready(function() {
	// Handle Login Form
	$("#l_login").click(function() {
		$.modal('login.php',340,180); return false;
	});
	
	$("#l_logout").click(function() {
		logout();return false;
	});
 
	// Handle Resynch Form
	$("#m_resynch").click(function() {
		$.modal('resynchronize.php',340,135);
	});

	// Handle Register Form
	$("#l_register").click(function() {
		$.modal('register.php',340,205); return false;
	});
	
	$("#l_settings").click(function() {
		$.modal('settings.php',340,190) ;return false;
	});
	
	// Handle Sorting
	$(".sort a").click(function() {
		previousSort = $(this).attr("value");
		selectSort($(this).attr("value"),true);
		
		doSearch(true); // do that search business
	});
	
	// Cancel Searching Widget
	$("#cancelsearch").click(function() {
		$(this).css("opacity",0);
		$("#keywordsquery").val("Search...").css("color","#ccc");
		if (previousSort =="relevance")
			selectSort("lname");
			
		$(".sort a[value='relevance']").hide();
		
		doSearch(true);
	});
	
	// Handle Searching Through Text Field
	$("#keywordsquery.articles").keyup(function() {
		if ($(this).val() != "" && $(this).val() != "Search...") {
			if (previousSort == "default") {
				selectSort("relevance");
				previousSort = "relevance";
			}
				
			$(".sort a[value='relevance']").show();
			$("#cancelsearch").css("opacity",1);
		} else {
			if (previousSort == "relevance") {
				selectSort("lname");
				previousSort = "default";
			}
			
			$(".sort a[value='relevance']").hide();
			$("#cancelsearch").css("opacity",0);
		}
		
		doSearch(true);
	});
	
	$("#keywordsquery").focus(function() {
		if($(this).val()=="Search...")
			$(this).val("").css("color","#444");
	}).blur(function() {
		if($(this).val()=="")
			$(this).val("Search...").css("color","#ccc");
	});
	
	// Setup checkboxes
	$(".checkbox").click(function() {
		if($(this).attr("checked")) {
			$(this).removeAttr("checked");
			
			if($(this).hasClass("narrowby")) {
				$(this).nextAll("ul").find(".narrowby").removeAttr("checked");
				$(this).parents("li").children(".narrowby").removeAttr("checked");
			}
		}
		else {
			$(this).attr("checked","checked");
			
			if($(this).hasClass("narrowby")) {
				$(this).nextAll("ul").find(".narrowby").attr("checked","checked");
				
				parentChecked = true;
				$(this).parent("li").siblings("li").each(function() {
					if(!$(this).children(".narrowby").attr("checked"))
						parentChecked = false;
				});

				if(parentChecked)
					$(this).parents("li").children(".narrowby").attr("checked","checked");
			}
		}
			
		doSearch(true);
	});
	
	// More checkboxes
	$(".checkbox + span").click(function() {
		cb = $(this).prev();
		
		if(cb.hasClass("searchby")) {
			$(".searchby").removeAttr("checked");
			cb.attr("checked","checked");
		} else if(cb.hasClass("narrowby")) {
			$(".narrowby").removeAttr("checked");
			cb.attr("checked","checked");
			cb.nextAll("ul").find(".narrowby").attr("checked","checked");
		}
	});
	
	// Setup category tree
	$(".expandable").click(function() {
		$(this).toggleClass("expanded");
		$(this).nextAll("ul").toggle();	
	});
	
	// Advanced Searching 
	$(".showadvancedsearch").click(function() {
		if($(".advanced").css("display") == "none")
			$(".advanced").slideDown("fast");
		else
			$(".advanced").slideUp("fast");
			
		$("#results").toggleClass("small");
		$(".summary").toggleClass("small");
		$(".notification").toggleClass("small");
	});
	
	// Handle Categories
	$("#linksidebar h5").click(function() {
		selectCategory($(this).attr("value"));
	});
	
	$(".smallcontent").css("min-height",$(".sidebar").height());
	
	// Handle Authors Clicks 
	$("#authorsidebar h5").click(function() {
		$("#keywordsquery").val("Search...").css("color","#ccc");
	 	$("#authorsidebar h5").removeClass("selected");
	 	$(this).addClass("selected");
	 	
	 	updateAuthors();
	});
	
	$("#keywordsquery.authors").keyup(function() {
		updateAuthors();
	});
	
	// position advanced box
	$(".advanced").css("left",$("#content").offset().left+658);
});

function doSearch(updatePaging) {
	var tags = "";
	var searchby = "";
	
	$(".narrowby").each(function() {
		if($(this).attr("checked")) tags = tags + "|" + $(this).attr("value");
	});
	$(".searchby").each(function() {
		if($(this).attr("checked")) searchby = searchby + "|" + $(this).attr("value");
	});
	
	searchby = searchby.replace("|",""); tags = tags.replace("|","");
	
	// ASSIGN KEYWORDS
	keywords = $("#keywordsquery").attr("value").match(/[^\s"']+|"([^"]*)"|'([^']*)'/g).join("|").replace("Search...",0);
	if (keywords=="") keywords = 0;
	
	// ASSIGN LIMIT
	if (updatePaging)
		limit = "0, 20";
	else {
		begin = $(".pages a.selected").html();
		
		if (begin == "All")
			limit = "0, " + numResults;
		else {
			start = (parseInt(begin)-1)*20;
			limit = start+ ", 20";
		}
	}
	
	$("#results").addClass("loading");
	
	// SEARCH AND UPDATE RESULTS
	$.ajax({
		url: "scripts/search.php",
		data: {
			tags : tags,
			searchby : searchby,
			keywords : keywords,
			sortby: $(".sort a.active").attr("value"),
			order : $(".sort a.active img").attr("src").replace("images/sort_","").replace(".png","").toUpperCase(),
			limit : limit
		},
		success: function(data) {
			$("#results").removeClass("loading").html(data);
			$("#numResults").html(numResults);

                        if (firstSearch) $("#totalPapers").html(numResults);
                        else firstSearch = false;
			
			if (updatePaging) updatePagesHTML(1,true);
		},
		error: function(data,status,msg) {
			alert("Error! " + data + status + msg);	
		}
	});
}

function selectSort(value,click) {
	el = $(".sort a[value="+value+"]");
	
	if(el.hasClass("active") && click) {
		sort = "images/sort_desc.png";
		if (el.children("img").attr("src") == sort) sort = "images/sort_asc.png";
		
		el.children("img").attr("src",sort);
	} else {
		$(".sort a.active").removeClass("active");
		el.addClass("active");
		
		$(".sort a img").appendTo(el);
	}
}

function updatePagesHTML(page,skipSearch) {
	numPages = Math.ceil(numResults/20);
	startRange = 0;
	endRange = -1;
	prefix = "";
	suffix = "";
	
	if(page=="All") page=0;
	
	if (numPages <= 8) {
		endRange = numPages;
	} else {
		if (page <= 4) {
			endRange = 5;
			suffix = "... <a onclick='updatePagesHTML("+numPages+");'>"+numPages+"</a> ";
		} else if (page <= numPages - 4) {
			startRange = page-2;
			endRange = page+2;
			
			prefix = "<a onclick='updatePagesHTML(0);'>All</a> <a onclick='updatePagesHTML(1);'>1</a> ... ";
			suffix = "... <a onclick='updatePagesHTML("+numPages+");'>"+numPages+"</a> ";
		} else {
			startRange = numPages-4;
			endRange = numPages;
			
			prefix = "<a onclick='updatePagesHTML(0);'>All</a> <a onclick='updatePagesHTML(1);'>1</a> ... ";
		}
	}
	
	middle = "";
	for (i=startRange; i<=endRange; i++) {
		j = i;
		if (i == 0) j = "All";
		
		if (i==page) middle = middle + "<a class='selected'>"+j+"</a> ";
		else middle = middle + "<a onclick='updatePagesHTML("+i+");'>"+j+"</a> ";
	}
	
	$(".pages").html("Page: "+prefix+middle+suffix);
	
	if(!skipSearch) doSearch();
	
	if (numPages==page) {
		$("#limitResults").html((20*(page-1)+1)+"-"+numResults);
	} else if (page==0) {
		$("#limitResults").html("1-"+numResults);
	} else {
		$("#limitResults").html((20*(page-1)+1)+"-"+20*page);
	}
}

function selectAuthor(id) {
	$.ajax({
		url: "scripts/viewAuthor.php",
		data: {
			id : id
		},
		success: function(data) {
			$("#authorscontent").html(data);
		},
		error: function(data,status,msg) {
			alert("Error! " + data + status + msg);	
		}
	});
}

function closeNotification() {	
	$.ajax({
		url: "scripts/closenotif.php",
		success: function(data) {
			$(".notification").hide();
		},
		error: function(data,status,msg) {
			$(".notification").hide();	
		}
	})
}

function selectCategory(cat) {
	$("#linksidebar .selected").removeClass("selected");
	$("#linksidebar h5[value='"+cat+"']").addClass("selected");
	
	if(cat=="all") {
		$("#linkscontent div").show();
	} else {
		$("#linkscontent div").hide();
		$("#linkscontent div."+cat).show();
	}
}

function updateAuthors() {
	if ($("#keywordsquery").val() == "" || $("#keywordsquery").val() == "Search...") {
		keywords = "0"; letters = $("#authorsidebar h5.selected").attr("letters");
	} else {
		keywords = $("#keywordsquery").val(); letters = "0";
	}
		
	$.ajax({
		url: "scripts/searchauthors.php",
		data: {
			letters : letters,
			keywords : keywords
		},
		success: function(data) {
			$("#authorscontent").html(data);
		},
		error: function(data,status,msg) {
			alert("Error! " + data + status + msg);	
		}
	});
}

function randomString(string_length) {
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
	var randomstring = '';
	for (var i=0; i<string_length; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
	return randomstring;
}
