
// PoliticsWeb v4.0
// Copyright Michael Dent
// www.politicsweb.co.uk

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


// 1. Menu

$(function() {
	var disappear;
	$('#menu a')
		.mouseover(function () {
			clearTimeout(disappear);
			menuId = $(this).attr('id');
			submenu = menuId.replace('menu','sub');
			$('.submenu').css('display', 'none');
			$('#' + submenu).css('display', 'block');
			position = $('#' + menuId).position();
			$('#' + submenu).css('left',position.left);
		})
		.mouseout(function () {
			menuId = $(this).attr('id');
			submenu = menuId.replace('menu','sub');
			disappear = setTimeout(function () { $('#' + submenu).css('display', 'none'); },400);
		});
	$('.submenu')
		.mouseover(function () { 
			submenu = $(this).attr('id');
			menuId = submenu.replace('sub','menu');
			$('#' + menuId).trigger('mouseover');
		})
		.mouseout(function () {
			submenu = $(this).attr('id');
			menuId = submenu.replace('sub','menu');
			$('#' + menuId).trigger('mouseout');
		});
});


// 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;">';
	prefill = '';
	if (isAdmin) prefill = siteTitle;
	html += 'Name:<br /><input type="text" id="comment-name" value="' + prefill + '" /><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 {
		doAjaxComment();
	}
}

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. 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 if (xmlHttp.responseText == 'sitetitle') {
				alert('Please do not post a comment with a name containing \'' + siteTitle + '\'.');
				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);
}


// 6. General

function isNumeric(input) {
	return (input - 0) == input && input.length > 0;
}


function submitForm(formid) {
	theFormId = formid;
	if (userPostcodeLookup && document.getElementById('postcode_lookup') != undefined) {
		els = document.getElementById('form'+formid).elements;
		for (i=0;i<els.length;i++) {
			if (els[i].name == 'field' + document.getElementById('postcode_lookup').value) {
				pc = els[i].value;
			}
		}
		lookupPostcode(pc,'formConstituencyReceived');
	} else {
		doSubmitForm();
	}
}

function formConstituencyReceived(r) {
	document.getElementById('postcode_lookup').value = r.name;
	doSubmitForm();
}

function doSubmitForm() {
	formid = theFormId;
	createAjax("/calls/module.php?x=form");
	xmlHttp.onreadystatechange = function() {
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			responseText = xmlHttp.responseText;
			if (responseText == 'security') {
				alert('Sorry, you filled the security form out incorrectly. Please check your answer and try again.');
			} else if (responseText == 'verify') {
				alert('As this is your first submission on this website, we\'ve sent a confirmation email to your email address.\n\nPlease click the link in that email, and then return to this page and resubmit this form.');
			} else if (responseText.substr(0,13) == 'JAVASCRIPT---') {
				responseText = responseText.replace('JAVASCRIPT---','');
				eval(responseText);
			} else {
				thisForm.innerHTML = responseText;
			}
		}
	};
	thisForm = document.getElementById('form'+formid);
	els = thisForm.elements;
	fields = [];
	for (i=0;i<els.length;i++) {
		if (els[i].name != 'postcode_lookup') {
			if (els[i].type == 'checkbox' || els[i].type == 'radio') {
				if (els[i].checked) {
					existed = false;
					for (j=0;j<fields.length;j++) {
						if (fields[j][0] == els[i].name) {
							value = fields[j][1];
							value = value.slice(0,(value.length-2)); 
							value += ',' + els[i].value + '}}';
							fields[j][1] = value;
							existed = true;
						}
					}
					if (!existed) {
						fields.push([els[i].name,'{{'+els[i].value+'}}']);
					}
				}
			} else {
				theClass = els[i].className;
				if (els[i].value == '' && theClass.indexOf('required') != -1) {
					alert('Please fill in all required fields');
					els[i].focus();
					return false;
				}
				fields.push([els[i].name,els[i].value]);
			}
		}
	}
	vars = '';
	for (i=0;i<fields.length;i++) {
		vars += fields[i][0] + '=' + encodeURIComponent(fields[i][1]) + '&';
	}
	if (userPostcodeLookup && document.getElementById('postcode_lookup') != undefined) vars += 'postcode_lookup=' + document.getElementById('postcode_lookup').value + '&';
	vars = vars.slice(0,(vars.length-1)); 
	xmlHttp.send(vars);
}

