;(function($){var $scrollTo=$.scrollTo=function(target,duration,settings){$(window).scrollTo(target,duration,settings);};$scrollTo.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1};$scrollTo.window=function(scope){return $(window)._scrollme();};$.fn._scrollme=function(){return this.map(function(){var elem=this,isWin=!elem.nodeName||$.inArray(elem.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)
return elem;var doc=(elem.contentWindow||elem).document||elem.ownerDocument||elem;return $.browser.safari||doc.compatMode=='BackCompat'?doc.body:doc.documentElement;});};$.fn.scrollTo=function(target,duration,settings){if(typeof duration=='object'){settings=duration;duration=0;}
if(typeof settings=='function')
settings={onAfter:settings};if(target=='max')
target=9e9;settings=$.extend({},$scrollTo.defaults,settings);duration=duration||settings.speed||settings.duration;settings.queue=settings.queue&&settings.axis.length>1;if(settings.queue)
duration/=2;settings.offset=both(settings.offset);settings.over=both(settings.over);return this._scrollme().each(function(){var elem=this,$elem=$(elem),targ=target,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break;}
targ=$(targ,this);case'object':if(targ.is||targ.style)
toff=(targ=$(targ)).offset();}
$.each(settings.axis.split(''),function(i,axis){var Pos=axis=='x'?'Left':'Top',pos=Pos.toLowerCase(),key='scroll'+Pos,old=elem[key],max=$scrollTo.max(elem,axis);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(settings.margin){attr[key]-=parseInt(targ.css('margin'+Pos))||0;attr[key]-=parseInt(targ.css('border'+Pos+'Width'))||0;}
attr[key]+=settings.offset[pos]||0;if(settings.over[pos])
attr[key]+=targ[axis=='x'?'width':'height']()*settings.over[pos];}else{var val=targ[pos];attr[key]=val.slice&&val.slice(-1)=='%'?parseFloat(val)/100*max:val;}
if(/^\d+$/.test(attr[key]))
attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&settings.queue){if(old!=attr[key])
animate(settings.onAfterFirst);delete attr[key];}});animate(settings.onAfter);function animate(callback){$elem.animate(attr,duration,settings.easing,callback&&function(){callback.call(this,target,settings);});};}).end();};$scrollTo.max=function(elem,axis){var Dim=axis=='x'?'Width':'Height',scroll='scroll'+Dim;if(!$(elem).is('html,body'))
return elem[scroll]-$(elem)[Dim.toLowerCase()]();var size='client'+Dim,html=elem.ownerDocument.documentElement,body=elem.ownerDocument.body;return Math.max(html[scroll],body[scroll])
-Math.min(html[size],body[size]);};function both(val){return typeof val=='object'?val:{top:val,left:val};};})(jQuery);;(function($){var ajaxQueue;function ajaxQueue(options){var callback=options.complete;options.complete=function(){if(callback){callback.apply(this,arguments);}
$.dequeue(ajaxQueue,"ajax");};if($.queue(ajaxQueue,'ajax').length){$.queue(ajaxQueue,"ajax",function(){$.ajax(options);});}else{$.ajax(options);}};$.ajaxQueue=ajaxQueue;})(jQuery);;(function($){var products,deeplink,_updateFromState,_updateState,_containerDiv=null,_ready=false,_advanced=false,_filters={},_sort=null,_more=false,_deeplink,_basic=[],E_MISSING_OR_INVALID_ARG='Missing or invalid argument',EV_PRODUCTS_READY='ready',EV_PRODUCTS_STATE_CHANGE='stateChange',EV_PRODUCTS_BEFORE_SEND='beforeSend',EV_PRODUCTS_SUCCESS='success',EV_PRODUCTS_ERROR='error',EV_PRODUCTS_COMPLETE='complete';function _updateFromState(data){var params=$.unparam(data),data=$.extend({},params);params.menu_id=_page;if(data.sort){_sort=data.sort;delete data.sort}else{_sort=null;}
_more=!!data.more;delete data.more
_advanced=!!data.advanced;delete data.advanced
_filters=data;products.trigger(EV_PRODUCTS_STATE_CHANGE);$.ajaxQueue({beforeSend:function(xhr){products.trigger(EV_PRODUCTS_BEFORE_SEND);},cache:true,complete:function(xhr,textStatus){products.trigger(EV_PRODUCTS_COMPLETE);},data:$.param(params),dataType:"html",error:function(xhr,textStatus,errorThrown){products.trigger(EV_PRODUCTS_ERROR);},global:false,success:function(data,textStatus){_containerDiv.html(data);products.trigger(EV_PRODUCTS_SUCCESS);},type:"GET",url:"/_ajax/product_table.php"+document.location.search});}
function _updateState(){var data={}
if(_sort){data.sort=_sort;}
if(_more){data.more=1;}
if(_advanced){$.extend(data,_filters)
data.advanced=1;}else{$.each(_basic,function(){if(_filters[this])data[this]=_filters[this];});}
deeplink.add('products',$.param(data));}
function _setFilter(name,value){var states;if(!(typeof name==="string")){throw new Error(E_MISSING_OR_INVALID_ARG);}
filters={};filters[name]=value;return _setFilters(filters);}
function _setFilters(filters){var changed=false;if(!_ready){return false;}
$.each(filters,function(name,value){if(_filters[name]!==value){if(value===null||value===''){delete _filters[name];}else{_filters[name]=value;}
changed=true;}});if(!changed){return false;}
_updateState();return true;}
function _getFilters(){return $.extend({},_filters);}
function _getFilter(param){if(typeof _filters[param]!=='undefined'){return _filters[param];}
return null;}
products={init:function(containerDiv,page,basic){var state;if(_ready){return false;}
if(basic){_basic=basic;}
if(typeof containerDiv==="undefined"){throw new Error(E_MISSING_OR_INVALID_ARG);}
_containerDiv=$(containerDiv);if(typeof page==="undefined"){throw new Error(E_MISSING_OR_INVALID_ARG);}
_page=page
_ready=true;deeplink=new $.deeplink();state=deeplink.get('products');if(state){_updateFromState(state);}
deeplink.bind('productsChange',function(e,data){_updateFromState(data.newVal);});deeplink.bind('productsRemoved',function(e,data){_updateFromState('');});$(function(){products.trigger(EV_PRODUCTS_READY);});},advanced:function(flag){if(typeof flag==='undefined'){return _advanced;}
if(_advanced!==flag){_advanced=!!flag;}},update:function(flag){_updateState();},filter:function(param,value){if(typeof value==='undefined'){if(typeof param==='object'){return _setFilters(param);}
if(typeof param==="undefined"){return _getFilters()}
return _getFilter(param);}
return _setFilter(param,value);},sort:function(value){if(typeof value==='undefined'){return _sort;}
if(_sort!==value){_sort=value;_updateState();}},more:function(flag){if(typeof flag==='undefined'){return _more;}
if(_more!==flag){_more=!!flag;_updateState();}},bind:function(type,data,fn){$(products).bind(type,data,fn)},trigger:function(event,data){$(products).trigger(event,data)}};$.products=products;})(jQuery);;(function($){var serializeObject;function serializeObject(){var result={};$.each($(this).serializeArray(),function(){if(typeof result[this.name]==='undefined'){result[this.name]=this.value;}
else if($.isArray(result[this.name])){result[this.name].push(this.value);}
else{result[this.name]=[result[this.name],this.value];}});return result;}
$.fn.serializeObject=serializeObject;})(jQuery);;(function($){var products=$.products;$(function(){products.init('#products',page_id);});products.bind('ready',function(){var main=$('#products');$('th#position a',main).live('click',function(){products.sort('bestsellers');return false;});$('th#speed_col a',main).live('click',function(){products.sort('broadband_speed');return false;});$('th#downloads a',main).live('click',function(){products.sort('download_limit');return false;});$('th#contract_col a',main).live('click',function(){products.sort('contract_period');return false;});$('th#monthly_cost a',main).live('click',function(){products.sort('monthly_cost');return false;});$('th#line_rental a',main).live('click',function(){products.sort('line_rental');return false;});$('th#calls a',main).live('click',function(){products.sort('calls');return false;});$('th#minutes a',main).live('click',function(){products.sort('minutes');return false;});$('th#texts a',main).live('click',function(){products.sort('texts');return false;});$('a.more',main).live('click',function(){products.more(!products.more());if(!products.more()){$.scrollTo('#products tbody tr:eq(7)',0);}
return false;});});products.bind('beforeSend',function(){$('a.more').addClass('loading_tag').html('Loading...');$('.loading_overlay').show();$('.loading_faded').show();});products.bind('complete',function(){var more=$('#more_results'),main=$('#products');if(more.length>0){if(products.more()){more.html('<a href="#" title="Show Top 10 Results" class="more">'+PTABLE_SHOW_TOP_ONLY+'</a>');}else{var total_products=$('.allproducts').html();more.html('<a href="#" title="Show More Results" class="more"><span>'+PTABLE_SHOW_ALL_LINK+'</span> <span class="moreproducts"> ('+total_products+' more)</span></a>')}
more.show();$('a.more').removeClass('loading_tag');}
$('.loading_overlay').hide();$('.loading_faded').hide();$('#more_results > span').show();$('#loading_tag').hide();if($('#products_controls').is(':visible')){$('#filters_pointer').fadeIn();$('#products_extra li.filters').addClass('act');}
Cufon.refresh();if(!$.browser.msie||$.browser.version>7){$('#products .downloads.selected, #products .texts.selected').css('background-color','#DDEDFB');$('#products .monthly_cost.selected').css('background-color','#FFE5F5');$('#products .contract.selected').css('background-color','#ECFAE6');$('#products .speed.selected, #products .minutes.selected').css('background-color','#D9E1F0');$('#products .home_phone_table .contract.selected').css('background-color','#E1DBFF');}
$('tbody tr:not(.divider)',main).mouseover(function(){$('#row_highlight .popup_width').remove();$('tbody tr.hover',main).removeClass('hover');$('tbody .new_button.hover',main).removeClass('hover');if(!$.browser.msie||$.browser.version>6){$(this).addClass('hover').find('.new_button').addClass('hover');}
var row=$(this).position();$('#row_highlight').show().find('a').unbind('click').attr('href',$(this).find('.monthly_cost .new_button').attr('href'));$(this).find('.popup_width').eq(0).clone().prependTo($('#row_highlight'));$('#row_highlight').css('top',row.top).css('left',row.left).css('height',$(this).innerHeight()-3);Cufon.refresh('.top10font');});main.mouseleave(function(){$('tbody tr.hover',main).removeClass('hover');$('#products tbody td .new_button').removeClass('hover');$('#products #row_highlight').hide();;Cufon.refresh('.top10font');});$('#products tbody tr.divider').mouseenter(function(){$('#products').mouseleave();});$('#products .monthly_cost .conditions_link').each(function(){var target=$(this).parent().find('.conditions');target.prepend($(this).prev('.cost').clone().append('a month'));$(this).hover(function(){target.fadeIn('fast');},function(){target.fadeOut('fast');});});$('<div id=\"sticky\"><table></table></div>').prependTo('#products').hide();$('#products table thead').clone().appendTo('#sticky table');$('#products table').stickyheader();return false;});products.bind('ready',function(){$('#products').addClass('js_active');$('.loading_overlay').hide();products.trigger('complete');});})(jQuery);;(function($){var products=$.products;products.bind('ready',function(){var main=$('#products'),extra=$('#products_extra');if(include_filters){extra.html('<div id="filters_pointer"></div><ul><li class="filters"><span></span><a href="">Filter packages </a></li><li class="email"><span></span><a href="#" class="open_bubble email">Email</a></li><li class="share"><span></span><a href="#" class="open_bubble share">Share</a></li></ul>');}
else{extra.html('<div id="filters_pointer"></div><ul><li class="email"><span></span><a href="#" class="open_bubble email">Email</a></li><li class="share"><span></span><a href="#" class="open_bubble share">Share</a></li></ul>');}
$('li.share',extra).click(function(){if($(this).is('.act')){$('#share_overlay').hide();$('#share').hide();$(this).removeClass('act');return false;}
else{$('#share_overlay').show();$('#share').fadeIn();$('li:not(.filters)',extra).removeClass('act');$(this).addClass('act');$('#email').hide();var thisLoc=String(document.location);var params=$.param({url:thisLoc,menu_id:MENU_ID});if(!$('#share').length){$('<div id="share"></div>').prependTo(main).load('/_ajax/share.php',params,function(){$('#share').addClass('opened')});}
return false;}});$('#share .close_share_card').live('click',function(){$('#share').hide();$('#share_overlay').hide()
$('li.share',extra).removeClass('act');return false});$('li.email',extra).click(function(){$('li.share .act').removeClass('act');$('#share_overlay').hide()
if($(this).is('.act')){$(this).removeClass('act');if($('#email form').length){$('#email').hide();}else{$('#email').remove();}
$('li.email').removeClass('act');return false}
else{if(!$.browser.msie||$.browser.version>7){$('#share_overlay').show();}
$('li:not(.filters)',extra).removeClass('act');$(this).addClass('act');$('#share').hide();var thisLoc=String(document.location);var params=$.param({url:thisLoc})
if(!$('#email').length){$('<div id="email"></div>').prependTo(main).load('/_ajax/email.php',params,emailSub);}
$('#email').fadeIn();return false;}});function emailSub(){$('#email form').live('submit',function(){$('fieldset',this).fadeOut('fast',function(){$('#submitEmail').fadeIn('fast',function(){setTimeout("$('#email').load($('#email form').attr('action'), $('#email form').serializeObject())",1500);});});return false;});}
$('#share_overlay').click(function(){$(this).hide();$('#email').hide();$('li.email').removeClass('act');$('li.share',extra).removeClass('act');$('#share').hide();return false;});$('#email .close_share_card').live('click',function(){$('#share_overlay').hide()
if($('#email form').length){$('#email').hide();}else{$('#email').remove();}
$('li.email').removeClass('act');return false});});$('.close_share_card').live('mouseover',function(){$(this).addClass('hover');});$('.close_share_card').live('mouseout',function(){$(this).removeClass('hover');});$('.share_by_email .new_button').live('click',function(){$('#email form').submit();});})(jQuery);(function($){_tracking_debug=false;var _channel_prefixes={2:"bb_",3:"mp_",666:""};$.eventTracking={track:function(category,action,opt_label,opt_value,skipChannelPrefix)
{var channel_prefix='';if(!skipChannelPrefix){channel_prefix=_getChannelPrefix();}
var track=['_trackEvent',channel_prefix+category,action];if(opt_label&&opt_label!=="undefined"){track.push(opt_label);}
if(opt_value&&opt_value!=="undefined"&&typeof opt_value=="number"){track.push(opt_value);}
_debug(track);_gaq.push(track);},getTrackable:function(filters,oldFilters)
{var trackable=[];for(i in filters){if(!_compare(filters[i],oldFilters[i])){trackable.push([i,filters[i]]);}}
return trackable;},parseQuery:function(qs,options)
{var q=(typeof qs==='string'?qs:window.location.search),o={'f':function(v){return unescape(v).replace(/\+/g,' ');}},options=(typeof qs==='object'&&typeof options==='undefined')?qs:options,o=jQuery.extend({},o,options),params={};jQuery.each(q.match(/^\??(.*)$/)[1].split('&'),function(i,p){p=p.split('=');p[1]=o.f(p[1]);params[p[0]]=params[p[0]]?((params[p[0]]instanceof Array)?(params[p[0]].push(p[1]),params[p[0]]):[params[p[0]],p[1]]):p[1];});return params;},error:function(message,category)
{var cat=category||"generic";this.track(cat,"error",message);}}
function _getChannelPrefix(){if(window.channel_id&&_channel_prefixes[channel_id]){return _channel_prefixes[channel_id];}
return"";}
function _compare(val1,val2)
{if(val1===null||val1==="undefined"||val2===null||val2==="undefined"){return false;}
if(val1 instanceof Array){return _compareArrays(val1,val2);}else{if(val1===val2){return true;}}
return false;}
function _isNumber(n){return!isNaN(parseFloat(n))&&isFinite(n);}
function _debug()
{if(_tracking_debug){for(var i=0;i<arguments.length;i++){console.log(arguments[i]);}}}
function _compareArrays(array1,array2){var temp=new Array();if((array1&&!array2)||(array2&&!array1)){return false;}
if((!array1[0])||(!array2[0])){return false;}
if(array1.length!=array2.length){return false;}
for(var i=0;i<array1.length;i++){key=(typeof array1[i])+"~"+array1[i];if(temp[key]){temp[key]++;}else{temp[key]=1;}}
for(var i=0;i<array2.length;i++){key=(typeof array2[i])+"~"+array2[i];if(temp[key]){if(temp[key]==0){return false;}else{temp[key]--;}}else{return false;}}
return true;}})(jQuery);;(function($){if($.products!=="undefined"){var _filters=$.products.filter();var _sort=$.products.sort();var _more=$.products.more();$.products.bind('stateChange',function(e,data){var products=e.currentTarget;var filters=products.filter();var trackable=$.eventTracking.getTrackable(filters,_filters);_filters=filters;if(trackable){for(i in trackable){_trackFilterEvent(trackable[i][0],trackable[i][1]);}}
var sort=products.sort();if(sort!==_sort){_trackSortEvent(sort);}
_sort=sort;var more=products.more();if(more!==_more){_trackMoreEvent(_more);}
_more=more;});function _trackMoreEvent(showMore)
{var show="more";if(showMore)show="top10";$.eventTracking.track("product_limit",show);}
function _trackSortEvent(sort)
{$.eventTracking.track('product_sort',sort);}
function _trackFilterEvent(key,value){var act="product_filter";var val=value;if(val instanceof Object){val=val.toString();}
$.eventTracking.track(act,key,val);}}})(jQuery);;;(function($){var $scrollTo=$.scrollTo=function(target,duration,settings){$(window).scrollTo(target,duration,settings);};$scrollTo.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1};$scrollTo.window=function(scope){return $(window)._scrollme();};$.fn._scrollme=function(){return this.map(function(){var elem=this,isWin=!elem.nodeName||$.inArray(elem.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)
return elem;var doc=(elem.contentWindow||elem).document||elem.ownerDocument||elem;return $.browser.safari||doc.compatMode=='BackCompat'?doc.body:doc.documentElement;});};$.fn.scrollTo=function(target,duration,settings){if(typeof duration=='object'){settings=duration;duration=0;}
if(typeof settings=='function')
settings={onAfter:settings};if(target=='max')
target=9e9;settings=$.extend({},$scrollTo.defaults,settings);duration=duration||settings.speed||settings.duration;settings.queue=settings.queue&&settings.axis.length>1;if(settings.queue)
duration/=2;settings.offset=both(settings.offset);settings.over=both(settings.over);return this._scrollme().each(function(){var elem=this,$elem=$(elem),targ=target,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break;}
targ=$(targ,this);case'object':if(targ.is||targ.style)
toff=(targ=$(targ)).offset();}
$.each(settings.axis.split(''),function(i,axis){var Pos=axis=='x'?'Left':'Top',pos=Pos.toLowerCase(),key='scroll'+Pos,old=elem[key],max=$scrollTo.max(elem,axis);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(settings.margin){attr[key]-=parseInt(targ.css('margin'+Pos))||0;attr[key]-=parseInt(targ.css('border'+Pos+'Width'))||0;}
attr[key]+=settings.offset[pos]||0;if(settings.over[pos])
attr[key]+=targ[axis=='x'?'width':'height']()*settings.over[pos];}else{var val=targ[pos];attr[key]=val.slice&&val.slice(-1)=='%'?parseFloat(val)/100*max:val;}
if(/^\d+$/.test(attr[key]))
attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&settings.queue){if(old!=attr[key])
animate(settings.onAfterFirst);delete attr[key];}});animate(settings.onAfter);function animate(callback){$elem.animate(attr,duration,settings.easing,callback&&function(){callback.call(this,target,settings);});};}).end();};$scrollTo.max=function(elem,axis){var Dim=axis=='x'?'Width':'Height',scroll='scroll'+Dim;if(!$(elem).is('html,body'))
return elem[scroll]-$(elem)[Dim.toLowerCase()]();var size='client'+Dim,html=elem.ownerDocument.documentElement,body=elem.ownerDocument.body;return Math.max(html[scroll],body[scroll])
-Math.min(html[size],body[size]);};function both(val){return typeof val=='object'?val:{top:val,left:val};};})(jQuery);;if(!this.JSON){this.JSON={};}
(function(){function f(n){return n<10?'0'+n:n;}
if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+
f(this.getUTCMonth()+1)+'-'+
f(this.getUTCDate())+'T'+
f(this.getUTCHours())+':'+
f(this.getUTCMinutes())+':'+
f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}
var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}
function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}
if(typeof rep==='function'){value=rep.call(holder,key,value);}
switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}
v=partial.length===0?'[]':gap?'[\n'+gap+
partial.join(',\n'+gap)+'\n'+
mind+']':'['+partial.join(',')+']';gap=mind;return v;}
if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}
v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+
mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}
if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}
rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}
return str('',{'':value});};}
if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}
return reviver.call(holder,key,value);}
cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+
('0000'+a.charCodeAt(0).toString(16)).slice(-4);});}
if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}
throw new SyntaxError('JSON.parse');};}}());;(function($){$.extend($.fn,{validate:function(options){if(!this.length){options&&options.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing");return;}var validator=$.data(this[0],'validator');if(validator){return validator;}validator=new $.validator(options,this[0]);$.data(this[0],'validator',validator);if(validator.settings.onsubmit){this.find("input, button").filter(".cancel").click(function(){validator.cancelSubmit=true;});if(validator.settings.submitHandler){this.find("input, button").filter(":submit").click(function(){validator.submitButton=this;});}this.submit(function(event){if(validator.settings.debug)event.preventDefault();function handle(){if(validator.settings.submitHandler){if(validator.submitButton){var hidden=$("<input type='hidden'/>").attr("name",validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);}validator.settings.submitHandler.call(validator,validator.currentForm);if(validator.submitButton){hidden.remove();}return false;}return true;}if(validator.cancelSubmit){validator.cancelSubmit=false;return handle();}if(validator.form()){if(validator.pendingRequest){validator.formSubmitted=true;return false;}return handle();}else{validator.focusInvalid();return false;}});}return validator;},valid:function(){if($(this[0]).is('form')){return this.validate().form();}else{var valid=true;var validator=$(this[0].form).validate();this.each(function(){valid&=validator.element(this);});return valid;}},removeAttrs:function(attributes){var result={},$element=this;$.each(attributes.split(/\s/),function(index,value){result[value]=$element.attr(value);$element.removeAttr(value);});return result;},rules:function(command,argument){var element=this[0];if(command){var settings=$.data(element.form,'validator').settings;var staticRules=settings.rules;var existingRules=$.validator.staticRules(element);switch(command){case"add":$.extend(existingRules,$.validator.normalizeRule(argument));staticRules[element.name]=existingRules;if(argument.messages)settings.messages[element.name]=$.extend(settings.messages[element.name],argument.messages);break;case"remove":if(!argument){delete staticRules[element.name];return existingRules;}var filtered={};$.each(argument.split(/\s/),function(index,method){filtered[method]=existingRules[method];delete existingRules[method];});return filtered;}}var data=$.validator.normalizeRules($.extend({},$.validator.metadataRules(element),$.validator.classRules(element),$.validator.attributeRules(element),$.validator.staticRules(element)),element);if(data.required){var param=data.required;delete data.required;data=$.extend({required:param},data);}return data;}});$.extend($.expr[":"],{blank:function(a){return!$.trim(a.value);},filled:function(a){return!!$.trim(a.value);},unchecked:function(a){return!a.checked;}});$.validator=function(options,form){this.settings=$.extend({},$.validator.defaults,options);this.currentForm=form;this.init();};$.validator.format=function(source,params){if(arguments.length==1)return function(){var args=$.makeArray(arguments);args.unshift(source);return $.validator.format.apply(this,args);};if(arguments.length>2&&params.constructor!=Array){params=$.makeArray(arguments).slice(1);}if(params.constructor!=Array){params=[params];}$.each(params,function(i,n){source=source.replace(new RegExp("\\{"+i+"\\}","g"),n);});return source;};$.extend($.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:true,errorContainer:$([]),errorLabelContainer:$([]),onsubmit:true,ignore:[],ignoreTitle:false,onfocusin:function(element){this.lastActive=element;if(this.settings.focusCleanup&&!this.blockFocusCleanup){this.settings.unhighlight&&this.settings.unhighlight.call(this,element,this.settings.errorClass,this.settings.validClass);this.errorsFor(element).hide();}},onfocusout:function(element){if(!this.checkable(element)&&(element.name in this.submitted||!this.optional(element))){this.element(element);}},onkeyup:function(element){if(element.name in this.submitted||element==this.lastElement){this.element(element);}},onclick:function(element){if(element.name in this.submitted)this.element(element);},highlight:function(element,errorClass,validClass){$(element).addClass(errorClass).removeClass(validClass);},unhighlight:function(element,errorClass,validClass){$(element).removeClass(errorClass).addClass(validClass);}},setDefaults:function(settings){$.extend($.validator.defaults,settings);},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",dateDE:"Bitte geben Sie ein gültiges Datum ein.",number:"Please enter a valid number.",numberDE:"Bitte geben Sie eine Nummer ein.",digits:"Please enter only digits",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxlength:$.validator.format("Please enter no more than {0} characters."),minlength:$.validator.format("Please enter at least {0} characters."),rangelength:$.validator.format("Please enter a value between {0} and {1} characters long."),range:$.validator.format("Please enter a value between {0} and {1}."),max:$.validator.format("Please enter a value less than or equal to {0}."),min:$.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:false,prototype:{init:function(){this.labelContainer=$(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||$(this.currentForm);this.containers=$(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var groups=(this.groups={});$.each(this.settings.groups,function(key,value){$.each(value.split(/\s/),function(index,name){groups[name]=key;});});var rules=this.settings.rules;$.each(rules,function(key,value){rules[key]=$.validator.normalizeRule(value);});function delegate(event){var validator=$.data(this[0].form,"validator");validator.settings["on"+event.type]&&validator.settings["on"+event.type].call(validator,this[0]);}$(this.currentForm).delegate("focusin focusout keyup",":text, :password, :file, select, textarea",delegate).delegate("click",":radio, :checkbox",delegate);if(this.settings.invalidHandler)$(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler);},form:function(){this.checkForm();$.extend(this.submitted,this.errorMap);this.invalid=$.extend({},this.errorMap);if(!this.valid())$(this.currentForm).triggerHandler("invalid-form",[this]);this.showErrors();return this.valid();},checkForm:function(){this.prepareForm();for(var i=0,elements=(this.currentElements=this.elements());elements[i];i++){this.check(elements[i]);}return this.valid();},element:function(element){element=this.clean(element);this.lastElement=element;this.prepareElement(element);this.currentElements=$(element);var result=this.check(element);if(result){delete this.invalid[element.name];}else{this.invalid[element.name]=true;}if(!this.numberOfInvalids()){this.toHide=this.toHide.add(this.containers);}this.showErrors();return result;},showErrors:function(errors){if(errors){$.extend(this.errorMap,errors);this.errorList=[];for(var name in errors){this.errorList.push({message:errors[name],element:this.findByName(name)[0]});}this.successList=$.grep(this.successList,function(element){return!(element.name in errors);});}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors();},resetForm:function(){if($.fn.resetForm)$(this.currentForm).resetForm();this.submitted={};this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass);},numberOfInvalids:function(){return this.objectLength(this.invalid);},objectLength:function(obj){var count=0;for(var i in obj)count++;return count;},hideErrors:function(){this.addWrapper(this.toHide).hide();},valid:function(){return this.size()==0;},size:function(){return this.errorList.length;},focusInvalid:function(){if(this.settings.focusInvalid){try{$(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus();}catch(e){}}},findLastActive:function(){var lastActive=this.lastActive;return lastActive&&$.grep(this.errorList,function(n){return n.element.name==lastActive.name;}).length==1&&lastActive;},elements:function(){var validator=this,rulesCache={};return $([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){!this.name&&validator.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in rulesCache||!validator.objectLength($(this).rules()))return false;rulesCache[this.name]=true;return true;});},clean:function(selector){return $(selector)[0];},errors:function(){return $(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext);},reset:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=$([]);this.toHide=$([]);this.formSubmitted=false;this.currentElements=$([]);},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers);},prepareElement:function(element){this.reset();this.toHide=this.errorsFor(element);},check:function(element){element=this.clean(element);if(this.checkable(element)){element=this.findByName(element.name)[0];}var rules=$(element).rules();var dependencyMismatch=false;for(method in rules){var rule={method:method,parameters:rules[method]};try{var result=$.validator.methods[method].call(this,element.value.replace(/\r/g,""),element,rule.parameters);if(result=="dependency-mismatch"){dependencyMismatch=true;continue;}dependencyMismatch=false;if(result=="pending"){this.toHide=this.toHide.not(this.errorsFor(element));return;}if(!result){this.formatAndAdd(element,rule);return false;}}catch(e){this.settings.debug&&window.console&&console.log("exception occured when checking element "+element.id
+", check the '"+rule.method+"' method");throw e;}}if(dependencyMismatch)return;if(this.objectLength(rules))this.successList.push(element);return true;},customMetaMessage:function(element,method){if(!$.metadata)return;var meta=this.settings.meta?$(element).metadata()[this.settings.meta]:$(element).metadata();return meta&&meta.messages&&meta.messages[method];},customMessage:function(name,method){var m=this.settings.messages[name];return m&&(m.constructor==String?m:m[method]);},findDefined:function(){for(var i=0;i<arguments.length;i++){if(arguments[i]!==undefined)return arguments[i];}return undefined;},defaultMessage:function(element,method){return this.findDefined(this.customMessage(element.name,method),this.customMetaMessage(element,method),!this.settings.ignoreTitle&&element.title||undefined,$.validator.messages[method],"<strong>Warning: No message defined for "+element.name+"</strong>");},formatAndAdd:function(element,rule){var message=this.defaultMessage(element,rule.method);if(typeof message=="function")message=message.call(this,rule.parameters,element);this.errorList.push({message:message,element:element});this.errorMap[element.name]=message;this.submitted[element.name]=message;},addWrapper:function(toToggle){if(this.settings.wrapper)toToggle=toToggle.add(toToggle.parent(this.settings.wrapper));return toToggle;},defaultShowErrors:function(){for(var i=0;this.errorList[i];i++){var error=this.errorList[i];this.settings.highlight&&this.settings.highlight.call(this,error.element,this.settings.errorClass,this.settings.validClass);this.showLabel(error.element,error.message);}if(this.errorList.length){this.toShow=this.toShow.add(this.containers);}if(this.settings.success){for(var i=0;this.successList[i];i++){this.showLabel(this.successList[i]);}}if(this.settings.unhighlight){for(var i=0,elements=this.validElements();elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();},validElements:function(){return this.currentElements.not(this.invalidElements());},invalidElements:function(){return $(this.errorList).map(function(){return this.element;});},showLabel:function(element,message){var label=this.errorsFor(element);if(label.length){label.removeClass().addClass(this.settings.errorClass);label.attr("generated")&&label.html(message);}else{label=$("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(element),generated:true}).addClass(this.settings.errorClass).html(message||"");if(this.settings.wrapper){label=label.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();}if(!this.labelContainer.append(label).length)this.settings.errorPlacement?this.settings.errorPlacement(label,$(element)):label.insertAfter(element);}if(!message&&this.settings.success){label.text("");typeof this.settings.success=="string"?label.addClass(this.settings.success):this.settings.success(label);}this.toShow=this.toShow.add(label);},errorsFor:function(element){return this.errors().filter("[for='"+this.idOrName(element)+"']");},idOrName:function(element){return this.groups[element.name]||(this.checkable(element)?element.name:element.id||element.name);},checkable:function(element){return/radio|checkbox/i.test(element.type);},findByName:function(name){var form=this.currentForm;return $(document.getElementsByName(name)).map(function(index,element){return element.form==form&&element.name==name&&element||null;});},getLength:function(value,element){switch(element.nodeName.toLowerCase()){case'select':return $("option:selected",element).length;case'input':if(this.checkable(element))return this.findByName(element.name).filter(':checked').length;}return value.length;},depend:function(param,element){return this.dependTypes[typeof param]?this.dependTypes[typeof param](param,element):true;},dependTypes:{"boolean":function(param,element){return param;},"string":function(param,element){return!!$(param,element.form).length;},"function":function(param,element){return param(element);}},optional:function(element){return!$.validator.methods.required.call(this,$.trim(element.value),element)&&"dependency-mismatch";},startRequest:function(element){if(!this.pending[element.name]){this.pendingRequest++;this.pending[element.name]=true;}},stopRequest:function(element,valid){this.pendingRequest--;if(this.pendingRequest<0)this.pendingRequest=0;delete this.pending[element.name];if(valid&&this.pendingRequest==0&&this.formSubmitted&&this.form()){$(this.currentForm).submit();}else if(!valid&&this.pendingRequest==0&&this.formSubmitted){$(this.currentForm).triggerHandler("invalid-form",[this]);}},previousValue:function(element){return $.data(element,"previousValue")||$.data(element,"previousValue",previous={old:null,valid:true,message:this.defaultMessage(element,"remote")});}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},number:{number:true},numberDE:{numberDE:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(className,rules){className.constructor==String?this.classRuleSettings[className]=rules:$.extend(this.classRuleSettings,className);},classRules:function(element){var rules={};var classes=$(element).attr('class');classes&&$.each(classes.split(' '),function(){if(this in $.validator.classRuleSettings){$.extend(rules,$.validator.classRuleSettings[this]);}});return rules;},attributeRules:function(element){var rules={};var $element=$(element);for(method in $.validator.methods){var value=$element.attr(method);if(value){rules[method]=value;}}if(rules.maxlength&&/-1|2147483647|524288/.test(rules.maxlength)){delete rules.maxlength;}return rules;},metadataRules:function(element){if(!$.metadata)return{};var meta=$.data(element.form,'validator').settings.meta;return meta?$(element).metadata()[meta]:$(element).metadata();},staticRules:function(element){var rules={};var validator=$.data(element.form,'validator');if(validator.settings.rules){rules=$.validator.normalizeRule(validator.settings.rules[element.name])||{};}return rules;},normalizeRules:function(rules,element){$.each(rules,function(prop,val){if(val===false){delete rules[prop];return;}if(val.param||val.depends){var keepRule=true;switch(typeof val.depends){case"string":keepRule=!!$(val.depends,element.form).length;break;case"function":keepRule=val.depends.call(element,element);break;}if(keepRule){rules[prop]=val.param!==undefined?val.param:true;}else{delete rules[prop];}}});$.each(rules,function(rule,parameter){rules[rule]=$.isFunction(parameter)?parameter(element):parameter;});$.each(['minlength','maxlength','min','max'],function(){if(rules[this]){rules[this]=Number(rules[this]);}});$.each(['rangelength','range'],function(){if(rules[this]){rules[this]=[Number(rules[this][0]),Number(rules[this][1])];}});if($.validator.autoCreateRanges){if(rules.min&&rules.max){rules.range=[rules.min,rules.max];delete rules.min;delete rules.max;}if(rules.minlength&&rules.maxlength){rules.rangelength=[rules.minlength,rules.maxlength];delete rules.minlength;delete rules.maxlength;}}if(rules.messages){delete rules.messages}return rules;},normalizeRule:function(data){if(typeof data=="string"){var transformed={};$.each(data.split(/\s/),function(){transformed[this]=true;});data=transformed;}return data;},addMethod:function(name,method,message){$.validator.methods[name]=method;$.validator.messages[name]=message||$.validator.messages[name];if(method.length<3){$.validator.addClassRules(name,$.validator.normalizeRule(name));}},methods:{required:function(value,element,param){if(!this.depend(param,element))return"dependency-mismatch";switch(element.nodeName.toLowerCase()){case'select':var options=$("option:selected",element);return options.length>0&&(element.type=="select-multiple"||($.browser.msie&&!(options[0].attributes['value'].specified)?options[0].text:options[0].value).length>0);case'input':if(this.checkable(element))return this.getLength(value,element)>0;default:return $.trim(value).length>0;}},remote:function(value,element,param){if(this.optional(element))return"dependency-mismatch";var previous=this.previousValue(element);if(!this.settings.messages[element.name])this.settings.messages[element.name]={};this.settings.messages[element.name].remote=typeof previous.message=="function"?previous.message(value):previous.message;param=typeof param=="string"&&{url:param}||param;if(previous.old!==value){previous.old=value;var validator=this;this.startRequest(element);var data={};data[element.name]=value;$.ajax($.extend(true,{url:param,mode:"abort",port:"validate"+element.name,dataType:"json",data:data,success:function(response){var valid=response===true;if(valid){var submitted=validator.formSubmitted;validator.prepareElement(element);validator.formSubmitted=submitted;validator.successList.push(element);validator.showErrors();}else{var errors={};errors[element.name]=previous.message=response||validator.defaultMessage(element,"remote");validator.showErrors(errors);}previous.valid=valid;validator.stopRequest(element,valid);}},param));return"pending";}else if(this.pending[element.name]){return"pending";}return previous.valid;},minlength:function(value,element,param){return this.optional(element)||this.getLength($.trim(value),element)>=param;},maxlength:function(value,element,param){return this.optional(element)||this.getLength($.trim(value),element)<=param;},rangelength:function(value,element,param){var length=this.getLength($.trim(value),element);return this.optional(element)||(length>=param[0]&&length<=param[1]);},min:function(value,element,param){return this.optional(element)||value>=param;},max:function(value,element,param){return this.optional(element)||value<=param;},range:function(value,element,param){return this.optional(element)||(value>=param[0]&&value<=param[1]);},email:function(value,element){return this.optional(element)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);},url:function(value,element){return this.optional(element)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);},date:function(value,element){return this.optional(element)||!/Invalid|NaN/.test(new Date(value));},dateISO:function(value,element){return this.optional(element)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);},dateDE:function(value,element){return this.optional(element)||/^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);},number:function(value,element){return this.optional(element)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);},numberDE:function(value,element){return this.optional(element)||/^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);},digits:function(value,element){return this.optional(element)||/^\d+$/.test(value);},creditcard:function(value,element){if(this.optional(element))return"dependency-mismatch";if(/[^0-9-]+/.test(value))return false;var nCheck=0,nDigit=0,bEven=false;value=value.replace(/\D/g,"");for(n=value.length-1;n>=0;n--){var cDigit=value.charAt(n);var nDigit=parseInt(cDigit,10);if(bEven){if((nDigit*=2)>9)nDigit-=9;}nCheck+=nDigit;bEven=!bEven;}return(nCheck%10)==0;},accept:function(value,element,param){param=typeof param=="string"?param.replace(/,/g,'|'):"png|jpe?g|gif";return this.optional(element)||value.match(new RegExp(".("+param+")$","i"));},equalTo:function(value,element,param){return value==$(param).val();}}});$.format=$.validator.format;})(jQuery);;(function($){var ajax=$.ajax;var pendingRequests={};$.ajax=function(settings){settings=$.extend(settings,$.extend({},$.ajaxSettings,settings));var port=settings.port;if(settings.mode=="abort"){if(pendingRequests[port]){pendingRequests[port].abort();}return(pendingRequests[port]=ajax.apply(this,arguments));}return ajax.apply(this,arguments);};})(jQuery);;(function($){$.each({focus:'focusin',blur:'focusout'},function(original,fix){$.event.special[fix]={setup:function(){if($.browser.msie)return false;this.addEventListener(original,$.event.special[fix].handler,true);},teardown:function(){if($.browser.msie)return false;this.removeEventListener(original,$.event.special[fix].handler,true);},handler:function(e){arguments[0]=$.event.fix(e);arguments[0].type=fix;return $.event.handle.apply(this,arguments);}};});$.extend($.fn,{delegate:function(type,delegate,handler){return this.bind(type,function(event){var target=$(event.target);if(target.is(delegate)){return handler.apply(target,arguments);}});},triggerEvent:function(type,target){return this.triggerHandler(type,[$.event.fix({type:type,target:target})]);}})})(jQuery);;function verify_postcode(element){element.parent().find('em').html('<img src="/_img/broadband/tick_small.gif" width="12" height="12" /> '+SETUP_POSTCODE_VALID_TEXT);element.next().removeClass('disabled');}
function checkPostCode(element,toCheck,googleCheck){var alpha1="[abcdefghijklmnoprstuwyz]";var alpha2="[abcdefghklmnopqrstuvwxy]";var alpha3="[abcdefghjkstuw]";var alpha4="[abehmnprvwxy]";var alpha5="[abdefghjlnpqrstuwxyz]";var pcexp=new Array();pcexp.push(new RegExp("^("+alpha1+"{1}"+alpha2+"?[0-9]{1,2})(\\s*)([0-9]{1}"+alpha5+"{2})$","i"));pcexp.push(new RegExp("^("+alpha1+"{1}[0-9]{1}"+alpha3+"{1})(\\s*)([0-9]{1}"+alpha5+"{2})$","i"));pcexp.push(new RegExp("^("+alpha1+"{1}"+alpha2+"?[0-9]{1}"+alpha4+"{1})(\\s*)([0-9]{1}"+alpha5+"{2})$","i"));pcexp.push(/^(GIR)(\s*)(0AA)$/i);pcexp.push(/^(bfpo)(\s*)([0-9]{1,4})$/i);pcexp.push(/^(bfpo)(\s*)(c\/o\s*[0-9]{1,3})$/i);pcexp.push(/^([A-Z]{4})(\s*)(1ZZ)$/i);var postCode=toCheck;var valid=false;for(var i=0;i<pcexp.length;i++){if(pcexp[i].test(postCode)){pcexp[i].exec(postCode);postCode=RegExp.$1.toUpperCase()+" "+RegExp.$3.toUpperCase();postCode=postCode.replace(/C\/O\s*/,"c/o ");valid=true;break;}}
if(googleCheck){_localSearch=new GlocalSearch();if(valid){_get_postcode_location(element,postCode,verify_postcode);}else{element.next().addClass('disabled');element.parent().find('em').html(SETUP_POSTCODE_TEXT);}}else{if(valid){return postCode;}else{return false;}}}
function _get_postcode_location(element,postcode,callbackFunction){element.parent().find('em').html('<img src="/_img/broadband/speedtest_new/spinner_small.gif" width="12" height="12" /> '+SETUP_POSTCODE_TEXT_CHECKING);_localSearch.setSearchCompleteCallback(null,function(){if(_localSearch.results[0]){var resultLat=_localSearch.results[0].lat;var resultLng=_localSearch.results[0].lng;var point=new GLatLng(resultLat,resultLng);callbackFunction(element);}else{element.parent().find('em').html(SETUP_POSTCODE_TEXT);}});_localSearch.execute(postcode+", UK");};$(document).ready(function(){$(".bubble").hover(function(){$(this).next(".popup_bubble").animate({opacity:"show",top:"10"},"fast");},function(){$(this).next(".popup_bubble").animate({opacity:"hide",top:"25"},"fast");});});;(function($){var products=$.products;products.bind('ready',function(){var main=$('#products'),form=$('#products_form'),wrap=$('#products_controls'),extra=$('#products_extra'),postcode=$('#postcode_form');$('#products_controls h2').click(function(){hideFilters();return false});$('.no_deals .reset,.reset_button').live('click',function(){$('#products_form').trigger('reset');return false;});$('.filters',extra).click(function(){if($(this).is('.act')){$(this).removeClass('act');hideFilters();return false}
else{$('li',extra).removeClass('act');wrap.slideDown(function(){products.advanced(1);form.submit();});return false;}});$('.close_button',wrap).click(function(){hideFilters();return false;});if($.browser.msie||$.browser.version<=7){$('.close_button, .reset_button').hover(function(){$(this).css('opacity','1');},function(){$(this).css('opacity','0.8');});}
$(document).bind('keyup',function(e){if(e.keyCode==27){$('#email, #share').hide();$('li.email, li.share').removeClass('act');hideFilters();}});function hideFilters(){$('#products_form').trigger('reset');wrap.slideUp(function(){$('#products_extra li.filters').removeClass('act');$('#filters_pointer').hide();if(!$.browser.msie||$.browser.version==7){$('#products_extra').hide().fadeIn('slow');}});return false;}
form.submit(function(){var data=form.serializeObject()
data['merchants[]']=data['merchants[]']||null;data['features[]']=data['features[]']||null;products.filter(data);return false;});form.bind('reset',function(){$('select',form).val('');$('.providers input:checkbox',form).attr('checked',true);$('.features input:checkbox',form).removeAttr('checked');var data=form.serializeObject()
data['merchants[]']=data['merchants[]']||null;data['features[]']=data['features[]']||null;data['postcode']=null;products.filter(data);return false;});$('input:checkbox',form).click(function(){form.submit();});$('select',form).change(function(){form.submit();});postcode.submit(function(){if($("#postcode2",this).val().split(' ').join('').length>=5&&$("#postcode2",this).hasClass('valid')){products.filter('postcode',$("#postcode2",this).val());}
return false;});$('#products_controls #postcode_form').checkPostcode();});products.bind('beforeSend',function(){$('#products_controls input, #products_controls select').attr('disabled',true)});products.bind('complete',function(){$('#products_controls input, #products_controls select').removeAttr('disabled')});products.bind('stateChange',function(){var wrap=$('#products_controls')
postcode=$('#postcode_form');if(products.advanced()&&$('#products_form').length){$('#products_form').unserialize(products.filter());wrap.show();}else{wrap.hide();}
if(products.filter('postcode')&&$('#products_form').length){if(!$('#postcode_output').length){$('#products_controls').append('<div id="postcode_output"><span class="icon_small"></span>Showing packages available in the <span class="postcode">'+products.filter('postcode')+'</span> area <span class="edit_location">Change location</span></div>')
$('#postcode_output .edit_location').click(function(){products.filter('postcode',null);return false;});postcode.hide();}}else{$('#postcode_output').remove();postcode.show();}
$('#postcode',postcode).val(products.filter('postcode'));});})(jQuery);$(document).ready(function(){if(!$.browser.msie||$.browser.msie&&$.browser.version>6){$("#main_home_illustration").hover(function(){$('#home .start_big_button').addClass('hover');},function(){$('#home .start_big_button').removeClass('hover');});};var flash_player=swfobject.getFlashPlayerVersion();if(flash_player.major<9){$('#intro_flash_off').show();$('.start_big_button').hide();$('#intro_js_on').hide();}
else{$('#intro_js_off').hide();$('#intro_js_on').show();$('#home .start_big_button').css('display','inline-block');$("#main_home_illustration").click(function(){$('#home .start_big_button').click();});}
$('#intro ul li').prepend('<span></span>');$('<li id="divider"></li>').insertAfter($('#site_nav_sections .site_nav_section .section_content.last').parent());$('#site_nav_sections .site_nav_section .section_content').hide();$('#site_nav_sections .site_nav_section .section_content').eq(0).show();if($('#site_nav_sections .site_nav_section h3.selected').length==0){$('#site_nav_sections .site_nav_section > h3:not(.selected)').click(function(){$('#site_nav_sections .site_nav_section > h3').removeClass('selected');$(this).addClass('active');switchSection($(this).next('.section_content'));});}
if(!$('#site_nav_sections .slide_header:first').hasClass('.selected')){$('#site_nav_sections .slide_header:first').addClass('first_slide');}
var cur_slide=$('#site_nav_sections .site_nav_section .section_content').eq(0);fluidContent(cur_slide);var slide_unit=50;function fluidContent(content){if(!$.browser.msie||$.browser.version>6){var content_height=$(content).innerHeight();var site_nav_height=490
if(content_height>400){site_nav_height=content_height+100}
$('#site_nav').css('height',site_nav_height);}}
function switchSection(section){$('#site_nav_sections .site_nav_section .section_content').fadeOut('fast').next('.types_all').fadeOut();if(!$('#site_nav_sections .slide_header:first').hasClass('.selected')){$('#site_nav_sections .slide_header:first').removeClass('first_slide');}
$(section).fadeIn(function(){$('#site_nav_sections .site_nav_section > h3').removeClass('selected');$(section).prev('h3').removeClass('active').addClass('selected');}).next('.types_all').fadeIn();$('#selected_slide').fadeOut();fluidContent(section);}});;var deeplink=new $.deeplink();var testStarted=false;var stepsHeight;var down_speed=0;var up_speed=0;var slide_location=0;var provider_index=0;var timetrials_index=1;var retest=false;var skc_data=0;var prov_name=0;var geo_isp_id=0;user_data=new(user);function user(connection_type,postcode,location,provider,rating){this.test_id=0;this.connection_type=1;this.postcode=0;this.location_data=new(location);this.provider=0;this.rating=0;this.provider_data=new(provider);function location(id,name,long,lat){this.id=0;this.name=0;this.long=0;this.lat=0;this.exchange_id=0;}
function provider(id,name,image_url){this.id=0;this.name=0;this.image_url='/_img/0.gif';}}
email=10;software=150;album=400;movie=6000;youtube=60;photos=50;$.track={pageView:function(url){if(_gaq){_gaq.push(['_trackPageview',url]);}
return false;}};$.track.speedtest={_base:"/broadband/speedtest/virtual/",url:{}};$.track.speedtest.url={setup:$.track.speedtest._base+"setup",test:$.track.speedtest._base+"test",results_summary:$.track.speedtest._base+"results/summary",results_streetstats:$.track.speedtest._base+"results/streetstats",results_timetrials:$.track.speedtest._base+"results/timetrials"};$.track.speedtest.trackId=function(actionElementId){if(!actionElementId)return false;var id=actionElementId.replace(/^\#/,'');if(id=="results"){id="results_summary";}
if($.track.speedtest.url[id]){$.track.pageView($.track.speedtest.url[id]);return true;}else{return false;}};$(document).ready(function(){if(deeplink.get('speedtestID')){hasSpeedTestID()}
deeplink.bind('speedtestIDChange',function(){});deeplink.bind('speedtestIDRemove',function(){});function hasSpeedTestID(changed){$('#test_page .intro').hide();$('#setup').hide();nextPage();$.getJSON('/_ajax/speedtest.php?action=test&id='+deeplink.get('speedtestID'),function(data){user_data.test_id=data.id;user_data.postcode=data.postcode;if(data.provider_name!=null){user_data.provider_data.name=data.provider_name;}
else{user_data.provider_data.name='Unknown';}
user_data.rating=data.rating;up_speed=data.upload;down_speed=data.download;user_data.location_data.id=data.exchange_id;user_data.location_data.name=data.exchange_name;user_data.location_data.long=data.longitude;user_data.location_data.lat=data.latitude;skc_data=JSON.stringify(data.availability)
retrieveTest(down_speed,up_speed,skc_data);});$('#fancy_overlay').addOverlay();}
$('.provider_select select, .provider_select option[label="----------------"]').attr('disabled','disabled');$('#home').show();$('#location_autosuggest').suggestLocation();$('#content_header ol li').append('<span class="step_counter"></span>');var user_provider=0;$('#setup .column ul li').live('mouseover mouseout',function(event){if(event.type=='mouseover'){$(this).addClass('hover');}else{if(!$(this).hasClass('complete')){$(this).removeClass('hover');}}});var $setupConnections=$('li.connection li');var $providerConnections=$('li.provider li');$setupConnections.live('click',function(){if($('#end_of_setup .start_big_button').is(":hidden")){$setupConnections.addClass('faded').removeClass('selected').find('.tooltip, #location_autosuggest').hide();$('.provider_select select, .provider_select option').attr('disabled','disabled');$('.connection li').each(function(index){if($(this).find('.location_done').size()==0){$(this).find('em:first').show();}});if(!$(this).hasClass('connection_edit')){$setupConnections.find('h4').show();$setupConnections.find('form').hide();if(!$setupConnections.hasClass('selected')){$(this).addClass('selected').removeClass('faded');$(this).find('form, form em').show();$(this).find('h4, em:first').hide();$(this).find('.location_done').remove();}else{$setupConnections.toggleClass("selected faded");}
$(this).removeClass('complete');$('.provider, .rating').removeClass('stActive').addClass('disabled');$(this).find('.tooltip').show();$('input:text:first',this).focus().trigger('keyup');}else{$(this).hide();$('.connection .connection_mobile_broadband, .connection .connection_business_broadband').show();$('.connection .connection_home_broadband').show().click();}}
return false;});$('li.connection li:not(.connection_mobile_broadband) input:text').bind('keydown',function(){$(this).valid();});$('li.connection li:not(.connection_mobile_broadband) input:text').keyup(function(e){value=$(this).val();if(value.length>=5){user_data.postcode=$(this).val();checkPostCode($(this),value,true);}else{$(this).next().addClass('disabled');}});$(".connection input:text").bind('focus keypress',function(e){if((e.which&&e.which==13)||(e.keyCode&&e.keyCode==13)){$(this).parent().find('input:submit').click();return false;}else{return true;}});$('.connection input.setup_button').click(function(event){if($('#end_of_setup .start_big_button').is(":hidden")){event.stopPropagation();var oldConnectionType=user_data.connection_type;if(!$(this).is('.disabled')){$('.tooltip').hide();$setupConnections.removeClass('complete').find('.complete_badge').remove();$(this).parent().parent().completeChoice();user_data.postcode=$(this).parent().find('input:text').val();if($(this).parent().parent().is('.connection_home_broadband')){user_data.connection_type=1;}
else if($(this).parent().parent().is('.connection_mobile_broadband')){user_data.connection_type=2;}
else if($(this).parent().parent().is('.connection_business_broadband')){user_data.connection_type=3;}
if(user_data.connection_type!=2){location_text=user_data.postcode.toUpperCase();}else{location_text=user_data.postcode;if(location_text.length>26){location_text=location_text.substring(0,23)+'...';}}
initMaps();$(this).parent().hide();$(this).parent().parent().find('h4').show();$(this).parent().parent().find('em:first').hide().after('<em class="location_done">'+location_text+'</em>');if(oldConnectionType!=user_data.connection_type){detectProviders(true);}else{unlockProviders();}}}
return false;});$providerConnections.live('click',function(){if($('#end_of_setup .start_big_button').is(":hidden")){if(!$('li.provider').hasClass('disabled')){$providerConnections.removeClass('selected');$('li.provider li').not(this).addClass('faded');if(!$providerConnections.hasClass('selected')){$(this).addClass('selected').removeClass('faded');}else{$providerConnections.toggleClass("selected faded");}
if($(this).hasClass('provider')){$('.chosen_provider').hide();$('li.provider li').removeClass('complete selected').find('.complete_badge').remove();activateRating();$(this).completeChoice();}else if($(this).hasClass('provider_select')){$('#setup li.provider_select img').remove();$('.chosen_provider').hide();$('#provider').show();}else if($(this).hasClass('not_in_list')){$providerConnections.removeClass('complete').find('.complete_badge').remove();activateRating();$(this).completeChoice();}else if($(this).hasClass('not_sure')){$providerConnections.removeClass('complete').find('.complete_badge').remove();activateRating();$(this).completeChoice();}
if(!$(this).hasClass('provider_select')){user_data.provider_data.id=$(this).find('input.id').val();user_data.provider_data.name=$(this).find('input.name').val();user_data.provider_data.image_url=$(this).find('input.image_url').val();}}}});$('select#provider').change(function(){user_data.provider_data.id=$(this).val();$(this).parent().parent().find('li').addClass('faded').removeClass('complete').removeClass('hover');$providerConnections.removeClass('complete').find('.complete_badge').remove();$(this).parent().addClass('selected').removeClass('faded complete').find('.tooltip').hide();$(this).parent().find('.complete_badge, p').remove();$(this).parent().completeChoice();if($(this).val()==parseInt($(this).val())){activateRating();}else{$(this).parent().find('.complete_badge, p').remove();$('.rating').removeClass('stActive').addClass('disabled');}
Cufon.replace('.rating .sifr');user_data.provider_data.id=$('#setup .provider select').val();getProviderData(user_data.provider_data.id);return false;});function activateRating(){$('.provider li').removeClass('hover');$('.rating').addClass('stActive').removeClass('disabled');}
$("#setup ol li:not('.disabled') .change_provider").live('click',function(){$('select#provider').empty().append('<option label="Select provider">Loading...</option>').attr('disabled','disabled');$('.provider .provider, .change_provider').hide();$('.provider .provider_select, .provider .provider_other').removeClass('faded').fadeIn();chooseOtherProvider();return false;});$('#setup li.rating li').live('click',function(){if($('#end_of_setup .start_big_button').is(":hidden")){if(!$('li.rating').hasClass('disabled')){user_data.rating=$(this).find('input').val();$(this).addClass('selected').completeChoice();$('li.rating').addClass('complete');$('a.change_provider').hide();$('li.column').append('<div class="noFiddle"></div>');$('.provider_select select').attr('disabled','disabled');showSetup();$('.terms p strong').show();}}});$('#end_of_setup #edit_link').click(function(){if($.browser.msie){$('#setup #end_of_setup .start_big_button').hide();}else{$('#setup #end_of_setup .start_big_button').fadeOut();}
$('.copy ol li').removeClass('stActive').addClass('disabled').find('li').remove('.complete_badge').removeClass('complete selected').find('.tooltip').hide();$('.copy ol li').first().removeClass('disabled').addClass('stActive').find('li').removeClass('disabled faded').children().attr('style','').remove('.location_done');$('.copy ol li .noFiddle').remove();$('#steps_wrapper').css('height',stepsHeight);$('#setup ol li.rating ul li').slideDown(function(){});detectConnection();detectProviders();return false;});$('#end_of_setup .start_big_button').click(function(){if(testStarted==false){$('.terms p strong').hide();$('#test').addOverlay();startTest();testStarted=true;return false;}});$('#retest').click(function(){$('#test_page .intro h2').text('Testing your connection, hold on to your seat!');Cufon.replace('#test_page .intro h2');$('#test_page .copy .loading_overlay').hide();$('.js_generated').remove();provider_index=0;timetrials_index=1;$('#table_nav .prev').hide();$('#table_nav .next').show();$('.slide_0').removeClass('hidden');$('#steps_wrapper').css('height',$('#test_page .copy').innerHeight()+50);$('.slide_indicator li').not('.lit').remove();$('.terms').addClass('setup_screen');previousPage('#test');callFlashTest(user_data.postcode);$('.results_summary a').click();retest=true;return false;});var tabs=[];var tabContainers=[];var tab_switching=false;$('ul.tabs a').each(function(){tabs.push(this);tabContainers.push($(this.hash).get(0));});$(tabContainers).hide().filter(':first').show();$(tabs).click(function(){if($(this).parent().hasClass('selected')){return false;}
if(!tab_switching){tab_switching=true;if($.browser.msie){$(tabContainers).hide().filter(this.hash).show();}else{$(tabContainers).hide().filter(this.hash).fadeIn();}
$(tabs).parent().removeClass('selected');$(this).parent().addClass('selected');if(!$('#results_timetrials thead th').eq(2).hasClass('hidden')){$('#results_timetrials .prev').hide();}
tab_switching=false;$.track.speedtest.trackId(this.hash);return false;}});$('.test_stats').live('mouseover',function(){$(this).providerMoreInfoFancybox();});$('#fastest_providers td a').live('mouseover',function(){$(this).fancybox({'width':860,'height':620,'onComplete':function(){hoverPopUpTable()}})});resultsComparisonPagination();resultsTimeTrialsPagination()
$('#content_header ol li a').click(function(){return false;});});function startTest(){$('#end_of_setup .start_big_button').click(function(){return false;});$('#steps_wrapper').css('height',$('#test_page .copy').innerHeight()+50);callFlashTest(user_data.postcode);$('#test_holder .loading_large').css('line-height',$('#test_page').height()+'px');nextPage('#test');}
function showSetup(){$('#setup ol > li li.complete').addClass('hover');$('#setup ol > li li:not(.complete)').slideUp('normal',function(){if($.browser.msie){$('#setup #end_of_setup .start_big_button').show();}else{$('#setup #end_of_setup .start_big_button').fadeIn();}
if(!$.browser.msie||$.browser.version>6){$('#steps_wrapper').css('height',$('#setup .copy').innerHeight()+50);}});}
$.fn.completeChoice=function(){if($.browser.msie){$(this).addClass('complete').append('<div class="complete_badge"></div>').find('.complete_badge').show();}else{$(this).addClass('complete').append('<div class="complete_badge"></div>').find('.complete_badge').fadeIn();}}
$.fn.suggestLocation=function(){var timer=null;var acListTotal=0;var acListCurrent=0;var acSearchField=$('input#setup_connection_location');var acResults=$('#location_autosuggest ul');var suggest_box=$(this);var search_location='/_ajax/speedtest.php?action=location&search=london';$('li.connection_mobile_broadband:not(.complete) #setup_connection_location').live('click',function(){if($(this).val().length>2){search_location='/_ajax/speedtest.php?action=location&search='+$(this).val();$.getJSON(search_location,function(ajax_response){$(suggest_box).show().find('ul').empty();var loc_counter=0;$.each(ajax_response,function(k,v){loc_counter++;if(loc_counter<9){$('#location_autosuggest ul').append('<li><span tabindex="'+k+'">'+v.name+'</span><input class="loc_id" val="'+v.id+'" /><input class="loc_long" val="'+v.long+'" /><input class="loc_lat" val="'+v.lat+'" /></li>');}});if($('#location_autosuggest ul li').length==0){$(suggest_box).find('ul').hide();$(suggest_box).find('div').html("<h2><em></em> Error</h2><p>This isn't a valid location, please enter something else.").show();}else{$(suggest_box).find('ul').show();$(suggest_box).find('div').hide();}
acListTotal=$('#location_autosuggest ul li').length;$('#location_autosuggest li').click(function(){$('#setup_connection_location').val($('span',this).text()).next('.setup_button').removeClass('disabled').removeAttr('disabled');user_data.location_data.name=$('span',this).html();user_data.location_data.id=$('.loc_id',this).attr('val');user_data.location_data.long=$('.loc_long',this).attr('val');user_data.location_data.lat=$('.loc_lat',this).attr('val');user_data.connection_type=2;$(suggest_box).hide();$('li.connection_mobile_broadband input.setup_button').click().blur();return false;});$('#location_autosuggest li:first span').addClass('hover');$('#location_autosuggest li').hover(function(){var span=$(this).find('span');$('#location_autosuggest li span').removeClass('hover');span.addClass('hover');acListCurrent=span.attr('tabindex');});});}});$('li.connection_mobile_broadband:not(.complete) #setup_connection_location').live('keyup',function(e){var keyCode=e.keyCode||window.event.keyCode;var lastVal=acSearchField.val();var self=this;if(updownArrow(keyCode)){return;}
if(keyCode==13){acResults.find('li span.hover').click();return;}
clearInterval(timer);if($(this).val().length>2){timer=setInterval(function(){clearInterval(timer);search_location='/_ajax/speedtest.php?action=location&search='+$(self).val();$.getJSON(search_location,function(ajax_response){$(suggest_box).show().find('ul').empty();var loc_counter=0;$.each(ajax_response,function(k,v){loc_counter++;if(loc_counter<9){$('#location_autosuggest ul').append('<li><span tabindex="'+k+'">'+v.name+'</span><input class="loc_id" val="'+v.id+'" /><input class="loc_long" val="'+v.long+'" /><input class="loc_lat" val="'+v.lat+'" /></li>');}});if($('#location_autosuggest ul li').length==0){$(suggest_box).find('ul').hide();$(suggest_box).find('div').html("<h2><em></em> Error</h2><p>This isn't a valid location, please enter something else.").show();}else{$(suggest_box).find('ul').show();$(suggest_box).find('div').hide();}
acListTotal=$('#location_autosuggest ul li').length;$('#location_autosuggest li').click(function(){detectProviders(true);$('#setup_connection_location').val($('span',this).text()).next('.setup_button').removeClass('disabled').removeAttr('disabled');user_data.location_data.name=$('span',this).html();user_data.location_data.id=$('.loc_id',this).attr('val');user_data.location_data.long=$('.loc_long',this).attr('val');user_data.location_data.lat=$('.loc_lat',this).attr('val');user_data.connection_type=2;$(suggest_box).hide();$('li.connection_mobile_broadband input.setup_button').click().blur();return false;});$('#location_autosuggest li:first span').addClass('hover');$('#location_autosuggest li').hover(function(){var span=$(this).find('span');$('#location_autosuggest li span').removeClass('hover');span.addClass('hover');acListCurrent=span.attr('tabindex');});});},300);}
else{$('#location_autosuggest').hide();}});function updownArrow(keyCode){if(keyCode==40||keyCode==38){if(keyCode==38){if(acListCurrent==0||acListCurrent==-1){acListCurrent=acListTotal-1;}else{acListCurrent--;}}else{if(acListCurrent==acListTotal-1){acListCurrent=0;}else{acListCurrent++;}}
acResults.children().each(function(i){if(i==acListCurrent){acSearchField.val($(this).find('span').text());$(this).find('span').attr('class','hover');}else{$(this).find('span').attr('class','blur');}});return true;}else{acListCurrent=0;return false;}}}
function plotBars(speeds){if(down_speed>speeds[0]){var top_speed=down_speed;}
else{var top_speed=speeds[0];}
var scale_plot=0;var s=0;var step=1;var scale=10;if(top_speed<=5){var step=1;scale=Math.round(top_speed);}
else if(top_speed<=20){var step=2;scale=Math.round(parseInt(top_speed)/2)*2;}
else if(top_speed<30){var step=5;scale=Math.round(parseInt(top_speed)/5)*5;}
else if(top_speed>=30){var step=10;scale=Math.round(parseInt(top_speed)/10)*10;}
$('#results_scale').empty();for(i=0;i<scale;i=i+step){scale_plot=scale-i;s++;$('#results_scale').append('<li><span>'+scale_plot+'Mb</span></li>')}
$('#results_scale li').css('height',parseInt(220/s));$('#results_comparison #speed_bars').empty();var speed_height=220*((Math.round(down_speed*100/scale))/100);$('#results_comparison .user_result .speed_bar').css('height',speed_height);for(i in speeds){var speed_height=220*((Math.round(speeds[i]*100/scale))/100);$('#results_comparison #speed_bars').append('<li><span class="vertical_bar"></span></li>');var scale_height=$('#results_comparison #speed_bars li').eq(0).innerHeight();if(speed_height!=0){if(speed_height>220){$('#results_comparison #speed_bars li').eq(i).css('height',speed_height);}
if(i>0){$('#results_comparison #speed_bars li').eq(i).css('height',scale_height);}
$('#results_comparison #speed_bars li').eq(i).find('span').css('height',speed_height);}
else{var no_data_label='<p>(not enough <br />speed tests)</p>';$('#results_comparison #speed_bars li').eq(i).find('span').addClass('no_data').append(no_data_label);}}
if(!retest){if(user_data.connection_type==2){$('#fastest_broadband h3').append(' '+user_data.location_data.name);}
else{$('#fastest_broadband h3').append(' '+user_data.postcode.toUpperCase());}
Cufon.replace('#fastest_broadband h3');}}
function resultProvider(down_speed,up_speed){$('.user_result .speed_bar em').attr('class','rating_'+user_data.rating);$('.user_result .vertical_bar').html(down_speed);if(down_speed<2){$('.user_rating').addClass('low_speed');}
var makeImage=true;makeImage=(user_data.provider_data.image_url=='0')?false:makeImage;makeImage=(user_data.provider_data.image_url=='/_img/0.gif')?false:makeImage;makeImage=(user_data.provider_data.name==''||user_data.provider_data.name=='Unknown')?false:makeImage;if(makeImage){$('.user_result .provider_row').html($.image({src:user_data.provider_data.image_url,width:60,height:50,alt:user_data.provider_data.name,mode:'fill',depth:32}));if($.browser.msie&&$.browser.version<7){$('.user_result .provider_row img').ifixpng();}}else{$('.user_result .provider_row').html('<h2>'+user_data.provider_data.name+'</h2>');if(user_data.provider_data.name.length>12){$('.user_result .provider_row h2').css('margin-top',0)}}
$('.user_result .download_speed , #timetrials_header .download_speed > p').html('<span>'+down_speed+'Mb</span>');$('.user_result .upload_speed , #timetrials_header .upload_speed > p').html(up_speed+'Mb');$('#timetrials_header .rating_box span').attr('class','rating_'+user_data.rating);$('#timetrials_header .email_row > p').html(calcTime(email,down_speed));$('#timetrials_header .software_row > p').html(calcTime(software,down_speed));$('#timetrials_header .album_row > p').html(calcTime(album,down_speed));$('#timetrials_header .movie_row > p').html(calcTime(movie,down_speed));$('#timetrials_header .youtube_row > p').html(calcTime(youtube,down_speed));$('#timetrials_header .photos_row > p').html(calcTime(photos,down_speed));}
function resultRatings(){if(down_speed<2){$('table#results_comparison_table thead th.user_column em').addClass('low_speed');}}
function callFlashTest(postcode){$('#test_holder').addOverlay();var flashvars=false;var params={"allowScriptAccess":"always","wmode":"transparent","loop":"false"};var attributes={"allowScriptAccess":"always","wmode":"transparent"};var flashvars={configExtension:"xml"};swfobject.embedSWF("/_swf/speed_test/speedtest.swf?v=2.1.8","test_flash","918","450","9.0.0",flashvars,params,attributes);}
function nextPage(destination,retrieved_test){var rt=false;if(retrieved_test){rt=true}
if(!$.browser.msie||$.browser.version>6){slide_location=slide_location-918;}
else{if(destination=='#setup'){slide_location=slide_location-990;}
else{if(rt){slide_location=slide_location-985;}
else{slide_location=slide_location-918;}}}
$('#main_home_illustration').fadeOut('fast');$('#steps_wrapper').animate({left:slide_location},500,function(){if(destination=='#setup'){detectConnection();}});updateStepCounter(destination);return false;}
function previousPage(destination){slide_location=slide_location+918;$('#steps_wrapper').animate({left:slide_location},500,function(){return false;});updateStepCounter(destination);return false;}
function goToPage(page){window.location.hash=page;updateStepCounter(page);}
function updateStepCounter(current){$('#content_header ol li').removeClass('current');$('#content_header ol li a').each(function(){if($(this).attr('href')==current){$(this).parent().addClass('current');}});$.track.speedtest.trackId(current);return false;}
function test_started(test_count,server_id){}
function test_completed(download_speed,upload_speed,latency,server_id){var down=download_speed/1024;var up=upload_speed/1024;$.get('/_ajax/speedtest.php?action=availability',{"postcode":user_data.postcode},function(data){generateResults(down,up,data);});$('#test_page .intro h2').text('Please wait a moment...');Cufon.replace('#test_page .intro h2');}
function generateResults(down,up,skcid){var connectione_done=$('.column.connection .location_done');var location_type_cookie=$(connectione_done).parent().attr('id');var location_cookie=$(connectione_done).html();var options={path:'/',expires:10};try{$.cookie('location',location_cookie,options);$.cookie('location_type',location_type_cookie,options);}catch(err){}
skc_data=skcid;down_speed=Math.round(down*10)/10;up_speed=Math.round(up*10)/10;$.post('/_ajax/speedtest.php?action=save',{upload:up,download:down,provider:user_data.provider_data.id,connection_type:user_data.connection_type,postcode:user_data.postcode,rating:user_data.rating,long:user_data.location_data.long,lat:user_data.location_data.lat,location:user_data.location_data.id,availability:skc_data,isp_id:geo_isp_id},function(data){if(!data.error){user_data.test_id=data.id;deeplink.add('speedtestID',data.id);}
if(retest){$('.user_rating .download_speed').text(down_speed+'Mb');$('.user_rating .upload_speed').text(up_speed+'Mb');}
$('#results_page .intro h2').empty().append(SPEEDTEST_RESULTS_PAGE_HEADER);Cufon.replace('#results_page .intro h2');$('#steps_wrapper').css('height','auto');$('.terms').removeClass('setup_screen');$('#test_holder').empty().append('<div id="test_flash"></div>');latlong_check=setInterval(function(){if(user_latlng){resultProvider(down_speed,up_speed);getResultsData();resultRatings();if(user_data.connection_type!==2){$.products.advanced(true);$.products.filter('postcode',user_data.postcode);}else{$.products.advanced(true);}
$('#filters_pointer').fadeOut();if(!retest){availabilityBox();}
nextPage('#results');$('#results_page').fadeIn();clearInterval(latlong_check);}},1000);});$('.speedmap_promo .download_header span').empty().append(down_speed+'Mb');$('.speedmap_promo .upload_header span').empty().append(up_speed+'Mb');$('.speedmap_promo .provider_header p span').empty();if(user_data.provider_data.name!=null||user_data.provider_data.name!=0){var p_name=user_data.provider_data.name;}
else{var p_name='Unknown';}
setProviderName(p_name);var makeImage=true;makeImage=(user_data.provider_data.image_url=='0')?false:makeImage;makeImage=(user_data.provider_data.image_url=='/_img/0.gif')?false:makeImage;makeImage=(user_data.provider_data.name==''||user_data.provider_data.name=='Unknown')?false:makeImage;if(makeImage){$('.speedmap_promo .provider_header').find('img').remove().end().prepend($.image({src:user_data.provider_data.image_url,width:60,height:50,alt:user_data.provider_data.name,mode:'fill',depth:32}));}
else{$('.speedmap_promo .provider_header').find('img').remove();}
Cufon.replace('.speedmap_promo .header_info');}
function load_setup(){var in_progress=false;$('#home #intro .new_button span').text(BEGIN_SPEEDTEST_BUTTON_TEXT);$('#home .start_big_button').click(function(){if(!in_progress){in_progress=true;nextPage('#setup');$('#content_header ol').show();stepsHeight=$('#setup .copy').innerHeight()+50;$('#steps_wrapper').css('height',stepsHeight);$('.terms').addClass('setup_screen');detectProviders();return false;}
else{return false;}
in_progress=false;});}
function getProviderData(merchant){$.getJSON("/_ajax/speedtest.php?action=provider&id="+merchant+"&menu_id="+menu_id,function(data){if(data.error==undefined){$('#setup.detected .provider li.provider select').hide();user_data.provider_data.id=merchant;user_data.provider_data.name=data.name;$('select#provider').hide().after('<p class="chosen_provider">'+user_data.provider_data.name+'</p>');if(typeof data.images.merchant_logo=='object'&&data.name!=''){$('.chosen_provider').remove();$('#setup li.provider_select').append($.image({src:data.images.merchant_logo.IMAGE_URL,width:60,height:50,alt:data.name,mode:'fill',depth:32}));$('#setup li.provider_select img').hide().fadeIn();user_data.provider_data.image_url=data.images.merchant_logo.IMAGE_URL;}else{user_data.provider_data.image_url==0
$('.chosen_provider').fadeIn();}}
else{user_data.provider_data.id=$('#setup .provider select').val();user_data.provider_data.name=$('#setup .provider select option[value='+user_data.provider_data.id+']').attr('label');}});}
function getProductTable(url,selected_col){$('#products .loading_overlay').show();$('#products .loading_large').show();$.get(url,function(data){$('#results_page #products').empty().append(data);if($('#results_page #products table tbody tr').length==0){$('#results_page #products').remove();$('h2.products_header').remove();$('#steps_wrapper').css('height','990px');}
$("table tbody a.button").external({toolbar:1,scrollbars:1,location:1,statusbar:1,menubar:1,resizable:1,width:800,height:600,left:100,top:150});$.get('/_js/broadband/product_table_new.js',function(data){$('head').append('<script type="text/javascript">'+data+'</script>');});$('#results_page #products table thead th.'+selected_col).addClass('selected');$('#results_page #products table thead th#'+selected_col).addClass('selected');$('#results_page #products table tbody td.'+selected_col).addClass('selected');$('#products .loading_overlay').hide();$('#products .loading_large').hide();$('#results_page #products table').css('height',$('#products').innerHeight());$('#results_page #products table').stickyheader();});}
$.fn.addOverlay=function(){$(this).append('<div class="loading_overlay"><span class="loading_large"><span class="sifr"><img src="/_img/broadband/speedtest_new/spinner_big.gif" width="32" height="32" /> Loading...</span></span></div>');}
$.fn.providerFancybox=function(){$(this).fancybox({'width':855,'height':580,'callbackOnStart':function(){overlay_height=$('#fancy_overlay').height()+'px';$('#fancy_close').empty().append('Close<span></span>');$('#fancy_overlay .loading_overlay').css('line-height',overlay_height).show();},'callbackOnShow':function(){Cufon.replace('#fancybox-inner .sifr');$('#fancy_overlay .loading_overlay').hide();$("#fancybox-inner a[href^='/go/']").external({toolbar:1,scrollbars:1,location:1,statusbar:1,menubar:1,resizable:1,width:800,height:600,left:100,top:150});$('#fancybox-inner #products .monthly_cost .conditions').wrap('<div class=\"bubble_wrap\"></div>');var in_progress=false;$('#fancybox-inner #products .monthly_cost .conditions_link').live('mouseover',function(){if(in_progress==false){in_progress=true;$(this).parent().find('.conditions .cost').remove();$(this).parent().find('.conditions').prepend($(this).prev('.cost').clone().append('a month')).fadeIn('fast');}});$('#fancybox-inner #products .monthly_cost .conditions_link').live('mouseout',function(){$(this).parent().find('.conditions').fadeOut('fast',function(){$(this).find('.cost').remove();in_progress=false});});},'callbackOnClose':function(){$('#fancybox-inner').empty();$('#products table').stickyheader();}})}
function calcTime(size,speed){if(speed>0){var sec_s=' Seconds';var min_s=' Minutes';var hrs_s=' Hr';var sec=Math.round(parseInt(size/(speed/8))*10)/10;var min=Math.floor(sec/60);sec=sec%60;if(sec==1){sec_s=' Second'}
if(sec<1){time_stamp='Less than a second'}
else{time_stamp=sec+sec_s};var hrs=Math.floor(min/60);min=min%60;if(min==1){min_s=' Minute'}
if(min>0){time_stamp=min+min_s;}
hrs=hrs%60;if(hrs>0){sec=Math.round(parseInt(size/(speed/8))*10)/10;time_stamp=Math.floor(sec/60)+' '+min_s;}
return time_stamp;}
else{return'-';}}
$.fn.enableConnection=function(){$(this).addClass('selected').removeClass('faded').show();$(this).find("input[type='text']").click();return false;}
function hasNumbers(t){return /\d/.test(t);}
function detectConnection(){$('.connection .connection_mobile_broadband').hide();$('.connection .connection_business_broadband').hide();$('.connection .connection_home_broadband').hide();if(home_type==0&&mobile_type==0&&business_type==0){$('.connection_edit').hide();$('.connection .connection_mobile_broadband').show();$('.connection .connection_business_broadband').show();$('.connection .connection_home_broadband').show().click();}
else{if(home_type==1){$('.connection .connection_home_broadband').show().addClass('detected')
if(mobile_type==0&&business_type==0){$('.connection .connection_home_broadband').enableConnection();}}
if(mobile_type==1){$('.connection .connection_mobile_broadband').show().addClass('detected');if(home_type==0&&business_type==0){$('.connection .connection_mobile_broadband').enableConnection();}}
if(business_type==1){$('.connection .connection_business_broadband').show().addClass('detected');if(mobile_type==0&&home_type==0){$('.connection .connection_business_broadband').enableConnection();}}
$('.connection_edit').removeClass('faded disabled').show();}
if(hasNumbers($.cookie('location'))){$('li.connection li').not('.connection_mobile_broadband').find('input[type=text]:first').val($.cookie('location'));$('li.connection li.selected').not('.connection_mobile_broadband').find('input[type=text]:first').click();}else{if(!$.cookie('location')==null){$('.connection_mobile_broadband').find('input[type=text]').val($.cookie('location')).focus();}}}
$.fn.providerMoreInfoFancybox=function(){var merchant=$(this).next('.provider_id').val();var container=$('#provider_more_info');$.getJSON("/_ajax/speedtest.php?action=provider&id="+merchant+"&exchange="+user_data.location_data.exchange_id+"&connection_type="+user_data.connection_type+"&menu_id="+menu_id,function(data){$('.info_total_tests span').empty().append(data.speedtest_stats.tests);$('.info_average_speed span').empty().append(data.speedtest_stats.download_speed+'Mb');$('.info_fastest_recorded span').empty().append(data.speedtest_stats.fastest+'Mb');$('.more_info_stats img').remove();$('.more_info_stats').prepend($.image({src:data.images.merchant_logo.IMAGE_URL,width:60,height:50,alt:data.name,mode:'fill',depth:32}));$('.more_info_text h4').empty().append('About '+data.name);$('.more_info_text > div').empty().append(data.text);});$(this).fancybox({'width':583,'height':343,'onStart':function(){$('.product_info.product, #provider_more_info').show();overlay_height=$('#fancy_overlay').height()+'px';},'onComplete':function(){addCloseText();Cufon.replace('#fancy_content .top10font');var in_progress=false;},'onClosed':function(){$('.info_total_tests span').empty();$('.info_average_speed span').empty();$('.info_fastest_recorded span').empty();$('.info_stats img').remove();$('.more_info_text h4').empty();$('.#more_info_text > div').empty();$('#provider_more_info').hide();}})}
function availabilityBox(){var sc=0;$.ajax({url:"/_ajax/speedtest.php",data:'action=providers_availability&availability='+skc_data,dataType:"json",success:function(ajax_response){$.each(ajax_response,function(k,v){if(k==50){sc=2;if(v.length>0){$('#broadband_availability li').eq(sc).find('.cross_icon').removeClass('cross_icon').addClass('tick_icon');}}
if(k==24){sc=1;if(v.length>0){$('#broadband_availability li').eq(sc).find('.cross_icon').removeClass('cross_icon').addClass('tick_icon');}}
if(k==8){sc=0;if(v.length>0){$('#broadband_availability li').eq(sc).find('.cross_icon').removeClass('cross_icon').addClass('tick_icon');}}
var punct=',';for(i=0;i<v.length;i++){if(i==v.length-1){punct='.';}
$('#broadband_availability li').eq(sc).find('p.list').show().append(' <a href="/_ajax/speedtest.php?action=products&provider='+v[i].provider_id+'&menu_id='+menu_id+'">'+v[i].provider_name+'</a>'+punct).end().find('p.na').hide().end().find('a').providerFancybox();}});}});}
function getResultsData(){var t=0;var prov_speeds=[0];$('#results_comparison > *').css('visibility','hidden');$.getJSON('/_ajax/speedtest.php?action=providers&lat='+user_latlng.y+'&lon='+user_latlng.x+'&connection_type='+user_data.connection_type+'&availability='+skc_data+'&menu_id='+menu_id,function(ajax_response){if(ajax_response.tests!=0&&typeof ajax_response.exchange=='object'){$('#results_summary #result_subtitle').html('Based on '+ajax_response.tests+' speed tests from the '+ajax_response.exchange.exchange_name+' telephone exchange.');user_data.location_data.exchange_id=ajax_response.exchange.exchange_id;}
$.each(ajax_response.providers,function(k,v){if(v.speedtest_stats.download_speed==0){dw='-';up='-';}
else{var dw=Math.round(v.speedtest_stats.download_speed*10)/10;var up=Math.round(v.speedtest_stats.upload_speed*10)/10;}
var download_data=dw+'Mb';var more_info_data='<a href="#provider_more_info" class="test_stats">more info</a><input type="hidden" value="'+v.id+'" class="provider_id" />'
if(typeof v.images.merchant_logo=='object'){var provider_logo=$.image({src:v.images.merchant_logo.IMAGE_URL,width:65,height:39,alt:v.name,mode:'fill',depth:32});}
else{var provider_logo='<span class="text_only_logo">'+v.name+'</span>';}
var upload_data=Math.round(v.speedtest_stats.upload_speed*10)/10+'Mb';var average_label='average speed';if(v.speedtest_stats.tests==0){download_data='-';upload_data='-';}
$('#results_comparison_list').append('<li><div class="provider_row">'+provider_logo+'</div><div class="download_speed"><span>'+download_data+'<p class="average_label">Avg. of '+v.speedtest_stats.tests+' tests '+more_info_data+'</p></span></div><div class="upload_speed">'+upload_data+'</div><div class="action"><span class="price">'+v.name+'<br />from &#163;'+v.from_price+'</span><input type="hidden" value="'+v.retailer_popup+'" class="popup_width" /><a class="new_button new_big_button big_btn_red" href="'+v.track_url+'"><span>'+SPEEDTEST_RESULTS_DEALS_LINK+'</span></a></li>');$('#timetrials_header #provider_logos #sliding_content').append('<div class="provider_logo">'+provider_logo+'<p class="average_label">Avg. of '+v.speedtest_stats.tests+' tests</p></div>');$('#timetrials_results #tt_scrolling_window').append('<div class="column_holder"><h4></h4><ul><li><p>'+calcTime(email,dw)+'</p></li><li><p>'+calcTime(software,dw)+'</p></li><li><p>'+calcTime(album,dw)+'</p></li><li>'+calcTime(movie,dw)+'</li></ul><h4></h4><ul><li><p>'+calcTime(youtube,up)+'</p></li><li><p>'+calcTime(photos,up)+'</p></li></ul><h4></h4><ul><li class="download_speed"><p>-</p></li><li class="upload_speed"><div></div><p class="upload_speed_big_grey">-</p></li></ul><div class="action"><span class="price">'+v.name+'<br />from &#163;'+v.from_price+'</span><input type="hidden" value="'+v.retailer_popup+'" class="popup_width" /><a class="new_button new_big_button big_btn_red" href="'+v.track_url+'"><span>'+SPEEDTEST_RESULTS_DEALS_LINK+'</span></a></div></div>');if(dw>0){$('#timetrials_results #tt_scrolling_window .download_speed').eq(k).html(dw+'Mb');$('#timetrials_results #tt_scrolling_window .upload_speed').eq(k).html(up+'Mb');}
prov_speeds[t]=Math.round(v.speedtest_stats.download_speed*10)/10;t++;if(t%6==0){$('.slide_indicator').append('<li></li>');}
$('table#fastest_providers tbody').updateSpeedmapsTable(v,t);});$('#results_comparison_box #results_scale, #results_comparison_box ul, #results_comparison_box .slide_indicator, #results_comparison_box #table_nav, #results_comparison_box .dr_broadband_compare').css('visibility','visible');plotBars(prov_speeds);$('#results_comparison > *').css('visibility','visible');$('#results_summary .loading_overlay').remove();});$('#results_comparison_list .new_button,#timetrials_results .new_button').external({width:$(this).prevAll('.popup_width').val()});$.get('/speedtest_google_tracking.html',function(data){$(data).appendTo('body');});}
function resultsComparisonPagination(){var slides=$('#results_comparison_box #speedbars > li').length/6;var current_slide=1;var shift=0;$('#results_comparison_box .slide_indicator').empty().append('<li class="lit first"></li>');$('#results_summary #table_nav li').click(function(){if($(this).is('.next')){slideResultNext()}
else{slideResultPrev();}
$('#results_comparison_list').animate({left:shift},380,function(){});$('#results_comparison_box #speed_bars').animate({left:shift},380,'swing',function(){});});function slideResultNext(){current_slide++;shift=shift-655;$('#results_summary .slide_indicator .lit').removeClass('lit').next().addClass('lit');if(current_slide>slides){$('#results_summary #table_nav li.next').hide();$('#results_summary #table_nav li.prev').show();}}
function slideResultPrev(){current_slide--;shift=shift+655;$('#results_summary .slide_indicator .lit').removeClass('lit').prev().addClass('lit');if(current_slide==1){$('#results_summary #table_nav li.next').show();$('#results_summary #table_nav li.prev').hide();}}}
function resultsTimeTrialsPagination(){var slides=$('#results_timetrials #tt_scrolling_window > div').length/6;var current_slide=1;var shift=0;$('#results_timetrials .slide_indicator').empty().append('<li class="lit first"></li>');$('#results_timetrials #table_nav li').click(function(){if($(this).is('.next')){current_slide++;shift=shift-636;$('#results_timetrials .slide_indicator .lit').removeClass('lit').next().addClass('lit');if(current_slide>slides){$('#results_timetrials #table_nav li.next').hide();$('#results_timetrials #table_nav li.prev').show();}}else{current_slide--;shift=shift+636;$('#results_timetrials .slide_indicator .lit').removeClass('lit').prev().addClass('lit');if(current_slide==1){$('#results_timetrials #table_nav li.next').show();$('#results_timetrials #table_nav li.prev').hide();}}
$('#tt_scrolling_window').animate({left:shift},380,function(){});$('#provider_logos #sliding_content').animate({left:shift},380,function(){});return false;});}
$.fn.updateSpeedmapsTable=function(v,i){if(i<=10){cells=this.find('.provider_'+i+'');if(i==1){cells.eq(0).html('<span class="number_one">'+i+'</span>');}else{cells.eq(0).html(i);}
cells.eq(1).html('<a href="/_ajax/speedtest.php?action=products&provider='+v.id+'&menu_id='+menu_id+'">'+v.name+'</a>');cells.eq(2).html('<span class="down_arrow"></span> '+Math.round(v.speedtest_stats.download_speed*10)/10+'Mb');cells.eq(3).html('<span class="up_arrow"></span> '+Math.round(v.speedtest_stats.upload_speed*10)/10+'Mb');}}
function retrieveTest(down,up,skcid){skc_data=skcid;down_speed=Math.round(down*10)/10;up_speed=Math.round(up*10)/10;initMaps();$('#results_page .intro h2').empty().append(SPEEDTEST_RESULTS_PAGE_HEADER);Cufon.replace('#results_page .intro h2');$('#steps_wrapper').css('height','auto');$('.terms').removeClass('setup_screen');$('#test_holder').empty().append('<div id="test_flash"></div>');resultProvider(down_speed,up_speed);getResultsData();resultRatings();availabilityBox();nextPage('#results',true);$('#results_page').addClass('complete').fadeIn();$('.speedmap_promo .download_header span').empty().append(down_speed+'Mb');$('.speedmap_promo .upload_header span').empty().append(up_speed+'Mb');$('.speedmap_promo .provider_header p span').empty();if(user_data.provider_data.name!=null){var p_name=user_data.provider_data.name;}
else{var p_name='Unknown';}
setProviderName(p_name);}
function setProviderName(prov_name){if(prov_name.length>8){var split_name=prov_name.split(" ");var processed_name='';if(split_name.length>1&&prov_name.length>13){var name_size=26-(prov_name.length-11);for(i=0;i<2;i++){processed_name=processed_name+split_name[i]+'<br />';}
prov_name=processed_name;}
else{var name_size=26-(user_data.provider_data.name.length-9);}
$('.speedmap_promo .provider_header p span').css('font-size',name_size);}
$('.speedmap_promo .provider_header p span').html(prov_name);if(user_data.provider_data.id!=0){$('.speedmap_promo .provider_header').find('img').remove().end().prepend($.image({src:user_data.provider_data.image_url,width:60,height:50,alt:user_data.provider_data.name,mode:'fill',depth:32}));}
Cufon.replace('.speedmap_promo .header_info');}
function getUrlVars(){var vars=[],hash;var hashes=window.location.href.slice(window.location.href.indexOf('?')+1).split('&');for(var i=0;i<hashes.length;i++){hash=hashes[i].split('=');vars.push(hash[0]);vars[hash[0]]=hash[1];}
return vars;}
function detectProviders(reRequest){if(getUrlVars()["force_ip"]){var test_ip='force_ip='+getUrlVars()["force_ip"];}
else{test_ip='';}
$('.change_provider').hide();var nmerchants=0;$.ajax({url:"/_ajax/speedtest.php?action=detect_provider",data:test_ip,dataType:"json",success:function(ajax_response){geo_isp_id=ajax_response.GEOIP_ISP_ID;if(ajax_response.GEOIP_MERCHANTS){$.each(ajax_response.GEOIP_MERCHANTS,function(k,v){$.each(v.isp_connection_types,function(kk,vv){if(kk==1){home_type=1}
if(kk==2){mobile_type=1}
if(kk==3){business_type=1}});nmerchants++;if(v.IMAGE_URL){var prov_image=$.image({src:v.IMAGE_URL,width:80,height:50,alt:v.MERCHANT_NAME,mode:'fill',depth:32})
var image_url=v.IMAGE_URL;}
else{var prov_image='<h4>'+v.MERCHANT_NAME+'</h4>';var image_url='/_img/0.gif';}
$('.column.provider ul li.provider').remove();$('.column.provider ul').prepend('<li class="provider">'+prov_image+'<input type="hidden" class="id" value="'+v.MERCHANT_ID+'" /><input type="hidden" class="name" value="'+v.MERCHANT_NAME+'" /><input type="hidden" class="image_url" value="'+image_url+'" /><input type="hidden" class="connection_type" value="'+v.isp_connection_types.CONNECTION_TYPE_ID+'" /></li>');});$('.none_detected').hide();$('.change_provider').show();}else{$('.column.provider li').show().removeClass('hover');$('.change_provider').hide();}
if(home_type==1||mobile_type==1||business_type==1){$('.column.connection .detected_connection').show();$('.column.connection .undetected_connection').hide();if(home_type==1){$('.column.connection .detected_connection:not(.edited)').append(' home broadband').addClass('edited');}
else if(mobile_type==1){$('.column.connection .detected_connection:not(.edited)').append(' mobile broadband').addClass('edited');}
else if(business_type==1){$('.column.connection .detected_connection:not(.edited)').append(' business broadband').addClass('edited');}}
if(nmerchants==1){$('#setup.detected_single .provider').addClass('hover').completeChoice();var detected_from_server=true;$('#setup').addClass('detected').addClass('detected_single');if($('.connection li').hasClass('complete')){$('.rating').addClass('stActive').removeClass('disabled');Cufon.replace('.rating .sifr');}}
else if(nmerchants>1){var detected_from_server=true;$('#setup').addClass('detected');}
else{chooseOtherProvider();}}});var $providerConnections=$('li.provider li');if(reRequest){unlockProviders();}}
function chooseOtherProvider(){Cufon.replace('.rating .sifr');$.ajax({url:"/_ajax/speedtest.php",data:'action=providers_list&connection_type='+user_data.connection_type,dataType:"json",success:function(ajax_response){$('select#provider').empty().append('<option label="Select provider">Select Provider</option>');$.each(ajax_response,function(k,v){$('select#provider').append('<optgroup label="'+k+'">');$.each(v,function(kk,vv){$('select#provider').append('<option value=\"'+kk+'\" label=\"'+vv+'\">'+vv+'</option>');});$('select#provider').append('</optgroup>');});}});user_data.provider_data.id=$('#setup .provider select').val();$('select#provider').removeAttr('disabled');if(user_data.provider_data.id!='Select Provider'){getProviderData(user_data.provider_data.id);}}
function unlockProviders(){$('li.connection li').find('.tooltip, #location_autosuggest').hide();$('.provider').removeClass('disabled').addClass('stActive');Cufon.replace('.provider .sifr');$('.provider_select select, .provider_select option[label="----------------"]').removeAttr('disabled');$('.provider_select select, .provider_select option').removeAttr('disabled');}
