
// 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 seeOlder(content,show,more) {
	createAjax("/calls/module.php?x=blog");
	more = more-10;
	xmlHttp.onreadystatechange = function() {
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			document.getElementById('see-older').innerHTML = xmlHttp.responseText;
			document.getElementById('see-older-link').href = 'javascript:seeOlder(' + content + ',' + newshow + ',' + more + ');';
			document.getElementById('see-older-link').innerHTML = 'See older posts (' + more + ' more)';
			document.getElementById('see-older-link').style.display = '';
			document.getElementById('see-older-loading').style.display = '';
		}
	};
	xmlHttp.send('content=' + content + '&show=' + show);
	newshow = show+10;
	document.getElementById('see-older-link').style.display = 'none';
	document.getElementById('see-older-loading').style.display = 'block';
}

function sendUserMap() {
	createAjax("/calls/module.php?x=map");
	xmlHttp.onreadystatechange = function() {
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			if (xmlHttp.responseText == 'success') {
				window.location.reload();
			} else if (xmlHttp.responseText == 'approval') {
				alert('Your map post has been received and saved, and will appear on the website shortly subject to approval.');
				window.location.reload();
			} else {
				alert(xmlHttp.responseText);
			}
		}
	};
	els = document.getElementById('add-issue').elements;
	vars = '';
	for (var i = 0; i < els.length; i++) {
		if (els[i].name != '') vars += els[i].name + "=" + els[i].value + '&';
	}
	vars = vars.slice(0,(vars.length-1)); 
	xmlHttp.send(vars);
}

function deleteMapPost(id) {
	createAjax("/calls/module.php?x=map");
	xmlHttp.onreadystatechange = function() {
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			if (xmlHttp.responseText == 'success') {
				window.location.reload();
			}
		}
	};
	vars = 'delete=' + id;
	xmlHttp.send(vars);
}

function setIcons() {
	icons = new Array();
	icons['blue-marker'] = new GIcon();
	icons['blue-marker'].image = "/images/marker.png";
	icons['blue-marker'].iconSize = new GSize(20, 34);
	icons['blue-marker'].iconAnchor = new GPoint(9, 34);
	icons['red-exclamation'] = new GIcon();
	icons['red-exclamation'].image = "/images/exclamation.png";
	icons['red-exclamation'].iconSize = new GSize(32, 32);
	icons['red-exclamation'].iconAnchor = new GPoint(9, 34);
}

function addMarker() {
	window.onmousemove = mouseFollower;
	document.getElementById("add-marker-img").style.opacity = '0.3';
	document.getElementById("add-marker-img").style.filter = 'alpha(opacity=30)';
	img = new Image();
	img.src = '/images/marker-ticked.png';
	GEvent.addListener(gmap, "click", function(overlay, latlng) {
		if (document.getElementById("location").value == '') {
			markericon = icons['blue-marker'];
			mymarker = new GMarker(latlng,markericon);
			gmap.addOverlay(mymarker);
			document.getElementById('mouse-follower').style.display = '';
			window.onmousemove = '';
			document.getElementById("location").value = latlng;
			document.getElementById("add-marker-img").onclick = '';
			document.getElementById("add-marker-img").src = '/images/marker-ticked.png';
			document.getElementById("add-marker-img").style.opacity = '';
			document.getElementById("add-marker-img").style.filter = '';
		}
	});
}

function addMarkerAdmin() {
	div = document.getElementById('map');
	div.style.position = 'absolute';
	div.style.top = '0';
	div.style.left = '0';
	div.style.width = '100%';
	div.style.height = '100%';
	div.style.zIndex = '8';
	document.getElementById('icon').style.visibility = 'hidden';
	load();
	window.onmousemove = mouseFollower;
	document.getElementById("add-marker-img").style.opacity = '0.3';
	document.getElementById("add-marker-img").style.filter = 'alpha(opacity=30)';
	img = new Image();
	img.src = '/images/marker-ticked.png';
	GEvent.addListener(gmap, "click", function(overlay, latlng) {
		if (document.getElementById("location").value == '') {
			markericon = icons['blue-marker'];
			mymarker = new GMarker(latlng,markericon);
			gmap.addOverlay(mymarker);
			document.getElementById('mouse-follower').style.display = '';
			window.onmousemove = '';
			document.getElementById("location").value = latlng;
			document.getElementById("add-marker-img").onclick = '';
			document.getElementById("add-marker-img").src = '/images/marker-ticked.png';
			document.getElementById("add-marker-img").style.opacity = '';
			document.getElementById("add-marker-img").style.filter = '';
			setTimeout("document.getElementById('map').style.display = 'none';",500);
			setTimeout("document.getElementById('icon').style.visibility = '';",500);
		}
	});
}


function createMarker(lat,lng,id,icon) {
	latlng = new GLatLng(lat,lng);
	markericon = icons[icon];
	mymarker = new GMarker(latlng,markericon);
	GEvent.addListener(mymarker, "click", function() {
		window.location.href = '#' + id;
		document.getElementById('map-post-' + id).style.backgroundColor = '#fffde5';
		setTimeout("document.getElementById('map-post-" + id + "').style.backgroundColor = ''",800);
	});
	gmap.addOverlay(mymarker);
}

