var req;
var url = "ServerAccess.aspx";
var countElement = null;
var downloadContainerElement = null;
var errorContainer = null;

var moveBySelect = null;
var propSellSelect = null;
var titleInput = null;
var nameInput = null;
var surnameInput = null;
var emailInput = null;
var dayPhoneInput = null;
var evePhoneInput = null;
var addressInput = null;
var postcodeInput = null;
var countryInput = null;
var commoneInput = null;
var commtwoInput = null;


/*
*		Call Server functions
*/

function TestCall()
{	
	var postData = "opp=test";
	loadXMLDoc(postData);	
}

function CountDocuments()
{
	var postData = "opp=count";

	if(! countElement)
	{
		if(! document.getElementById("docstore_count"))
		{
			document.write("<span id=\"docstore_count\"></span>")
		}
		countElement = document.getElementById("docstore_count")
	}
	loadXMLDoc(postData);	
}

function ListDocuments()
{
	errorContainer.innerHTML = "";
	var isValid = true;	
	var moveByDetail = moveBySelect.options[moveBySelect.selectedIndex].value;
	var propSellDetail = propSellSelect.options[propSellSelect.selectedIndex].value;
	var titleDetail = titleInput.value;
	var nameDetail = nameInput.value;
	var surnameDetail = surnameInput.value;
	var emailDetail = emailInput.value;
	var dayPhoneDetail = dayPhoneInput.value;
	var evePhoneDetail = evePhoneInput.value;
	var addressDetail = addressInput.value;
	var postcodeDetail = postcodeInput.value;
	var countryDetail = countryInput.value;
	var commoneDetail = commoneInput.checked;
	var commtwoDetail = commtwoInput.checked;
	var postData = "opp=list";

	if(moveByDetail.length == 0)
	{
		isValid = false;
		AddDownloadFormError("Please specify when you would like to purchase overseas");
	}
	
	if(propSellDetail.length == 0)
	{
		isValid = false;
		AddDownloadFormError("Please specify the reason for your purchase");
	}
	
	if(titleDetail.length == 0)
	{
		isValid = false;
		AddDownloadFormError("Please enter your title");
	}
	
	if(nameDetail.length == 0)
	{
		isValid = false;
		AddDownloadFormError("Please enter your first name");
	}
	
	if(surnameDetail.length == 0)
	{
		isValid = false;
		AddDownloadFormError("Please enter your surname");
	}
	
	if(emailDetail.length == 0)
	{
		isValid = false;
		AddDownloadFormError("Please enter your email");
	}
	
	if(dayPhoneDetail.length == 0)
	{
		isValid = false;
		AddDownloadFormError("Please enter your daytime telephone number");
	}
	
	if(addressDetail.length == 0)
	{
		isValid = false;
		AddDownloadFormError("Please enter your full address");
	}
	
	if(postcodeDetail.length == 0)
	{
		isValid = false;
		AddDownloadFormError("Please enter your postcode");
	}
	
	if(countryDetail.length == 0)
	{
		isValid = false;
		AddDownloadFormError("Please enter your country");
	}
	
	if(isValid)
	{	
		postData += "&moveBy=" + moveByDetail;
		postData += "&propSell=" + propSellDetail;
		postData += "&title=" + titleDetail;
		postData += "&name=" + nameDetail;
		postData += "&surname=" + surnameDetail;
		postData += "&email=" + emailDetail;
		postData += "&dayPhone=" + dayPhoneDetail;
		postData += "&evePhone=" + evePhoneDetail;
		postData += "&address=" + addressDetail;
		postData += "&postcode=" + postcodeDetail;
		postData += "&country=" + countryDetail;
		postData += "&commone=" + commoneDetail;
		postData += "&commtwo=" + commtwoDetail;
		loadXMLDoc(postData);	
	}
}

function AddDocuments()
{
	var postData = "opp=add"
								+ "&docName=" + document.forms[0]["DocumentName"].value
								+ "&docValue=" + document.forms[0]["DocumentUrl"].value ;

	loadXMLDoc(postData);	
}

