// Lovell Rugby website functions - inc. pop-up, changePic, video display, AJAX live search
// v2.75 100621 - These functions now cover all skinned sites (no longer requiring their own functions files)
// Specific site functions:
// Lovel Rugby: none.
// Lovell Soccer: printBootSelector

// Set-up JavaScript skinning
var skinJS_SiteCode = 'LR';
var skinJS_SiteURL  = 'www.lovell-rugby.co.uk';

function skinJSVariables(skinAsSite) {
if (skinAsSite=='LS') {
  skinJS_SiteCode = 'LS';
  skinJS_SiteURL  = 'www.lovellsoccer.co.uk';
  }
else if (skinAsSite=='LFC') {
  skinJS_SiteCode = 'LFC';
  skinJS_SiteURL  = 'www.lfcbootroom.tv';
  }
else if (skinAsSite=='FBS') {
  skinJS_SiteCode = 'FBS';
  skinJS_SiteURL  = 'www.nb-soccerstore.com';
  }
else if (skinAsSite=='WBR') {
  skinJS_SiteCode = 'WBR';
  skinJS_SiteURL  = 'www.lovellsoccer.co.uk';
  }
}

function posDisc(offset) {
// Move free deliver disc in line with product image
if (document.getElementById) { var mp = document.getElementById('mainpic') }
else if (document.all) { var mp = document.all['mainpic'] }
else if (document.layers) { var mp = document.layers['mainpic'] }
if (document.getElementById) { var fcd = document.getElementById('freecarriagedisc') }
else if (document.all) { var fcd = document.all['freecarriagedisc'] }
else if (document.layers) { var fcd = document.layers['freecarriagedisc'] }
if (!mp || !fcd) { return }
findPos(mp);
fcd.style.top=(postop+offset)+'px';
fcd.style.left=(posleft-10)+'px';
fcd.style.visibility='visible';
}

function changePic(iname, pic, width, height) {
// View alternate image
  var mainPic = document.getElementById('mainpic');
  var src = 'products/'+iname;
  if (pic > 1) { src += '_'+pic }
  src += '.jpg';
  mainPic.src=src;
  mainPic.width=width;
  mainPic.height=height;
}

var posleft = 0;
var postop = 0;

function findPos(obj) {
// Returns position of supplied object
var curleft = curtop = 0;
if (obj) {
  if (obj.offsetParent) {
    curleft = obj.offsetLeft;
    curtop = obj.offsetTop;
    while (obj = obj.offsetParent) {
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;
    }
  }
}
posleft = curleft;
postop = curtop;
}

function hitMe(log) {
// On page logging
if (log.length > 0) { document.getElementById('hitme').src='cgi-bin/hitme.cgi?'+log }
}

// Pop-up
function popup(mylink, windowname, width, height) {
if (!window.focus) { return true }
var href;
if (typeof(mylink) == 'string') { href=mylink }
else { href=mylink.href }
window.open(href, windowname, 'width='+width+',height='+height+',status=no,scrollbars=yes,resizable=yes');
return false;
}


// Core AJAX code
var ajax = [];
function pjx(args,fname,method) { this.target=args[1]; this.args=args[0]; method=(method)?method:'GET'; if(method=='post'){method='POST';} this.method = method; this.r=ghr(); this.url = this.getURL(fname);}

function formDump(){ var all = []; var fL = document.forms.length; for(var f = 0;f<fL;f++){ var els = document.forms[f].elements; for(var e in els){ var tmp = (els[e].id != undefined)? els[e].id : els[e].name; if(typeof tmp != 'string'){continue;} if(tmp){ all[all.length]=tmp} } } return all;}

function getVal(id) { if (id.constructor == Function ) { return id(); } if (typeof(id)!= 'string') { return id; } var element = document.getElementById(id); if( !element ) { for( var i=0; i<document.forms.length; i++ ){ element = document.forms[i].elements[id]; if( element ) break; } if( element && !element.type ) element = element[0]; } if(!element){ alert('ERROR: Cant find HTML element with id or name: ' + id+'. Check that an element with name or id='+id+' exists'); return 0; } if(element.type == 'select-one') { if(element.selectedIndex == -1) return; var item = element[element.selectedIndex]; return item.value || item.text; } if(element.type == 'select-multiple') { var ans = []; var k =0; for (var i=0;i<element.length;i++) { if (element[i].selected || element[i].checked ) { ans[k++]= element[i].value || element[i].text; } } return ans; } if(element.type == 'radio' || element.type == 'checkbox'){ var ans =[]; var elms = document.getElementsByTagName('input'); var endk = elms.length ; var i =0; for(var k=0;k<endk;k++){ if(elms[k].type== element.type && elms[k].checked && (elms[k].id==id||elms[k].name==id)){ ans[i++]=elms[k].value; } } return ans; } if( element.value == undefined ){ return element.innerHTML; }else{ return element.value; }}

