// jCVSC.js

/*******************************************************************************

Copyright 2007, Jeremy R. Geerdes
All rights reserved.

This is a custom search control powered by the Google AJAX Search API. It is NOT
freeware. To deploy on your own site, please contact jgeerdes@mchsi.com

*******************************************************************************/



function jCVSC(a,b,c){
 if (!google||!google.search){alert('Oops. Unable to initialize search control: the Google AJAX Search API is not yet loaded.');return false;}
 var z=this;
 z.a=(typeof(a)=='string')?document.getElementById(a):a;
 z.b=(typeof(b)=='object'&&b.length>0)?b:[];
 z.c=(typeof(c)=='object')?c:{};
 if (typeof(z.c.findResults)=='undefined'){z.c.findResults=1;}
 if(z.b.length>0){
  z.draw();
  z.execute();
  z.makeActive(z.b[0]);
 }
}
jCVSC.prototype.getContainer=function(){return this.a;};
jCVSC.prototype.draw=function(){
 var z=this,a=z.a,b=z.b,c=z.c;
 while (a.firstChild){a.removeChild(a.firstChild);}
 a.className=(a.className=='')?'gsc-control':a.className+' gsc-control';
 var k=0;
 var d=document.createElement('div');
 d.className='gsc-tabsArea';
 var e=document.createElement('div');
 e.className='gsc-resultsbox-visible';
 for (var y=0;y<b.length;y++){
  var f=b[y];
  if (!f.y){
   var g=document.createElement('div');
   g.className='gsc-tabHeader gsc-tabhInactive';
   g.innerHTML=(typeof(f.label)=='string')?f.label:((typeof(f.query)!='undefined')?f.query:((f.type)?window['_UDS_MSG_SEARCHER_'+f.type.toUpperCase()]:_UDS_MSG_SEARCHER_VIDEO));
   var x=function(){z.makeActive(this);};
   g.onclick=x;
   d.appendChild(g);
   f.y=g;
  }
  if (!f.x){
   var h=document.createElement('div');
   h.className='gsc-resultsRoot.gsc-tabData gsc-tabdInactive';
   e.appendChild(h);
   var i=document.createElement('div');
   i.className='gsc-resultsHeader';
   h.appendChild(i);
   var j=document.createElement('div');
   j.className='gsc-results gsc-'+((f.type)?f.type.toLowerCase():'video')+'Result';
   h.appendChild(j);
   f.x=h;
   f.w=j;
  }
  if (!f.query&&(!z.d||!z.e)){
   var p=(z.c.searchFormRoot)?z.c.searchFormRoot:0;
   var n=(p)?((typeof(p)=='string')?document.getElementById(p):p):document.createElement('div');
   var o=new google.search.SearchForm(0,n);
   o.setOnSubmitCallback(z,jCVSC.prototype.execute);
   z.d=n;
   z.e=o;
  }
 }
 if (typeof(z.c.player)=='string'){z.f=document.getElementById(z.c.player);}
 else if (typeof(z.c.player)=='object'){z.f=z.c.player;}
 var k=document.createElement('div');
 k.style.clear='both';
 var l=document.createElement('div');
 l.className='jgAbout';
 l.appendChild(document.createTextNode('About'));
 l.title='About';
 l.style.cursor='pointer';
 l.style.width='auto';
 l.style.fontFamily='verdana,arial,helvetica,sans serif';
 l.style.fontSize='11px';
 l.style.position='absolute';
 l.onclick=function(){window.location.href='http://jgeerdes.home.mchsi.com/portfolio/about/jCVSC.html';};
 if (z.d&&((document.all&&!z.d.parentElement)||(!document.all&&!z.d.parentNode))){a.appendChild(z.d);}
 if (!z.c.noTabs&&z.b.length>1)a.appendChild(d);
 a.appendChild(e);
 a.appendChild(k);
 a.appendChild(l);
 if (!z.d){
  var m=document.createElement('div');
  m.className='gs-branding';
  google.search.Search.getBranding(m);
  a.appendChild(m);
 }
}
jCVSC.prototype.execute=function(d){
 var z=this,g=google.search;
 z.loaded=0;
 z.loadingSearchers=[];
 for (var y=0;y<z.b.length;y++){
  var x=z.b[y];
  if (!x.z){
   x.z=new g[((x.type)?x.type:'Video')+'Search'];
   x.z.setSearchCompleteCallback(z,jCVSC.prototype.p,[x]);
   var a=4;
   if (x.results){
    var ra=x.results;
    if (typeof(ra)=='string'){a=(ra==g.Search.LARGE_RESULTSET)?g.Search.LARGE_RESULTS:g.Search.SMALL_RESULTS;}
    else{a=ra;}
   }
   else if (z.c.results){
    var ra=z.c.results;
    if (typeof(ra)=='string'){a=(ra==g.Search.LARGE_RESULTSET)?g.Search.LARGE_RESULTS:g.Search.SMALL_RESULTS;}
    else{a=ra;}
   }
   var b=(a>4)?g.Search.LARGE_RESULTSET:g.Search.SMALL_RESULTSET;
   x.z.setResultSetSize(b);
   var e=[z.c,x];
   for (var f=0;f<e.length;f++){
    var d=e[f];
    for (var c in d){
     if (c!='Restriction'&&x.z['set'+c]){
      x.z['set'+c].apply(x.z,((d[c].constructor=='Array')?d[c]:[d[c]]));
     }
    }
   }
   x.r=0;
  }
  var q=0;
  if (typeof(x.query)=='string'){q=x.query;}
  else if (d&&typeof(d)=='string'){
   z.e.input.value=d;
   q=d;
   if (x.y.innerHTML.match(/\[\".*?\"\]/)){x.y.innerHTML=x.y.innerHTML.replace(/\[\".*?\"\]/,'["'+q+'"]');}
   else{x.y.innerHTML+=' ["'+q+'"]';}
  }
  else if (d&&d.input&&d.input.value){
   q=d.input.value;
   if (x.y.innerHTML.match(/\[\".*?\"\]/)){x.y.innerHTML=x.y.innerHTML.replace(/\[\".*?\"\]/,'["'+q+'"]');}
   else{x.y.innerHTML+=' ["'+q+'"]';}
  }
  if (q&&!x.r){
   z.loadingSearchers.push(x);
   x.z.execute(q);
   if (typeof(x.query)=='string'){x.r=1;}
  }
 }
 return false;
}
jCVSC.prototype.p=function(a){
 var z=this,y=a.z.results,b=a.w,g=google.search;
 var r=4;
 if (a.results){
  var ra=a.results;
  if (typeof(ra)=='string'){r=(ra==g.Search.LARGE_RESULTSET)?g.Search.LARGE_RESULTS:g.Search.SMALL_RESULTS;}
  else{r=ra;}
 }
 else if (z.c.results){
  var ra=z.c.results;
  if (typeof(ra)=='string'){r=(ra==g.Search.LARGE_RESULTSET)?g.Search.LARGE_RESULTS:g.Search.SMALL_RESULTS;}
  else{r=ra;}
 }
 var x=0;
 var v=function(a){return function(e){
  if (!e){e=window.event;}
  if (z.player(a)){
   if (e.preventDefault){e.preventDefault();}
   return false;
  }
 };};
 if (y.length==0){
  var c=document.createElement('div');
  c.className='gsc-no-results';
  c.appendChild(document.createTextNode(google.search.SearchControl.NO_RESULTS_DEFAULT_STRING));
  b.appendChild(c);
 }
 while (x<y.length&&x<r){
  var w=y[x];
  var c=document.createElement('div');
  c.className='gsc-result gsc-'+((a.type)?a.type.toLowerCase():'video')+'Result';
  c.style.cursor='pointer';
  c.appendChild(w.html);
  if (w.playUrl||w.width){
   c.title='Click to play video';
   var il=c.getElementsByTagName('a')[0];
   il.target=null;
   c.onclick=v(w);
  }
  b.appendChild(c);
  x++;
 }
 z.loaded+=1/z.loadingSearchers.length;
 if (z.loaded>=1&&z.activeSearcher.z.results.length==0){z.fr();}
}
jCVSC.prototype.fr=function(){
 if (!this.c.findResults){return;}
 var z=this,a=z.b,b=z.loadingSearchers,c,d=undefined;
 for (c=0;c<b.length;c++){if (b[c]=z.activeSearcher){d=(c+1<b.length)?c+1:0;break;}}
 if (typeof(d)=='undefined'){return;}
 for (d=d;b[d]!=z.activeSearcher;d++){
  if (b[d].z.results.length>0){
   z.makeActive(b[d]);
   break;
  }
  else if (y+1>=b.length){y=0;}
 }
}
jCVSC.prototype.makeActive=function(a){
 var z=this;
 for (var y=0;y<z.b.length;y++){
  var x=z.b[y];
  if (a==x||a==x.y){
   z.activeSearcher=x;
   x.y.className='gsc-tabHeader gsc-tabhActive';
   x.x.className='gsc-resultsRoot gsc-tabData gsc-tabdActive';
  }
  else{
   x.y.className='gsc-tabHeader gsc-tabhInactive';
   x.x.className='gsc-resultsRoot gsc-tabData gsc-tabdInactive';
  }
 }
}
jCVSC.prototype.player=function(a){
 var z=this,b=(a.playUrl)?a.playUrl:a.url,c=z.f,d=null,e=null;
 if (!z.c.player){return false;}
 if (a.playUrl&&(typeof(z.c.autoPlay)=='undefined'||z.c.autoPlay)){b+='&autoPlay=true';}
 if (typeof(c.oClassName)=='undefined'){c.oClassName=c.className;}
 c.className='gsc-video-player';
 c.style.position='relative';
 while (c.firstChild){c.removeChild(c.firstChild);}
 d=document.createElement('div');
 d.className='gsc-video-player-control';
 d.appendChild(document.createTextNode('X'));
 d.title=_UDS_MSG_CLOSE_VIDEO_PLAYER;
 d.style.cursor='default';
 d.onclick=function(){z.closePlayer();};
 if (a.playUrl){
  e=document.createElement('embed');
  e.className='gsc-video-player';
  e.type='application/x-shockwave-flash';
  e.src=b;
 }
 else{
  e=document.createElement('img');
  e.style.visibility='hidden';
  e.src=b;
  e.onload=z.resizeImg;
 }
 c.appendChild(d);
 c.appendChild(e);
 return true;
}
jCVSC.prototype.closePlayer=function(){
 var z=this;
 if (!z.c.player){return false;}
 var a=(typeof(z.c.player)=='string')?document.getElementById(z.c.player):z.c.player;
 while(a.firstChild){a.removeChild(a.firstChild);}
 if (typeof(a.oClassName)!='undefined'){a.className=a.oClassName;}
}
jCVSC.prototype.resizeImg=function(){
 var z=this;a=this.offsetParent;
 var b=z.offsetWidth/a.offsetWidth;
 var c=z.offsetHeight/a.offsetHeight;
 var d=(b>c)?b:c;
 z.style.width=(z.offsetWidth/d)+'px';
 z.style.height=(z.offsetHeight/d)+'px';
 z.style.visibility='visible';
}