function RenderForm()
{
	EnsureDownloadContainer();
	
	var emailTable = document.createElement("table");	
	downloadContainerElement.appendChild(emailTable);
	
	var emailTableBody = document.createElement("tbody");
	emailTable.appendChild(emailTableBody);
	
	var sitHeaderRow = document.createElement("tr");
	emailTableBody.appendChild(sitHeaderRow);	
	var sitHeader = document.createElement("th");
	sitHeader.colSpan = 2;
	sitHeader.className="docstore_sectionhead";
	sitHeader.innerHTML = "Your Situation:";
	sitHeaderRow.appendChild(sitHeader);	
	
	var moveByRow = document.createElement("tr");
	emailTableBody.appendChild(moveByRow);	
	var moveByHeader = document.createElement("th");
	moveByHeader.innerHTML = "When would you like to purchase overseas? <span style=\"color:red\">*</span>";
	moveByRow.appendChild(moveByHeader);	
	var moveByValue = document.createElement("td");
	moveByRow.appendChild(moveByValue);		
	moveBySelect = document.createElement("select");
	moveBySelect.name = "moveby";
	moveByValue.appendChild(moveBySelect);	
	moveBySelect.options[0] = new Option("- - Please Select - -", "", true, false) ;
	moveBySelect.options[1] = new Option("Now", "Now", false, false) ;
	moveBySelect.options[2] = new Option("Within 6 months", "Within 6 months", false, false) ;
	moveBySelect.options[3] = new Option("6 - 12 months", "6 - 12 months", false, false) ;
	moveBySelect.options[4] = new Option("12 - 24 months", "12 - 24 months", false, false) ;
	moveBySelect.options[5] = new Option("24 + months", "24 + months", false, false) ;

	var propSellRow = document.createElement("tr");
	emailTableBody.appendChild(propSellRow);	
	var propSellHeader = document.createElement("th");
	propSellHeader.innerHTML = "What is the reason for your purchase? <span style=\"color:red\">*</span>";
	propSellRow.appendChild(propSellHeader);	
	var propSellValue = document.createElement("td");
	propSellRow.appendChild(propSellValue);		
	propSellSelect = document.createElement("select");
	propSellSelect.name = "moveby";
	propSellValue.appendChild(propSellSelect);	
	propSellSelect.options[0] = new Option("- - Please Select - -", "", true, false) ;
	propSellSelect.options[1] = new Option("Investment", "Investment", false, false) ;
	propSellSelect.options[2] = new Option("Holiday Home (Personal Use)", "Holiday Home (Personal Use)", false, false) ;
	propSellSelect.options[3] = new Option("Holiday Home (Rent Out)", "Holiday Home (Rent Out)", false, false) ;
	propSellSelect.options[4] = new Option("Emigrate (Move Abroad)", "Emigrate (Move Abroad)", false, false) ;
	
	var detailsHeaderRow = document.createElement("tr");
	emailTableBody.appendChild(detailsHeaderRow);	
	var detailsHeader = document.createElement("th");
	detailsHeader.colSpan = 2;
	detailsHeader.className="docstore_sectionhead";
	detailsHeader.innerHTML = "Your Details:";
	detailsHeaderRow.appendChild(detailsHeader);	

	var titleRow = document.createElement("tr");
	emailTableBody.appendChild(titleRow);	
	var titleHeader = document.createElement("th");
	titleHeader.innerHTML = "Title <span style=\"color:red\">*</span>";
	titleRow.appendChild(titleHeader);	
	var titleValue = document.createElement("td");
	titleRow.appendChild(titleValue);		
	titleInput = document.createElement("input");
	titleInput.type = "text";
	titleInput.name = "title";
	titleValue.appendChild(titleInput);	
	
	var nameRow = document.createElement("tr");
	emailTableBody.appendChild(nameRow);	
	var nameHeader = document.createElement("th");
	nameHeader.innerHTML = "First name <span style=\"color:red\">*</span>";
	nameRow.appendChild(nameHeader);	
	var nameValue = document.createElement("td");
	nameRow.appendChild(nameValue);		
	nameInput = document.createElement("input");
	nameInput.type = "text";
	nameInput.name = "forename";
	nameValue.appendChild(nameInput);			
	
	var surnameRow = document.createElement("tr");
	emailTableBody.appendChild(surnameRow);	
	var surnameHeader = document.createElement("th");
	surnameHeader.innerHTML = "Surname <span style=\"color:red\">*</span>";
	surnameRow.appendChild(surnameHeader);	
	var surnameValue = document.createElement("td");
	surnameRow.appendChild(surnameValue);		
	surnameInput = document.createElement("input");
	surnameInput.type = "text";
	surnameInput.name = "surname";
	surnameValue.appendChild(surnameInput);			
		
	var emailRow = document.createElement("tr");
	emailTableBody.appendChild(emailRow);
	var emailHeader = document.createElement("th");
	emailHeader.innerHTML = "Email <span style=\"color:red\">*</span>";
	emailRow.appendChild(emailHeader);
	var emailValue = document.createElement("td");
	emailRow.appendChild(emailValue);
	emailInput = document.createElement("input");
	emailInput.type = "text";
	emailInput.name = "email";
	emailValue.appendChild(emailInput);

	var dayPhoneRow = document.createElement("tr");
	emailTableBody.appendChild(dayPhoneRow);
	var dayPhoneHeader = document.createElement("th");
	dayPhoneHeader.innerHTML = "Telephone <span style=\"color:red\">*</span> <span style=\"font-size:0.9em;\">(daytime)</span>";
	dayPhoneRow.appendChild(dayPhoneHeader);
	var dayPhoneValue = document.createElement("td");
	dayPhoneRow.appendChild(dayPhoneValue);
	dayPhoneInput = document.createElement("input");
	dayPhoneInput.type = "text";
	dayPhoneInput.name = "dayphone";
	dayPhoneValue.appendChild(dayPhoneInput);

	var evePhoneRow = document.createElement("tr");
	emailTableBody.appendChild(evePhoneRow);
	var evePhoneHeader = document.createElement("th");
	evePhoneHeader.innerHTML = "Telephone <span style=\"font-size:0.9em;\">(evening)</span>";
	evePhoneRow.appendChild(evePhoneHeader);
	var evePhoneValue = document.createElement("td");
	evePhoneRow.appendChild(evePhoneValue);
	evePhoneInput = document.createElement("input");
	evePhoneInput.type = "text";
	evePhoneInput.name = "evephone";
	evePhoneValue.appendChild(evePhoneInput);	

	var addressRow = document.createElement("tr");
	emailTableBody.appendChild(addressRow);
	var addressHeader = document.createElement("th");
	addressHeader.innerHTML = "Full Address <span style=\"color:red\">*</span>";
	addressRow.appendChild(addressHeader);
	var addressValue = document.createElement("td");
	addressRow.appendChild(addressValue);
	addressInput = document.createElement("textarea");
	addressInput.cols = 30;
	addressInput.rows = 4;
	addressInput.name = "address";
	addressValue.appendChild(addressInput);	
	
	var postcodeRow = document.createElement("tr");
	emailTableBody.appendChild(postcodeRow);
	var postcodeHeader = document.createElement("th");
	postcodeHeader.innerHTML = "Postcode <span style=\"color:red\">*</span>";
	postcodeRow.appendChild(postcodeHeader);
	var postcodeValue = document.createElement("td");
	postcodeRow.appendChild(postcodeValue);
	postcodeInput = document.createElement("input");
	postcodeInput.type = "text";
	postcodeInput.name = "postcode";
	postcodeValue.appendChild(postcodeInput);	
	
	var countryRow = document.createElement("tr");
	emailTableBody.appendChild(countryRow);
	var countryHeader = document.createElement("th");
	countryHeader.innerHTML = "Country <span style=\"color:red\">*</span>";
	countryRow.appendChild(countryHeader);
	var countryValue = document.createElement("td");
	countryRow.appendChild(countryValue);
	countryInput = document.createElement("input");
	countryInput.type = "text";
	countryInput.name = "country";
	countryValue.appendChild(countryInput);	
	
	var commHeaderRow = document.createElement("tr");
	emailTableBody.appendChild(commHeaderRow);	
	var commHeader = document.createElement("th");
	commHeader.colSpan = 2;
	commHeader.className="docstore_sectionhead";
	commHeader.innerHTML = "Communication Preferences:";
	commHeaderRow.appendChild(commHeader);	
	
	var commoneRow = document.createElement("tr");
	emailTableBody.appendChild(commoneRow);
	var commoneHeader = document.createElement("td");
	commoneHeader.colSpan = 2;
	commoneRow.appendChild(commoneHeader);
	commoneInput = document.createElement("input");
	commoneInput.type = "checkbox";
	commoneInput.name = "commone";
	commoneHeader.appendChild(commoneInput);	
	commoneInput.checked = true ;
	var commoneSpan = document.createElement("span");
	commoneSpan.innerHTML = "I consent to sunset-overseas.co.uk keeping me up to date with developments in the overseas and other property markets, and wish to receive it's email newsletters and other targeted communications.";
	commoneHeader.appendChild(commoneSpan);	
	
	var commtwoRow = document.createElement("tr");
	emailTableBody.appendChild(commtwoRow);
	var commtwoHeader = document.createElement("td");
	commtwoHeader.colSpan = 2;
	commtwoRow.appendChild(commtwoHeader);
	commtwoInput = document.createElement("input");
	commtwoInput.type = "checkbox";
	commtwoInput.name = "commtwo";
	commtwoHeader.appendChild(commtwoInput);	
	var commtwoSpan = document.createElement("span");
	commtwoSpan.innerHTML = "I consent to sunset-overseas.co.uk sharing my information with organisations who have relevant products or services that may interest me or which could save me money on my potential Overseas property purchase.";
	commtwoHeader.appendChild(commtwoSpan);	
	
	var buttonRow = document.createElement("tr");
	emailTableBody.appendChild(buttonRow);
	var buttonHeader = document.createElement("td");
	buttonHeader.innerHTML = "&nbsp;";
	buttonRow.appendChild(buttonHeader);
	var buttonValue = document.createElement("td");
	buttonValue.className = "docstore_toolbox";
	buttonRow.appendChild(buttonValue);
	var buttonInput = document.createElement("input");
	buttonInput.type = "button";
	buttonInput.name = "SaveDetails";
	buttonInput.value = "Get Documents";
	buttonValue.appendChild(buttonInput);	
	
	addEvent(buttonInput, "click", ListDocuments, false);
	
}