function fnsplit(arg) {
  var url="";
  if(arg=='NO_CACHE') {return '&pjxrand='+Math.random()}
  if((typeof(arg)).toLowerCase() == 'object') {
    for(var k in arg) { url += '&' + k + '=' + arg[k]; }
    }
  else if (arg.indexOf('__') != -1) {
    arga = arg.split(/__/);
    url += '&' + arga[0] +'='+ escape(arga[1]);
    }
  else {
    var res = getVal(arg) || '';
    if(res.constructor != Array){ res = [res] }
    for(var i=0;i<res.length;i++) { url += '&args=' + escape(res[i]) + '&' + arg + '=' + escape(res[i]); }
    }
  return url;
}

pjx.prototype = {
  send2perl : function() {
    var r = this.r;
    var dt = this.target;
    this.pjxInitialized(dt);
    var url=this.url;
    var postdata;
    if(this.method=="POST"){ var idx=url.indexOf('?'); postdata = url.substr(idx+1); url = url.substr(0,idx); }
    // See error explaination at: http://stackoverflow.com/questions/51283/access-to-restricted-uri-denied-code-1012
    r.open(this.method,url,true); ;
    if(this.method=="POST"){ r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); r.send(postdata); }
    if(this.method=="GET"){ r.send(null); }
    r.onreadystatechange = handleReturn;
  },

  pjxInitialized : function(){},

  pjxCompleted : function(){},

  readyState4 : function() {
    var rsp = unescape(this.r.responseText); /* the response from perl */
    var splitval = '__pjx__'; /* to split text */
    /* fix IE problems with undef values in an Array getting squashed*/
    rsp = rsp.replace(splitval+splitval+'g',splitval+" "+splitval);
    var data = rsp.split(splitval);
    dt = this.target;
    if (dt.constructor != Array) { dt=[dt]; }
    if (data.constructor != Array) { data=[data]; }
    if (typeof(dt[0])!='function') {
      for ( var i=0; i<dt.length; i++ ) {
        var div = document.getElementById(dt[i]);
        if (div.type =='text' || div.type=='textarea' || div.type=='hidden' ) { div.value=data[i]; }
        else{ div.innerHTML = data[i]; }
        }
      }
    else if (typeof(dt[0])=='function') { dt[0].apply(this,data); }
    this.pjxCompleted(dt);
    },

  getURL : function(fname) {
    var args = this.args;
    var url= 'fname=' + fname;
    for (var i=0;i<args.length;i++) { url=url + args[i]; }
    return url;
  }
}

handleReturn = function() {
  for( var k=0; k<ajax.length; k++ ) {
    if (ajax[k].r==null) { ajax.splice(k--,1); continue; }
    if ( ajax[k].r.readyState== 4) { ajax[k].readyState4(); ajax.splice(k--,1); continue; }
  }
}

var ghr=getghr();

