/*
 * 広告バナーをランダム表示する
 * $Rev: 24 $
 * $Date: 2009-12-03 16:43:01 +0900 (木, 03 12 2009) $
 * $Author: kawarazaki $
 */

var KoukokuPublish = function(){
	//ルートからのパス
	this.path   = '/banner';
	//CSVデータ
	this.AreaData = new Array();
	this.CsvData = new Array();
}

KoukokuPublish.prototype = {
	/**
	 * CSVデータをロードする
	 * CSVデータをAjaxを使いロードする
	 * @param banner_area_id バナー表示エリアのID
	 * @param area_id 広告エリアのID
	 */
	LoadData : function(banner_area_id,area_id){
		var class_id = this;
		var xmlhttp = createXMLHttpRequest();
		if(xmlhttp){
			xmlhttp.onreadystatechange = function(){
				if(xmlhttp.readyState == 4){
					if(xmlhttp.status == 200) class_id.getData(banner_area_id,xmlhttp.responseText);
				}
			}
		}
		else alert("ajax error");
		//リクエスト処理
		xmlhttp.open('GET',this.path + '/' + area_id + '/banner_data_' + area_id + '.csv',true);
		xmlhttp.setRequestHeader("If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT");
		xmlhttp.send(null);
	},
	/**
	 * 広告表示切り替え用処理
	 * 広告の表示をランダムに切り替える
	 * @param banner_area_id バナー表示エリアのID
	 * @param txt CSVの内容
	 */
	getData : function(banner_area_id,txt){
		//引数のチェック
		if(!txt) return;

		//変数の初期化
		this.AreaData = new Array();
		this.CsvData = new Array();
		var tmp_area_data = new Array();
		var prev_number = new Array();

		//改行コードの統一
		txt = txt.replace(/\r\n/g,"\n");
		txt = txt.replace(/\r/g,"\n");
		//行データ数分分割
		var csv_dataArray = txt.split("\n");
		//エリア情報の取得
		for(var i = 0;i < 2;i++){
			tmp_area_data.push(csv_dataArray[0]);
			csv_dataArray.shift();
		}
		//エリア情報を配列で取得
		this.AreaData = getCsvData(tmp_area_data.join("\n"));
		this.AreaData = this.AreaData[0];
		//バナー情報を配列で取得
		this.CsvData = getCsvData(csv_dataArray.join("\n"));

		//表示順がランダムの場合
		if(this.AreaData['order_from'] == 0){
			//広告の件数を取得
			for(var i = 0,rand_num = 0;i < this.CsvData.length;i++){
				if(this.CsvData[i]['banner_type'] == 1) rand_num++;
			}
			//ランダムIDを取得
			do{
				if(rand_num == 0) break;
				//乱数の生成
				randam = getRand(("" + rand_num).length,0,(rand_num - 1));
				//重複データチェック
				for(var i = 0;i < prev_number.length;i++){
					if(randam == prev_number[i]) break;
				}
				//重複データが無い場合
				if(i == prev_number.length) prev_number.push(randam);
				//広告表示可能数が広告数を超えている場合
				if(prev_number.length >= this.CsvData.length) break;
			} while(prev_number.length < rand_num);
			//広告募集中バナーを追加
			if(this.AreaData['recruitment_from'] != 2){
				while(prev_number.length < this.CsvData.length){
					prev_number.push(rand_num++);
					if(this.AreaData['recruitment_from'] == 1) break;
				}
			}
		}
		//表示順が固定の場合
		else{
			for(var i = 0;i < this.CsvData.length;i++){
				prev_number.push(i);
			}
		}

		//表示の作成
		var obj=new Array();
		var img = new Array();
		var banner_id = new Array();
		var advert_area = document.getElementById('advert_area_' + banner_area_id);
		var tag_ul = "";
		//エリアの中を削除
		if(advert_area.firstChild) advert_area.removeChild(advert_area.firstChild);
		//エリアの中を作成
		for(var i = 0;i < this.AreaData['layout_line'] * this.AreaData['layout_row'];i++){
			//タグの作成
			if(i % this.AreaData['layout_row'] == 0) tag_ul = document.createElement('UL');
			//表示件数以下の場合のみ、Aタグ・IMGタグを作成する
			if(i < prev_number.length){
				var tag_li = document.createElement('LI');
				var tag_a = document.createElement('A');
				var tag_img = document.createElement('IMG');
				//IDを指定
				tag_li.id = 'banner_' + banner_area_id + '_' + i + '_td';
				tag_a.id = 'banner_' + banner_area_id + '_' + i + '_a';
				tag_img.id = 'banner_' + banner_area_id + '_' + i + '_img';
				//バナーIDの取得
				banner_id.push('banner_' + banner_area_id + '_' + i);
				//作成したタグを設置する
				tag_a.appendChild(tag_img);
				tag_li.appendChild(tag_a);
				tag_ul.appendChild(tag_li);
			}
			if(i % this.AreaData['layout_row'] == (this.AreaData['layout_row'] - 1)){
				if(tag_ul.firstChild) advert_area.appendChild(tag_ul);
				tag_ul = "";
			}
		}

		//作成したタグにデータを埋め込む
		for(var i = 0;i < banner_id.length;i++){
			//データが存在するかチェック
			if(prev_number[i] === undefined || !this.CsvData[prev_number[i]]) break;

			//タグにデータをセット
			document.getElementById(banner_id[i] + '_a').href = this.CsvData[prev_number[i]]['a_href'];
			document.getElementById(banner_id[i] + '_img').src = this.CsvData[prev_number[i]]['img_src'];
			document.getElementById(banner_id[i] + '_img').alt = this.CsvData[prev_number[i]]['img_alt'];
			document.getElementById(banner_id[i] + '_img').width = this.AreaData['banner_width'];
			document.getElementById(banner_id[i] + '_img').height = this.AreaData['banner_height'];
			//画像のロード
			obj[i] = new Image;
			obj[i].id = 'tmp_' + document.getElementById(banner_id[i] + '_img').id;
			obj[i].src = this.CsvData[prev_number[i]]['img_src'];
			//画像のロードが完了したら、再度書き換えを行う
			obj[i].onload = obj[i].onerror = function(){
				document.getElementById(this.id.substr(4,this.id.length)).src = this.src;
			}
		}
	}
}

