function loadDefaults(){
	var client = new ClientInformation();
	if(!client.supportsFixedPositioning()){
		var ajaxTimeoutDiv = document.getElementById("ajaxTimeout");
		ajaxTimeoutDiv.className = 'ajaxTimeout ajaxTimeoutAbsolute';
		var searchDiv = document.getElementById("search");
		searchDiv.className = 'search searchAbsolute';
	}

	var currentDate = new Date()
	var year = currentDate.getYear();
	if(year < 200) year = year + 1900;
	var month = currentDate.getMonth();

	var processedBefore = Cookie.getCookie("processedBefore");
	if(processedBefore == null || processedBefore == "false"){
		//Clear the default categories
		Cookie.addCookieList("categories", "36", false, 30);
		Cookie.addCookieList("categories", "37", false, 30);
	}
	Cookie.setCookie("processedBefore", "true", 30);

	loadCategories();	

	Cookie.addCookieList("calendarYears", year, false, 30);
	Cookie.addCookieList("calendarMonths", year + '' + month, false, 30);
	loadCookieCalendar();

	var searchEngine = Cookie.getCookie("searchEngine");
	if(searchEngine != null){
		searchChooseEngine(searchEngine);
	}
	else{
		searchChooseEngine('Google');
	}
	
	var element = document.getElementById('intro');
	if(element){
		var minimizeIntro = Cookie.getCookie("minimizeIntro");
		if(minimizeIntro == null){
			dispblock('intro');
		}
	}
	
	element = document.getElementById('browserCompatibility');
	if(element){
		var clientInformation = new ClientInformation();
		if(!clientInformation.isFirefox()){
			var minimizeBrowserCompatibility = Cookie.getCookie("minimizeBrowserCompatibility");
			if(minimizeBrowserCompatibility == null){
				dispblock('browserCompatibility');
			}
		}
	}
}


function closeIntro(){
	dispnone('intro');
	Cookie.setCookie("minimizeIntro", "1");
}

function closeBrowserCompatibility(){
	dispnone('browserCompatibility');
	Cookie.setCookie("minimizeBrowserCompatibility", "1");
}

function newWindow(url){
	window.open(url, null);
	return false;
}

function calendarExpandYear(year){
	if(calendarYearLoads){
		if(!calendarYearLoads[year]){
			populateCalendarYear(year);
		}
	}

	dispnone('calendarYearPlus' + year);
	dispinline('calendarYearMinus' + year);
	dispblock('calendarYear' + year);
	Cookie.addCookieList("calendarYears", year, false, 30);
}

function calendarCollapseYear(year){
	dispinline('calendarYearPlus' + year);
	dispnone('calendarYearMinus' + year);
	dispnone('calendarYear' + year);
	Cookie.removeCookieList("calendarYears", year, 30);
}

function calendarExpandMonth(year, month){
	var indexValue = year + '' + month;
	if(calendarMonthLoads){
		if(!calendarMonthLoads[indexValue]){
			populateCalendarMonth(year, month);
		}
	}

	dispnone('calendarMonthPlus' + indexValue);
	dispinline('calendarMonthMinus' + indexValue);
	dispblock('calendarMonth' + indexValue);

	Cookie.addCookieList("calendarMonths", indexValue, false, 30);
}

function calendarCollapseMonth(year, month){
	var indexValue = year + '' + month;
	dispinline('calendarMonthPlus' + indexValue);
	dispnone('calendarMonthMinus' + indexValue);
	dispnone('calendarMonth' + indexValue);
	Cookie.removeCookieList("calendarMonths", indexValue, 30);
}

