/**
 * gproto.js
 * @author Kris Cieslak
 * @version v1.0
 * 
 * //digitalinsane.com
 */

function Gproto(search,cseId,setSiteRestriction) {
	this.noresults='Query did not match any documents.';
	this.loader='Loading...';
    this.setStyle=new Array(
         new aClass(), new aClass(), new aClass(), new aClass(), new aClass(),
	     new aClass(),  new aClass(),  new aClass());
	this.bSearch(search,cseId,setSiteRestriction);
	this.results=8;	
	this.searchname='';
	this.moreresults=''; 
}
function aClass() {
	this.result='';
	this.title='';
	this.desc='';
	this.thumb='';
	this.thumblink='';
	this.thumbimage='';
	this.add='';
	this.link=''; }

/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==--=-=-=-=-=-=-=-=-==--=-=-=-=-=-=
 Build Search 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
Gproto.prototype.bSearch = function(search,cseId,setSiteRestriction) {
 switch (search) {
  case 'web': 
      this.a = new GwebSearch();
	  if ((cseId) && (cseId!='')) 
	     this.a.setSiteRestriction(cseId);
	  if ((setSiteRestriction) && (setSiteRestriction!='')) 
	     this.a.setSiteRestriction(setSiteRestriction);
	  if ((cseId) && (cseId!='') && (setSiteRestriction) && (setSiteRestriction!=''))   
	     this.a.setSiteRestriction(cseId,setSiteRestriction);
	  break;
  case 'blog': 
      this.a = new GblogSearch(); 
      break;
  case 'news': 
      this.a = new GnewsSearch(); 
      break;      
  case 'video': 
      this.a = new GvideoSearch(); 
      break;      
  } 
  this.a.name=search;
  this.a.setResultSetSize(GSearch.LARGE_RESULTSET);
  this.a.setNoHtmlGeneration();
  this.a.setSearchCompleteCallback(this, Gproto.prototype.searchComplete, [null]);
}
/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==--=-=-=-=-=-=-=-=-==--=-=-=-=-=-=
 Execute  
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
Gproto.prototype.execute = function(query,container) {
  if (query!='') {	
  this.a.container=container;
  this.a.query=query;	
  document.getElementById(container).innerHTML=this.loader;
  this.a.execute(query);
                 }
}

/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==--=-=-=-=-=-=-=-=-==--=-=-=-=-=-=
 Clear 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
Gproto.prototype.clearAllResults = function () {
	
  if (document.getElementById(this.a.container))
  
      document.getElementById(this.a.container).innerHTML='';
      
  this.a.clearAllResults;
}

/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==--=-=-=-=-=-=-=-=-==--=-=-=-=-=-=
 SetAllStyle
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
Gproto.prototype.setAllStyles = function() {
  for (var i=1;i<8;i++) {
	  this.setStyle[i].title=this.setStyle[0].title;
	  this.setStyle[i].desc=this.setStyle[0].desc;
	  this.setStyle[i].link=this.setStyle[0].link;
	  this.setStyle[i].result=this.setStyle[0].result;
	  this.setStyle[i].add=this.setStyle[0].add;
	  this.setStyle[i].thumb=this.setStyle[0].thumb;
	  this.setStyle[i].thumblink=this.setStyle[0].thumblink;
	  this.setStyle[i].thumbimage=this.setStyle[0].thumbimage;
	  this.setStyle[i].moreresults=this.setStyle[0].moreresults;
                        }	
}

