window.ABS=window.ABS||{};ABS.verseSelector=(function($){var that={},selectTitle=ABS.common.i18n('click_to_select_verse'),deselectTitle=ABS.common.i18n('click_to_deselect_verse'),regexp=/^(v(\d+)_([\dA-Z]+)_)(\d+)$/,passageSelector,onSelect,onDeselect,onClick,allowSelection,$parent;that.initialize=function(opts){opts=opts||{};onSelect=opts.onSelect||null;onDeselect=opts.onDeselect||null;onClick=opts.onClick||null;$parent=$(opts.parent)||null;passageSelector=opts.passageSelector||'.passagedisplay';if(typeof(opts.allowSelection)!=='undefined'){allowSelection=opts.allowSelection;}
else{allowSelection=true;}
delegateParentEvents();that.reParseVerses(passageSelector);};that.reParseVerses=function(selector){$parent.find(selector).each(parseVerses);};that.deselectAll=function(){$parent.find('.selected').removeClass('selected');};that.getSelected=function(){return $parent.find('.selected').filter(function(){return $(this).parents('.selected').length===0;});};that.getSelectable=function(){return $parent.find('.selectable');};that.getSelectedText=function(){return $.trim(that.getSelected().clone().find('.passage-icon').remove().end()
.text().replace(/\n/g,' ').replace(/\s+/g,' '));};that.getSelectedVerseNumber=function(){var $sel=that.getSelected(),classes=[]
verses=[];$sel.each(function(){classes.push($(this).data('verse'));});_.each(_.uniq(classes),function(clas){var match=regexp.exec(clas);verses.push(match[4]);});var verse=verses.join(',');return verse;};that.getSelectedOsisSpans=function(){var $sel=that.getSelected(),classes=[],spans=[],osis=[],selected=[],start,end,next;$sel.each(function(){classes.push($(this).data('verse'));});_.each(_.uniq(classes),function(clas){var match=regexp.exec(clas);selected.push({book:match[2],chapter:match[3],verse:match[4]});});selected=selected.sort(function(a,b){if(a.book===b.book){if(a.chapter===b.chapter){if(a.verse===b.verse){return 0;}
else{return a.verse-b.verse;}}
else{return a.chapter-b.chapter;}}
else{return a.book-b.book;}});start=selected[0];for(var i=0;i<selected.length;i++){if(next&&(next.book!=selected[i].book||next.chapter!=selected[i].chapter||next.verse!=selected[i].verse)){spans.push([start,end]);start=selected[i];}
end=selected[i];next={book:end.book,chapter:end.chapter,verse:parseInt(end.verse,10)+1};}
if(start){spans.push([start,end]);}
_.each(spans,function(span){osis.push([ABS.common.osis.fromBookOrd(span[0].book)+'.'+span[0].chapter+'.'+span[0].verse,ABS.common.osis.fromBookOrd(span[1].book)+'.'+span[1].chapter+'.'+span[1].verse]);});return osis;};that.getSelectedSpans=function(){var $sel=that.getSelected(),classes=[],verses=[],spans=[],start,end,next;$sel.each(function(){classes.push($(this).data('verse'));});$.each(_.compact(_.uniq(classes)),function(k,v){verses.push(parseInt(v.match(regexp)[4],10));});verses=verses.sort(function(a,b){return a-b;});start=verses[0];for(i=0;i<verses.length;i++){if(next&&next!=verses[i]){spans.push(format(start,end));start=verses[i];}
end=verses[i];next=end+1;}
if(start){spans.push(format(start,end));}
function format(start,end){return(start==end)?start.toString():start+'-'+end;}
return spans;};that.selectSpan=function(e,showForm){var hash;if(typeof e==='object'){hash=$(this).attr('hash').replace('#','');}
else if(typeof e==='string'){hash=e.replace('#','');}
var range,className,start,end;showForm=(showForm===undefined)?true:showForm;if(hash==='none'){$('.selected').removeClass('selected');}
else{if(!e.shiftKey){$('.selected').removeClass('selected');}
if(hash==='chapter'){className=[];$('.selectable').each(function(){className.push($(this).data('verse'));});$.each(_.uniq(className),function(k,v){toggleVerse(v,true);});}
else{var ranges=hash.split(/\s*,\s*/);for(j=0;j<ranges.length;j++){range=ranges[j].split('-');className=$parent.find('.selectable:first').data('verse');start=parseInt(range[0],10);end=range[1]?parseInt(range[1],10):start;for(i=start;i<=end;i++){toggleVerse(className.replace(regexp,"$1"+i),true);}}}}
if(onSelect&&typeof onSelect=='function'){onSelect();}
return false;};function delegateParentEvents(){var $start=null;if(allowSelection){$parent.delegate('.selectable','mousedown',function(e){if(window.event){if(window.event.shiftKey){this.onselectstart=function(){return false;};}
else{this.onselectstart=function(){return true;};}}
return(!e.shiftKey);})
.delegate('.selectable','click',function(e){var $tgt=$(e.target),verses=[],select=!$tgt.is('.selected');if(!$tgt.is('.selectable')){e.preventDefault();return true;}
verses.push($tgt.data('verse'));if(onClick&&typeof onClick=='function'){onClick(e);}
if(e.shiftKey){$.each(selectVerseSpan($start,$tgt),function(k,v)
{verses.push(v);});}
$start=$tgt;if(verses.length){$.each(_.uniq(verses),function(i,v){toggleVerse(v,select);});if(onSelect&&typeof onSelect=='function'&&select){onSelect(e);}
else if(onDeselect&&typeof onDeselect=='function'&&!select){onDeselect(e);}}
return false;});}}
function parseVerses(){var verse;$(this).children().each(function(){traverse.call(this,true);});function traverse(outer){var $el=$(this);verse=getVerse($el)||verse;if($el.data('verse')){return;}
if($el.is('verse-block')||$el.is('.title-passage')||$el.is('.area')||$el.is('br')||$el.is('h1,h2,h3,h4,h5,h6'))
{return;}
if($el.get(0).nodeType==3){if($.trim($el.text())===''){return;}
$el.wrap('<span/>');$el=$el.closest('span');}
if($el.css('display')=='block'||$el.is('li')){$el.addClass('verse-block').removeClass('selectable')
.contents().each(traverse);}
else{if(!$el.data('verse')){if(outer===true){$el.addClass('outer-span');}
$el.addClass('selectable').addClass(verse)
.data('verse',verse||null)
.attr('title',selectTitle)
.hover(function(){if(!$(this).is('.selected')){$('.'+$(this).data('verse')).addClass('over');}},function(){$('.'+$(this).data('verse')).removeClass('over');})
.children().each(traverse);}}}}
function getVerse($el){var className=$el.attr('className');if(!className){return false;}
var m=$.grep(className.split(' '),function(c){return c.match(regexp);});return m.length?m[0]:false;}
function selectVerseSpan($start,$end){var ret=[],v1,v2,tmp;if(!($start&&$end)){return ret;}
v1=$start.data('verse').match(regexp);v2=$end.data('verse').match(regexp);start=parseInt(v1[4],10);end=parseInt(v2[4],10);if(start>end){tmp=start;start=end;end=tmp;}
for(i=start;i<=end;i++){ret.push('v'+v1[2]+'_'+v1[3]+'_'+i);}
return ret;}
function toggleVerse(v,dir){if(!v){return;}
var className=(typeof(v)==='string')?v:v.data('verse'),$verses=$('.'+className);if(typeof(dir)!=='undefined'){$verses.toggleClass('selected',dir);}
else{$verses.toggleClass('selected');}
$verses.removeClass('over').attr('title',function(){return $(this).is('.selected')?deselectTitle:selectTitle;});$('body').removeClass('IEFIX');}
return that;}(jQuery));