function mouseFollower(e) {
	document.getElementById('mouse-follower').style.display = 'block';
	img = document.getElementById('mouse-follower');
	var mouseX = 0;
	var mouseY = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		mouseX = e.pageX;
		mouseY = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		mouseX = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		mouseY = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	mouseX -= 10;
	mouseY -= 34;
	img.style.left = mouseX + 'px';
	img.style.top = mouseY + 'px';
}



function newsletterSubscribe() {
	createAjax("/calls/module.php?x=newsletter");
	xmlHttp.onreadystatechange = function() {
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			if (xmlHttp.responseText == 'success') {
				document.getElementById('newsletter-subscribe').innerHTML = '<strong>Thank you!</strong> You have been successfully subscribed to the newsletter.';
			} else {
				alert(xmlHttp.responseText);
			}
		}
	};
	els = document.getElementById('newsletter-subscribe').elements;
	vars = '';
	for (var i = 0; i < els.length; i++) {
		if (els[i].name != '') vars += els[i].name + "=" + els[i].value + '&';
	}
	vars = vars.slice(0,(vars.length-1)); 
	xmlHttp.send(vars);
}

function unsubscribePerson(id) {
	createAjax("/calls/module.php?x=newsletter");
	xmlHttp.onreadystatechange = function() { 
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			document.getElementById('p' + xmlHttp.responseText).parentNode.removeChild(document.getElementById('p' + xmlHttp.responseText));
		}
	};
	vars = 'delete=' + id;
	xmlHttp.send(vars);
}

function niceDuration(secs) {
	if (secs > 59) {
		mins = secs/60;
		if (mins > 59) {
			hours = Math.floor(mins/60);
			mins = Math.floor(mins-(hours*60));
			time = hours + " hours " + mins + " mins";
		} else {
			mins = mins.toFixed(1);
			time = mins + " minutes";
		}
	} else {
		time = secs + " seconds";
	}
	return time;
}

function startSend() {
	emailsRemaining = totalEmails;
	readyToFinish = false;
	document.getElementById('send-newsletter-button').style.display = 'none';
	document.getElementById('progress-bar').style.display = 'block';
	document.getElementById('sending-newsletter').style.display = 'block';
	sendMessage(1);
}

function sendMessage(sendNum) {
	document.getElementById('sending-newsletter-h3').style.visibility = 'hidden';
	setTimeout("document.getElementById('sending-newsletter-h3').style.visibility=''",100);
	emailsRemaining--;
	if (emailsRemaining == 0) readyToFinish = true;
	timeRemaining = emailsRemaining * sendDelay;
	document.getElementById('time-remaining').innerHTML = niceDuration(timeRemaining);
	barWidth = (totalEmails-emailsRemaining)/totalEmails*100;
	barWidth = barWidth.toFixed(1);
	document.getElementById('progress-bar-inner').style.width = barWidth + '%';
	createAjax("/calls/module.php?x=newsletter");
	xmlHttp.onreadystatechange = function() { 
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			if (readyToFinish) sendingComplete();
		}
	};
	isLast = (readyToFinish) ? 1 : 0;
	vars = 'do-send=' + newsletterId + '&send-to=' + sendTo + '&send-to-list=' + sendToList + '&send-num=' + sendNum + '&is-last=' + isLast;
	xmlHttp.send(vars);
	sendNum++;
	if (!readyToFinish) setTimeout("sendMessage("+sendNum+")",sendDelay*1000);
}

function sendingComplete() {
	document.getElementById('sending-newsletter').style.display = '';
	document.getElementById('progress-bar').style.display = '';
	document.getElementById('newsletter-sent').style.display = 'block';
}



function sendPayPalForm() {
	createAjax("/calls/module.php?x=paypal");
	els = document.getElementById('paypal-form').elements;
	vars = '';
	for (i=0;i<els.length;i++) {
		if (els[i].value == '' && els[i].name != 'company' && els[i].name != 'amount') {
			alert('Please ensure that all fields are filled in');
			return false;
		}
		if (els[i].name != '') vars += els[i].name + "=" + els[i].value + '&';
	}
	vars = vars.slice(0,(vars.length-1)); 
	xmlHttp.send(vars);
	document.getElementById('paypal-started').innerHTML = '<p><em>Your information has been successfully saved in our database. Please complete the PayPal transaction that has opened in a new window. Once you have completed this, your transaction will be complete.</em></p>';
	document.getElementById('paypal-started').style.display = 'block';
	document.getElementById('paypal-form').style.visibility = 'hidden';
	return true;
}

function updatePrice(price,discount) {
	document.getElementById('paypal-subscription-price').value = price;
	if (discount) {
		document.getElementById('paypal-item-name').value += ' (' + document.getElementById('discount-description').value + ')';
	} else {
		document.getElementById('paypal-item-name').value = document.getElementById('paypal-item-name').value.replace(' (' + document.getElementById('discount-description').value + ')','');
	}
}

function updateAmount(amount) {
	document.getElementById('paypal-amount').value = amount;
}





//Settings

userEmailAuthentication = true;
userPostcodeLookup = true;