//■ビュー
var TwSaleHtml = function(tn, yn, tout, outt){

	var self = this;

	var tagname = tn;
	var yenmode = yn;
	var timeout = tout;
	var outtext = outt;

	//価格表示の整形をする
	function _makePrice(price){
		var ret = price

		if(price == 0){
			return '';
		}

		if(yenmode == 'E'){
			ret = ret.replace(/(\d)(?=(\d\d\d)+$)/g, '$1,') + '円';
		}else if(yenmode == 'Y'){
			ret = '&yen;' + ret.replace(/(\d)(?=(\d\d\d)+$)/g, '$1,');
		}else{
		}
		return ret;
	}

	//タイムアウト表示をする
	function showTimeout(){
		var tags = document.getElementsByTagName(tagname);
		for(var i = 0; i < tags.length; i++){
			if(tags[i].className.toUpperCase().match(/PARTS_[0-9]+_PRICE/)){
				if(!tags[i].innerHTML){
					tags[i].innerHTML = outtext;
				}
			}
		}
		for(var i = 0; i < tags.length; i++){
			if(tags[i].className.toUpperCase().match(/PC_[-0-9]+_PRICE/)){
				if(!tags[i].innerHTML){
					tags[i].innerHTML = outtext;
				}
			}
		}
		for(var i = 0; i < tags.length; i++){
			if(tags[i].className.toUpperCase().match(/SET_[0-9]_PRICE/)){
				if(!tags[i].innerHTML){
					tags[i].innerHTML = outtext;
				}
			}
		}
	}
	setTimeout(showTimeout, timeout * 1000);

	//パーツへのアクセス
	this.getPartsIds = function(){
		var ret = Array();
		var tags = document.getElementsByTagName(tagname);
		for(var i = 0; i < tags.length; i++){
			if(tags[i].className.toUpperCase().match(/PARTS_([0-9]+)_PRICE/)){
				ret.push(RegExp.$1);
			}
		}
		return ret;
	}
	this.showPartsPrice = function(id, price){
		var tags = document.getElementsByTagName(tagname);
		for(var i = 0; i < tags.length; i++){
			if(tags[i].className.toUpperCase().match('PARTS_' + id + '_PRICE')){
				tags[i].innerHTML = _makePrice(price);
			}
		}
	}

	//PCへのアクセス
	this.getPcIds = function(){
		var ret = Array();
		var tags = document.getElementsByTagName(tagname);
		for(var i = 0; i < tags.length; i++){
			if(tags[i].className.toUpperCase().match(/PC_([-0-9]+)_PRICE/)){
				ret.push(RegExp.$1);
			}
		}
		return ret;
	}
	this.showPcPrice = function(id, price){
		var tags = document.getElementsByTagName(tagname);
		for(var i = 0; i < tags.length; i++){
			if(tags[i].className.toUpperCase().match('PC_' + id + '_PRICE')){
				tags[i].innerHTML = _makePrice(price);
			}
		}
	}

	//セットへのアクセス
	this.getSetIds = function(){
		var ret = Array();
		var tags = document.getElementsByTagName(tagname);
		for(var i = 0; i < tags.length; i++){
			if(tags[i].className.toUpperCase().match(/SET_([0-9]+)_PRICE/)){
				ret.push(RegExp.$1);
			}
		}
		return ret;
	}
	this.showSetPrice = function(id, price){
		var tags = document.getElementsByTagName(tagname);
		for(var i = 0; i < tags.length; i++){
			if(tags[i].className.toUpperCase().match('SET_' + id + '_PRICE')){
				tags[i].innerHTML = _makePrice(price);
			}
		}
	}
}