function getghr() {
  if(typeof XMLHttpRequest != "undefined") { return function(){return new XMLHttpRequest();} }
  var msv= ["Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
  for(var j=0;j<=msv.length;j++){ try { A = new ActiveXObject(msv[j]); if(A){ return function(){return new ActiveXObject(msv[j]);} } } catch(e) { } } return false;
}

function jsdebug() {
  var tmp = document.getElementById('pjxdebugrequest').innerHTML = "<br><pre>"; for( var i=0; i < ajax.length; i++ ) { tmp += '<a href= '+ ajax[i].url +' target=_blank>' + decodeURI(ajax[i].url) + ' </a><br>'; } document.getElementById('pjxdebugrequest').innerHTML = tmp + "</pre>";
}

// -- End of core AJAX code

// Functions using above AJAX code

// AJAX - Live search
function livesearch() {
var args = livesearch.arguments;
for( var i=0; i<args[0].length;i++ ) { args[0][i] = fnsplit(args[0][i]); }
var l = ajax.length;
ajax[l]= new pjx(args,"livesearch",args[2]);
ajax[l].url = 'cgi-bin/dolivesearch.cgi?' + ajax[l].url;
ajax[l].send2perl();
}

function closeLiveSearch() {
var ls;
ls = document.getElementById('livesearchresults');
if (ls) { ls.innerHTML='' }
}

function searchPos() {
// Position live search div
var sbdiv;
if (document.getElementById) { sbdiv = document.getElementById('search') }
else if (document.all) { sbdiv = document.all['search'] }
else if (document.layers) { sbdiv = document.layers['search'] }

var lsdiv;
if (document.getElementById) { lsdiv = document.getElementById('livesearchresults') }
else if (document.all) { lsdiv = document.all['livesearchresults'] }
else if (document.layers) { lsdiv = document.layers['livesearchresults'] }

findPos(sbdiv);

if (lsdiv) {
  lsdiv.style.left = (posleft)+'px';
  lsdiv.style.top = (postop+24)+'px';
  }
}

// AJAX - Show product
function showitem() {
var args = showitem.arguments;
for( var i=0; i<args[0].length;i++ ) { args[0][i] = fnsplit(args[0][i]); }
var l = ajax.length;
ajax[l]= new pjx(args,"showitem",args[2]);
ajax[l].url = 'cgi-bin/showproduct.cgi?' + ajax[l].url;
ajax[l].send2perl();
}

function si(result, coverFilter) {
// Show product details in results pane via AJAX
showitem(['search__'+document.getElementById('qs_results').value+'~'+result+'~'+skinJS_SiteCode], ['quicksearchresults']);

if (coverFilter) {
  // Move pane to the left to cover the filter controls (which we also dim)
  document.getElementById('QuickSearchControlsCell').style.opacity=0;
  document.getElementById('QuickSearchControlsCell').style.filter='alpha(opacity=0)';
  document.getElementById('quicksearchresults').innerHTML=''; // Prevent content being shown when we shift the element to the right
  document.getElementById('quicksearchresults').style.position='relative';
  document.getElementById('quicksearchresults').style.left='-260px'; // rax - Can we avoid hardcoding this?
  }

// Jump to top of QS Results - only if we're further down the page
findPos(document.getElementById('quicksearchresults'));
if (postop) { postop -= 20 }
else { postop = 200 }

var scrollTop = getScrollTop();
if (postop < scrollTop) { scrollTo(0,postop) }
}

// AJAX - Quick search
function quicksearch() {
var args = quicksearch.arguments;
for( var i=0; i<args[0].length;i++ ) { args[0][i] = fnsplit(args[0][i]); }
var l = ajax.length;
ajax[l]= new pjx(args,"quicksearch",args[2]);
ajax[l].url = 'cgi-bin/doquicksearch.cgi?' + ajax[l].url;
ajax[l].send2perl();
}

// QUICK SEARCH CONTROLS
var catcodes = new Array();
var brands = new Array();
var tags = new Array();
var priceranges = new Array();
var sizes = new Array();
var setsizes = new Array();
var soletypes = new Array();
var currenturl = ''; // Unset for non-quicksearch pages
var currentprice = '';    //
var currentsize = '';     // - NOTE: We won't need these if we do the mutli-select like we do for brands
var currentsoletype = ''; //
var currentTagByType = new Array(); // - We need to keep track of each 'type' of tag separately
var catbrands = new Array();
var cattags = new Array();
var catsizes = new Array();
var catprices = new Array();
var catsoletypes = new Array();

function doQuickSearch(result) {
// Submits search request via AJAX

// Jump to top of QS Controls - only if we're further down the page
findPos(document.getElementById('QSJump'));
if (postop) { postop -= 20 }
else { postop = 200 }
var scrollTop = getScrollTop();
if (postop < scrollTop) { scrollTo(0,postop) }

quicksearch(
  ['search__'+
    getVal('qs_category')+'~'+
    getVal('qs_group')+'~'+
    getVal('qs_brand')+'~'+
    getVal('qs_text')+'~'+
    getVal('qs_size')+'~'+
    getVal('qs_pricerange')+'~'+
    getVal('set_minprice')+'~'+
    getVal('set_maxprice')+'~'+
    getVal('qs_pg')+'~'+
    getVal('qs_sort')+'~'+
    getVal('qs_soletype')+'~'+
    getVal('qs_so')+'~'+
    getVal('qs_pre')+'~'+
    getVal('qs_tags')+'~'+
    getVal('qs_coreSearch')+'~'+
    skinJS_SiteCode],
  ['quicksearchresults']
  );
if (result) {
  // Show selected product
  si(result)
  }
else {
  // Make sure control and results elements are in their rightful positions
  if (document.getElementById('quicksearchresults')) {
    document.getElementById('quicksearchresults').innerHTML=''; // Prevent content being shown when we shift the element to the right
    document.getElementById('quicksearchresults').style.position='relative';
    document.getElementById('quicksearchresults').style.left='0px';
    }
  if (document.getElementById('QuickSearchControlsCell')) {
    document.getElementById('QuickSearchControlsCell').style.opacity=1;
    document.getElementById('QuickSearchControlsCell').style.filter='alpha(opacity=100)';
    }
  }

}

function hitCat(link, dosearch) {
// Updates category input and toggles category link on / off
var caton = '';
for(var i=1; i<catbrands.length; i++) {
  if (i == link) {
    document.getElementById('catlink'+i).className='qson';
    }
  else {
    document.getElementById('catlink'+i).className='qsoff';
    }
  }
document.getElementById('qs_category').value=catcodes[link];

if (!document.getElementById('qs_fixbrand').value) {
  // Get brands for this category
  brands.length = 0; // Blank current array
  var oldbrand = document.getElementById('qs_brand').value;
  document.getElementById('qs_brand').value='';
  var setbrands = catbrands[link].split(',');
  var brandstext = '';
  for (var i = 0; i < setbrands.length; i++) {
    if (currenturl) {
      var onoff = 'off';
      if (setbrands[i] == oldbrand) {
        // Pre-select brand
        document.getElementById('qs_brand').value=oldbrand;
        onoff = 'on';
        }
      brandstext += '<a href="'+currenturl+'/brand-'+setbrands[i]+'" onClick="return hitBrand('+i+')" id="brandlink'+i+'" class=qs'+onoff+'>'+setbrands[i]+'</a> ';
      }
    else { brandstext += '<a href="javascript:hitBrand('+i+')" id="brandlink'+i+'" class=qsoff>'+setbrands[i]+'</a> ' }
    brands[i] = setbrands[i];
    }
  }
document.getElementById('brands').innerHTML = brandstext;

var tagstext = '';
if (cattags[link]) {
  // Get tags for this category
  tags.length = 0; // Blank current array
  var oldtag = document.getElementById('qs_tags').value;
  var tagTitle = '';
  document.getElementById('qs_tags').value='';
  var settags = cattags[link].split(',');
  for (var i = 0; i < settags.length; i++) {
    var tagData = new Array();
    tagData = settags[i].split(':');
    // Was: id / type / text
    // NOW: type / text / id
    if (tagData.length < 2) { continue }
    if (tagData[0] != tagTitle) {
      // New tag type - show as heading
      if (i > 0) {
        // Add line
        tagstext += '</td></tr><tr><td colspan=2><img src="images/LFC-Bootroom/filter-hr.png" width=230 height=2 border=0 style="margin: 5px 0px"></td></tr><tr><td>';
        }
      tagstext += '<span class=qsTagType>By '+tagData[0]+':</span>';
      tagTitle = tagData[0];
      }
    tagData[1] = tagData[1].replace(/ /g, '&nbsp;');
    var onoff = 'off';
    if (settags[i] == oldtag) {
      // Pre-select tag
      document.getElementById('qs_tags').value=oldtag;
      onoff = 'on';
      currentTagByType[tagData[0]] = i;
      }
    //if (currenturl) {
    //  var tgl1 = tagData[0].replace(/ /g, '-');
    //  var tgl2 = tagData[1].replace(/ /g, '-'); // Seems to fail - rax - but not using this (see above)
    //  tagstext += '<a href="'+currenturl+'/pbt/'+tgl1+'/'+tgl2+'" onClick="return hitTags('+i+')" id="taglink'+i+'" class=qs'+onoff+'>'+tagData[1]+'</a> ';
    //  }
    //else {
      tagstext += '<a href="javascript:hitTags('+i+')" id="taglink'+i+'" class=qs'+onoff+'>'+tagData[1]+'</a> ';
      if (tagData[0] == 'Player' || tagData[0] == 'Personalisation') {
        // Only show one tag per line - rax - we could generalise this
        tagstext += '<br>';
        }
      //}
    tags[i] = settags[i];
    }

  tagstext = tagstext.replace(/^<br>/, ''); // Remove initial new line
  }

if (document.getElementById('resultsTags')) {
  document.getElementById('resultsTags').innerHTML = tagstext;
}

// Get sizes for this category
sizes.length = 0; // Blank current array
var oldsize = document.getElementById('qs_size').value;
document.getElementById('qs_size').value='';
setsizes = catsizes[link].split(',');
var sizestext = '';
for (var i = 0; i < setsizes.length; i++) {
  if (setsizes[i].match(/^.*: $/)) { sizestext += '<span class=qsheader id="sizelink'+i+'">'+setsizes[i]+'</span>' }
  else if (currenturl && setsizes[i]) {
    var onoff = 'off';
    var linksize = setsizes[i].replace(/&frac12;/g, '.5');
    if (linksize == oldsize) {
      // Pre-select size
      document.getElementById('qs_size').value=oldsize;
      onoff = 'on';
      currentsize = i;
      }
    sizestext += '<a href="'+currenturl+'/size-'+linksize+'" onClick="return hitSize('+i+')" id="sizelink'+i+'" class=qs'+onoff+'>'+setsizes[i]+'</a> ';
    }
  else if (setsizes[i]) { sizestext += '<a href="javascript:hitSize('+i+')" id="sizelink'+i+'" class=qsoff>'+setsizes[i]+'</a> ' }
  sizes[i] = setsizes[i];
  }
if (!sizestext) { sizestext = '<span class=qslight>No sizes available for this category</span>' }
document.getElementById('sizes').innerHTML = sizestext;

// Get price ranges for this category
priceranges.length = 0; // Blank current array
var oldpricerange = document.getElementById('qs_pricerange').value;
if (!document.getElementById('qs_pricerange').value.match(/0\.01~/)) { document.getElementById('qs_pricerange').value='~' }
var setprices = new Array();
setprices = catprices[link].split(',');
var pricerange = new Array();
var pricestext = '';
for (var i = 0; i < setprices.length; i++) {
  pricerange = setprices[i].split('~');
  var showprice = '&nbsp;&pound;'+pricerange[0]+'<span style="padding: 0px 2px 0px 2px">-</span>&pound;'+pricerange[1]+'&nbsp;';
  if (currenturl) {
    var onoff = 'off';
    if (setprices[i] == oldpricerange) {
      // Pre-select price range
      document.getElementById('qs_pricerange').value=oldpricerange;
      onoff = 'on';
      currentprice = i;
      }
    pricestext += '<a href="'+currenturl+'/price-'+pricerange[0]+'-'+pricerange[1]+'" onClick="return hitPrice('+i+')" id="pricelink'+i+'" class=qs'+onoff+'>'+showprice+'</a> ';
    }
  else { pricestext += '<a href="javascript:hitPrice('+i+')" id="pricelink'+i+'" class=qsoff>'+showprice+'</a> ' }
  priceranges[i] = setprices[i];
  }
document.getElementById('prices').innerHTML = pricestext;

// Get sole types for this category
soletypes.length = 0; // Blank current array
var oldsoletype = document.getElementById('qs_soletype').value;
document.getElementById('qs_soletype').value='';
setsoletypes = catsoletypes[link].split(',');
var soletypestext = '';
for (var i = 0; i < setsoletypes.length; i++) {
  if (!setsoletypes[i]) { break }
  if (currenturl && setsoletypes[i]) {
    var onoff = 'off';
    if (setsoletypes[i] == oldsoletype) {
      // Pre-select soletype
      document.getElementById('qs_soletype').value=oldsoletype;
      onoff = 'on';
      currentsoletype = i;
      }
    var linksoletype = setsoletypes[i].replace(/ /g, '-');
    soletypestext += '<a href="'+currenturl+'/soletype-'+linksoletype+'" onClick="return hitSoletype('+i+')" id="soletypelink'+i+'" class=qs'+onoff+'>'+setsoletypes[i]+'</a> ';
    }
  else if (setsoletypes[i]) { soletypestext += '<a href="javascript:hitSoletype('+i+')" id="soletypelink'+i+'" class=qsoff>'+setsoletypes[i]+'</a> ' }
  soletypes[i] = setsoletypes[i];
  }
if (!soletypestext) { soletypestext = '<span class=qslight>No sole types available for this category</span>' }
document.getElementById('soletypes').innerHTML = soletypestext;

if (dosearch) {
  rePage(0);
  doQuickSearch();
  }
}

function hitBrand(link) {
// Updates brand input and toggles brand link on / off
var brandson = '';
var brandsoff = '';
if (link == -1) { for(var i=0; i<brands.length; i++) { document.getElementById('brandlink'+i).className='qsoff' } }
else {
  var linkele = document.getElementById('brandlink'+link);
  linkele.blur();
  if (linkele.className=='qson') { linkele.className='qsoff' }
  else { linkele.className='qson' }
  for(var i=0; i<brands.length; i++) {
    if (document.getElementById('brandlink'+i).className=='qson') {
      brandson += brands[i] + ',';
      if (brands[i] == 'Other') { brandson += brandsoff }
      }
    else { brandsoff += brands[i] + ';' }
    }
  }
document.getElementById('qs_brand').value = brandson;
rePage(0);
doQuickSearch();
if (currenturl && link != -1) { return false }
}

function hitSize(link) {
// Updates size input and toggles link on / off
var size = '';
if (link == currentsize && currentsize.toString().length>0) { document.getElementById('sizelink'+link).blur(); link = -2; }
if (link < 0) { for(var i=0; i<sizes.length; i++) { if (document.getElementById('sizelink'+i).className=='qson') { document.getElementById('sizelink'+i).className='qsoff' } } currentsize = '' }
else {
  for(var i=0; i<sizes.length; i++) {
    var linkele = document.getElementById('sizelink'+i);
    linkele.blur();
    if (i == link) { linkele.className='qson'; currentsize = i; }
    else if (!setsizes[i].match(/^.*: $/)) { linkele.className='qsoff' }
    }
  size = sizes[link];
  }
document.getElementById('qs_size').value=size;
rePage(0);
doQuickSearch();
if (currenturl && link != -1) { return false }
}

function hitPrice(link) {
// Updates price input and toggles range link on / off
var price = '~';
if (link == currentprice && currentprice.toString().length>0) { document.getElementById('pricelink'+link).blur(); link = -2; }
if (link < 0) { for(var i=0; i<priceranges.length; i++) { document.getElementById('pricelink'+i).className='qsoff' } currentprice = ''; }
else {
  for(var i=0; i<priceranges.length; i++) {
    var linkele = document.getElementById('pricelink'+i)
    linkele.blur();
    if (i == link) { linkele.className='qson'; currentprice = i; }
    else { linkele.className='qsoff' }
    }
  price = priceranges[link];
  }
document.getElementById('qs_pricerange').value=price;
rePage(0);
doQuickSearch();
if (currenturl && link != -1) { return false }
}

function hitSoletype(link) {
// Updates soletype input and toggles link on / off
var soletype = '';
if (link == currentsoletype && currentsoletype.toString().length>0) { document.getElementById('soletypelink'+link).blur(); link = -2; }
if (link < 0) { for(var i=0; i<soletypes.length; i++) { document.getElementById('soletypelink'+i).className='qsoff' } currentsoletype = ''; }
else {
  for(var i=0; i<soletypes.length; i++) {
    var linkele = document.getElementById('soletypelink'+i);
    linkele.blur();
    if (i == link) { linkele.className='qson'; currentsoletype = i; }
    else { linkele.className='qsoff' }
    }
  soletype = soletypes[link];
  }
document.getElementById('qs_soletype').value=soletype;
rePage(0);
doQuickSearch();
if (currenturl && link != -1) { return false }
}

function qsSortBy(sort) {
// Updates sort
var qssorts = new Array('rank', 'price', 'brand', 'name');
if (!sort) { sort = 'rank' }
for(var i=0; i<qssorts.length; i++) {
  sortoff = 'sort' + qssorts[i].toString();
  if (!document.getElementById(sortoff)) { continue } // We don't necessarily have all sort methods in use
  if (sort == qssorts[i]) {
    document.getElementById(sortoff).className='qson';
    document.getElementById(sortoff).blur();
    }
  else {
    document.getElementById(sortoff).className='qsoff';
    }
  }
document.getElementById('qs_sort').value=sort;
rePage(0);
doQuickSearch();
}

function hitTags(link) {
// Updates product tag input and toggles link on / off
var tagson = '';
var linkTagType = '';
var toggleOff = 0;

if (link >= 0) {
  // Get tag type of requested tag
    linkTagType = tags[link].split(':')[0];
  if (link == currentTagByType[linkTagType] && currentTagByType[linkTagType].toString().length>0) {
    // Toggle current tag to 'off'
    document.getElementById('taglink'+link).blur();
    toggleOff = 1;
    currentTagByType[linkTagType] = -1;
    }
  }

if (link < 0) { for(var i=0; i<tags.length; i++) { document.getElementById('taglink'+i).className='qsoff' } }
else {
  for(var i=0; i<tags.length; i++) {
    var linkele = document.getElementById('taglink'+i);
    linkele.blur();

    var tagType = tags[i].split(':')[0];
    if (linkTagType == tagType) {
      // Only change state of tags of the same type
      if (i == link && !toggleOff) { linkele.className='qson'; currentTagByType[linkTagType] = i; }
      else { linkele.className='qsoff' }
      }

    if (linkele.className=='qson') {
      tagson += tags[i] + ',';
      }
    }
  }
document.getElementById('qs_tags').value = tagson;
rePage(0);
doQuickSearch();
// if (currenturl && link != -1) { return false }
}

function rePage(pg) {
// Updates results page
if (document.getElementById('qs_fixpg').value==1) { return }
document.getElementById('qs_pg').value=pg;
if (pg) { doQuickSearch() }
}

var reloaddue = 0;

function reloadSearch(searchtext) {
// Reloads search controls
if (reloaddue) { reloaddue = clearTimeout(reloaddue) }
if (document.getElementById('qs_text').value == searchtext) { return }
reloaddue = setTimeout("top.location = 'http://" + skinJS_SiteURL + "/shop?search='+document.getElementById('qs_text').value", 1000);
// reloaddue = setTimeout("doReloadSearch(['search__'+getVal('qs_category')+'~'+getVal('qs_group')+'~'+getVal('qs_brand')+'~'+getVal('qs_text')+'~'+getVal('qs_size')+'~'+getVal('qs_pricerange')+'~RELOAD~'+getVal('qs_sort')+'~'+getVal('qs_soletype')], ['qs_section'])", 1500);
}

function doReloadSearch() {
// AJAX - Reload search controls
// alert('Reloading...');
var args = doReloadSearch.arguments;
for( var i=0; i<args[0].length;i++ ) { args[0][i] = fnsplit(args[0][i]) }
var l = ajax.length;
ajax[l]= new pjx(args,"qs_section",args[2]);
ajax[l].url = 'cgi-bin/doqscontrols.cgi?' + ajax[l].url;
ajax[l].send2perl();
}


// Video display functions
var curlight = '';

function showVideo(vidpid) {
// Shows product video in player on page
if (vidpid) { curlight = vidpid }
document.getElementById('light'+vidpid).style.display='block';
document.getElementById('fade').style.display='block';
moveVideo(vidpid);
hitMe('video:'+vidpid);
}

function hideVideo(vidpid) {
if (vidpid) { curlight = vidpid }
document.getElementById('light'+curlight).style.display='none';
document.getElementById('fade').style.display='none';
}

function moveVideo(vidpid) {
// Keeps video divs in centre of screen
if (vidpid) { curlight = vidpid }

var docWidth = 0, docHeight = 0;
if( typeof( window.innerWidth ) == 'number' ) {
  //Non-IE
  docWidth = window.innerWidth;
  docHeight = window.innerHeight;
} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
  //IE 6+ in 'standards compliant mode'
  docWidth = document.documentElement.clientWidth;
  docHeight = document.documentElement.clientHeight;
} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
  //IE 4 compatible
  docWidth = document.body.clientWidth;
  docHeight = document.body.clientHeight;
}

