var ncSearchForm=Class.create();ncSearchForm.prototype={initialize:function(query)
{this.options=Object.extend({apiKey:false,cseIdentifier:false,searchForm:undefined,searchLabel:'Search…',resultsContainer:undefined,waitingContainer:undefined,paging:true,count:10,collapse:false,resultsTemplate:'<li#{first}><a href="#{link}"#{onclick}><span class="heading">#{htmlTitle}</span><span class="url">#{link}</span><span class="summary">#{htmlSnippet}</span></a></li>'},arguments[1]||{});this.searchForm=$(this.options.searchForm);if(!this.searchForm){return;}
this.searchField=this.searchForm.down('input.search');this.searchField.writeAttribute('autocomplete','off');this.searchField.observe('focus',this.focus.bindAsEventListener(this));this.searchField.observe('blur',this.blur.bindAsEventListener(this));this.searchField.observe('keydown',this.keyDown.bindAsEventListener(this));this.searchForm.observe('submit',this.submit.bindAsEventListener(this));this.resultsContainer=$(this.options.resultsContainer);this.resultsList=this.resultsContainer.down('ol');this.waitingContainer=$(this.options.waitingContainer);this.searchCache=$H();if(query){this.searchField.setValue(query);this.search();}else{this.searchField.setValue(this.options.searchLabel);}
if(this.searchField.getValue()==this.options.searchLabel){this.searchField.addClassName('placeholder');}},keyDown:function(e)
{if(this.observer)
clearTimeout(this.observer);switch(e.keyCode){case Event.KEY_ESC:this.searchField.value='';this.close();break;case Event.KEY_RETURN:this.submit();e.stop();break;case Event.KEY_UP:this.prev();e.stop();break;case Event.KEY_DOWN:this.next();e.stop();break;default:this.observer=setTimeout(this.search.bind(this),1000);break;}},search:function()
{if(this.searchEmpty()){this.close();}else{if(!this.resultsContainer.visible()){this.showSearch();}else{this.performSearch();}}},showSearch:function()
{new Effect.BlindDown(this.resultsContainer,{duration:0.2,afterFinish:function(){this.performSearch();}.bind(this)});},performSearch:function(startIndex)
{if(this.searchEmpty()){return;}
if(!startIndex){startIndex=1;}
var value=this.searchField.getValue();if(this.currentValue==value&&startIndex<=this.currentIndex){return;}
this.currentValue=value;var searchCache=this.searchCache.get(this.currentValue+'.startIndex.'+startIndex);if(searchCache){this.populateSearch(searchCache);return;}
var cache={items:[],start:startIndex,count:0,total:0};new Ajax.JSONRequest('https://www.googleapis.com/customsearch/v1',{callbackParamName:'callback',parameters:{key:this.options.apiKey,cx:this.options.cseIdentifier,q:this.currentValue,num:this.options.count,start:startIndex},onSuccess:function(response){if(response.status===200){cache={items:response.responseJSON.items,start:parseInt(response.responseJSON.queries.request[0].startIndex),count:parseInt(response.responseJSON.queries.request[0].count),total:parseInt(response.responseJSON.queries.request[0].totalResults)}
this.currentIndex=startIndex+cache.count-1;this.searchCache.set(this.currentValue+'.startIndex.'+startIndex,cache);this.populateSearch(cache);}else{this.searchCache.set(this.currentValue+'.startIndex.'+startIndex,cache);this.populateSearch(cache);}}.bind(this),onFailure:function(response){this.searchCache.set(this.currentValue+'.startIndex.'+startIndex,cache);this.populateSearch(cache);}.bind(this)});},populateSearch:function(response)
{var more=this.resultsList.select('li.more');if(more.size()){more.invoke('remove');}
var results=new Array();if(response.items.length>0){if(response.items.length>this.options.count){response.items.length=this.options.count;}
var first=true;var resultsTemplate=new Template(this.options.resultsTemplate);response.items.each(function(result){result.first='';if(first&&response.start==1){result.first=' class="first"';first=false;}
result.onclick='';if(result.link.match(/\.pdf$/)){result.onclick=' onclick="window.open(this.href); return false;"';}
results.push(resultsTemplate.evaluate(result));});}else{results.push('<li class="first error">No results matched your query.</li>');}
if(this.options.paging&&response.total>(response.start+response.count-1)){results.push('<li class="more"><a class="clearfix" href="#show-more" rel="'+(response.start+response.count)+'"><span>Displaying first '+(response.start+response.count-1)+' results — click to show more results…</span><img src="'+_nc.baseUrl+'images/wait.gif" /></a></li>');}
if(response.start==1){this.resultsList.update(results.join(''));}else{this.resultsList.insert(results.join(''));}
more=this.resultsList.down('li.more');if(more){wait=more.down('img').setOpacity(0);more.down('a').observe('click',function(event){event.stop();more.down('a').stopObserving();more.down('a span').hide();new Effect.Opacity(wait,{to:1,duration:0.4});this.performSearch(response.start+response.count);}.bind(this));}
if(!this.resultsList.visible()){new Effect.BlindDown(this.resultsList,{duration:0.2});}
this.waitingContainer.absolutize();this.waitingContainer.hide();},focus:function(e)
{if(this.searchField.hasClassName('placeholder')){this.searchField.value='';this.searchField.removeClassName('placeholder');}else if(this.searchField.value!=''){this.search();}},blur:function(e)
{if(this.searchEmpty()){this.searchField.value='Search for it here…';this.searchField.addClassName('placeholder');}
this.closer=setTimeout(this.close.bind(this),400);},next:function()
{if(selected=this.resultsContainer.down('li.selected')){if(next=selected.next()){next.addClassName('selected');selected.removeClassName('selected');}}else{next=this.resultsContainer.down('li');if(!next.hasClassName('error')){next.addClassName('selected');}}},prev:function()
{if(selected=this.resultsContainer.down('li.selected')){selected.removeClassName('selected');if(previous=selected.previous()){previous.addClassName('selected');}}else{previous=this.resultsContainer.down('li');if(!previous.hasClassName('error')){previous.addClassName('selected');}}},close:function()
{if(!this.options.collapse){return;}
new Effect.BlindUp(this.resultsContainer,{duration:0.2,afterFinish:this.resetList.bind(this)});},submit:function()
{clearTimeout(this.closer);if(selected=this.resultsContainer.down('li.selected')){var href=selected.down('a').href;if(href.match(/^http:\/\/ncpic\.org\.au/)&&!href.match(/\.pdf$/)){window.location.href=href;}else{window.open(href);}}else{if(this.searchField.getValue()!=this.options.searchLabel&&!this.searchEmpty()){this.searchForm.submit();}}},resetList:function()
{if(this.currentValue!=this.searchField.getValue()){this.resultsList.update('');this.resultsList.hide();this.waitingContainer.relativize();this.waitingContainer.show();}},searchEmpty:function()
{if(this.searchField.getValue().strip()=='')
return true;return false;}};;function ncSharingPopup(source,articleid)
{var bookmarkSourceID='ncShareBookmark-'+articleid+'-source';var bookmarkTargetID='ncShareBookmark-'+articleid+'-target';var emailSourceID='ncShareEmail-'+articleid+'-source';var emailTargetID='ncShareEmail-'+articleid+'-target';switch(source.id){case bookmarkSourceID:var openingSource=$(bookmarkSourceID);var openingTarget=$(bookmarkTargetID);var closingSource=$(emailSourceID);var closingTarget=$(emailTargetID);break;case emailSourceID:var openingSource=$(emailSourceID);var openingTarget=$(emailTargetID);var closingSource=$(bookmarkSourceID);var closingTarget=$(bookmarkTargetID);openingTarget.down('.ncShareEmail').reset();var alertMessage=openingTarget.down('#ncSupscriptionAlert');if(typeof alertMessage!="undefined"){alertMessage.remove();}
break;default:return false;break;}
if(Element.hasClassName(openingSource,'open')){Element.removeClassName(openingSource,'open');Position.clone(openingSource,openingTarget,{setWidth:false,setHeight:false,offsetTop:Element.getHeight(openingSource)});Effect.toggle(openingTarget,'blind',{duration:0.1,queue:{position:'end',scope:'global'}});}else{Element.addClassName(openingSource,'open');Position.clone(openingSource,openingTarget,{setWidth:false,setHeight:false,offsetTop:Element.getHeight(openingSource)});Effect.toggle(openingTarget,'blind',{duration:0.1,queue:{position:'end',scope:'global'}});Element.removeClassName(closingSource,'open');Effect.BlindUp(closingTarget,{duration:0.1,queue:{position:'end',scope:'global'}});}
return true;}
function ncBuildBookmarkUrl(type,url,title,summary,popupOptions)
{switch(type){case'facebook':bookmarkUrl='http://www.facebook.com/sharer.php?src=bm&v=4&i=1203659640&u='+url+'&t='+title;break;case'twitter':bookmarkUrl='https://twitter.com/intent/tweet?text='+title+'…%20'+url+'%20-&via=ncpic';break;case'digg':bookmarkUrl='http://digg.com/submit?url='+url+'&title='+title+'&bodytext='+summary+'&media=news&topic=health';break;case'stumbleupon':bookmarkUrl='http://www.stumbleupon.com/submit?url='+url+'&title='+title;break;}
if(popupOptions){window.open(bookmarkUrl,type,popupOptions);}else{window.open(bookmarkUrl,type);}}
function ncEmailPost(element)
{var submitObject=element;var formObject=element.up('.ncShareEmail');var waitObject=formObject.select('div.ncWait')[0];submitObject.disabled=true;waitObject.show();var formParameters=formObject.serialize(true);formParameters.ajax='1 ';new Ajax.Request(formObject.action,{method:formObject.method,parameters:formParameters,onSuccess:function(transport,json){formObject.select('.alert').invoke('remove');if(json.alertClass){if(json.alertClass=='success'){var success=true;}
json.alertClass=' '+json.alertClass;}else{json.alertClass='';}
if(json.alert){formObject.select('div.note')[0].insert({after:'<div id="ncSupscriptionAlert" class="alert form'+json.alertClass+'">'+json.alert+'</div>'});}
if(success){Effect.BlindUp(formObject.up('.ncEmailActions'),{duration:0.3,delay:3});buttonId='ncShareEmail-'+formObject.down('.sendemailArticle').value+'-source';$(buttonId).removeClassName('open');}
submitObject.disabled=false;waitObject.hide();if(json.errors){formObject.select('label').each(function(labelObject){forId=labelObject.getAttribute('for');if(json.errors[forId]){labelObject.insert({before:'<div class="alert error">'+json.errors[forId]+'</div>'});}});}},onFailure:function(){formObject.select('.alert').invoke('remove');formObject.select('div.note')[0].insert({after:'<div id="ncSupscriptionAlert" class="alert form error">There was a communication error with the server, the email sending attempt has failed.</div>'});submitObject.disabled=false;waitObject.hide();},on404:function(){formObject.select('.alert').invoke('remove');formObject.select('div.note')[0].insert({after:'<div id="ncSupscriptionAlert" class="alert form error">There was a communication error with the server, the email sending attempt has failed.</div>'});submitObject.disabled=false;waitObject.hide();}});}
