CSVクラス

var CSV = function(src){
  this.src = src;
  this.for_each = function(func){
    var tmp = '';
    this.src.replace(/^(.+)$/mg,function(m,line){
      // ダブルクォートの個数が奇数なら、改行が含まれた値が存在するので、次の行を繋ぐ
      tmp += line+"\n";
      var m = tmp.match(/"/g);
      if(m && (m.length & 1) == 1){
        return;
      }else{
        // 最後の改行をコンマにしてパターンマッチング
        tmp = tmp.replace(/\n$/,',');
        var columns = [];
        tmp.replace(/("[^"]*(?:""[^"]*)*"|[^,]*),/g,function(m,$1){
          columns.push($1.replace(/^"(.+)"$/,'$1'))
        });
        tmp = ''
        func(columns)
      }  
    });
  }
}

始めはprototype.jsでの定義形式で作ってたんだけど、
prototype.jsの機能ほとんど使ってないから、別にいいやと思いますた。
配列を処理する時にはprototype.jsは便利だよねー。1.6から$A使わなくても良くなって便利になったけど、
それはそれで賛否両論あるのかもしれない。

CSV解釈についてはhttp://www.din.or.jp/~ohzaki/perl.htm#CSVwithCRLFを参考にさせていただきました。が、
理解が足りずに劣化コピーになっている可能性もあります。

なお、手抜きなのでFirefoxでしか確認してませんwww
operaでも動くと思います。

使い方は

var data = new CSV(csv_txt_data_with_crlf);
data.for_each(function(columns){
  // columnsは配列。ここでなんしか処理を行う  
})