var scrOfX = 0, scrOfY = 0;
if( typeof( window.pageYOffset ) == 'number' ) {
  //Netscape compliant
  scrOfY = window.pageYOffset;
  scrOfX = window.pageXOffset;
} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
  //DOM compliant
  scrOfY = document.body.scrollTop;
  scrOfX = document.body.scrollLeft;
} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
  //IE6 standards compliant mode
  scrOfY = document.documentElement.scrollTop;
  scrOfX = document.documentElement.scrollLeft;
}

var vidWidth = 427;
var vidHeight = 260;

vidX = Math.floor(docWidth / 2 - vidWidth / 2 + scrOfX);
vidY = Math.floor(docHeight / 2 - vidHeight / 2 + scrOfY);

if (curlight && vidX && vidY) {
  document.getElementById('light'+curlight).style.left=vidX+'px';
  document.getElementById('light'+curlight).style.top=vidY+'px';
  }
document.getElementById('fade').style.top=scrOfY+'px';
}


function printBootSelector(brand, bootsize, maxprice, soletype) {
// Soccer sites boot selector menu - rax: this hard-codes brands, we could do this dynamically
document.write('<form action="cgi-bin/lr.cgi" method=post name="bootform">');
document.write('<input type=hidden name="page" value="shop">');
document.write('<input type=hidden name="skin" value="'+skinJS_SiteCode+'">');
document.write('<input type=hidden name="cat" value="15">');
document.write('<input type=hidden name="dosearch" value="1">');
document.write('<table cellpadding=5 cellspacing=0 border=0 width=215>');
document.write('<tr><td colspan=3 class=tabletop2>&nbsp;FIND FOOTBALL BOOTS</td></tr>');
document.write('<tr><td colspan=3 class=nav><table cellpadding=2 cellspacing=0 border=0 width=205 class=nav>');
document.write('<tr><td>Brand:</td><td><select name="brand" class=lowinput><option value="">All brands');
document.write('<option>Adidas');
document.write('<option>Asics');
document.write('<option>Mitre');
document.write('<option>Mizuno');
document.write('<option>Nike');
document.write('<option>Puma');
document.write('</select></td></tr>');
document.write('<tr><td>Boot size:</td><td><select name="size" class=lowinput><option value="">Select');
document.write('<option value="6">6');
document.write('<option value="6.5">6&frac12;');
document.write('<option value="7">7');
document.write('<option value="7.5">7&frac12;');
document.write('<option value="8">8');
document.write('<option value="8.5">8&frac12;');
document.write('<option value="9">9');
document.write('<option value="9.5">9&frac12;');
document.write('<option value="10">10');
document.write('<option value="10.5">10&frac12;');
document.write('<option value="11">11');
document.write('<option value="11.5">11&frac12;');
document.write('<option value="12">12');
document.write('<option value="12.5">12&frac12;');
document.write('<option value="13">13');
document.write('<option value="13.5">13&frac12;');
document.write('<option value="14">14');
document.write('<option value="14.5">14&frac12;');
document.write('<option value="15">15');
document.write('</select></td></tr>');
document.write('<tr><td>Price:</td><td><select name="maxprice" class=lowinput><option value="">Select');
document.write('<option value="10">Up to £10');
document.write('<option value="20">Up to £20');
document.write('<option value="30">Up to £30');
document.write('<option value="40">Up to £40');
document.write('<option value="50">Up to £50');
document.write('<option value="75">Up to £75');
document.write('<option value="100">Up to £100');
document.write('</select></td></tr>');
document.write('<tr><td>Sole type:</td><td><select name="soletype" class=lowinput><option value="">Select');
document.write('<option>Soft Ground');
document.write('<option>Firm Ground');
document.write('<option>Astro / 3G');
document.write('</select></td></tr>');
document.write('</table></td></tr>');
document.write('</table>');
document.write('<input type=image src="images/nike-green-soccer/view0.gif" onMouseover="this.src=\'images/nike-green-soccer/view1.gif\';" onMouseout="this.src=\'images/nike-green-soccer/view0.gif\'" width=215 height=25 border=0 class=clear></form>');

if (brand) {
  for (var i = 0; i < bootform.brand.length; i++) {
  if (bootform.brand.options[i].text == brand) { bootform.brand.selectedIndex=i; break; }
  }
}
if (bootsize) { bootform.size.selectedIndex=bootsize }
if (maxprice) { bootform.maxprice.selectedIndex=maxprice }
if (soletype) { bootform.soletype.selectedIndex=soletype }

return true;
}