function ajaxCalendarYearSuccess(xmlHttp, xmlResponse){
	var root = xmlResponse.getElementsByTagName('quagma-ajax')[0];
	var yearNode = AjaxXmlParser.getFirstNode(root);
	
	var year = yearNode.nodeName.split('-')[1];

	var element = document.getElementById("calendarYear" + year);
	
	if(element == null) return;
	
	element.innerHTML = '';
	for(var i = 11; i >= 0; i--){
		var monthNode = AjaxXmlParser.getNode(yearNode, i);
		var month = monthNode.nodeName.split('-')[1];
		var value = AjaxXmlParser.getText(monthNode).nodeValue;
		if(value > 0){
			element.innerHTML = element.innerHTML
				+ '<div>'
				+ '<span class="calendarMonthText"><span id="calendarMonthPlus' + year + month + '" style="display: inline"><a href="javascript:calendarExpandMonth(' + year + ',' + month + ');"><img src="' + calendarPlusImage + '" border="0"/></a></span><span id="calendarMonthMinus' + year + month + '" style="display: none"><a href="javascript:calendarCollapseMonth(' + year + ', ' + month + ');"><img src="' + calendarMinusImage + '" border="0"/></a></span> ' + ajaxCalendarGetMonthName(i) + ' (' + value + ')</span>'
				+ '<div id="calendarMonth' + year + month + '" class="calendarMonth" style="display: none">'
				+ '<span class="calendarLoading">Loading...</span>'
				+ '</div>'
				+ '</div>';
		}
	}
		
	calendarYearLoads[year] = true;
	loadCookieCalendarMonth(year);
}

function ajaxCalendarMonthSuccess(xmlHttp, xmlResponse){
	var root = xmlResponse.getElementsByTagName('quagma-ajax')[0];
	var yearNode = AjaxXmlParser.getFirstNode(root);
	
	var year = yearNode.nodeName.split('-')[1];

	var monthNode = AjaxXmlParser.getFirstNode(yearNode);

	var month = monthNode.nodeName.split('-')[1];

	var element = document.getElementById("calendarMonth" + year + month);

	if(element == null) return;
	element.innerHTML = '';
	
	var i=0;
	var articleNode = AjaxXmlParser.getNode(monthNode, i);
	while(articleNode != null){
		var titleNode = AjaxXmlParser.getFirstNode(articleNode);
		var value = AjaxXmlParser.getText(titleNode).nodeValue;
		var idNode = AjaxXmlParser.getNode(articleNode, 1);
		var id = AjaxXmlParser.getText(idNode).nodeValue;
		var url = contextPath + '/html/article/view/display.html?article_ID=' + id;

		element.innerHTML = element.innerHTML
			+ '<div>'
			+ '<span class="calendarArticleText"><a href="' + url + '">' + value + '</a></span>'
			+ '</div>';
			
		articleNode = AjaxXmlParser.getNode(monthNode, ++i);
	}
	
	var indexValue = year + '' + month;
	calendarMonthLoads[indexValue] = true;
}

function ajaxRateSuccess(xmlHttp, xmlResponse){
	var root = xmlResponse.getElementsByTagName('quagma-ajax')[0];
	var articleNode = AjaxXmlParser.getFirstNode(root);

	var articleIdNode = AjaxXmlParser.getFirstNode(articleNode);
	var articleId = AjaxXmlParser.getText(articleIdNode).nodeValue;

	var ratingNode = AjaxXmlParser.getNode(articleNode, 1);
	var rating = AjaxXmlParser.getText(ratingNode).nodeValue;
	
	rateArticleDisplay(articleId, rating);
}

function ajaxResponseSuccess(xmlHttp, xmlResponse){
	var root = xmlResponse.getElementsByTagName('quagma-ajax')[0];
	var articleNode = AjaxXmlParser.getFirstNode(root);

	var articleIdNode = AjaxXmlParser.getFirstNode(articleNode);
	var articleId = AjaxXmlParser.getText(articleIdNode).nodeValue;

	var responseNode = AjaxXmlParser.getNode(articleNode, 1);
	var response = AjaxXmlParser.getText(responseNode).nodeValue;
	
	
	var element = document.getElementById('articleResponseCount' + articleId);
	if(element != null){
		var html = element.innerHTML;
		var count = parseInt(html);
		count = count + 1;
		element.innerHTML = count;
	}

	responseAjaxLoaderImageStop(articleId);
	responseCancel(articleId);
	
	/* Reload the page if on the article view page. */
	element = document.getElementById('articleResponseList');
	if(element != null){
		window.location.reload();
	}
}

