/*-------------------------------------------------------
util.js
depends on prototype.js(http://prototype.conio.net/)
@version  V1.0
@author   youngjin.shin (2007/04/20)

Copyright (c) 2007 Rakuten Travel, Inc. All Rights Reserved.
--------------------------------------------------------*/

if (!Util) {
  var Util={
    instances : null,
    getInstance:function (id){ 
  	   for (var i = 0; i < this.instances.length ; i++) {
  		    if( this.instances[i].id == id ){
  				return this.instances[i];
  			}
  		}
  		return null;
    },
    
    escapeHTML:function (str){
    	return str.replace(/\&/g, '&amp;').replace( /</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/\'/g, '&#39;');
    },
    
    createOptionList:function ( optionId, valueList, nameList){
     	var index = 0;
 	 	var optionList = $(optionId);
     	for( ; index < valueList.length ; index++ ) {
        	optionList[index] = new Option( nameList[index],valueList[index] );
     	}  
     	while( optionList[index] ){
       		optionList[index] = null;
     	}  
	},
  
    createOptionList:function ( optionId, opList){
     	var index = 0;
 	 	var optionList = $(optionId);
     	for( ; index < opList.length/2 ; index++ ) {
        	optionList.options[index] = new Option( opList[index*2+1],opList[index*2] );
     	}
     	while( optionList[index] ){
       	optionList.options[index] = null;
     	}  
  	},
  	
  	convertZenkaku:function (text){
		hankaku = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｬｭｮｰｧｨｩｪｫ";
		zenkaku = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンャュョーァィゥェォ";
		str = "";
		for (i=0; i<text.length; i++)
		{
			c = text.charAt(i);
			n = hankaku.indexOf(c,0);
			if (n >= 0) c = zenkaku.charAt(n);
			str += c;
		}
		return str;
	},

	appendList:function (trgList, srcList){
		if(trgList){
			if(srcList){
				for(i=0;i<srcList.length;i++){
					trgList.push(srcList[i]);
				}
			}
			return trgList;
		}	
	},
	
	convertToKana:function (text){
		str = "";
		for (i=0; i<text.length; i++)
		{
			c1 = text.charAt(i);
			if(i < text.length - 1 ){
				c2 = text.charAt(i+1);
			} else {
			 	c2 ='';
			}
			if(this.isDakuon(c2)){
				str += this.convertDakuon(c1,c2);
				i++;
			} else {
				str += this.convert(c1);
			}
		}
		return str;
	},

 	convert:function(chr){
    	code  = chr.charCodeAt(0);
    	if(code < 32){
    		return '';
    	} else if(12353 <=code && code<= 12435){
			chr = String.fromCharCode(code+ 96);
		} else if(65296 <=code && code<= 65305){
			chr = String.fromCharCode(code - 65248);
		} else if(65313 <=code && code<= 65338){
			chr = String.fromCharCode(code - 65248);
		} else if(65345 <=code && code<= 65370){
			chr = String.fromCharCode(code - 65280);
		} else {
			switch(chr){
			case '　':
				chr =' ';
				break;
			case '、':
				chr =',';
				break;
			case '（':
				chr ='(';
				break;
			case '）':
				chr =')';
				break;
			case 'ｱ':
				chr ='ア';
				break;
			case 'ｲ':
				chr ='イ';
				break;
			case 'ｳ':
				chr ='ウ';
				break;
			case 'ｴ':
				chr ='エ';
				break;
			case 'ｵ':
				chr ='オ';
				break;
			case 'ｶ':
				chr ='カ';
				break;
			case 'ｷ':
				chr ='キ';
				break;
			case 'ｸ':
				chr ='ク';
				break;
			case 'ｹ':
				chr ='ケ';
				break;
			case 'ｺ':
				chr ='コ';
				break;
			case 'ｻ':
				chr ='サ';
				break;
			case 'ｼ':
				chr ='シ';
				break;
			case 'ｽ':
				chr ='ス';
				break;
			case 'ｾ':
				chr ='セ';
				break;
			case 'ｿ':
				chr ='ソ';
				break;
			case 'ﾀ':
				chr ='タ';
				break;
			case 'ﾁ':
				chr ='チ';
				break;
			case 'ﾂ':
				chr ='ツ';
				break;
			case 'ﾃ':
				chr ='テ';
				break;
			case 'ﾄ':
				chr ='ト';
				break;
			case 'ﾅ':
				chr ='ナ';
				break;
			case 'ﾆ':
				chr ='ニ';
				break;
			case 'ﾇ':
				chr ='ヌ';
				break;
			case 'ﾈ':
				chr ='ネ';
				break;
			case 'ﾉ':
				chr ='ノ';
				break;
			case 'ﾊ':
				chr ='ハ';
				break;
			case 'ﾋ':
				chr ='ヒ';
				break;
			case 'ﾌ':
				chr ='フ';
				break;
			case 'ﾍ':
				chr ='ヘ';
				break;
			case 'ﾎ':
				chr ='ホ';
				break;
			case 'ﾏ':
				chr ='マ';
				break;
			case 'ﾐ':
				chr ='ミ';
				break;
			case 'ﾑ':
				chr ='ム';
				break;
			case 'ﾒ':
				chr ='メ';
				break;
			case 'ﾓ':
				chr ='モ';
				break;
			case 'ﾗ':
				chr ='ラ';
				break;
			case 'ﾘ':
				chr ='リ';
				break;
			case 'ﾙ':
				chr ='ル';
				break;
			case 'ﾚ':
				chr ='レ';
				break;
			case 'ﾛ':
				chr ='ロ';
				break;
			case 'ﾔ':
				chr ='ヤ';
				break;
			case 'ﾕ':
				chr ='ユ';
				break;
			case 'ﾖ':
				chr ='ヨ';
				break;
			case 'ﾜ':
				chr ='ワ';
				break;
			case 'ﾝ':
				chr ='ン';
				break;
			case 'ｦ':
				chr ='ヲ';
				break;
			case 'ｧ':
				chr ='ァ';
				break;
			case 'ｨ':
				chr ='ィ';
				break;
			case 'ｩ':
				chr ='ゥ';
				break;
			case 'ｪ':
				chr ='ェ';
				break;
			case 'ｫ':
				chr ='ォ';
				break;
			case 'ｬ':
				chr ='ャ';
				break;
			case 'ｭ':
				chr ='ュ';
				break;
			case 'ｮ':
				chr ='ョ';
				break;
			case 'ｯ':
				chr ='ッ';
				break;
			case 'ｰ':
				chr ='ー';
				break;
			}
		}
   		return chr;
	},

 	isDakuon:function(chr){
		if(chr){
 			if(chr=='ﾞ' || chr =='ﾟ'){
 				return true;
 			}
 		}
		return false;
	},

 	convertDakuon:function(chr1,chr2){
		hankaku = "ｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾊﾋﾌﾍﾎｳ";
    	zenkaku1= "ガギグゲゴザジズゼゾダヂヅデドバビブベボヴ";
    	zenkaku2= "ガギグゲゴザジズゼゾダヂヅデドパピプペポヴ";    
		n = hankaku.indexOf(chr1,0);
		if(chr2=='ﾞ'){
			if (n >= 0) return zenkaku1.charAt(n);		
		} else if(chr2=='ﾟ'){
			if (n >= 0) return zenkaku2.charAt(n);		
		}
		return '';
	}
	
  };
}

Util.Suggest    = Class.create();
Util.TreeObject = Class.create();
Util.Date       = Class.create();
Util.LimitNumber= Class.create();