//■コントローラ
var TwSaleAjax = function(){

	var self = this;

	var tags;
	var twSaleHtml;
	var twSaleXmlSet = Array();

	//ビューを準備して開始を待つ。
	this.init = function(tagname, yenmode, timeout, outtext){
		twSaleHtml = new TwSaleHtml(tagname, yenmode, timeout, outtext);

		if(window.addEventListener){
			window.addEventListener('load', start, false);
		}else if(window.attachEvent){
			window.attachEvent('onload', start);
		}else{
			window.onload = start;
		}
	};

	//ビューとモデルを結びつけて開始する。
	function start(){
		var ids;

		ids = twSaleHtml.getPartsIds();
		for(var i = 0; i < ids.length; i++){
			twSaleXmlSet.push(new TwSaleXml(self.xmlCallback, 'parts', ids[i]));
		}

		ids = twSaleHtml.getPcIds();
		for(var i = 0; i < ids.length; i++){
			twSaleXmlSet.push(new TwSaleXml(self.xmlCallback, 'pc', ids[i]));
		}

		ids = twSaleHtml.getSetIds();
		for(var i = 0; i < ids.length; i++){
			twSaleXmlSet.push(new TwSaleXml(self.xmlCallback, 'set', ids[i]));
		}

	};

	//モデルをビューに反映させる。
	this.xmlCallback = function(sale){
		if(sale){
			if(TwSaleXml.getSaleType(sale).toUpperCase() == 'PARTS'){
				twSaleHtml.showPartsPrice(TwSaleXml.getSaleId(sale), TwSaleXml.getSalePrice(sale));
			}else if(TwSaleXml.getSaleType(sale).toUpperCase() == 'PC'){
				twSaleHtml.showPcPrice(TwSaleXml.getSaleId(sale), TwSaleXml.getSalePrice(sale));
			}else if(TwSaleXml.getSaleType(sale).toUpperCase() == 'SET'){
				twSaleHtml.showSetPrice(TwSaleXml.getSaleId(sale), TwSaleXml.getSalePrice(sale));
			}
		}
	};
};
//コントローラを起動する
var twSaleAjax = new TwSaleAjax();



//■モデル
var TwSaleXml = function(callback, type, id){

	var self = this;

	TwSaleXml.getSaleType = function(sale){
		if(sale.getElementsByTagName('tw:type').length == 0){
			return sale.getElementsByTagName('type')[0].childNodes[0].data;
		}else{
			return sale.getElementsByTagName('tw:type')[0].childNodes[0].data;
		}
	};
	TwSaleXml.getSaleId = function(sale){
		if(sale.getElementsByTagName('tw:id').length == 0){
			return sale.getElementsByTagName('id')[0].childNodes[0].data;
		}else{
			return sale.getElementsByTagName('tw:id')[0].childNodes[0].data;
		}
	};
	TwSaleXml.getSalePrice = function(sale){
		if(sale.getElementsByTagName('tw:price').length == 0){
			return sale.getElementsByTagName('price')[0].childNodes[0].data;
		}else{
			return sale.getElementsByTagName('tw:price')[0].childNodes[0].data;
		}
		
	};

	this.getSales = function(){
		if(xmlhttp.responseXML.documentElement.getElementsByTagName('tw:sale').length == 0){
			return xmlhttp.responseXML.documentElement.getElementsByTagName('sale');
		}else{
			return xmlhttp.responseXML.documentElement.getElementsByTagName('tw:sale');
		}
	};

	//コントローラへモデルの変更を通知する
	function _waitState(){
		if(!init){
			setTimeout(_waitState, 100);
		}else{
			if(xmlhttp.responseXML && xmlhttp.responseXML.documentElement){
				var sales = xmlhttp.responseXML.documentElement.getElementsByTagName('tw:sale');
				if(sales.length == 0){
					sales = xmlhttp.responseXML.documentElement.getElementsByTagName('sale');
				}
				for(var i = 0; i < sales.length; i++){
					callback(sales[i]);
				}
			}else{
				callback(null);
			}
		}
	}

	//コンストラクタ
	var xmlhttp;
	var init = false;
	var callback = callback;

	var url = '/5print/salexml.php?type=' + type + '&id=' + id;

	try{
		xmlhttp = new XMLHttpRequest();
	}catch(e){
		try{
			xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
		}catch(e){
			try{
				xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
			}catch(e){
			}
		}
	}

	xmlhttp.onreadystatechange = function(){
		if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
			init = true;
		}
	};
	xmlhttp.open('GET', url, true);
	xmlhttp.setRequestHeader('Content-Type', 'text/xml; charset=UTF-8');
	xmlhttp.send(null);
	setTimeout(_waitState, 100);
};

