
// PoliticsWeb v3.0
// Copyright Michael Dent
// michael@politicsweb.co.uk

// 1. Menu
// 2. Ajax framework
// 3. Comments
// 4. Show/hide full post
// 5. Lookup postcode


// 1. Menu

function openMenu(id) {
	if (document.getElementById('sub-' + id).style.left == '') {
		document.getElementById('sub-' + id).style.left = findPosX(document.getElementById('menu-' + id)) + 'px';
	}
	document.getElementById('sub-' + id).style.display = 'block';
	document.getElementById('menu-' + id).classid += ' cur';
	if (typeof closetimer != 'undefined') {
		if (typeof lastopened != 'undefined') {
			if (lastopened == id) clearTimeout(closetimer);
		}
	}
	lastopened = id;
}

function closeMenu(id) {
	closetimer = setTimeout("document.getElementById('sub-" + id + "').style.display='';oldclass=document.getElementById('menu-" + id + "').classid;newclass=oldclass.replace(/cur/g,'');document.getElementById('menu-" + id + "').classid=newclass;", 100);
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while(1) {
			curleft += obj.offsetLeft;
			if(!obj.offsetParent) break;
			obj = obj.offsetParent;
		}
	} else if (obj.x) {
		curleft += obj.x;
	}
	return curleft;
}


// 2. Ajax framework

function createAjax(page) {
	xmlHttp = ((window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0"));
	xmlHttp.open("POST", page, true);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
}


// 3. Comments

function comments(reference) {
	el = document.getElementById(reference);
	el2 = document.getElementById('post-' + reference);
	if (el.style.display == 'block') {
		el.style.display = '';
		el2.style.display = '';
	} else {
		el.style.display = 'block';
		el2.style.display = 'block';
	}
}

function postComment(reference,details) {
	el = document.getElementById('post-' + reference);
	html  = '<form onsubmit="ajaxComment(\'' + reference + '\',\'' + details + '\'); return false;">';
	html += 'Name:<br /><input type="text" id="comment-name" /><br /><br />Comment:<br /><textarea id="comment"></textarea><br /><br />';
	if (userEmailAuthentication) {
		html += 'Email (not public):<br /><input type="text" id="comment-email" /><br /><br />';
	} else {
		html += '<input type="hidden" id="comment-email" value="n/a" />';
	}
	if (userPostcodeLookup) {
		html += 'Postcode (not public):<br /><input type="text" id="comment-postcode" /><br /><br />';
	} else {
		html += '<input type="hidden" id="comment-postcode" value="n/a" />';
	}
	html += '<input type="submit" value="Post comment" id="btn-post"></form>';
	el.innerHTML = html;
	document.getElementById('comment-name').focus();
}

function deleteComment(id) {
	createAjax("/calls/comment.php");
	xmlHttp.onreadystatechange = function() {
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			if (xmlHttp.responseText == 'success') {
				child = document.getElementById('comment-' + id);
				parent = child.parentNode;
				parent.removeChild(child);
			}
		}
	};
	vars = 'delete=' + id;
	xmlHttp.send(vars);
}

function ajaxComment(reference,details) {
	theReference = reference;
	theDetails = details;
	if (userPostcodeLookup) {
		lookupPostcode(document.getElementById('comment-postcode').value,'commentConstituencyReceived');
	} else {
		doSubmitForm();
	}
}

function commentConstituencyReceived(r) {
	document.getElementById('comment-postcode').value = r.name;
	doAjaxComment();
}

function doAjaxComment() {
	reference = theReference;
	details = theDetails;
	name = document.getElementById('comment-name').value;
	comment = document.getElementById('comment').value;
	email = document.getElementById('comment-email').value;
	postcode = document.getElementById('comment-postcode').value;
	document.getElementById('btn-post').disabled = true;
	createAjax("/calls/comment.php");
	xmlHttp.onreadystatechange = function() {
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			if (xmlHttp.responseText == 'success') {
				document.getElementById(reference).innerHTML += '<p>' + comment + '<br />- <strong>' + name + '</strong></p>';
				el = document.getElementById('post-' + reference);
				el.innerHTML = '<a href="javascript:postComment(\'' + reference + '\',\'' + details + '\');">Post a comment</a>';
			} else if (xmlHttp.responseText == 'approval') {
				alert('Your comment has been received and saved, and will appear on the website shortly subject to approval.');
				el = document.getElementById('post-' + reference);
				el.innerHTML = '<a href="javascript:postComment(\'' + reference + '\',\'' + details + '\');">Post a comment</a>'
			} else if (xmlHttp.responseText == 'email') {
				alert('Thank you for your comment. As a final step, please click the link in your email to confirm your email address.');
				el = document.getElementById('post-' + reference);
				el.innerHTML = '<a href="javascript:postComment(\'' + reference + '\',\'' + details + '\');">Post a comment</a>'
			} else if (xmlHttp.responseText == 'politicsweb') {
				alert('Please do not post a comment with a name containing \'PoliticsWeb\'.');
				el = document.getElementById('post-' + reference);
				el.innerHTML = '<a href="javascript:postComment(\'' + reference + '\',\'' + details + '\');">Post a comment</a>'
			} else {
				alert(xmlHttp.responseText);
			}
		}
	};
	comment = comment.replace('&','###');
	vars = 'url=' + window.location + '&reference=' + reference + '&details=' + details + '&name=' + name + '&comment=' + comment + '&email=' + email + '&postcode=' + postcode;
	xmlHttp.send(vars);
}


