/*--------------------------------------------------------------------------
				JS Functions File for Postcoder Integration
								v1.0
						 Update: 20-01-2010
----------------------------------------------------------------------------
Requirements: prototype.js (v1.6+)
----------------------------------------------------------------------------*/
var _baseURL=document.domain;
if(_baseURL.indexOf('juno',0)>-1) {
	_baseURL='http://juno/jobscouk/';
} else {
	_baseURL='http://'+document.domain+'/';
}

function pc_gridLkp(lkid,city,fieldPref) {
	try {
		if(lkid.length>=5) {
			if(fieldPref==='') fieldPref='tx_';	//default the field pref if not set
			
			var url 	= _baseURL+'include/postcoder/pc_getGrids.asp';
			var d 		= new Date();
			var time 	= d.getTime();	
			var pars 	= 'city='+city+'&LKID='+lkid+'&prevent_cache='+time;
			var errFound= false;
			
			new Ajax.Request(url, {
				method: 'get', 
				parameters: pars, 
				asynchronous: false,
				onFailure: function() {
					txtErr='Sorry, there was a problem checking your location.\n';
					txtErr+='Please try again.\n';
					alert(txtErr);	
					errFound = true;
					return errFound;
				},
				onSuccess: function(originalRequest) {
					if($('pc_loading')) {
						$('pc_loading').hide();
					}
					
					var pcData=originalRequest.responseText.evalJSON();
					
					if(pcData.error.length>0) {
						txtErr='Please supply a valid location id.\n';
						txtErr+='\nError: '+pcData.error;
						alert(txtErr);
						errFound = true;
						return errFound;
					} else {
						try {	
							if(pcData.gridEast.length>0) {
								$(fieldPref+'gridE').value=pcData.gridEast;
								$(fieldPref+'apiAdded').value=pcData.api_sourced;
							}
							if(pcData.gridNorth.length>0) {
								$(fieldPref+'gridN').value=pcData.gridNorth;
								$(fieldPref+'apiAdded').value=pcData.api_sourced;
							}
							return errFound;
						}
						catch(err) {
							txtErr='Please supply a valid location id.\n';
							txtErr+='\nError: '+err.description;
							alert(txtErr);	
							errFound = true;
							return errFound;
						}
					}							
				}						
			});	
			if($('pc_loading')) {
				$('pc_loading').hide();
			}
		} else {
			alert('Please supply a valid location id');
			errFound = true;
		}
	} catch(err) { errFound = true; }
		
	return errFound;
}

function pcSetLocation(resultDiv, fieldPref, val, id) {
	try {
		
		if($(fieldPref+'city') && $(fieldPref+'LKID') && $(resultDiv)) {
			$(fieldPref+'city').value=unescape(val);
			$(fieldPref+'LKID').value=id;
			pcLocationSuggestHide(resultDiv,0);
		} else {
			alert(keyField+'LKID+');
		}
	} catch(err) { return false; }
}

function pcClearSuggest(pref, tgt, val) {
	try {
		if(val.length>0 && $(pref+tgt)) {
			$(pref+tgt).value='';
			//also clear the lkid ready for a new loc
			$(pref+'LKID').value='';
		}	
	} catch(err) { return false; }
}

function pcLocationSuggest(keyField, resultDiv) {
	try {
		if($(keyField+'city') && $(resultDiv)) {
			if($(keyField+'LKID')) {
				$(keyField+'LKID').value='';
			}
			if($(keyField+'gridE')) {
				$(keyField+'gridE').value='';
			}
			if($(keyField+'gridN')) {
				$(keyField+'gridN').value='';
			}
			if($(keyField+'city').getValue().length>2) {	
				var url = _baseURL+'include/postcoder/pc_getLocationSuggestions.asp';
				var d = new Date();
				var time = d.getTime();
				new Ajax.Request(url, {
					method: 'get', 
					parameters: { resultDiv: resultDiv, field: keyField, location: $(keyField+'city').getValue(), prevent_cache: time}, 
					onComplete: function(originalRequest) {
						var newData = originalRequest.responseText;
						if(newData.length>0) {
							$(resultDiv).innerHTML=newData;
							$(resultDiv).show();
						} else {
							pcLocationSuggestHide(resultDiv,0);
						}
					}
				});
			} else {
				pcLocationSuggestHide(resultDiv,0);
			}
		} 
	} catch(err) { return false; }	
}
function pcLocationSuggestHide(resultDiv, time) {
	if(time>0) {
		new PeriodicalExecuter(function() {
			$(resultDiv).hide();
		}, time);
	} else {
		$(resultDiv).hide();	
	}
}