function GetSessionIdPostData()
{
	return "sessionId=" + readCookie("sessionId") + "&";
}

function EnsureDownloadContainer()
{
	if(! downloadContainerElement)
	{
		if(! document.getElementById("docstore_download"))
		{
			document.write("<div id=\"docstore_download\"></div>")
		}
		downloadContainerElement = document.getElementById("docstore_download");
		errorContainer = document.createElement("div");
		downloadContainerElement.appendChild(errorContainer);
	}
}

function ResetDownloadContainer()
{
	EnsureDownloadContainer();
	downloadContainerElement.innerHTML = "";
	errorContainer = document.createElement("div");
	downloadContainerElement.appendChild(errorContainer);
}

function AddDownloadFormError(errorMessage)
{
	EnsureDownloadContainer()	
	
	var errorBox = document.createElement("div");
	errorBox.className = "docstore_error";
	errorBox.innerHTML = errorMessage;
	errorContainer.appendChild(errorBox);
}

/*
*		Process Server Response functions
*/

function ProcessSessionId(sessionId)
{
	createCookie("sessionId", sessionId, 1);
}

function ProcessResponseTest()
{
	alert(req.responseText);
}

function ProcessResponseCount()
{
	countElement.innerHTML = 	req.responseXML.getElementsByTagName("response")[0].getAttribute("count");
}