function getScrollTop() {
// Find current scroll position (vertical only)
  var scrollTop = document.body.scrollTop;
  if (scrollTop == 0) {
    if (window.pageYOffset) {
      scrollTop = window.pageYOffset;
    }
    else {
      scrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
    }
  }
return scrollTop;
}

function getPersn(productId, size, colour, extraLink) {
  // Issues customer with confirmation that they are buying an un-personalised item, with forward to buy with personalisation
  var productDetails = '';
  if (size) {
    if (productDetails) { productDetails += ', ' }
    productDetails += 'Size: ' + size;
  }
  if (colour) {
    if (productDetails) { productDetails += ', ' }
    productDetails += 'Colour: ' + colour;
  }
  if (productDetails) {
    productDetails = ' (' + productDetails + ')';
  }
  var okWithNoPersn = confirm('You are buying this product ' + productDetails + '\nwithout any personalisation.\n\nClick \'OK\' to continue\nClick \'Cancel\' to buy with personalisation');
  if (okWithNoPersn) {
    // Continue with buying unpersonalised item
    return true;
  }
  else {
    // Go to personalisation page, with this product selected
    top.location='http://'+skinJS_SiteURL+'/persn&pid='+productId+'&size='+size+'&colour='+colour+extraLink;
    return false;
  }
}