function pc_streetLkp(pc,fieldPref,mode) {
	if(pc.length>=5) {
		if(fieldPref==='') fieldPref='tx_';	//default the field pref if not set
		
		var url 	= _baseURL+'include/postcoder/pc_getStreetLevel.asp';
		var d 		= new Date();
		var time 	= d.getTime();	
		var pars 	= 'postcode='+pc+'&lookupMode='+mode+'&prevent_cache='+time;
		
		new Ajax.Request(url, {
			method: 'get', 
			parameters: pars, 
			asynchronous: false,
			onLoading: function() {
				if($('pc_loading')) {
					$('pc_loading').show();
				}
			},
			onFailure: function(originalRequest) {
				txtErr='Sorry, there was a problem checking your postcode.\n';
				txtErr+='Please enter your address manually or try again.\n\n';
				txtErr+='Note: This is a UK Postcode Only Function.\n';
				txtErr+='\nError: '+originalRequest.responseText;
				alert(txtErr);	
			},
			onSuccess: function(originalRequest) {
				if($('pc_loading')) {
					$('pc_loading').hide();
				}
				
				var pcData=originalRequest.responseText.evalJSON();
				
				if(pcData.error.length>0) {
					txtErr='Sorry, there was a problem checking your postcode.\n';
					txtErr+='Please enter your address manually or try again.\n\n';
					txtErr+='Note: This is a UK Postcode Only Function.\n';
					txtErr+='\nError: '+pcData.error;
					alert(txtErr);
				} else {
					try {	
						if(mode!='geographic') {
							var i=1;
							var pfx='';
							
							if(pcData.line1.length>0 && $(fieldPref+'address'+i)) {
								$(fieldPref+'address'+i).value=pcData.line1;
								i++;
							}
							if(pcData.line2.length>0 && $(fieldPref+'address'+i)) {
								$(fieldPref+'address'+i).value=pcData.line2;
								i++;
							}
							if(pcData.line3.length>0 && $(fieldPref+'address'+i)) {
								$(fieldPref+'address'+i).value=pcData.line3;
								i++;
							}
							
							if((pcData.line4.length>0 || pcData.line5.length>0) && $(fieldPref+'address'+i)) {
								if(pcData.line4.length>0) {
									$(fieldPref+'address'+i).value=pcData.line4;
									pfx = ', ';
								}
								if(pcData.line5.length>0) {
									$(fieldPref+'address'+i).value+=pfx+pcData.line5;
									pfx = '';
								}
								i++
							}
							if(pcData.post_town.length>0 && $(fieldPref+'city')) {
								$(fieldPref+'city').value=pcData.post_town;
							}
							if(pcData.county.length>0 && $(fieldPref+'county')) {
								$(fieldPref+'county').value=pcData.county;
							}	
						}
						if(pcData.postcode.length>0 && $(fieldPref+'postcode')) {
							$(fieldPref+'postcode').value=pcData.postcode;
						}
						
						//did this come from the api or repository?
						if($(fieldPref+'apiAdded')) {
							$(fieldPref+'apiAdded').value=pcData.api_sourced;
						}
						
						//set up the geo data
						if($(fieldPref+'long')) $(fieldPref+'long').value=pcData.longitude;
						if($(fieldPref+'lat')) $(fieldPref+'lat').value=pcData.latitude;
						$(fieldPref+'gridE').value=pcData.gridEast;
						$(fieldPref+'gridN').value=pcData.gridNorth;
					}
					catch(err) {
						txtErr='Sorry, there was a problem checking your postcode.\n';
						txtErr+='Please enter your address manually or try again.\n\n';
						txtErr+='Note: This is a UK Postcode only function.\n';
						txtErr+='\nError: '+err.description;
						alert(txtErr);	
					}
				}							
			}						
		} );	
		if($('pc_loading')) {
			$('pc_loading').hide();
		}
	} else {
		alert('Please enter a valid postcode');
	}
}