function ProcessResponseList()
{


	var errorCount = req.responseXML.getElementsByTagName("error").length;	
	var itemCount = req.responseXML.getElementsByTagName("item").length;
	var i = 0;
	
	if(errorCount != 0)
	{
		for(i = 0; i < errorCount; i++)
		{
			AddDownloadFormError(req.responseXML.getElementsByTagName("error")[i].getAttribute("details"));
		}
	}
	else	
	{
		ResetDownloadContainer();
		var itemList = document.createElement("ul");
		downloadContainerElement.appendChild(itemList);

		for(i = 0; i < itemCount; i++)
		{
			var itemContainer = document.createElement("li");
			itemList.appendChild(itemContainer);
			var itemLink = document.createElement("a");
			itemLink.href = req.responseXML.getElementsByTagName("item")[i].getAttribute("value");
			itemLink.innerHTML = req.responseXML.getElementsByTagName("item")[i].getAttribute("name");
			itemContainer.appendChild(itemLink);			
		}		
	}
}


/*
*		AJAX Functions
*/

function loadXMLDoc(postData) {
	req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	if(req) {		
		req.onreadystatechange = processReqChange;
		if(postData.length != 0)
		{
			req.open("POST", url, true);
			req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
		}
		else
		{
			req.open("GET", url, true);
		}
		req.send(GetSessionIdPostData() + postData);
	}
}