function responseAjaxLoaderImageStart(article){
	var element = document.getElementById('articleResponseContentDiv' + article);
	element.className = 'articleResponseContentDiv articleResponseContentDivOff';	
	element.disabled = true;
	
	element = document.getElementById('responseImageLoading' + article);
	element.src = responseImageLoading;

	element = document.getElementById('responseSubmitted' + article);
	element.className = 'responseSubmitted responseSubmittedOn';
}

function responseAjaxLoaderImageStop(article){
	var element = document.getElementById('articleResponseContentDiv' + article);
	element.className = 'articleResponseContentDiv';	
	element.disabled = false;
	
	element = document.getElementById('responseImageLoading' + article);
	element.src = "";

	element = document.getElementById('responseSubmitted' + article);
	element.className = 'responseSubmitted';
}

function ajaxCalendarYearFailure(xmlHttp, xmlResponse){
	
}

function ajaxCalendarMonthFailure(xmlHttp, xmlResponse){
	
}

function ajaxRateFailure(xmlHttp, xmlResponse){
	
}

function ajaxResponseFailure(xmlHttp, xmlResponse){
	var root = xmlResponse.getElementsByTagName('quagma-ajax-error')[0];
	var errorNode = AjaxXmlParser.getFirstNode(root);
	var callBackNode = AjaxXmlParser.getNode(root, 1);
	
	var error = AjaxXmlParser.getText(errorNode).nodeValue;
	var article = AjaxXmlParser.getText(callBackNode).nodeValue;

	if(error == -3 || error == -2) alert("Please enter a title and content for your comment.");
	
	responseAjaxLoaderImageStop(article);
}

function ajaxTimeout(){
	dispblock('ajaxTimeout');
}

function populateCalendarMonth(year, month){
	var categoryList = Cookie.getCookie("categories");
	if(categoryList == null) categoryList = "";

	var req = new AjaxRequest("/quagma/ajax/calendar/getArticlesByMonth.html?year=" + year + "&month=" + month + "&categories=" + categoryList, ajaxCalendarMonthSuccess, ajaxCalendarMonthFailure, ajaxTimeout, 5000);
	req.exec();
}

function populateCalendarYear(year){
	var categoryList = Cookie.getCookie("categories");
	if(categoryList == null) categoryList = "";

	var req = new AjaxRequest("/quagma/ajax/calendar/getArticleDates.html?year=" + year + "&categories=" + categoryList, ajaxCalendarYearSuccess, ajaxCalendarYearFailure, ajaxTimeout, 5000);
	req.exec();
}

function submitRating(article, rating){
	var params = new Array();
	params[0] = new Array();
	params[0][0] = "article_ID";
	params[0][1] = article;
	params[1] = new Array();
	params[1][0] = "rating";
	params[1][1] = rating;
	
	var req = new AjaxRequest("/quagma/ajax/rate/rateArticle.html", ajaxRateSuccess, ajaxRateFailure, ajaxTimeout, 5000, params);
	req.exec();
}

function submitResponse(article){
	var element = document.getElementById('articleResponseTitle' + article);
	var title = element.value;
	element = document.getElementById('articleResponseName' + article);
	var name = element.value;
	element = document.getElementById('articleResponseEmail' + article);
	var email = element.value;
	element = document.getElementById('articleResponseContent' + article);
	var content = element.value;
	
	var params = new Array();
	params[0] = new Array();
	params[0][0] = "article_ID";
	params[0][1] = article;
	params[1] = new Array();
	params[1][0] = "title";
	params[1][1] = title;
	params[2] = new Array();
	params[2][0] = "name";
	params[2][1] = name;
	params[3] = new Array();
	params[3][0] = "email";
	params[3][1] = email;
	params[4] = new Array();
	params[4][0] = "content";
	params[4][1] = content;
	
	var req = new AjaxRequest("/quagma/ajax/response/submitResponse.html", ajaxResponseSuccess, ajaxResponseFailure, ajaxTimeout, 5000, params);
	req.exec();
	responseAjaxLoaderImageStart(article);
}

