function $A(pseudo){var real=[];for(var i=0;i<pseudo.length;i++){real.push(pseudo[i]);}
return real;}
function $(){var elements=[];for(var i=0;i<arguments.length;i++){var element=arguments[i];if(typeof element=='string'){element=document.getElementById(element);}
if(arguments.length==1){return element;}
elements.push(element);}
return elements;}
Object.extend=function(destination,source){for(property in source){destination[property]=source[property];}
return destination;}
Object.optextend=function(destination,source){for(property in source){if(destination[property]==undefined){destination[property]=source[property];}}
return destination;}
Function.prototype.bind=function(object){var method=this;var oldArguments=$A(arguments).slice(1);return function(){var newArguments=$A(arguments);return method.apply(object,oldArguments.concat(newArguments));};}
function copy(obj,props){if(!props){return;}
for(var key in props){obj[key]=props[key];}}
Object.extend(String.prototype,{__repr__:function(){return'"'+this.replace(/\\/g,'\\\\').replace(/"/g,'\\\"').replace(/\r/g,"\\r").replace(/\n/g,"\\n")+'"';},format:function(){var idx=0,toidx;var argidx=0,fmt;var result='';while(true){toidx=this.indexOf('%',idx);if(toidx<0){break;}
result+=this.substring(idx,toidx);fmt=this[toidx+1];switch(fmt){case'%':result+='%';break;case's':result+=str(arguments[argidx++]);break;case'r':result+=repr(arguments[argidx++]);break;}
idx=toidx+2;}
result+=this.substring(idx);return result;}});Number.prototype.__repr__=Number.prototype.toString;Boolean.prototype.__repr__=Boolean.prototype.toString;Object.optextend(Array.prototype,{max:function(){var highest=this[0];for(var i=1;i<this.length;i++){if(this[i]>highest){highest=this[i];}}
return highest;},min:function(){var lowest=this[0];for(var i=1;i<this.length;i++){if(this[i]<lowest){lowest=this[i];}}
return lowest;},indexOf:function(elem){for(var i=0;i<this.length;i++){if(this[i]==elem){return i;}}
return-1;},extend:function(other){for(var i=0;i<other.length;i++){this.push(other[i]);}},__repr__:function(){var ret="[";for(var i=0;i<this.length;i++){if(i!=0){ret+=",";}
ret+=repr(this[i]);}
ret+="]";return ret;}});function dump(obj){var ret='{';var first=true;for(var key in obj){if(first){first=false;}
else{ret+=', ';}
ret+=repr(key)+': '+repr(obj[key]);}
ret+='}';return ret;}
function repr(obj){if(obj===undefined){return'undefined';}
else if(obj==null){return'null';}
else if(obj.__repr__){return obj.__repr__();}
return dump(obj);}
function unrepr(s){try{return eval('('+s+')');}
catch(err){return null;}}
function str(obj){if(obj===undefined){return'';}
else if(obj==null){return'';}
else if(obj.toString){return obj.toString();}
else{return repr(obj);}}
function method(o,f){return function(){return f.apply(o,arguments);}}
function Class(base,props){var cls=function(){if(this.__init__){this.__init__.apply(this,arguments);}}
if(base){for(var key in base){cls[key]=base[key];}}
for(var key in props){cls[key]=props[key];}
cls.prototype=cls;return cls;}
var Browser={isIE:navigator.appName.toLowerCase().indexOf("microsoft")!=-1,isIE6:navigator.appName.toLowerCase().indexOf("microsoft")!=-1&&!window.XMLHttpRequest,isFirefox:navigator.userAgent.toLowerCase().indexOf("firefox")!=-1,isGecko:navigator.product=='Gecko',isSafari:navigator.vendor&&navigator.vendor.toLowerCase().indexOf('apple')!=-1}
var Ajax={request:function(callback){var http_request=false;if(!Browser.isIE){http_request=new XMLHttpRequest();}
else if(window.ActiveXObject){try{http_request=new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){try{http_request=new ActiveXObject("Microsoft.XMLHTTP");}
catch(e){}}}
if(http_request){http_request.onreadystatechange=function(){if(http_request.readyState==4){var data,stat,stattxt;try{data=http_request.responseText;stat=http_request.status;stattxt=http_request.statusText;xml=http_request.responseXML;}
catch(e){data=null;stat=0;stattxt='Network error';xml=null;}
callback(data,stat,stattxt,xml);}};}
return http_request;},get:function(url,callback){var req=Ajax.request(callback);if(!req)
return false;req.open('GET',url,true);req.send(null);return true;},post:function(url,data,callback){var req=Ajax.request(callback);if(!req)
return false;req.open('POST',url,true);req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');req.send(data);return true;},encode:function(params){var data='';for(var i=0;i<params.length;i++){if(i!=0)
data+="&";data+=params[i][0]+"="+encodeURIComponent(params[i][1]);}
return data;}};var DOM={Div:function(par,abs,show){var div=document.createElement("div");if(!show)
div.style.display="none";if(abs)
div.style.position="absolute";if(par)
par.appendChild(div);return div;},Span:function(par,abs,show){var span=document.createElement("span");if(!show)
span.style.display="none";if(abs)
span.style.position="absolute";if(par)
par.appendChild(span);return span;},place:function(el,x,y,w,h){if(el.__place__)
el.__place__(x,y,w,h);else{if(x!=undefined)
el.style.left=x+"px";if(y!=undefined)
el.style.top=y+"px";if(w!=undefined)
el.style.width=w+"px";if(h!=undefined)
el.style.height=h+"px";}},getPos:function(obj){var curleft=0;var curtop=0;if(obj.offsetParent){while(obj.offsetParent){curleft+=obj.offsetLeft;curtop+=obj.offsetTop;obj=obj.offsetParent;}}
else if(obj.x){curleft+=obj.x;curtop+=obj.y;}
pos={'x':curleft,'y':curtop};return pos;},getScroll:function(obj){var x=0,y=0;while(obj.parentNode){x+=obj.scrollLeft;y+=obj.scrollTop;obj=obj.parentNode;}
return{'x':x,'y':y};},getObjClient:function(obj){var x=0,y=0;while(obj.offsetParent){x+=obj.offsetLeft;y+=obj.offsetTop;x-=obj.scrollLeft;y-=obj.scrollTop;obj=obj.offsetParent;}
return{'x':x,'y':y};},getHeight:function(el){return el.offsetHeight;},getWidth:function(el){return el.offsetWidth;},show:function(el,visibility){if(el.__show__)
el.__show__();else{if(visibility)
el.style.visibility="";else
el.style.display="";}
return el;},hide:function(el,visibility){if(el.__hide__)
el.__hide__();else{if(visibility)
el.style.visibility="hidden";else
el.style.display="none";}
return el;},_creator:function(tagname){return function(attrs){el=document.createElement(tagname);copy(el,attrs);for(var i=1;i<arguments.length;i++){if(typeof(arguments[i])=="string")
el.appendChild(document.createTextNode(arguments[i]));else if(arguments[i].__element__)
el.appendChild(arguments[i].__element__);else
el.appendChild(arguments[i]);}
return el;};},addNodes:function(el){for(var i=1;i<arguments.length;i++){if(typeof(arguments[i])=="string")
el.appendChild(document.createTextNode(arguments[i]));else if(arguments[i].__element__)
el.appendChild(arguments[i].__element__);else
el.appendChild(arguments[i]);}
return el;},removeNodes:function(el){for(var i=1;i<arguments.length;i++){if(arguments[i].__element__)
el.removeChild(arguments[i].__element__);else
el.removeChild(arguments[i]);}
return el;},_creatorTxt:function(content){return document.createTextNode(content);},style:function(attrs,el){if(el.__element__)
copy(el.__element__.style,attrs);else
copy(el.style,attrs);return el;},setTxt:function(el,txt){if(el.__element__)
el=el.__element__;if(el.firstChild)
el.firstChild.data=txt;else
el.appendChild(document.createTextNode(txt));},getTxt:function(el){if(el.__element__)
el=el.__element__;if(el.firstChild)
return el.firstChild.data;else
return"";},childByType:function(el,typ){if(el.__element__)
el=el.__element__;for(var child=el.firstChild;child;child=child.nextSibling){if(child.tagName==typ)
return child;}
return null;},childrenByType:function(el,typ){if(el.__element__)
el=el.__element__;var children=[];for(var child=el.firstChild;child;child=child.nextSibling){if(child.tagName==typ)
children.push(child);}
return children;},styleDiv:{},setSelectText:function(el,value){for(var i=0;i<el.length;i++){if(el.options[i].text==value){el.selectedIndex=i;return;}}},setSelectValue:function(el,value){for(var i=0;i<el.length;i++){if(el.options[i].value==value){el.selectedIndex=i;return;}}},getSelectText:function(el){return el.options[el.selectedIndex].text;},getSelectValue:function(el){return el.options[el.selectedIndex].value;},getSelect:function(el){return DOM.getSelectValue(el)||DOM.getSelectText(el);}};SPAN=DOM._creator("span");DIV=DOM._creator("div");TABLE=DOM._creator("table");FORM=DOM._creator("form");THEAD=DOM._creator("thead");TBODY=DOM._creator("tbody");TR=DOM._creator("tr");TD=DOM._creator("td");TH=DOM._creator("th");HR=DOM._creator("hr");BR=DOM._creator("br");INPUT=DOM._creator("input");TEXTAREA=DOM._creator("textarea");TXT=DOM._creatorTxt;P=DOM._creator("p");SELECT=DOM._creator("select");OPTION=DOM._creator("option");IMG=DOM._creator("img");LABEL=DOM._creator("label");A=DOM._creator("a");BUTTON=DOM._creator("button");document.getElementsByClassName=function(className,parentElement){var children=(parentElement||document.body).getElementsByTagName('*');var elements=[];var regex=new RegExp("(^|\\s)"+className+"(\\s|$)");children=$A(children);for(var i=0;i<children.length;i++){var child=children[i];if(child.className.match(regex))
elements.push(child);}
return elements;}
if(!window.Event){var Event=new Object();}
copy(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_PGUP:33,KEY_PGDOWN:34,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,element:function(event){return event.target||event.srcElement;},isLeftClick:function(event){return(((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));},stopPropagation:function(evt){if(evt.stopPropagation)
evt.stopPropagation();else
evt.cancelBubble=true;},pointerX:function(event){return event.pageX||(event.clientX+
(document.documentElement.scrollLeft||document.body.scrollLeft));},pointerY:function(event){return event.pageY||(event.clientY+
(document.documentElement.scrollTop||document.body.scrollTop));},mwDelta:function(event){var delta=0;if(event.wheelDelta){delta=event.wheelDelta/-120;if(window.opera)
delta=-delta;}
else if(event.detail){delta=event.detail/3;}
return delta;},stop:function(event){if(event.preventDefault){event.preventDefault();event.stopPropagation();}else{event.returnValue=false;event.cancelBubble=true;}
return false;},findElement:function(event,tagName){var element=Event.element(event);while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))
element=element.parentNode;return element;},observers:false,_observeAndCache:function(element,name,observer,useCapture){if(!this.observers)this.observers=[];if(element.addEventListener){this.observers.push([element,name,observer,useCapture]);element.addEventListener(name,observer,useCapture);}else if(element.attachEvent){this.observers.push([element,name,observer,useCapture]);element.attachEvent('on'+name,observer);}},unloadCache:function(){if(!Event.observers)return;for(var i=0;i<Event.observers.length;i++){if(Event.observers[i])
Event.stopObserving.apply(this,Event.observers[i]);Event.observers[i]=null;}
Event.observers=false;},observe:function(element,name,object,func,useCapture){useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent))
name='keydown';cb=function(evt){evt=evt||window.event;return func.call(object,evt);};this._observeAndCache(element,name,cb,useCapture);},unobserveAll:function(element){for(var i=0;i<Event.observers.length;i++){var entry=Event.observers[i];if(entry&&entry[0]==element){Event.stopObserving.apply(this,Event.observers[i]);Event.observers[i]=null;}}},stopObserving:function(element,name,observer,useCapture){var element=$(element);useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent))
name='keydown';if(element.removeEventListener){element.removeEventListener(name,observer,useCapture);}else if(element.detachEvent){element.detachEvent('on'+name,observer);}}});Event.observe(window,'unload',window,Event.unloadCache,false);Form=Class(null,{__init__:function(name,submiturl,cancelurl,elStatus,elForm){this.submiturl=submiturl;this.cancelurl=cancelurl;this.sendText='Sending...';this.elStatus=elStatus||$('submitstatus');this.elForm=elForm||document.forms[name];Event.observe(this.elForm,'submit',this,this.submit);if(cancelurl)
Event.observe($("cancel"),'click',this,this.cancel);if(!elStatus)
this.elForm.elements[0].focus();},set:function(name,value){var el=this.element(name);if(!el)
return false;if(el.type.search('select')>=0){for(var i=0;i<el.length;i++){if(el.options[i].value==value){el.selectedIndex=i;return;}}}
else if(el.type.search('checkbox')>=0)
el.checked=value;else{el.value=value!=null?value:'';}},element:function(name){ret=this.elForm.elements[name];if(!ret){for(var i=0;i<this.elForm.elements.length;i++){if(this.elForm.elements[i].name==name)
return this.elForm.elements[i];}}
return ret;},disable:function(name,disabled){var el=this.element(name);el.disabled=disabled;if(Browser.isIE)
if(disabled)
el.style.className="disabled";else
el.style.className="";},val:function(name){return this._val(this.element(name));},_val:function(el){if(el.type.search('select')>=0){if(el.type.search('one')>=0)
return this.selectedValue(el);else{if(el.getAttribute('multiple')!=null)
return this.getValues(el);else
return this.selectedValue(el);}}
else if(el.type.search('checkbox')>=0)
return el.checked;else
return el.value;},selectall:function(name){var el=this.element(name);for(var i=0;i<el.options.length;i++)
el.options[i].selected=true;},getValues:function(el){var ret=[];for(var i=0;i<el.options.length;i++){if(el.options[i].selected)
ret.push(el.options[i].value);}
return ret;},selectedValue:function(el){var selected=el.options[el.selectedIndex];if(selected.value!=undefined)
return""+selected.value;return""+selected.text;},response:function(data,stat){if(stat==200)
this.submitted(data);else
this.failed(data,stat);},cancel:function(evt){if(evt.preventDefault)
evt.preventDefault();window.location=this.cancelurl;return false;},extract:function(){var f=this.elForm;var parms={};for(var i=0;i<f.elements.length;i++){var el=f.elements[i];if(el.type=='radio'){if(el.checked)
parms[el.name]=el.value;}
else if(el.type!='submit'&&el.type!='button')
parms[el.name]=this._val(el);}
return parms;},flatten:function(input){var output=[];for(var key in input){var val=input[key];if(typeof(val)=='object'){for(var c=0;c<val.length;c++)
output.push([key,val[c]]);}
else if(typeof(val)=='boolean'){if(val)
output.push([key,val]);}
else
output.push([key,val]);}
return output;},submit:function(evt){if(evt.preventDefault)
evt.preventDefault();var params=this.extract();params=this.validate(params);if(params){DOM.setTxt(this.elStatus,this.sendText);params=this.flatten(params);var data='';for(var i=0;i<params.length;i++){if(i!=0)
data+="&";data+=params[i][0]+"="+encodeURIComponent(params[i][1]);}
Ajax.post(this.submiturl,data,method(this,this.response));}
return false;},validate:function(parms){return parms;},setstatus:function(stat){DOM.setTxt(this.elStatus,stat);return null;},submitted:function(data){DOM.setTxt(this.elStatus,"Done");},failed:function(data,stat){DOM.setTxt(this.elStatus,"Failed ("+stat+")");},clearErrors:function(){var f=this.elForm;for(var i=0;i<f.elements.length;i++)
f.elements[i].className='';},setError:function(name){this.element(name).className='error';}});rePhone=/\W*\+?(64\W*2|02)\d[ \d]+/;roads=[[0,"None",[[0,""]]],[1,"North Western Mwy (SH16)",[[0,'SH 16 / Hobsonville Rd'],[10,'Royal Rd'],[20,'Lincoln Rd'],[30,'TeAtatu Rd'],[40,'Patiki Rd'],[50,'Rosebank Rd'],[60,'Pt Chev'],[70,'St Lukes'],[80,'Newton Rd']]],[2,"Northern Mwy (SH1)",[[30,'Westhaven'],[40,'Shelly Beach Rd'],[50,'Onewa Rd'],[60,'Esmonde Rd'],[70,'Northcote Rd'],[80,'Tristram Ave'],[90,'Constellation Dr'],[100,'Greville Rd']]],[3,"Southern Mwy (SH1)",[[30,'Grafton'],[40,'Khyber'],[50,'Gillies'],[60,'St Marks'],[70,'Market'],[80,'Greenlane'],[90,'Tecoma'],[100,'Ellerslie'],[110,'SE Hwy'],[120,'Princes St'],[130,'East Tamaki Rd'],[140,'Manukau'],[150,'Hill Rd'],[160,'Takanini'],[170,'Beach Rd']]],[4,"South Western Mwy (SH20)",[[0,'Hillsborough Rd'],[10,'Queenstown Rd'],[20,'Onehunga'],[30,'Mangere Bridge'],[40,'Walmsley Rd'],[50,'SH20a split'],[60,'Mangere Rd'],[70,'Portage Rd'],[80,'Puhinui Rd'],[90,'Wiri'],[100,'SH1']]],[5,"Airport Mwy (SH20a)",[[0,'SH20'],[10,'Massey Rd'],[20,'Montgomerie Rd'],[30,'Airport']]]];function loggedout(){window.opener.location.reload();window.close();}
function logout(evt){Ajax.get('ajaxlogout',loggedout);return Event.stop(evt);}
function catchlogout(){Event.observe($('logout'),'click',window,logout);}
function error(err,els){DOM.setTxt($('submitstatus'),err);for(var i=0;i<els.length;i++)
f.setError(els[i]);return null;}
function formsubmitted(data){data=eval(data);if(data[0])
window.location.replace('/personal.html');else{DOM.setTxt($('submitstatus'),data[1]);for(var i=0;i<data[2].length;i++)
f.setError(data[2][i]);}}
function encAlerttime(parms,prefix,suffix){var hour=parseInt(parms['hour'+suffix]);delete parms['hour'+suffix];var minute=parseInt(parms['minute'+suffix]);delete parms['minute'+suffix];var meridian=parms['meridian'+suffix];delete parms['meridian'+suffix];if(hour==12)
hour=0;if(meridian=='pm')
hour+=12;parms[prefix+'alerttime'+suffix]=(hour*3600)+(minute*60);return parms;}
function encDow(parms,prefix,suffix){var dow=['Mon','Tue','Wed','Thu','Fri','Sat','Sun'];var encoded='';for(var i=0;i<dow.length;i++){if(parms['dow'+suffix+dow[i]])
encoded+=dow[i];delete parms['dow'+suffix+dow[i]];}
parms[prefix+'dow'+suffix]=encoded;return parms;}
function observeRoadSelect(prefix,suffix){Event.observe(f.element(prefix+'road'+suffix),'change',window,function(){var road=roads[f.val(prefix+'road'+suffix)];var from=f.element(prefix+'from'+suffix);var to=f.element(prefix+'to'+suffix);while(from.firstChild)
from.removeChild(from.firstChild);while(to.firstChild)
to.removeChild(to.firstChild);for(var i=0;i<road[2].length;i++){from.appendChild(OPTION({'value':str(road[2][i][0])},road[2][i][1]));to.appendChild(OPTION({'value':str(road[2][i][0])},road[2][i][1]));}});}
function validatedetails(parms){f.clearErrors();if(parms["username"].split('@').length!=2)
return error("Must be email address",['username']);var phone=parms["phone"];if(phone!=''&&!rePhone.exec(phone))
return error("Invalid mobile phone number format",['phone']);if(!parms['firstname']||!parms['lastname'])
return error("Name required",['firstname','lastname']);if(parms['password']!==undefined){if(parms["password"]==parms["reenter"])
delete parms['reenter'];else
return error("Passwords do not match",['password','reenter']);}
return parms;}
function init(){var parts=window.location.pathname.split('\/');var pagename=parts[parts.length-1];window.originalsite=parts[parts.length-2];if(pagename=='personal.html'||pagename=='help.html'){catchlogout();}
else if(pagename=='edit.html'){catchlogout();f=new Form('details','updatedetails');f.validate=validatedetails;f.submitted=formsubmitted;}
else if(pagename=='email.html'){catchlogout();f=new Form('email','updateemail');f.validate=function(parms){f.clearErrors();parms=encAlerttime(parms,'','1');parms=encAlerttime(parms,'','2');parms=encAlerttime(parms,'','3');parms=encAlerttime(parms,'','4');parms=encDow(parms,'email','1');parms=encDow(parms,'email','2');parms=encDow(parms,'email','3');parms=encDow(parms,'email','4');return parms;};f.submitted=formsubmitted;observeRoadSelect('','1');observeRoadSelect('','2');observeRoadSelect('','3');observeRoadSelect('','4');}
else if(pagename=='text.html'){catchlogout();f=new Form('text','updatetext');f.validate=function(parms){f.clearErrors();parms=encAlerttime(parms,'txt','1');parms=encAlerttime(parms,'txt','2');parms=encAlerttime(parms,'txt','3');parms=encAlerttime(parms,'txt','4');parms=encDow(parms,'txt','1');parms=encDow(parms,'txt','2');parms=encDow(parms,'txt','3');parms=encDow(parms,'txt','4');return parms;};f.submitted=formsubmitted;observeRoadSelect('txt','1');observeRoadSelect('txt','2');observeRoadSelect('txt','3');observeRoadSelect('txt','4');}
else if(pagename=='password.html'){catchlogout();f=new Form('password','changepassword');f.validate=function(parms){f.clearErrors();if(parms['newpassword']!=parms['reenterpassword'])
return error('Password and reenter password do not match',['newpassword','reenterpassword']);delete parms['reenterpassword'];return parms;};f.submitted=formsubmitted;}
else if(pagename=='signup.html'){f=new Form('signup','/signup');f.validate=function(parms){parms['originalsite']=window.originalsite;return validatedetails(parms);};f.submitted=formsubmitted;}
else if(pagename=='forgotpassword.html'){f=new Form('forgotpassword','forgotpassword');f.validate=function(parms){return parms;};f.submitted=formsubmitted;f.submitted=function(data){data=eval(data);if(data[0]){DOM.hide($('passwordform'));DOM.show($('passwordsent'));}
else{DOM.setTxt($('submitstatus'),data[1]);for(var i=0;i<data[2].length;i++)
f.setError(data[2][i]);}};}}