function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
					ProcessSessionId(req.responseXML.getElementsByTagName("response")[0].getAttribute("sessionId"));
					switch(req.responseXML.getElementsByTagName("response")[0].getAttribute("opp"))
					{
						case "test":
						{
							ProcessResponseTest();
							break;
						}
						case "add":
						{
							ProcessResponseCount();
							break;
						}
						case "count":
						{
							ProcessResponseCount();
							break;
						}
						case "list":
						{
							ProcessResponseList();
							break;
						}
					}
        } else {
            alert("There was a problem retrieving the XML data:\n" +
                req.statusText);
        }
    }
}

/*
*		Cookie functions
*/

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	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;
}

/*
*		Event functions
*/

function addEvent(objElementToAttacheEventTo, strEventTypeToAttach, objFunctionToCall, blnUseCapture)
{
    // IE.
    if (objElementToAttacheEventTo.attachEvent)
    {
        var success = objElementToAttacheEventTo.attachEvent('on' + strEventTypeToAttach, objFunctionToCall);
    }
    
    // NS6+ or Mozilla.
    else if (objElementToAttacheEventTo.addEventListener)
    {
        objElementToAttacheEventTo.addEventListener(strEventTypeToAttach, objFunctionToCall, blnUseCapture);
        
        return true;
    }
    
    // Neither of above, attach old fashioned way.
    else
    {
        objElementToAttacheEventTo['on' + strEventTypeToAttach] = objFunctionToCall;
    }
   
}

/* Mortgage Calculator */

function validate()
{
	var amt
	var error_string = "";
	var characters="qwertyuiopasdfghjkl\/?><|{}~@!+=zxcvbnm,£$#[]!%^&*()_+";
	amt=document.getElementById("mortcalc_amount").value;
	var is_bad = hasIllegalCharacters(amt,characters);
	if ((amt == "")||(is_bad == true))
		{	error_string +="You must enter an amount using numbers, no commas and one decimal point only.\n";}
	//
	amt=document.getElementById("mortcalc_term").value;
	var is_bad = hasIllegalCharacters(amt,characters);
	if ((amt == "")||(is_bad == true))
		{	error_string +="You must enter the term in whole months - numbers only.\n";}
	//
	amt=document.getElementById("mortcalc_rate").value;
	var is_bad = hasIllegalCharacters(amt,characters);
	if ((amt == "")||(is_bad == true))
		{	error_string +="You must enter an interest rate - only numbers and a decimal point.\n";}

	if (error_string =="")
		{	return true;}
	else
		{ alert(error_string);
			return false;
			}
}

function hasIllegalCharacters(test_string, illegal_string)
{
    var is_illegal = false;
    var the_char = "";
    for (var loop=0; loop < illegal_string.length; loop++)
    {
        the_char = illegal_string.charAt(loop);
        if (test_string.indexOf(the_char) != -1)
        {
            is_illegal = true;
        }
    }
    return is_illegal;
}

function calculate()
{
	var principal = document.getElementById("mortcalc_amount").value;
	var term = document.getElementById("mortcalc_term").value;
	var rate = document.getElementById("mortcalc_rate").value;
	var test = validate();
	term = term*12;
	var rate2 = rate/1200;
	var calc1 = Math.pow((1+rate2),term);
	var calc2 = principal*rate2;
	var calc3 = (1-1/calc1);
	var rept = calc2/calc3;
	rept=currency(rept);
	var intPmt = calc2;
	intPmt=currency(intPmt);
	var TotRept=calc2*term;
	TotRept=currency(TotRept);
	var CapTotRept= (rept*term)-principal;
	CapTotRept=currency(CapTotRept);
	//
	if (test == true)
	{
		document.getElementById("mortcalc_rpaypmt").innerHTML="&pound;"+rept;
	}
	else
	{
		document.getElementById("mortcalc_rpaypmt").innerHTML="";
	}
	//
	if (test == true)
	{
		document.getElementById("mortcalc_intpmt").innerHTML="&pound;"+intPmt;
	}
	else
	{
		document.getElementBy("mortcalc_intpmt").innerHTML="";
	}
	
}

function currency(my_amt)
{

	//var intMyAmt = parseInt(my_amt);
	var intMyAmt = my_amt;

	var pence = Math.round((my_amt-intMyAmt)*100);

	if(pence == 0)
	{	pence = "00";}

	if((pence >0)&&(pence <10))
	{pence = "0"+pence;}

	//var amt = intMyAmt+"."+pence;
	intMyAmt = intMyAmt.toFixed(2);
	var amt = intMyAmt;
	return amt;
}