function renameField(fieldName,fieldId) {
	loadPopup('<form onsubmit="doRenameField(\'' + fieldId + '\');return false;"><p>Rename field <strong>' + fieldName + '</strong>:</p><p><input type="text" value="' + fieldName + '" id="rename-field" /></p><p><input type="submit" value="Rename field" /></p></form>');
	stylePopup(220,123);
	document.getElementById('rename-field').select();
}

function doRenameField(fieldId) {
	newName = document.getElementById('rename-field').value;
	if (newName != null) {
		loadPopup('<p id="loading"><img src="http://files.politicsweb.co.uk/loading.gif" /></p>');
		stylePopup(50,50);
		createAjax("/calls/module.php?x=form");
		xmlHttp.onreadystatechange = function() {
			if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
				closePopup();
				window.location.reload();
			}
		};
		xmlHttp.send('rename-field=' + newName + '&field=' + fieldId);
	}
}

function editOptions(fieldId,fieldName,options) {
	loadPopup('<form onsubmit="doEditOptions(\'' + fieldId + '\');return false;"><p>Edit options for <strong>' + fieldName + '</strong> (put each option on a new line):</p><p><textarea id="edit-options" style="width:350px;height:200px;">' + options.replace(/,/g,'\n') + '</textarea></p><p><input type="submit" value="Update" /></p></form>');
	stylePopup(390,300);
	document.getElementById('edit-options').focus();
}

function doEditOptions(fieldId) {
	newOptions = document.getElementById('edit-options').value;
	loadPopup('<p id="loading"><img src="http://files.politicsweb.co.uk/loading.gif" /></p>');
	stylePopup(50,50);
	createAjax("/calls/module.php?x=form");
	xmlHttp.onreadystatechange = function() {
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
			closePopup();
			window.location.reload();
		}
	};
	xmlHttp.send('edit-options=' + newOptions + '&field=' + fieldId);
}

function loadScript() {
	var script = document.createElement("script");
	script.type = "text/javascript";
	script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialise";
	document.body.appendChild(script);
}