/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==--=-=-=-=-=-=-=-=-==--=-=-=-=-=-=
 Complete  
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
Gproto.prototype.searchComplete = function () {
  var resultarr= this.a.results;
  var cont=document.getElementById(this.a.container);
  cont.innerHTML='';
  var searchName=document.createElement('span');
  searchName.className=this.searchname;
  resTable=document.createElement('div');
  if (resultarr.length==0) { 
	 searchName.innerHTML=this.a.name+'(none)';
	 notfound=document.createElement('span');
	 notfound.innerHTML=this.noresults;
	 resTable.appendChild(searchName);
	 resTable.appendChild(notfound);
	  
	                       } 
  else  {
  var count=this.results; 
  if (count>resultarr.length) count=resultarr.length;
  searchName.innerHTML=this.a.name+'('+count+')';  
  resTable.appendChild(searchName);
  for (i=0; i < count; i++ )
	{
        rcont=document.createElement('div');
		rcont.className=this.setStyle[i].result;
 // ** VideoThumb ************************************** 
	    if (this.a.name=="video") {
 	    vThumb=document.createElement('div');
		vThumb.className=this.setStyle[i].thumb;
	    LINK=document.createElement('a');
		LINK.className=this.setStyle[i].thumblink;
		LINK.setAttribute('target','_blank');
		LINK.href=resultarr[i].url;
		IMG=document.createElement('img');
		IMG.setAttribute('src',resultarr[i].tbUrl);
	    IMG.className=this.setStyle[i].thumbimage;
	    LINK.appendChild(IMG);
		vThumb.appendChild(LINK);
		                  }	 	   
   		txtCont=document.createElement('div');
 // ** TOP LINK *******************************************
		title=document.createElement('a');
		title.className=this.setStyle[i].title;
		title.setAttribute('target','_self');
	    title.href=resultarr[i].unescapedUrl;
		if (this.a.name=='video') title.href=resultarr[i].url;
	    if (this.a.name=='blog') title.href=resultarr[i].postUrl;
		title.innerHTML=resultarr[i].title;
 // ** DESCRIPTION *****************************************        
        desc=document.createElement('p');
		desc.className=this.setStyle[i].desc;
		desc.innerHTML=resultarr[i].content;
 // ** Add **************************************** 		
    	if (this.a.name=='blog') {
	    blogadd=document.createElement('span');
		blogadd.className=this.setStyle[i].add;
		blogadd.innerHTML='<b>Author:</b> '+resultarr[i].author+' <b>Date:</b> '+resultarr[i].publishedDate;
		}
		if (this.a.name=='news') {
	    newsadd=document.createElement('span');
		newsadd.className=this.setStyle[i].add;
		newsadd.innerHTML='<b>Location: </b>'+resultarr[i].location+' <b>Date:</b> '+resultarr[i].publishedDate+' <b>Publisher:</b> '+resultarr[i].publisher;
		}		
		if (this.a.name=='video') {
	    vidadd=document.createElement('span');
		vidadd.className=this.setStyle[i].add;
		vidadd.innerHTML='<b>Duration: </b>'+secconv(resultarr[i].duration)+' <b>Date:</b> '+resultarr[i].published;
		}		
 // ** BOTTOM LINK ******************************************			        
 	    links=document.createElement('a');
		links.className=this.setStyle[i].link;
		links.setAttribute('target','_blank');
		links.innerHTML=resultarr[i].url;
		switch (this.a.name) {
		  case 'web':
 		     links.innerHTML=resultarr[i].visibleUrl;
   		     links.href='http://'+resultarr[i].visibleUrl;
			 break;
		  case 'blog':	 
		     links.innerHTML=resultarr[i].blogUrl;
   		     links.href=resultarr[i].blogUrl;
             break;
		  case 'news':
 		     links.innerHTML='';
             break;
		  case 'video':	 
 		     links.innerHTML='';
			 break;
		}
      /* ******************************************************* */
	    if (this.a.name=='video') rcont.appendChild(vThumb);
	    txtCont.appendChild(title);
	    txtCont.appendChild(desc);
		if (this.a.name=='blog') txtCont.appendChild(blogadd);
        if (this.a.name=='news') txtCont.appendChild(newsadd);
        if (this.a.name=='video') txtCont.appendChild(vidadd);
		txtCont.appendChild(links);
		rcont.appendChild(txtCont);
        resTable.appendChild(rcont);
		               
	  } }
	    var moreRes=document.createElement('a');
		moreRes.innerHTML='(more results...)';
		moreRes.className=this.moreresults;
		moreRes.href="http://www.google.com/search?q="+this.a.query;
	    resTable.appendChild(moreRes);	   
	    cont.appendChild(resTable);
		  		
    }
/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==--=-=-=-=-=-=-=-=-==--=-=-=-=-=-=
 Misc  
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
function secconv(sec) {
   var w;
   if (sec<60) w=sec+' sec';
   if ((sec>=60) && (sec<3600))  w=((sec-(sec%60))/60)+' min '+(sec%60)+' sec';      
   if (sec>=3600) w=((sec-(sec%3600))/3600)+' hr '+(((sec%3600)-((sec%3600)%60))/60)+' min '+(sec%3600)%60+' sec ';
   return w;
}
