//@utf-8

(function($) {

	$.csv2table={
		name     : 'csv2table',
		version  : '0.02-b-1.9',
		updateMemo : '2008.12.04 csv2table-0.02-b-1.9 : 1. Bugfix for b-1.8(leak of ids) mkTable(rowsAry)->mkTable(id,rowsAry) and change some sortimages. 2.Methos $.csv2table.reset must need argument id  3.Enable onload with useChart.',
		ver      : '<span class="csv2tableVersion" style="color:#aaa"></span><script>jQuery(function($){ $(".csv2tableVersion").html("version:csv2table-"+$.csv2table.version) })</script>',

		charset  : 'utf-8',
		doc      : 'http://jsgt.org/mt/01/',
		demo     : 'http://jsgt.org/lib/jquery/plugin/csv2table/v001/test.htm',
		author   : 'Toshiro Takahashi',
		lisence  : 'Public Domain',
		//loadImg  : (new Image()).src='./img/icon-loadinfo.gif',
		//sortNImg : (new Image()).src='./img/icon-n.gif',//Transparence dot
		//sortDImg : (new Image()).src='./img/icon-d.gif',
		//sortAImg : (new Image()).src='./img/icon-a.gif',
		setting  : [],
		data     : [],
		_rowsAry : [],
		err      : []
	}

	$.fn.csv2table= function (url,setting){

		if(!setting)var setting={};
		var contents=$.fn.csv2table.el=this,id=this[0].id,
		op = $.csv2table.setting[id] = $.extend({
			url                : url,
			//nowloadingImg      : $.csv2table.loadImg,              //Image of now loading...
			nowloadingMsg      : 'now loading...',                 //Massege of  now loading...
			removeDoubleQuote  : true,                             // remove " of "hogehoge"
			col_midasi         : '0',                              //
			row_sep            : '\n',                             //Separator of rows. default '\n'
			col_sep            : ',',                              //Separator(,|\t|;) of cols. default ','
			sortable           : true,                             //col sort
			select             : '*',                              //select col lists. default '*' is all cols.
			orderBy            : null,                             //array of sort col. orderBy[[0,"A"]]
			col0color          : true,                             //col[0] color sync jQchart line_strokeStyle
			onload             : null,                             //collback function (id,op,data,ary) {}
			use                : null,                             // 'jqchart:line#canvasID'
			className_div      : 'csv2table-div',                  //className 
			className_table    : 'csv2table-table',                //className 
			className_table_th : 'csv2table-table-th',             //className 
			className_table_td : 'csv2table-table-td',             //className 
			className_sortMark : 'csv2table-sortMark'              //className
		},setting);

		if(op.row_sep=='\n')op.row_sep_reg='\r\n'
		if(op.use){
			op.use_api      = op.use.split(':')[0]
			op.use_api_type = op.use.split('#')[0]
			op.use_api_box  = op.use.split(':')[1].split('#')[1]
		}

		$('#loading-indicator').fadeIn();
		//$(contents).before('<div class="csv2table-loading"><img src="'+op.nowloadingImg+'"> '+op.nowloadingMsg+' </div>' )

		$.get(url+"?"+(new Date()).getTime(),"",function(data,textStatus){
			$.csv2table.data[id]=data;
			//$(".csv2table-loading").fadeOut();
			
			$(contents).css("display","none").html(  mkRowsAry(id,data));
			setCSS(id);
			$(contents).fadeIn();
			$('#loading-indicator').fadeOut();
			if(op.use_api=='jqchart'){
				if(op.use_api_type=='jqchart:line')op.type=$.csv2table.setting[id].type='line';
				else if(op.use_api_type=='jqchart:bar')op.type=$.csv2table.setting[id].type='bar';
				useChart(id,op,data,$.csv2table._rowsAry[id]);
			}
			if($.csv2table.setting[id].onload)$.csv2table.setting[id].onload(id,op,data,$.csv2table._rowsAry[id]);
		});

		$.csv2table.wrtTable=function(sortType,colIndex,id,callback){
			$("#"+id).html(  mkRowsAry(id,$.csv2table._rowsAry[id],sortType,colIndex));	
			setCSS(id);
			if(op.use_api=='jqchart'){
				if(op.use_api_type=='jqchart:line')op.type=$.csv2table.setting[id].type='line';
				else if(op.use_api_type=='jqchart:bar')op.type=$.csv2table.setting[id].type='bar';
				useChart(id,op,$.csv2table.data[id],$.csv2table._rowsAry[id]);
			}
			if($.csv2table.setting[id].onload)$.csv2table.setting[id].onload(id,op,$.csv2table.data[id],$.csv2table._rowsAry[id]);
			if(callback)callback(sortType,colIndex,id);
		}

		$.csv2table.reset=function(id){
			rowsAry=$.csv2table._rowsAry[id]=escapeStrComma(op.col_sep,op.row_sep,$.csv2table.data[id],op.removeDoubleQuote);
			$("#"+id).html( mkTable(id,rowsAry));
			//if(op.sortable)$('#'+id+' table th .sortimg').attr('src',$.csv2table.sortNImg )
			setCSS(id);
			if(op.use_api=='jqchart'){
				if(op.use_api_type=='jqchart:line')op.type=$.csv2table.setting[id].type='line';
				else if(op.use_api_type=='jqchart:bar')op.type=$.csv2table.setting[id].type='bar';
				useChart(id,op,$.csv2table.data[id],$.csv2table._rowsAry[id]);
			}
		}

		function orderWk(ary,sortType,colIndex){
			ary.head=ary.slice(0,op.col_midasi+1) 
			var rowsAry=ary.slice(op.col_midasi+1,ary.length) 
			rowsAry=sortwk(rowsAry,sortType,colIndex);
			rowsAry=ary=ary.head.concat(rowsAry)
			return rowsAry
		}

		function mkRowsAry(id,data,sortType,colIndex){  

			var rowsAry=null,rewrite=true//zanntei
			
			if(sortType && rewrite){
				rowsAry=$.csv2table._rowsAry[id]=orderWk($.csv2table._rowsAry[id],sortType,colIndex);
			} else {
				if(op.col_sep==','){
					rowsAry=$.csv2table._rowsAry[id]=escapeStrComma(op.col_sep,op.row_sep,data,op.removeDoubleQuote);
					
				} else {
					if(op.select == '*'||op.select == ['*']||!op.select)
						rowsAry=$.csv2table._rowsAry[id]=mkArray(data,op.col_sep,op.row_sep);
					else
						rowsAry=$.csv2table._rowsAry[id]=mkSelectedArray(data,op.col_sep,op.row_sep,[0,2]);
				}
				
				if(op.orderBy){ 
					for(var i=op.orderBy.length-1 ;i>=0;i--){
					  rowsAry=$.csv2table._rowsAry[id]=orderWk(rowsAry,op.orderBy[i][1],op.orderBy[i][0])
					}
				} 
			}
			
			var tableHtm=mkTable(id,rowsAry);
			
			return tableHtm;
		}

		function ucase(word){
			return word.substr(0,1).toUpperCase() + word.substr(1).toLowerCase() ;
		}

		
		function  mkTable(id,rowsAry){


			if(!rowsAry)return 
			var rowlen=rowsAry.length;
			//var rowlen=10;
			
			var tdClass                             ; 
			var row = rowsAry.length                ; 
			//var row=10;
			var col = rowsAry[0].length             ;  
			
			var htm="";

			//見出し行の処理
			/* NO HEADER ROW - CUSTOMIZED */
			/*htm+= "<tr>";
			for (var k=0; k<col; k++) {

				var si=$('#'+id+'-sortimg-'+k)[0]
				var sortimgsrc=(si)?$('#'+id+'-sortimg-'+k)[0].src:$.csv2table.sortNImg;

				htm+= "<th id='"+id+"-th-"+k+"'>"
				   + rowsAry[op.col_midasi][k];

				if(op.sortable)
				htm+= "<img id='"+id+"-sortimg-"+k+"' class='sortimg' src='"+sortimgsrc+"' border='0'>"
				htm+= "</th>";

				if(!op['th'+k])op['th'+k]=null;//memo of sortType
			}
			htm+= "</tr>";*/
				
			//data行の処理
			findzip = $('#search-zip').val();
			findcounty = $('#search-county').val();
			findlastname = $('#search-lastname').val();
			var findlastname_exp = new RegExp(findlastname, "i");
			findspecialty = $('#search-specialty').val();
			j = 0;
			for (var i=eval(op.col_midasi+1); i<row; i++) { 
				
				if(findzip != '')		{ zippass = 0; 			if(findzip == rowsAry[i][5])					{ zippass = 1;} 		} else { zippass = 1; 		}
				if(findcounty != '')	{ countypass = 0; 		if(findcounty == rowsAry[i][7])					{ countypass = 1;} 		} else { countypass = 1; 	}
				if(findlastname != '')	{ lastnamepass = 0; 	if(rowsAry[i][8].search(findlastname_exp) != -1)	{ lastnamepass = 1;} 	} else { lastnamepass = 1; 	}
				if(findspecialty != '')	{ specialtypass = 0; 	if(findspecialty == rowsAry[i][11])				{ specialtypass = 1;} 	} else { specialtypass = 1; }
				//htm+= '<tr><td colspan="3">' + rowsAry[i][8].search(findlastname_exp) + ' - ' + findlastname + ' - ' + rowsAry[i][8] + ' - ' + lastnamepass + '</td></tr>';
				if(zippass == 1 && countypass == 1 && lastnamepass == 1 && specialtypass == 1)
				{
					//htm+= '<tr><td colspan="3">FOUND</td></tr>';
					groupnumber = Math.floor((j)/10);
					if(groupnumber != 0) { thisstyle = "none"; } else { thisstyle = ""; }
					htm+= '<tr class="' + ((j%2 == 0) ? 'altrow ' : '') + 'group-' + Math.floor((j)/10) +  '" style="display:' + thisstyle + '">';
					//列の処理
					/*CUSTOMIZED */
					/*
					for (var j=0; j<col; j++) {
						htm+= "<td>"
						   + rowsAry[i][j]
						   + "</td>";
					}*/
					//htm+= "<td>" + j + "-" + Math.floor((j)/10) + "</td>";
					htm+= "<td>";
					htm+= '<h2>' + rowsAry[i][8];
					if(rowsAry[i][9]){ htm+= ', ' + rowsAry[i][9]; }
					if(rowsAry[i][10]){ htm+= ', ' + rowsAry[i][10];}
					htm+= '</h2>';
					htm+= rowsAry[i][11] + '<br />';
					htm+= '<strong>' + rowsAry[i][0] + '</strong><br /></td><td>';
					htm+= rowsAry[i][1] + '<br />';
					if(rowsAry[i][2]) { htm+= rowsAry[i][2] + '<br />'; }
					htm+= rowsAry[i][3] + ', ' + rowsAry[i][4] + ' ' + rowsAry[i][5] + '<br />';
					htm+= ucase(rowsAry[i][7]) + ' County<br />';
					if(rowsAry[i][6]) { htm+= 'Phone: (' + rowsAry[i][6].substr(0,3) + ') ' + rowsAry[i][6].substr(3,3) + '-' + rowsAry[i][6].substr(6,4) + '<br />'; }
					if(rowsAry[i][2]) { address2 = '+' + rowsAry[i][2].replace(' ','+'); } else { address2 = '' }
					htm+= '<a href="http://www.bcbsnc.com/apps/MapQuest/advantagecallback.jsp?querytemplate=route&transaction=route&origaddress=&destaddress=' + rowsAry[i][1].replace(' ','+') + address2 + '&destcity=' + rowsAry[i][3] + '&deststateProvince=NC&destpostalCode=' + rowsAry[i][5] + '&step=getDirections" onclick="return openPopUpLink(this, \'directions\');">Get directions</a><br /></td>'
					htm+= "</tr>";
					j++;
				}
			}
			$('#results-pane').fadeIn();
			if(j == 0)
			{
				$('#previous').hide();
				$('#next').hide();
				htm+= "<tr><td>Your search returned no results.  Please adjust your search criteria and try again.</td></tr>";
			}
			else
			{
				$('#search-pane').fadeOut("fast", function() {
					setTimeout(function() {
						$('#search-links').fadeIn();
						$('#search-again').fadeIn();
						$('#resultcount').val(j);
						$('#group').val(0);
						$('#previous').hide();
						$('#Disclaimer-1').hide();
						$('#Disclaimer-2').show();
						if(j <= 10) { $('#next').hide(); } 
						else  { $('#next').show(); } 
					}, 250);
				});
				//alert(j);
			}
			//htm+= '<tr><td colspan="3">' + '1=' + findzip + ' 2=' + findcounty + ' 3=' + findlastname + ' 4=' + findspecialty + '</td></tr>';
			
			var tableHtm=document.getElementById(id)
				.innerHTML='<h3>Search results</h3><table id="resultstable">'+htm+'</table><br clear="all" />';

			return tableHtm;

		}
		
		
		
		
		////
		// 並べ替え
		// @parame dataAry    並べ替え対象配列
		// @parame sortType   昇 A|降 D
		// @parame colIndex   ソート列
		//
		function sortwk(dataAry,sortType,colIndex){
			var i=colIndex;
			if(!dataAry)return ;
			if(isNaN(dataAry[0][i])){
				dataAry.sort(
					function(a,b){
	
						if(!a[i]) { 
							if(!b[i])return 0;
							else     return 1;
						} else if(!b[i]) {
							return -1;
						}
						
						if(""+a[i] === ""+b[i])return 0;
						return (sortType=="D")?
							((""+a[i] > ""+b[i])?-1:1):
							((""+a[i] > ""+b[i])?1:-1);
					}
				)

			} else {
				(sortType=="D")?
				dataAry.sort(function (a,b){ 
						return (b[i] - a[i]) ;//降  
				}):
				dataAry.sort(function (a,b){ 
						return (a[i] - b[i]);// 昇 
				})
			}
			return dataAry;
		}
		
		function escapeStrComma(col_sep,row_sep,oj,removeDoubleQuote){
			var rdq=(removeDoubleQuote)?'':'"';

			//mk dmy for comma in "
			var dmy =['-###','###-'],cnt=0,r;
			cnt=(function mkdmy(cnt){
				if(!(
					oj.indexOf((dmy[0]+'comma'+cnt+dmy[1]))==-1 ||
					oj.indexOf((dmy[0]+'rn'+cnt+dmy[1]))==-1 ||
					oj.indexOf((dmy[0]+'wDquote'+cnt+dmy[1]))==-1 
				))mkdmy( ++cnt )
				else void(0)
				return cnt;
			})(cnt)

			var reg='(["](.|(\r\n))*?(["]$|["][,('+op.row_sep_reg+')]))',
				dmystr_comma=''+(dmy[0]+'comma'+cnt+dmy[1]) ,
				dmystr_rn=''+(dmy[0]+'rn'+cnt+dmy[1]) ,
				dmystr_wDquote=''+(dmy[0]+'wDquote'+cnt+dmy[1]) ;

			escape= oj.replace('""',dmystr_wDquote);
			escape= escape.replace(
				new RegExp(reg,"g"),
				function (after,before,index) {
					after= after
							.replace(/(\r\n)(?!$)/g,dmystr_rn)
							.replace(/,(?!$)/g,dmystr_comma)
					return after
					
				}
			)

			if(op.select == '*'||op.select == ['*'])
					r=$.csv2table._rowsAry[id]=mkArray(escape,op.col_sep,op.row_sep);
			else	r=$.csv2table._rowsAry[id]=mkSelectedArray(escape,op.col_sep,op.row_sep,op.select)

			var b=[],rowlen=r.length,collen=r[0].length;
			for(var i=0;i<rowlen;i++){
				if(r[i]=='')continue; 
				b[i]=r[i];
				for(var j=0;j<collen;j++){
					try{
						b[i][j]=$.trim(r[i][j])
							.replace(/^"|"$/g,rdq)
							.replace(new RegExp(dmystr_comma,"g"),",")
							.replace(new RegExp(dmystr_rn,"g"),"\r\n")
							.replace(new RegExp(dmystr_wDquote,'g'),'""');
					} catch(e){}
				}
			}
			
			return b
		}
		
		function mkSelectedArray(data,col_sep,row_sep,select){
				var rows=data.split(row_sep),rc=[],c=[],
				    rowlen=rows.length ;
				for(var i=0;i<rowlen;i++){
					if($.trim(rows[i])=='') continue; 
					try{
						rc[i]=rows[i].split(col_sep);
						c[i]=[];
						for(var j=0;j<select.length;j++){
							c[i].push(rc[i][select[j]])
						}
					} catch(e){ }
				}
				return c||rc
		}


		function mkArray(data,col_sep,row_sep){
				var rows=data.split(row_sep),rc=[]
				    rowlen=rows.length ;
				for(var i=0;i<rowlen;i++){
					if($.trim(rows[i])=='') continue; 
					try{
						rc[i]=rows[i].split(col_sep);
					} catch(e){ }
				}
				return rc
		}
		
		function setDefault(settingName,val){
			var prop = (setting[settingName]=='undefined'||
				 setting[settingName]==null)?val:setting[settingName]
			return prop
		}


		function setCSS(id){
			$('#'+id+'').css({
				/*backgroundColor  : '#eee',
				border           : '1px solid #555',*/
				padding          : '0px', 
				margin           : '1px'
			}).addClass(op.className_div)
			
			$('#'+id+' table').css({
				borderCollapse   : 'collapse',
				borderSpacing    : '0px',
				marginBottom     : '10px'
			}).addClass(op.className_table)
			
			$('#'+id+' table th').css({
				//borderColor      : '#eee #999 #777 #bbb',
				//borderStyle      : 'solid',
				//borderWidth      : '1px',
				//backgroundColor  : '#ccc', 
				fontSize         : '12px',
				padding          : '4px',
				textAlign        : 'center'
			}).addClass(op.className_table_th)
			
			$('#'+id+' table td').css({
				//borderColor      : '#eee #aaa #999 #ccc',
				//borderStyle      : 'solid',
				//borderWidth      : '1px',
				//padding          : '8px',
				fontSize         : '12px'
			}).addClass(op.className_table_td)
			

			if(op.sortable){
				$('#'+id+' table th')
					.css('font-family','Arial')
					.css('text-decoration','none')
					.addClass(op.className_sortMark)
					.each(function (i,el) {
						var i =$('#'+id+' table th').index(this);
						$(this).click(function (e) { 
							if(op['th'+i]=='D'){ 
								op['th'+i]='A';
								$.csv2table.wrtTable('A',i ,""+id+"",function(sortType,colIndex,id){
									//$('#'+id+'-sortimg-'+colIndex ).attr('src',$.csv2table.sortAImg )
								}); 
							} else {  
								op['th'+i]='D';
								$.csv2table.wrtTable('D',i,""+id+"",function(sortType,colIndex,id){
									//$('#'+id+'-sortimg-'+colIndex ).attr('src',$.csv2table.sortDImg )
								});
							}
						});
					}); 
			}
		}
		
		function useChart (id,op,data,ary){
			var head= ary[0],dataBody=ary.slice(1) ;
			$("#"+op.use_api_box).jQchart({
				config : $.extend(op,{ 
					//width    : $('#'+id+' table').width()+10,
					paddingL : $('#'+id+' table th:nth-child(1)').width()+14,
					labelX   : (op.labelX=='useChart')?head.slice(1):op.labelX,
					onload   : ($.csv2table.setting[id].onload)?$.csv2table.setting[id].onload(id,op,data,ary):null
				}),
				data : (function(){
					var d = [];
					for(var i=0,len=dataBody.length;i<len;i++){
						d.push(dataBody[i].slice(1))
					}
					return d;
				})()
			})

			var dl= dataBody.length,lc=$("#"+op.use_api_box).jQchart.op.line_strokeStyle;
			$('tr:even','#'+id).css('background','#eee');
			if(op.col0color)
			$.each(dataBody,function(i){
				$('tr:nth-child('+dl+'n'+(dl+i+2)%dl+') td:first','#'+id)
					.css('color',lc[i]) 
			})
		}

		return this
	}


})(jQuery);