function loadCookieCalendar(){
	var years = Cookie.getCookieList("calendarYears");
	for(var i = 0; i < years.length; i++){
		if(years[i] != ''){
			calendarExpandYear(years[i]);
		}
	}
}

function loadCookieCalendarMonth(year){
	var months = Cookie.getCookieList("calendarMonths");
	for(var i = 0; i < months.length; i++){
		if(months[i] != ''){
			if(months[i].substr(0, 4) == year) calendarExpandMonth(months[i].substr(0, 4), months[i].substr(4));
		}
	}
}

function ajaxCalendarGetMonthName(i){
	if(i == 0) return "January";
	if(i == 1) return "February";
	if(i == 2) return "March";
	if(i == 3) return "April";
	if(i == 4) return "May";
	if(i == 5) return "June";
	if(i == 6) return "July";
	if(i == 7) return "August";
	if(i == 8) return "September";
	if(i == 9) return "October";
	if(i == 10) return "November";
	if(i == 11) return "December";
}



function rateArticleOn(article){
	if(Cookie.inCookieList("articleRatings", article)) return;
	
	dispnone('currentRating' + article);
	dispinline('rate' + article);
	dispinline('ratingIncompleteText' + article);
}

function rateArticleOff(article){
	if(Cookie.inCookieList("articleRatings", article)) return;
	
	dispinline('currentRating' + article);
	dispnone('rate' + article);
	dispnone('ratingIncompleteText' + article);
}

function rateArticle(article, x){
	if(Cookie.inCookieList("articleRatings", article)) return;
	Cookie.addCookieList("articleRatings", article, false, 365);
	
	submitRating(article, x);
	
	rateArticleHide(article, true);
}

function rateArticleHover(article, x){
	if(Cookie.inCookieList("articleRatings", article)) return;
	
	for(var i = 1; i <= 5; i++){
		var element = document.getElementById('ratingStar' + i + article);
		if(x >= i) element.src = ratingFullImage;
		else element.src = ratingOffImage;
	}
}

function rateArticleHide(article, dim){
	rateArticleOff(article);

	var e1 = document.getElementById('ratingIncompleteText' + article);
	dispnone('ratingIncompleteText' + article);
	dispinline('ratingCompleteText' + article);
	
	var element = document.getElementById('rateArticle' + article);
	if(dim){
		element.className = 'rateArticle rateArticleComplete';
		element.disabled = true;
	}
}

function rateArticleDisplay(article, rating){
	var element = document.getElementById("currentRating" + article);
	if(element == null) return;
	
	var html = ' ';
	
	if(rating < 0.05) rating = 0.0;
	if(rating > 0.95) rating = 1.0;
	
	var intRating = Math.floor(rating * 10);
	for(var i = 0; i < 5; i++){
		if(intRating >= 2){
			html = html + '<img src="' + ratingFullImage + '" border="0"/>';
		}
		else if(intRating >= 1){
			html = html + '<img src="' + ratingHalfImage + '" border="0"/>';
		}
		else{
			html = html + '<img src="' + ratingOffImage + '" border="0"/>';
		}
		
		intRating = intRating - 2;
	}
	html = html + ' ';
	
	element.innerHTML = html;
	
	if(Cookie.inCookieList("articleRatings", article)){
		rateArticleHide(article, false);
	}
}


function searchOn(){
	dispnone('searchPlus');
	dispinline('searchMinus');
	dispblock('searchOptions');
}

