var actImg=null;
var delKey=false;
var entKey=false;
var tFInstr="Enter postcode";
var dontDelErM=false;
HTTP={};
HTTP._factories=[function(){
    return new XMLHttpRequest();
},function(){
    return new ActiveXObject("Msxml2.XMLHTTP");
},function(){
    return new ActiveXObject("Microsoft.XMLHTTP");
}];
HTTP._factory=null;
HTTP.newRequest=function(){
    if(HTTP._factory!=null) return HTTP._factory();
    for(var i=0;i<HTTP._factories.length;i++){
        try {
            var factory=HTTP._factories[i];
            var request=factory();
            if(request!=null){
                HTTP._factory=factory;
                HTTP.XMLHttpRequestSupported=true;
                return request;
            }
        }
        catch(e){
            continue;
        }
    }
    HTTP._factory=false;
    return false;
}
HTTP.get=function(callback,options){
    var u="postcode-ajax.php";
    var req=HTTP.newRequest();
    if(req==false) return false;
    var _in=document.getElementById("in");
    _in.appendChild(actImg);
    var n=0;
    var t;
    t=setTimeout(function(){
        req.abort();
        if(options.timeoutHandler) options.timeoutHandler(u);
    },options.timeout);
    req.onreadystatechange=function(){
        if(req.readyState==4){
            if(t) clearTimeout(t);
            if(req.status==200) callback(req.responseText);
            else {
                if(options.errorHandler) options.errorHandler(req.status,req.statusText);
                else callback(null);
            }
        }
        else if(options.progressHandler){
            options.progressHandler(++n);
        }
    }
    var target=u;
    target+="?"+options.parameters;
    req.open("GET",target,true);
    req.send(null);
    return true;
};
function setHFFUp(){
    var instru=document.getElementById("instr");
    if(instru) instru.parentNode.removeChild(instru);
    document.forms.howfar.onsubmit=howFarSub;
    var textfield=document.getElementsByName("postcode")[0];
    if(textfield.hasfocus!=true) outOfField();
    else if(textfield.value==tFInstr) textfield.value="";
    removeErrorM();
    textfield.onfocus=function(){
        textfield.style.color='#000';
        if(textfield.value==tFInstr) textfield.value="";
    };
    textfield.onkeypress=keypresshandler;
    textfield.onblur=function(){
        removeErrorM();
        if(this.value.replace(/\s/g,"")=="") outOfField();
    };
}
function setNewPCFUp(){
    var a=newLocLink();
    var i=document.getElementById("nl");
    i.parentNode.replaceChild(a,i);
    var g=document.getElementById("goog");
    g.innerHTML="route and directions (Google Maps)";
    g.title=g.title.replace(/Directions \(on/,"Route and directions (on");
}
function newLocLink(){
	var a=document.createElement('A');
    a.href=form_page+"?nl";
    a.id="nl";
    var r=document.getElementById("r");
    a.innerHTML="new location";
    a.onclick=newPCSub;
    return a;
}
function runOnLoad(){
    if(document.forms.howfar) setHFFUp();
    else if(document.forms.newpc) setNewPCFUp();
    actImg=document.createElement('IMG');
    actImg.src="http://s.rolfesbutchers.co.uk/i/activity-1.gif";
    actImg.id="activity";
    if(form_page=='where-we-are') switchWhereWeAreText();
}
function switchWhereWeAreText(){
    var t=document.getElementById("JSone");
    var s=t.innerHTML;
    t.innerHTML=s.replace(/Driving/,"Route map and driving");
    t=document.getElementById("JStwo");
    t.innerHTML="Route map and driving directions";
}
function outOfField(){
    var textfield=document.getElementsByName("postcode")[0];
    textfield.style.color='#777';
    textfield.value=tFInstr;
}
function removeErrorM(){
    if(dontDelErM==false){
        var errMes
        if(errMes=document.getElementById("error")) errMes.parentNode.removeChild(errMes);
    }
    else dontDelErM=false;
}
function keypresshandler(e){
    removeErrorM();
    var e=e||window.event;
    var code=e.charCode||e.keyCode;
    if(code==13) entKey=true;
    else if(e.charCode==0||e.ctrlKey||e.altKey||code<32) delKey=true;
    return true;
}
function pressSubBut(){
    var b=document.getElementById("btn");
    b.className="active";
}
function howFarSub(){
    var textfield=document.getElementsByName("postcode")[0];
    var pc=textfield.value.toUpperCase();
    pc=pc.replace(/[^0-9A-Z]/g,"");
    if(!(pc.match(/^[A-Z][0-9R]\d{1,2}[ABD-HJLNP-UW-Z]{2}$/)||pc.match(/^[A-Z][0-9R][A-Z]\d[ABD-HJLNP-UW-Z]{2}$/)||pc.match(/^[A-Z]{2}[0-9R]\d{1,2}[ABD-HJLNP-UW-Z]{2}$/)||pc.match(/^[A-Z]{2}[0-9R][A-Z]\d[ABD-HJLNP-UW-Z]{2}$/))) return pcNotOK(textfield.value);
    removeErrorM();
    if(entKey) pressSubBut();
    var session=document.cookie.indexOf("session=");
    if(session==-1){
        document.cookie="session="+newSessionID+"; path=/";
    }
    var options={
        parameters: "pc="+encodeURI(pc)+'&hf=1&fp='+form_page,
        timeout: 17000,
        timeoutHandler: timeoutHandler
    };
    if(HTTP.get(postcodeReturned,options)==false) return true;
    return false;
}
function newPCSub(){
    var difb=document.getElementById("nl");
    difb.parentNode.removeChild(difb);
    var e=document.getElementById("error");
    if(e) e.parentNode.removeChild(e);
    var options={
        parameters: 'newpc=1&fp='+form_page,
        timeout: 10000,
        timeoutHandler: timeoutHandler
    };
    if(HTTP.get(newPCFRet,options)==false) return true;
    return false;
}
function pcNotOK($pc){
    var textfield=document.getElementsByName("postcode")[0];
    var _in=document.getElementById("in");
    var errMes;
    if(errMes=document.createElement("p")) _in.appendChild(errMes);
    else errMes=document.getElementById("error");
    if(textfield.value=='' || textfield.value==tFInstr) errMes.innerHTML="No postcode provided";
    else errMes.innerHTML="Not recognised as a UK postcode";
    errMes.setAttribute("id","error");
    textfield.focus();
    return false;
}
function timeoutHandler(){
    var _in=document.getElementById("in");
    var em;
    var ac;
    var r=document.getElementById("results");
    if(r){
    	var a=newLocLink();
   		_in.appendChild(a);
   	}
    if(em=document.createElement("p")) _in.appendChild(em);
    else em=document.getElementById("error");
    if(ac=document.getElementById("activity"))
    	ac.parentNode.removeChild(ac);
    em.setAttribute("id","error");
    em.innerHTML='Sorry, didn&rsquo;t work. Try again maybe?';
}
function postcodeReturned(results){
    if(results.charAt(0)!=' '){
        results=addPCToMap(results);
        var oE=document.getElementById("howfar");
        var f=document.createDocumentFragment();
        var res=document.createElement("div");
        res.innerHTML=results;
        res.id="results";
        f.appendChild(res);
        oE.parentNode.replaceChild(f,oE)
        setNewPCFUp();
    } else newPCFRet(results);
}
function newPCFRet(pCForm){
    var oE=document.getElementById("results") || document.getElementById("howfar");
    var f=document.createElement("form");
    f.action=form_page;
    f.method="post";
    f.id="howfar";
    f.innerHTML=pCForm;
    oE.parentNode.replaceChild(f,oE);
    if(document.forms.newpc!=null) setNewPCFUp();
    else {
        removePCFromMap();
        dontDelErM=true;
        var textfield=document.getElementsByName("postcode")[0];
        if(document.getElementById("error")) textfield.focus();
        setHFFUp();
    }
}
function addPCToMap(results){
    var x=results.indexOf('l_a_b_e_l')
    if(x==-1) return results;
    var m=document.getElementById("maps");
    if(!m) return results.substr(0,x);
    var s=results.substr(x+9);
    var a=s.split('*');
    i=document.createElement('IMG');
    i.src='http://s.rolfesbutchers.co.uk/i/pcgen-1.php?pc='+a[0];
    i.id="label";
    i.style.left=a[1]+'px';
    i.style.top=a[2]+'px';
    m.appendChild(i);
    return results.substr(0,x);
}
function removePCFromMap(){
    var i=document.getElementById("label");
    if(i) i.parentNode.removeChild(i);
}
window.onload=runOnLoad;