function seeOlder(content,show,increment,more) {
	createAjax("/calls/module.php?x=blog");
	more = more-increment;
	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 + ',' + increment + ',' + more + ');';
			seeOlderLink = document.getElementById('see-older-link').innerHTML;
			oldMore = more+increment;
			seeOlderLink = seeOlderLink.replace('(' + oldMore + ' more)','(' + more + ' more)');
			document.getElementById('see-older-link').innerHTML = seeOlderLink;
			document.getElementById('see-older-link').style.display = '';
			document.getElementById('see-older-loading').style.display = '';
			if (more < 1) document.getElementById('see-older-link').style.display = 'none';
		}
	};
	xmlHttp.send('content=' + content + '&show=' + show + '&initial=' + increment);
	newshow = show+increment;
	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 google.maps.MarkerImage('/images/marker.png', new google.maps.Size(20, 34), null, new google.maps.Point(9, 34));
	icons['red-marker'] = new google.maps.MarkerImage('/images/marker-red.png', new google.maps.Size(20, 34), null, new google.maps.Point(9, 34));
	icons['red-exclamation'] = new google.maps.MarkerImage('/images/exclamation.png', new google.maps.Size(32, 32), null, new google.maps.Point(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';
	google.maps.event.addListener(map, "click", function(event) {
		if (document.getElementById("location").value == '') {
			newmarker = new google.maps.Marker({
				position: event.latLng,
				map: map, 
				icon: icons['blue-marker']
			});
			document.getElementById('mouse-follower').style.display = '';
			window.onmousemove = '';
			document.getElementById("location").value = event.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() {
	document.getElementById('admin-map-fields').style.display = 'none';
	document.getElementById('map').style.visibility = 'visible';
	document.getElementById('icon').style.visibility = 'hidden';
	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';
	google.maps.event.addListener(map, "click", function(event) {
		if (document.getElementById("location").value == '') {
			newmarker = new google.maps.Marker({
				position: event.latLng,
				map: map, 
				icon: icons['blue-marker']
			});
			document.getElementById('mouse-follower').style.display = '';
			window.onmousemove = '';
			document.getElementById("location").value = event.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.visibility = '';",500);
			setTimeout("document.getElementById('admin-map-fields').style.display = '';",500);
			setTimeout("document.getElementById('icon').style.visibility = '';",500);
		}
	});
}


function createMarker(lat,lng,id,icon) {
	markers[id] = new google.maps.Marker({
		position: new google.maps.LatLng(lat,lng), 
		map: map, 
		icon: icons[icon]
	});
	google.maps.event.addListener(markers[id], "click", function() {
		window.location.href = '#' + id;
		divName = (document.getElementById('map-post-' + id)) ? 'map-post-' + id : 'blog-post-' + id;
		document.getElementById(divName).style.backgroundColor = '#fffde5';
		setTimeout("document.getElementById('" + divName + "').style.backgroundColor = ''",800);
	});
}

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';
}

var datePickerDivID = "datepicker";
var iFrameDivID = "datepickeriframe";

var dayArrayShort = new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
var dayArrayMed = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
var dayArrayLong = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var monthArrayShort = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
var monthArrayMed = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec');
var monthArrayLong = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

var defaultDateSeparator = "/";
var defaultDateFormat = "dmy"
var dateSeparator = defaultDateSeparator;
var dateFormat = defaultDateFormat;

function displayDatePicker(dateFieldName, displayBelowThisObject, dtFormat, dtSep) {
	var targetDateField = document.getElementsByName(dateFieldName).item(0);
	if (!displayBelowThisObject) displayBelowThisObject = targetDateField;
	if (dtSep) dateSeparator = dtSep;
	else dateSeparator = defaultDateSeparator;
	if (dtFormat) dateFormat = dtFormat;
	else dateFormat = defaultDateFormat;
	var x = displayBelowThisObject.offsetLeft;
	var y = displayBelowThisObject.offsetTop + displayBelowThisObject.offsetHeight;
	var parent = displayBelowThisObject;
	while (parent.offsetParent) {
		parent = parent.offsetParent;
		x += parent.offsetLeft;
		y += parent.offsetTop;
	}

	drawDatePicker(targetDateField, x, y);
}

function drawDatePicker(targetDateField, x, y) {
	var dt = getFieldDate(targetDateField.value);
	if (!document.getElementById(datePickerDivID)) {
		var newNode = document.createElement("div");
		newNode.setAttribute("id", datePickerDivID);
		newNode.setAttribute("class", "dpDiv");
		newNode.setAttribute("style", "visibility: hidden;");
		document.body.appendChild(newNode);
	}
	var pickerDiv = document.getElementById(datePickerDivID);
	pickerDiv.style.position = "absolute";
	pickerDiv.style.left = x + "px";
	pickerDiv.style.top = y + "px";
	pickerDiv.style.visibility = (pickerDiv.style.visibility == "visible" ? "hidden" : "visible");
	pickerDiv.style.display = (pickerDiv.style.display == "block" ? "none" : "block");
	pickerDiv.style.zIndex = 10000;
	refreshDatePicker(targetDateField.name, dt.getFullYear(), dt.getMonth(), dt.getDate());
}

function refreshDatePicker(dateFieldName, year, month, day) {
	var thisDay = new Date();

	if ((month >= 0) && (year > 0)) {
		thisDay = new Date(year, month, 1);
	} else {
		day = thisDay.getDate();
		thisDay.setDate(1);
	}
	var crlf = "\r\n";
	var TABLE = "<table cols=7 class='dpTable'>" + crlf;
	var xTABLE = "</table>" + crlf;
	var TR = "<tr class='dpTR'>";
	var TR_title = "<tr class='dpTitleTR'>";
	var TR_days = "<tr class='dpDayTR'>";
	var TR_todaybutton = "<tr class='dpTodayButtonTR'>";
	var xTR = "</tr>" + crlf;
	var TD = "<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' "; // leave this tag open, because we'll be adding an onClick event
	var TD_title = "<td colspan=5 class='dpTitleTD'>";
	var TD_buttons = "<td class='dpButtonTD'>";
	var TD_todaybutton = "<td colspan=7 class='dpTodayButtonTD'>";
	var TD_days = "<td class='dpDayTD'>";
	var TD_selected = "<td class='dpDayHighlightTD' onMouseOut='this.className=\"dpDayHighlightTD\";' onMouseOver='this.className=\"dpTDHover\";' "; // leave this tag open, because we'll be adding an onClick event
	var xTD = "</td>" + crlf;
	var DIV_title = "<div class='dpTitleText'>";
	var DIV_selected = "<div class='dpDayHighlight'>";
	var xDIV = "</div>";
	var html = TABLE;
	html += TR_title;
	html += TD_buttons + getButtonCode(dateFieldName, thisDay, -1, "&lt;") + xTD;
	html += TD_title + DIV_title + monthArrayLong[thisDay.getMonth()] + " " + thisDay.getFullYear() + xDIV + xTD;
	html += TD_buttons + getButtonCode(dateFieldName, thisDay, 1, "&gt;") + xTD;
	html += xTR;
	html += TR_days;
	for (i = 0; i < dayArrayShort.length; i++)
	html += TD_days + dayArrayShort[i] + xTD;
	html += xTR;
	html += TR;
	for (i = 0; i < thisDay.getDay(); i++)
	html += TD + "&nbsp;" + xTD;
	do {
		dayNum = thisDay.getDate();
		TD_onclick = " onclick=\"updateDateField('" + dateFieldName + "', '" + getDateString(thisDay) + "');\">";
		if (dayNum == day) html += TD_selected + TD_onclick + DIV_selected + dayNum + xDIV + xTD;
		else html += TD + TD_onclick + dayNum + xTD;
		if (thisDay.getDay() == 6) html += xTR + TR;
		thisDay.setDate(thisDay.getDate() + 1);
	} while (thisDay.getDate() > 1)
	if (thisDay.getDay() > 0) {
		for (i = 6; i > thisDay.getDay(); i--)
		html += TD + "&nbsp;" + xTD;
	}
	html += xTR;
	var today = new Date();
	var todayString = "Today is " + dayArrayMed[today.getDay()] + ", " + monthArrayMed[today.getMonth()] + " " + today.getDate();
	html += TR_todaybutton + TD_todaybutton;
	html += "<button class='dpTodayButton' onClick='refreshDatePicker(\"" + dateFieldName + "\");'>this month</button> ";
	html += "<button class='dpTodayButton' onClick='updateDateField(\"" + dateFieldName + "\");'>close</button>";
	html += xTD + xTR;
	html += xTABLE;
	document.getElementById(datePickerDivID).innerHTML = html;
	adjustiFrame();
}

function getButtonCode(dateFieldName, dateVal, adjust, label) {
	var newMonth = (dateVal.getMonth() + adjust) % 12;
	var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
	if (newMonth < 0) {
		newMonth += 12;
		newYear += -1;
	}

	return "<button class='dpButton' onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");'>" + label + "</button>";
}

function getDateString(dateVal) {
	var dayString = "00" + dateVal.getDate();
	var monthString = "00" + (dateVal.getMonth() + 1);
	dayString = dayString.substring(dayString.length - 2);
	monthString = monthString.substring(monthString.length - 2);

	switch (dateFormat) {
	case "dmy":
		return dayString + dateSeparator + monthString + dateSeparator + dateVal.getFullYear();
	case "ymd":
		return dateVal.getFullYear() + dateSeparator + monthString + dateSeparator + dayString;
	case "mdy":
	default:
		return monthString + dateSeparator + dayString + dateSeparator + dateVal.getFullYear();
	}
}

function getFieldDate(dateString) {
	var dateVal;
	var dArray;
	var d, m, y;

	try {
		dArray = splitDateString(dateString);
		if (dArray) {
			switch (dateFormat) {
			case "dmy":
				d = parseInt(dArray[0], 10);
				m = parseInt(dArray[1], 10) - 1;
				y = parseInt(dArray[2], 10);
				break;
			case "ymd":
				d = parseInt(dArray[2], 10);
				m = parseInt(dArray[1], 10) - 1;
				y = parseInt(dArray[0], 10);
				break;
			case "mdy":
			default:
				d = parseInt(dArray[1], 10);
				m = parseInt(dArray[0], 10) - 1;
				y = parseInt(dArray[2], 10);
				break;
			}
			dateVal = new Date(y, m, d);
		} else if (dateString) {
			dateVal = new Date(dateString);
		} else {
			dateVal = new Date();
		}
	} catch (e) {
		dateVal = new Date();
	}

	return dateVal;
}

function splitDateString(dateString) {
	var dArray;
	if (dateString.indexOf("/") >= 0) dArray = dateString.split("/");
	else if (dateString.indexOf(".") >= 0) dArray = dateString.split(".");
	else if (dateString.indexOf("-") >= 0) dArray = dateString.split("-");
	else if (dateString.indexOf("\\") >= 0) dArray = dateString.split("\\");
	else dArray = false;

	return dArray;
}

function updateDateField(dateFieldName, dateString) {
	var targetDateField = document.getElementsByName(dateFieldName).item(0);
	if (dateString) targetDateField.value = dateString;
	var pickerDiv = document.getElementById(datePickerDivID);
	pickerDiv.style.visibility = "hidden";
	pickerDiv.style.display = "none";
	adjustiFrame();
	targetDateField.focus();
	if ((dateString) && (typeof (datePickerClosed) == "function")) datePickerClosed(targetDateField);
}

function adjustiFrame(pickerDiv, iFrameDiv) {
	var is_opera = (navigator.userAgent.toLowerCase().indexOf("opera") != -1);
	if (is_opera) return;

	try {
		if (!document.getElementById(iFrameDivID)) {
			var newNode = document.createElement("iFrame");
			newNode.setAttribute("id", iFrameDivID);
			newNode.setAttribute("src", "javascript:false;");
			newNode.setAttribute("scrolling", "no");
			newNode.setAttribute("frameborder", "0");
			document.body.appendChild(newNode);
		}

		if (!pickerDiv) pickerDiv = document.getElementById(datePickerDivID);
		if (!iFrameDiv) iFrameDiv = document.getElementById(iFrameDivID);

		try {
			iFrameDiv.style.position = "absolute";
			iFrameDiv.style.width = pickerDiv.offsetWidth;
			iFrameDiv.style.height = pickerDiv.offsetHeight;
			iFrameDiv.style.top = pickerDiv.style.top;
			iFrameDiv.style.left = pickerDiv.style.left;
			iFrameDiv.style.zIndex = pickerDiv.style.zIndex - 1;
			iFrameDiv.style.visibility = pickerDiv.style.visibility;
			iFrameDiv.style.display = pickerDiv.style.display;
		} catch (e) {}

	} catch (ee) {}

}

function seeOlder(content,show,increment,more) {
	createAjax("/calls/module.php?x=downloads");
	more = more-increment;
	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 + ',' + increment + ',' + more + ');';
			seeOlderLink = document.getElementById('see-older-link').innerHTML;
			oldMore = more+increment;
			seeOlderLink = seeOlderLink.replace('(' + oldMore + ' more)','(' + more + ' more)');
			document.getElementById('see-older-link').innerHTML = seeOlderLink;
			document.getElementById('see-older-link').style.display = '';
			document.getElementById('see-older-loading').style.display = '';
			if (more < 1) document.getElementById('see-older-link').style.display = 'none';
		}
	};
	xmlHttp.send('content=' + content + '&show=' + show + '&initial=' + increment);
	newshow = show+increment;
	document.getElementById('see-older-link').style.display = 'none';
	document.getElementById('see-older-loading').style.display = 'block';
}





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 startSend() {
	emailsRemaining = totalEmails;
	readyToFinish = false;
	document.getElementById('send-newsletter-button').style.display = 'none';
	document.getElementById('sending-newsletter').style.display = 'block';
	sendMessage(1);
}

function sendMessage(sendNum) {
	if (emailsRemaining == 0) readyToFinish = true;
	updateRemaining();
	createAjax("/calls/module.php?x=newsletter");
	xmlHttp.onreadystatechange = function() { 
		if (xmlHttp.readyState == 4 && xmlHttp.status == 200 && readyToFinish) sendingComplete();
	};
	markAsSent = (readyToFinish && (document.getElementById('move-to-sent') == undefined || document.getElementById('move-to-sent').checked == 1)) ? 1 : 0;
	vars = 'do-send=' + newsletterId + '&send-to=' + sendTo + '&send-to-list=' + sendToList + '&send-to-ward=' + sendToWard + '&send-num=' + sendNum + '&mark-as-sent=' + markAsSent;
	xmlHttp.send(vars);
	if (!readyToFinish) {
		sendNum++;
		setTimeout("sendMessage("+sendNum+")",1000);
		emailsRemaining--;
	}
}

function updateRemaining() {
	minsRemaining = Math.floor(emailsRemaining/60);
	secsRemaining = Math.floor(emailsRemaining-(minsRemaining*60));
	document.getElementById('time-remaining').innerHTML = minsRemaining + ' mins ' + secsRemaining + ' secs remaining';
	barWidth = Math.floor((1-(emailsRemaining/totalEmails))*400);
	document.getElementById('bar-inner').style.width = barWidth + 'px';
	if (barWidth > 22) {
		percentage = Math.floor((1-(emailsRemaining/totalEmails))*100);
		document.getElementById('bar-inner').innerHTML = percentage + '%';
	}
}

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



//Settings

userEmailAuthentication = false;
userPostcodeLookup = false;
isAdmin = false;
siteTitle = 'Steve Brine MP';