function searchOff(){
	dispnone('searchMinus');
	dispinline('searchPlus');
	dispnone('searchOptions');
}

function searchChooseEngine(a){
	var element = document.getElementById('searchEngine');
	element.innerHTML = a;

	searchOff();
	Cookie.setCookie("searchEngine", a);
}

function searchSubmit(){
	var text = document.getElementById("searchText");
	if(text.value == '' || text.value == 'Search...') return;

	var engineElement = document.getElementById('searchEngine');
	var engine = engineElement.innerHTML;
	var url = null;
	
	if(engine == "Yahoo"){
		url = "http://search.yahoo.com/?p=site%3Awww.quagma.com+" + text.value;
	}
	else if(engine == "Google"){
		url = "http://www.google.com/search?hl=en&q=site%3Awww.quagma.com+" + text.value;
	}

	window.open(url, 'quagmaSearch');
}

function checkEnter(e){ //e is event object passed from function invocation
	var characterCode;// literal character code will be stored in this variable

	if(e && e.which){ //if which property of event object is supported (NN4)
		e = e;
		characterCode = e.which; //character code is contained in NN4's which property
	}
	else{
		e = event;
		characterCode = e.keyCode; //character code is contained in IE's keyCode property
	}

	if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)
		return true;
	}
	else{
		return false;
	}
}

function socialDisplay(article){
	responseCancel(article);

	dispnone('socialPlus' + article);
	dispinline('socialMinus' + article);
	
	var element = document.getElementById('articleMenu' + article);
	element.className = 'articleMenu articleMenuOn';

	element = document.getElementById('articleMenuTabSocial' + article);
	element.className = 'articleMenuTab articleMenuTabOn';

	dispblock('articleSocial' + article);
}

function socialHide(article){
	dispinline('socialPlus' + article);
	dispnone('socialMinus' + article);
	
	var element = document.getElementById('articleMenu' + article);
	element.className = 'articleMenu';

	element = document.getElementById('articleMenuTabSocial' + article);
	element.className = 'articleMenuTab';

	dispnone('articleSocial' + article);
}

function responseCreate(article){
	socialHide(article);
	
	var element = document.getElementById('articleMenu' + article);
	element.className = 'articleMenu articleMenuOn';

	element = document.getElementById('articleMenuTabResponse' + article);
	element.className = 'articleMenuTab articleMenuTabOn';

	dispblock('articleResponse' + article);
	
	element = document.getElementById('articleResponseTitle' + article);
	element.focus();
}

function responseCancel(article){
	var element = document.getElementById('articleMenu' + article);
	element.className = 'articleMenu';

	element = document.getElementById('articleMenuTabResponse' + article);
	element.className = 'articleMenuTab';

	dispnone('articleResponse' + article);
}

function trackArticle(url){
	var goUrl = url;
	newWindow(goUrl, null);
}

function checkCategory(element){
	var checked = element.checked;
	var id = element.value;

	if(checked){
		Cookie.removeCookieList("categories", id, 30);
	}
	else{
		Cookie.addCookieList("categories", id, false, 30);
	}
}

function loadCategories(){
	var categories = Cookie.getCookieList("categories");
	
	var counter = 0;
	while((element = document.getElementById('categoryListItemCheckbox' + counter++)) != null){
		var id = element.value;

		if(Cookie.inCookieList("categories", id, null)){
			element.checked = false;			
		}
		else{
			element.checked = true;			
		}
	}
}


function growTextarea(){
	var element = this;
	growTextareaInner(element);
	element.lastKnownLength = element.value.length;
}

function growTextareaInner(element){
	if(element.scrollHeight > element.offsetHeight){
		var newHeight = element.scrollHeight + 20;
		element.style.height = newHeight + 'px';
	}
	else if(element.value.length < element.lastKnownLength){
		var newHeight = element.offsetHeight - 10;
		element.style.height = newHeight + 'px';
		growTextareaInner(element);
	}
}