/*
jQuery.ThreeDots.min

Author Jeremy Horn
Version 1.0.3
Date: 10/30/2009
More: http://tpgblog.com/ThreeDots/
*/

(function($){$.fn.ThreeDots=function(options){var return_value=this;if((typeof options=='object')||(options==undefined)){$.fn.ThreeDots.the_selected=this;var return_value=$.fn.ThreeDots.update(options);}
return return_value;};$.fn.ThreeDots.update=function(options){var curr_this,last_word=null;var lineh,paddingt,paddingb,innerh,temp_height;var curr_text_span,lws;var last_text,three_dots_value,last_del;if((typeof options=='object')||(options==undefined)){$.fn.ThreeDots.c_settings=$.extend({},$.fn.ThreeDots.settings,options);var max_rows=$.fn.ThreeDots.c_settings.max_rows;if(max_rows<1){return $.fn.ThreeDots.the_selected;}
var valid_delimiter_exists=false;jQuery.each($.fn.ThreeDots.c_settings.valid_delimiters,function(i,curr_del){if(((new String(curr_del)).length==1)){valid_delimiter_exists=true;}});if(valid_delimiter_exists==false){return $.fn.ThreeDots.the_selected;}
$.fn.ThreeDots.the_selected.each(function(){curr_this=$(this);if($(curr_this).children('.'+$.fn.ThreeDots.c_settings.text_span_class).length==0){return true;}
curr_text_span=$(curr_this).children('.'+$.fn.ThreeDots.c_settings.text_span_class).get(0);var nr_fixed=num_rows(curr_this,true);the_bisector(curr_this,curr_text_span,nr_fixed);var init_text_span=$(curr_text_span).text();if((three_dots_value=$(curr_this).attr('threedots'))!=undefined){$(curr_text_span).text(three_dots_value);$(curr_this).children('.'+$.fn.ThreeDots.c_settings.e_span_class).remove();}
last_text=$(curr_text_span).text();if(last_text.length<=0){last_text='';}
$(curr_this).attr('threedots',last_text);if(num_rows(curr_this,nr_fixed)>max_rows){curr_ellipsis=$(curr_this).append('<span style="white-space:nowrap" class="'
+$.fn.ThreeDots.c_settings.e_span_class+'">'
+$.fn.ThreeDots.c_settings.ellipsis_string
+'</span>');while(num_rows(curr_this,nr_fixed)>max_rows){lws=the_last_word($(curr_text_span).text());$(curr_text_span).text(lws.updated_string);last_word=lws.word;last_del=lws.del;if(lws.del==null){break;}}
if(last_word!=null){var is_dangling=dangling_ellipsis(curr_this,nr_fixed);if((num_rows(curr_this,nr_fixed)<=max_rows-1)||(is_dangling)||(!$.fn.ThreeDots.c_settings.whole_word)){last_text=$(curr_text_span).text();if(lws.del!=null){$(curr_text_span).text(last_text+last_del);}
if(num_rows(curr_this,nr_fixed)>max_rows){$(curr_text_span).text(last_text);}else{$(curr_text_span).text($(curr_text_span).text()+last_word);if((num_rows(curr_this,nr_fixed)>max_rows+1)||(!$.fn.ThreeDots.c_settings.whole_word)||(init_text_span==last_word)||is_dangling){while((num_rows(curr_this,nr_fixed)>max_rows)){if($(curr_text_span).text().length>0){$(curr_text_span).text($(curr_text_span).text().substr(0,$(curr_text_span).text().length-1));}else{break;}}}}}}}
if(init_text_span==$($(curr_this).children('.'+$.fn.ThreeDots.c_settings.text_span_class).get(0)).text()){$(curr_this).children('.'+$.fn.ThreeDots.c_settings.e_span_class).remove();}else{if(($(curr_this).children('.'+$.fn.ThreeDots.c_settings.e_span_class)).length>0){if($.fn.ThreeDots.c_settings.alt_text_t){$(curr_this).children('.'+$.fn.ThreeDots.c_settings.text_span_class).attr('title',init_text_span);}
if($.fn.ThreeDots.c_settings.alt_text_e){$(curr_this).children('.'+$.fn.ThreeDots.c_settings.e_span_class).attr('title',init_text_span);}}}});}
return $.fn.ThreeDots.the_selected;};$.fn.ThreeDots.settings={valid_delimiters:[' ',',','.'],ellipsis_string:'...',max_rows:2,text_span_class:'ellipsis_text',e_span_class:'threedots_ellipsis',whole_word:true,allow_dangle:false,alt_text_e:false,alt_text_t:false};function dangling_ellipsis(obj,nr_fixed){if($.fn.ThreeDots.c_settings.allow_dangle==true){return false;}
var ellipsis_obj=$(obj).children('.'+$.fn.ThreeDots.c_settings.e_span_class).get(0);var remember_display=$(ellipsis_obj).css('display');var num_rows_before=num_rows(obj,nr_fixed);$(ellipsis_obj).css('display','none');var num_rows_after=num_rows(obj,nr_fixed);$(ellipsis_obj).css('display',remember_display);if(num_rows_before>num_rows_after){return true;}else{return false;}}
function num_rows(obj,cstate){var the_type=typeof cstate;if((the_type=='object')||(the_type==undefined)){var paddingt=cstate.pt;var paddingb=cstate.pb;var lineheight=cstate.lh;var innerh=parseInt($(obj).innerHeight());var n_rows=(innerh-(paddingt+paddingb))/lineheight;return n_rows;}else if(the_type=='boolean'){var paddingt=parseInt(($(obj).css('padding-top')).replace('px',''));var paddingb=parseInt(($(obj).css('padding-bottom')).replace('px',''));var lineheight=lineheight_px($(obj));return{pt:paddingt,pb:paddingb,lh:lineheight};}}
function the_last_word(str){var temp_word_index;var v_del=$.fn.ThreeDots.c_settings.valid_delimiters;str=jQuery.trim(str);var lastest_word_idx=-1;var lastest_word=null;var lastest_del=null;jQuery.each(v_del,function(i,curr_del){if(((new String(curr_del)).length!=1)||(curr_del==null)){return false;}
var tmp_word_index=str.lastIndexOf(curr_del);if(tmp_word_index!=-1){if(tmp_word_index>lastest_word_idx){lastest_word_idx=tmp_word_index;lastest_word=str.substring(lastest_word_idx+1);lastest_del=curr_del;}}});if(lastest_word_idx>0){return{updated_string:jQuery.trim(str.substring(0,lastest_word_idx)),word:lastest_word,del:lastest_del};}else{return{updated_string:'',word:jQuery.trim(str),del:null};}}
function lineheight_px(obj){$(obj).append("<div id='temp_ellipsis_div' style='position:absolute; visibility:hidden'>H</div>");var temp_height=$('#temp_ellipsis_div').height();$('#temp_ellipsis_div').remove();return temp_height;}
function the_bisector(obj,curr_text_span,nr_fixed){var init_text=$(curr_text_span).text();var curr_text=init_text;var max_rows=$.fn.ThreeDots.c_settings.max_rows;var front_half,back_half,front_of_back_half,middle,back_middle;var start_index;if(num_rows(obj,nr_fixed)<max_rows){return;}else{start_index=0;curr_length=curr_text.length;curr_middle=Math.floor((curr_length-start_index)/2);front_half=init_text.substring(start_index,start_index+curr_middle);back_half=init_text.substring(start_index+curr_middle);while(curr_middle!=0){$(curr_text_span).text(front_half);if(num_rows(obj,nr_fixed)<=(max_rows)){back_middle=Math.floor(back_half.length/2);front_of_back_half=back_half.substring(0,back_middle);start_index=front_half.length;curr_text=front_half+front_of_back_half;curr_length=curr_text.length;$(curr_text_span).text(curr_text);}else{curr_text=front_half;curr_length=curr_text.length;}
curr_middle=Math.floor((curr_length-start_index)/2);front_half=init_text.substring(0,start_index+curr_middle);back_half=init_text.substring(start_index+curr_middle);}}}})(jQuery);