// 4. Show/hide full post

function fullPost(id) {
	document.getElementById('short-post-' + id).style.display = 'none';
	document.getElementById('full-post-' + id).style.display = 'block';
}

function shortPost(id) {
	document.getElementById('full-post-' + id).style.display = 'none';
	document.getElementById('short-post-' + id).style.display = 'block';
}


// 5. Lookup postcode

function lookupPostcode(pc,callback) {
	var s = document.createElement('script');
	var url = 'http://www.theyworkforyou.com/api/getConstituency?key=BXJpE7BgtQM6DXMS84C2eGDn&callback=' + callback + '&postcode=' + pc;
	s.setAttribute('src', url);
	s.setAttribute('type', 'text/javascript');
	document.getElementsByTagName('head')[0].appendChild(s);
}


function populateTags() {
	document.getElementById('tags').innerHTML = '';
	tags = document.getElementById('param1').value.split('/');
	for (i=0; i<tags.length; i++) {
		parts = tags[i].split('###');
		if (parts[1] != null) {
			display = parts[0] + ' (' + parts[1] + ')';
		} else {
			display = parts[0];
		}
		moveUp = '';
		if (i != 0) moveUp = '<a href="javascript:moveTagUp(' + i + ');"><img src="http://files.politicsweb.co.uk/move-up.gif" class="move-up" /></a>';
		if (display != '') document.getElementById('tags').innerHTML += '<div>' + display + '<a href="javascript:deleteTag(' + i + ');"><img src="http://files.politicsweb.co.uk/icn-delete.png" class="delete" /></a>' + moveUp + '</div><br />';
	}
}

function deleteTag(num) {
	tags = document.getElementById('param1').value.split('/');
	tags.splice(num,1);
	if (tags[0] == '') tags.splice(0,1);
	tags = tags.join('/');
	document.getElementById('param1').value = tags;
	populateTags();
}

function moveTagUp(num) {
	tags = document.getElementById('param1').value.split('/');
	tag1 = tags[num];
	tag2 = tags[num-1];
	tags[num] = tag2;
	tags[num-1] = tag1;
	tags = tags.join('/');
	document.getElementById('param1').value = tags;
	populateTags();
}

function addTag() {
	loadPopup('<form onsubmit="doAddTag();return false;"><p>Tag:<br /><input type="text" id="add-tag" /></p><p>Label (optional):<br /><input type="text" id="add-tag-label" /></p><p>Position:<br /><select id="add-tag-position"><option value="top">Top of list</option><option value="bottom">Bottom of list</option></select></p><p><input type="submit" value="Add tag" /></p></form>');
	stylePopup(218,220);
	document.getElementById('add-tag').focus();
}

function doAddTag() {
	toAdd = document.getElementById('add-tag').value;
	if (document.getElementById('add-tag-label').value != '') toAdd += '###' + document.getElementById('add-tag-label').value;
	tags = document.getElementById('param1').value.split('/');
	if (document.getElementById('add-tag-position').value == 'top') {
		tags.unshift(toAdd);
	} else if (document.getElementById('add-tag-position').value == 'bottom') {
		tags.push(toAdd);
	}
	if (tags[0] == '') tags.splice(0,1);
	tags = tags.join('/');
	document.getElementById('param1').value = tags;
	populateTags();
	closePopup();
}



//Settings

userEmailAuthentication = false;
userPostcodeLookup = true;