// Lovell Rugby website functions - inc. pop-up, changePic, video display, AJAX live search
// v2.60 100119

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
  if (document.getElementById) { var ele = document.getElementById('mainpic') }
  else if (document.all) { var ele = document.all['mainpic'] }
  else if (document.layers) { var ele = document.layers['mainpic'] }

  var src = 'products/'+iname;
  if (pic > 1) { src+='_'+pic }
  src+='.jpg';

  ele.src=src;
  ele.width=width;
  ele.height=height;
}

var posleft = 0;
var postop = 0;

function findPos(obj) {
// Returns position of supplied object
var curleft = curtop = 0;
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 }
}

// Block right clicking
var clickmessage='Note that all images and product photos are copyright Lovell Rugby.\nPlease contact us if you wish to use any of our images.';

function disableclick(e) {
  if (document.all) {
    if (event.button==2||event.button==3) {
      if (event.srcElement.tagName=='IMG'){ alert(clickmessage); return false; }
    }
  } else if (document.layers) {
    if (e.which == 3) { alert(clickmessage); return false; }
  } else if (document.getElementById) {
    if (e.which==3&&e.target.tagName=='IMG'){ alert(clickmessage); return false; }
  }
}

function associateimages() {
  for(i=0; i<document.images.length;i++) { document.images[i].onmousedown=disableclick; }
}

if (document.all) { document.onmousedown=disableclick }
else if (document.getElementById) { document.onmouseup=disableclick }
else if (document.layers) { associateimages() }

var message='';

function clickIE() {if (document.all) {(message);return false;}}

function clickNS(e) {if
(document.layers||(document.getElementById&&!document.all)) {
if (e.which==2||e.which==3) {(message);return false;}}}
if (document.layers)
{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}
else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}


// 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='' }
}

// 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) {
// Submits search request via AJAX
showitem(['search__'+document.getElementById('qs_results').value+'~'+result], ['quicksearchresults']);
}

// 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 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 = ''; //

function doQuickSearch(result) {
// Submits search request via AJAX
quicksearch(['search__'+getVal('qs_category')+'~'+getVal('qs_group')+'~'+getVal('qs_brand')+'~'+getVal('qs_text')+'~'+getVal('qs_size')+'~'+getVal('qs_pricerange')+'~'+getVal('qs_pg')+'~'+getVal('qs_sort')+'~'+getVal('qs_soletype')+'~'+getVal('qs_so')], ['quicksearchresults']);
if (result) { si(result) }
}

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;

// 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;£'+pricerange[0]+'<span style="padding: 0px 2px 0px 2px">-</span>'+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 (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 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://www.lovell-rugby.co.uk/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';
}
