// Nokia Personal CR Reporting 2006
// 2007-01-15 Vesa Kivistö
// 2007-02-26 Mikko Kallio
//
// This file contains the core functions necessary to implement personal reporting functionality
// 
// To distinguish from other JS variables and functions, we use prefix cr2007_ everywhere
//
// Some of the functions here require file cr2007_settings.js to be loaded


function cr2007_GetContentCategory(con) {
	if (cr2007_content[con] != null) {
		var thiscon = cr2007_content[con].split('|');
		return thiscon[1];
	} else {
		return null;
	}
}

function cr2007_ContentInCategory(con, cat) {
	if (cr2007_content[con] != null) {
		var thiscon = cr2007_content[con].split('|');
		if (thiscon[1] ==  cat) {
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

function cr2007_CheckForCategories(catid) {
	for(var i=0; i < cr2007_contentMaxId; i++) {
		var spanobj = document.getElementById('contentitem' + i);
		if (spanobj != null && spanobj.style.display != 'none') {
			if (cr2007_GetContentCategory(i) == catid) return true;
		}
	}
	return false;
}

function cr2007_RenderButtonRow(emailbody) {
	var pdfurl = cr2007_RemoteServerPDFUrlPrefix + cr2007_readCookie();
	var newbody = emailbody.replace("cr2007PDFURL", escape(pdfurl));
	if (cr2007_ShowPDFButton) document.writeln('<img class="printhide" name="cr2007_savepdfbtn" src="'+cr2007_ImageURLPrefix+cr2007_SaveAsPDFImageUrl+'" border=0 style="' + cr2007_ViewButtonStyle + '" onclick="document.location=\''+ pdfurl +'\';">');
	if (cr2007_ShowPrintButton) document.writeln('<img class="printhide" name="cr2007_printbtn" src="'+cr2007_ImageURLPrefix+cr2007_PrintImageUrl+'" border=0 style="' + cr2007_ViewButtonStyle + '" onclick="window.print();">');
	if (cr2007_ShowEmailButton) document.writeln('<img class="printhide" name="cr2007_emailbtn" src="'+cr2007_ImageURLPrefix+cr2007_EmailImageUrl+'" border=0 style="' + cr2007_ViewButtonStyle + '" onclick="document.location=\'mailto:?subject=' + escape(cr2007_EmailSubject) + '&body=' + newbody + '\';">');
}

function cr2007_UpdateViewButtons() {
	var items = document.getElementsByName('cr2007_viewbtn'); 
	var imgsrc = cr2007_ImageURLPrefix+cr2007_ViewButtonImageUrl;

	if (!cr2007_CheckItems()) {
		imgsrc = cr2007_ImageURLPrefix+cr2007_ViewButtonImageUrlDisabled;
	}
	
	for (var i=0; i < items.length; i++) {
		if (items[i].src != imgsrc) items[i].src = imgsrc;
	}
}

function cr2007_RenderViewButton() {
	var imgsrc = cr2007_ImageURLPrefix+cr2007_ViewButtonImageUrl;

	if (!cr2007_CheckItems()) {
		imgsrc = cr2007_ImageURLPrefix+cr2007_ViewButtonImageUrlDisabled;
	}
	
	document.writeln('<img name="cr2007_viewbtn" src="'+imgsrc+'" border=0 style="' + cr2007_ViewButtonStyle + '" onclick="cr2007_LaunchPopup();">');
}

function cr2007_CreateAllButtonsTest() {
	for(var i=0; i < cr2007_contentMaxId; i++) {
		if (cr2007_CreateAddOrRemoveButton(i+1)) document.write('<br />');
	}
}

function cr2007_UpdateCategoryItems(catId, checkedState) {
	var itemsArr = document.getElementsByName('cr2007_catcon_' + catId);
	
	if (catId == 1) {
		for (j=1; j < cr2007_contentMaxId+1; j++) {
			if (cr2007_content[j] != null) {
				document.getElementById('cr2007_cb_' + j).checked = checkedState;
				cr2007_SetContentIdStatus(j, checkedState);
			}
		}
		for (var i=1; i < cr2007_categoryMaxId+1; i++) {
			if (cr2007_category[i] != null) {
				document.getElementById('cr2007_cat_' + i).checked = checkedState;
			}
		}
	} else {
		for (var i=0; i < itemsArr.length; i++) {
			var idArr = itemsArr[i].id.split('_');
			var thisId = idArr[2];
			itemsArr[i].checked = checkedState;
			cr2007_SetContentIdStatus(thisId, checkedState);
		}
	}
	
	cr2007_UpdateViewButtons();
}

function cr2007_UpdateMainCategoryCheckBox() {
	var mainCatChecked = true;
	
	for (var i=2; i < cr2007_categoryMaxId+1; i++) {
		if (cr2007_category[i] != null) {
			if (document.getElementById('cr2007_cat_' + i).checked == false) {
				mainCatChecked = false;
			}
		}
	}
	
	document.getElementById('cr2007_cat_1').checked = mainCatChecked;
}

function cr2007_UpdateCategoryCheckBox(catId) {
	var checkedState = true;
	
	var itemsArr = document.getElementsByName('cr2007_catcon_' + catId);

	for (var i=0; i < itemsArr.length; i++) {
		var idArr = itemsArr[i].id.split('_');
		var thisId = idArr[2];
		if (itemsArr[i].checked == false) checkedState = false;
	}
	
	document.getElementById('cr2007_cat_' + catId).checked = checkedState;
}

function cr2007_InitCategoryCheckBoxes() {
	for (var i=1; i < cr2007_categoryMaxId+1; i++) {
		if (cr2007_category[i] != null) {
			cr2007_UpdateCategoryCheckBox(i);
		}
	}
	cr2007_UpdateMainCategoryCheckBox();
}

function cr2007_RenderAddRemoveSelectionTable() {
	var gonehalf=false;
	var halfway = Math.round(cr2007_categoryMaxId / 2);

	document.writeln('<table ' + cr2007_AddRemoveSelectionTableStyle + '>');
	document.writeln('<tr ' + cr2007_AddRemoveSelectionTableRowStyle + '>');
	document.writeln('<td ' + cr2007_AddRemoveSelectionTableCellStyle + '>');
	
	for (var i=1; i < cr2007_categoryMaxId+1; i++) {
		if (cr2007_category[i] != null) {
			var cr2007_catarr = cr2007_category[i].split('|');
		
			if (cr2007_catarr[0] == 'Y') {
				document.writeln(cr2007_AddRemoveSelectionTableHeaderStart + '<input onclick="cr2007_UpdateCategoryItems(' + i + ', this.checked); cr2007_UpdateMainCategoryCheckBox();" type="checkbox" id="cr2007_cat_' + i + '" /><label for="cr2007_cat_' + i + '">' + cr2007_catarr[1] + ' (all)</label>' + cr2007_AddRemoveSelectionTableHeaderEnd);		
			
				for (j=1; j < cr2007_contentMaxId+1; j++) {
					if (cr2007_content[j] != null) {
						var cr2007_conarr = cr2007_content[j].split('|');
						if (cr2007_conarr[0] == 'Y' && parseInt(cr2007_conarr[1]) == i) {
							var curchecked = '';
							if (cr2007_GetContentIdStatus(j)) {
								curchecked = ' checked'
							}
							document.writeln('<input name="cr2007_catcon_' + i + '" ' + cr2007_AddRemoveSelectionTableInputTags +' onclick="cr2007_SetContentIdStatus(' + j +', this.checked ); cr2007_UpdateViewButtons(); cr2007_UpdateCategoryCheckBox(' + i + '); cr2007_UpdateMainCategoryCheckBox();" type="checkbox" id="cr2007_cb_'+ j +'"' +curchecked+ '> <label ' + cr2007_AddRemoveSelectionTableInputLabelTags + ' for="cr2007_cb_' + j + '">' + cr2007_conarr[2] + '</label><br>');		
						}
					}
				}
				document.writeln('<br>');
			}
		}
		if(i >= halfway && !gonehalf) {
			gonehalf = true;
			document.writeln('</td><td ' + cr2007_AddRemoveSelectionTableCellStyle + '>');
		}	
	}
	
	document.writeln('</td></tr>');
	document.writeln('</table>');
	cr2007_InitCategoryCheckBoxes();
}

function cr2007_CheckItems() {
	var tmp = cr2007_readCookie();
	
	if (tmp == null) {
		return false;
	} else if (parseInt(tmp) > 0) {
		return true;
	} else {
		return false;
	}
}

function cr2007_LaunchPopup() {
	var tmp = cr2007_readCookie();
	if (cr2007_CheckItems()) {
		cr2007_win = window.open (cr2007_RemoteServerUrlPrefix + cr2007_readCookie(), "cr2007", 'menubar=1,'  + cr2007_PopupSettings);
	} else {
		if (cr2007_readCookie() == null) {
			alert(cr2007_NoCookieAlertMessage);
		} else {
			alert(cr2007_ViewButtonAlertMessage);
		}
	}
}

function cr2007_CreateAddOrRemoveButton(contentId) {
	if (cr2007_AddAndRemoveButtonsAreVisible) {
		var curimgurl='';
		
		if(cr2007_GetContentIdStatus(contentId)) {
			curimgurl=cr2007_RemoveButtonImageUrl;
		} else {
			curimgurl=cr2007_AddButtonImageUrl;
		}	
	
		theButtonId = cr2007_AddAndRemoveButtonsPrefix + contentId;
		theButton = '<img class="printhide" id="' + theButtonId + '" src="' + curimgurl + '" border=0 alt="" onclick="cr2007_AddOrRemoveButtonClicked(' + contentId + ');" style="' + cr2007_AddAndRemoveButtonStyle + '">';
		document.write(theButton);
		return true;
	} else {
		return false;
	}
}

function cr2007_UpdateButtonStatuses() {
	for(var i=0; i < cr2007_contentMaxId; i++) {
		cr2007_RenderAddOrRemoveButton(i+1);
	}
}

function cr2007_UpdateContentVisibility(contentId, hidden) {
	var spanobj = document.getElementById('contentitem' + contentId);
	if (spanobj != null) {
		if (hidden) {
			spanobj.style.display = 'none';
			if (!cr2007_CheckForCategories(cr2007_GetContentCategory(contentId))) {
				var catspan = document.getElementById('category' + cr2007_GetContentCategory(contentId));
				if (catspan != null) catspan.style.display = 'none';
			}
		} else {
			spanobj.style.display = 'inline';
		}
	}
}

function cr2007_ChangeButtonStatus(contentId) {
	if(cr2007_GetContentIdStatus(contentId)) {
		cr2007_SetContentIdStatus(contentId, false);
		cr2007_UpdateContentVisibility(contentId, true)
	} else {
		cr2007_SetContentIdStatus(contentId, true);
		cr2007_UpdateContentVisibility(contentId, false)
	}
	cr2007_RenderAddOrRemoveButton(contentId);
}

function cr2007_RenderAddOrRemoveButton(contentId) {
	theButtonId = cr2007_AddAndRemoveButtonsPrefix + contentId;
	var cr2007_curbtn = document.getElementById(theButtonId);
		
	if (cr2007_curbtn != null) {
		if(cr2007_GetContentIdStatus(contentId)) {
			cr2007_curbtn.src=cr2007_RemoveButtonImageUrl;
		} else {
			cr2007_curbtn.src=cr2007_AddButtonImageUrl;
		}
	}
}

function cr2007_AddOrRemoveButtonClicked(contentId) {
	cr2007_ChangeButtonStatus(contentId);
}

function cr2007_setCharAt(str,index,char) {
	if(index > str.length-1) return str;
	return str.substr(0,index) + char + str.substr(index+1);
}

function cr2007_GetContentIdStatus(contentId) {
	var cookiedata = '';
	var clen = 0;
	var cid = parseInt(contentId) - 1; 
	
	if (!cr2007_checkCookie()) {
			cr2007_createCookie();
	}
		
	cookiedata = cr2007_readCookie();
	
	if (cookiedata != null) {
	
		clen = cookiedata.length;
	
		if (cid < clen) {
			if (cookiedata.charAt(cid) == '1') {
				return true;
			} else {
				return false;
			}
		} else {
			//alert('out of range');
			return false;
		}
	} else {
		return false;
	}
}

function cr2007_SetContentIdStatus(contentId, status) {
	var cookiedata = '';
	var clen = 0;
	var cid = parseInt(contentId) - 1;
	
	if (!cr2007_checkCookie()) {
		cr2007_createCookie();
	}
		
	cookiedata = cr2007_readCookie();
	
	if (cookiedata != null) {
		clen = cookiedata.length;
	
		if (cid < clen) {
			if (status) {
				cookiedata = cr2007_setCharAt(cookiedata, cid, '1');
			} else {
				cookiedata = cr2007_setCharAt(cookiedata, cid, '0');
			}
			cr2007_createCookie(cookiedata);
			return true;
		} else {
			//alert('out of range');
			return false;
		}
	} else {
		return false;
	}
}

function cr2007_createCookie(value) {
	var date = new Date();
	date.setTime(date.getTime()+(cr2007_cookieLifetime*24*60*60*1000));
	var expires = "; expires="+date.toGMTString();
	
	if (value == null) {
		var initval= "";
		for(var i=0; i < cr2007_contentMaxId; i++) {
			initval = initval + '0';
		}
		document.cookie = cr2007_cookieName+"="+initval+expires+"; path=/";	
	} else {
		document.cookie = cr2007_cookieName+"="+value+expires+"; path=/";
	}
}

function cr2007_readCookie() {
	var nameEQ = cr2007_cookieName + "=";
	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;
}

function cr2007_eraseCookie() {
	var date = new Date();
	date.setTime(date.getTime()+((-1)*24*60*60*1000));
	var expires = "; expires="+date.toGMTString();

	document.cookie = cr2007_cookieName+"="+expires+"; path=/";
}

function cr2007_checkCookie() {
	if (cr2007_readCookie() == null) {
		return false;
	} else {
		return true;
	}
}



function cr2007_register_questionaire(qid, value) {
	window.location = cr2007_QRemoteServerUrlPrefix + '&qid=' + qid + '&val=' + value + '&ref=' + escape(window.location.toString());
}


function cr2007_renderquestion(qid, qtext) {

	if (cr2007_getqueryparam('qid') != null && cr2007_getqueryparam('cr2007_yv') != null && cr2007_Qgetpercent(qid) == null) {
		cr2007_Qsetpercent(cr2007_getqueryparam('qid'), cr2007_getqueryparam('cr2007_yv'));
	}

		document.writeln('<table ' + cr2007_Qtabletags + '>');
		document.writeln('<tr >');
		document.writeln('<td style="height: 54px; background-image: url('+ cr2007_FeedbackImageUrl +'); background-repeat: no-repeat;">');
		document.writeln('</tr>');
		document.writeln('</td>');
		document.writeln('<tr ' + cr2007_Qtabletr1tags + '>');
		document.writeln('<td ' + cr2007_Qtabletd1tags + '>');
		if (cr2007_QqidExists(qid)) document.writeln(cr2007_QuestionaireVoteAdded);
		document.writeln(qtext);
		document.writeln('</td></tr>');
		document.writeln('<tr ' + cr2007_Qtabletr2tags + '>');
		document.writeln('<td ' + cr2007_Qtabletd2tags + '>');
		
		if (cr2007_QqidExists(qid)) {
			if (cr2007_getqueryparam('disp') != 'low') {
				document.writeln('<b><span '+ cr2007_QuestionairePercentYesTags +'>' + cr2007_Qgetpercent(qid) + '% </span><span '+ cr2007_QuestionairePercentYesTextTags +'>Yes</span></b><br/>');
				document.writeln('<b><span '+ cr2007_QuestionairePercentNoTags +'>' + (100 - parseInt(cr2007_Qgetpercent(qid))) + '% </span><span '+ cr2007_QuestionairePercentNoTextTags +'>No</span></b><br/>');
			} else {
				document.writeln(cr2007_QuestionaireVotesLow);
			}
		} else {
			document.writeln('<img onclick="cr2007_register_questionaire('+ qid + ', \'Y\')" src="' + cr2007_QuestionaireBtnYes + '" border=0 ' + cr2007_QuestionaireBtnYesTags + ' /> ');
			document.writeln('<img onclick="cr2007_register_questionaire('+ qid + ', \'N\')" src="' + cr2007_QuestionaireBtnNo + '" border=0 ' + cr2007_QuestionaireBtnNoTags + ' /> ');
		}
	
		document.writeln('</td></tr></table>');
		
}

function cr2007_getqueryparam(getname) {
	var url = window.location.href;
	url.match(/\?(.+)$/);
	var params = RegExp.$1;
	
	var params = params.split("&");
	var queryStringList = {};

	for(var i=0;i < params.length; i++) {
	    var tmp = params[i].split("=");
	    if (tmp[0] == getname) return unescape(tmp[1]);
	}
	
	return null;
}

function cr2007_Qgetpercent(qid) {
	
	if (cr2007_QcheckCookie()) {
		if (cr2007_QqidExists(qid)) {
			var tmp = cr2007_QreadCookie();
			var data = tmp.split(" ");
		
			for (var i=0; i < data.length; i++) {
				var values = data[i].split('S');
				if (qid == values[0]) {
					return values[1];
				} 
			}
		} else {
			return null;
		}
	} else {
		return null;
	}
}

function cr2007_Qsetpercent(qid, value) {
	
	if (cr2007_QcheckCookie()) {
		if (cr2007_QqidExists(qid)) {
			var tmp = cr2007_QreadCookie();
			var data = tmp.split(" ");
			var newdata = '';
		
			for (var i=0; i < data.length; i++) {
				var values = data[i].split('S');
				if (qid == values[0]) {
					newdata = newdata + values[0] + 'S' + value + ' ';
				} else {
					newdata = newdata + values[0] + 'S' + values[1] + ' ';
				}
			}

			cr2007_QcreateCookie(newdata);
		
		} else {
			cr2007_QcreateCookie(cr2007_QreadCookie() + ' ' + qid + 'S' + value + ' ');
		}
	} else {
		cr2007_QcreateCookie(qid + 'S' + value + ' ');
	}
}

function cr2007_QqidExists(qid) {
	if (cr2007_QcheckCookie()) {
		var tmp = cr2007_QreadCookie();
		var data = tmp.split(" ");
		
		for (var i=0; i < data.length; i++) {
			var values = data[i].split('S');
			if (qid == values[0]) return true;
		}
	}
	return false;
}

function cr2007_QcreateCookie(value) {
	var date = new Date();
	date.setTime(date.getTime()+(cr2007_QcookieLifetime*24*60*60*1000));
	var expires = "; expires="+date.toGMTString();
	
	document.cookie = cr2007_QcookieName+"="+value+expires+"; path=/";
}

function cr2007_QreadCookie() {
	var nameEQ = cr2007_QcookieName + "=";
	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;
}

function cr2007_QeraseCookie() {
	var date = new Date();
	date.setTime(date.getTime()+((-1)*24*60*60*1000));
	var expires = "; expires="+date.toGMTString();

	document.cookie = cr2007_QcookieName+"="+expires+"; path=/";
}

function cr2007_QcheckCookie() {
	if (cr2007_QreadCookie() == null) {
		return false;
	} else {
		return true;
	}
}

function cr2007_PopupUpdateCookie(value) {
	return true;
}


