//the functions have nothing to do with language can be put here.

/*get element by formName and form*/
function getFormVa1(form,name){
	var rlt=null;
	if(form[name]==null){ return rlt;}
	var type=form[name].type;
	//alert(type);/* select-one, text, textarea */
	if(type!="select-one" && form[name].length!=null){
		rlt=form[name][0];
	}else{
		rlt=form[name];
	}
	return rlt;
}
function getFormValue(form,name){
	var ele=getFormVa1(form,name);
	if(ele!=null){
		return ele.value;
	}
	return "";
}
function getFormVaN(form,name){
	var rlt=null;
	if(form[name]==null){ return rlt;}
	var type=form[name].type;
	if(type!="select-one" && form[name].length!=null){
		rlt=form[name];
	}else{
		rlt=form[name];
	}
	return rlt;
}
function getFormVaNvalue(form,name){
	var rlt="";
	var list=getFormVaN(form,name);
	for(var i=0;i<list.length;i++){
		if(i>0){
			rlt=rlt+",";
		}
		rlt=rlt+list[i].value;
	}
	return rlt;
}
function getFormVaNvCk(form,name,ckName){
	var rlt="";
	var list=getFormVaN(form,name);
	var ckList=getFormVaN(form,ckName);
	if(list.length==undefined){
		if(ckList.checked==true && ckList.style.display!="none"){
			rlt=rlt+list.value;
		}
	}else{
		var total=0;
		for(var i=0;i<list.length;i++){
			if(ckList[i].checked==true && ckList[i].style.display!="none"){
				if(total>0){
					rlt=rlt+",";
				}
				rlt=rlt+list[i].value;
				total++;
			}
		}
	}
	return rlt;
}
/*
get array-variable's values according to checkbox
form: form's name
name: array-variable's name, e.g. id_array
ckName: checkBox's name, e.g. ckb (assume: 1,5,7 are checked)
return id_array=v1&id_array=v5&id_array=v7

note: checkBox's length must be the same as array-variable's length
	if not, use function getFormVaNvCk3(...)
*/
function getFormVaNvCk2(form,name,ckName){
	var rlt="";
	var list=getFormVaN(form,name);
	var ckList=getFormVaN(form,ckName);
	if(list.length==undefined){
		if(ckList.checked==true && ckList.style.display!="none"){
			rlt=rlt+name+"="+list.value;
		}
	}else{
		var total=0;
		for(var i=0;i<list.length;i++){
			if(ckList[i].checked==true && ckList[i].style.display!="none"){
				if(total>0){
					rlt=rlt+"&";
				}
				rlt=rlt+name+"="+list[i].value;
				total++;
			}
		}
	}
	return rlt;
}
/*
get array-variable's values according to checkbox
form: form's name
name: array-variable's name, e.g. id_array
ckName: checkBox's name, e.g. ckb (assume: 1,5,7 are checked)
return id_array=v1&id_array=v5&id_array=v7

note: checkBox's value must be index of array-variable.
*/
function getFormVaNvCk3(form,name,ckName){
	var rlt="";
	var list=getFormVaN(form,name);
	var ckList=getFormVaN(form,ckName);
	if(ckList.length==undefined){
		if(ckList.checked==true && ckList.style.display!="none"){
			if(list.length==undefined){
				rlt=rlt+name+"="+list.value;
			}else{
				rlt=rlt+name+"="+list[ckList.value].value;
			}
		}
	}else{
		var total=0;
		for(var i=0;i<ckList.length;i++){
			if(ckList[i].checked==true && ckList[i].style.display!="none"){
				if(total>0){
					rlt=rlt+"&";
				}
				rlt=rlt+name+"="+list[ckList[i].value].value;
				total++;
			}
		}
	}
	return rlt;
}

function getElementsByIEName(Name,tagName,parentElement){
	//IEでName要素からp,div,spanなどの集合を取れない問題への対処版関数。
	//（IEだと「name="xxx" id="xxx"」とやると取得できるんですが、
	//　サーバサイドに向けてフォームの構成を練る際に不都合。）
	//
	//要素数が多い場合にはIEで遅くなります。tag名や親要素で絞り込めるように引数が設定できます。
	//【参考】http://www2.portland.ne.jp/~sigekazu/css/javascript10.htm
	//基本的にgetElementsByNameと互換。というかIE以外では単純にgetElementsByName使って返してます。
	
	var elements=new Array();
	if(navigator.appName == 'Microsoft Internet Explorer'){
		var d=parentElement ? parentElement : document;
		var allElements;
		if(tagName)
			allElements=d.all && d.all.tags(tagName)
				|| d.getElementsByTagName && d.getElementsByTagName(tagName);
			else allElements=d.all || d.getElementsByTagName("*");
		for(var i=0; i<allElements.length; i++){
			if(allElements[i].name==Name){
				elements[elements.length]=allElements[i];
			}
		}
	}else{
		if(document.getElementsByName(Name)){
			elements=document.getElementsByName(Name) ;/*IEのDIV,textareaでは無効。*/
		}
	}
	return elements;
}

function checkDisallowText(theelement,allowText){//allowTextで指定された内容の文字列があったらTrue
	for(i=0;i<=theelement.length-1;i++){
		if(allowText.indexOf(theelement.charAt(i)) >=0 ){
			return true;
		}
	}
	return false;
}
function checkAllowText(theelement,allowText){//allowTextで指定された内容の文字列のみだったらTrue
	for(i=0;i<=theelement.length-1;i++){
		if(allowText.indexOf(theelement.charAt(i))==-1){
			return true;
		}
	}
	return false;
}

function checkOnlyOneMark(theelement,emal){//引数で指定された文字（not文字列）が、「一つだけ」あるかどうか（@マークチェック用）
	var n =0
	for(i=0;i<=theelement.length-1;i++) {   
		char1=theelement.charAt(i);
		if(char1==emal){ n++ ; }
	}
	if(n==1){ return true; }
	return false;
} 

function checkUseText(theelement){//指定した文字（not文字列）を1回でも利用していればTrue
	var emal=".";
	for(i=0;i<=theelement.length-1;i++){
		char1=theelement.charAt(i);
		if(char1==emal){
			return true;
		}
	}
	return false;
}

function checkCellMailAddress(email){//主要キャリアの携帯電話メールアドレスだったらエラーTrue
	if ( //主要キャリアの携帯電話メールアドレス入力を拒否
		email.match("docomo.ne.jp") > -1 &&
		email.match("ezweb.ne.jp") > -1 &&
		email.match("vodafone.ne.jp") > -1 &&
		email.match("pdx.ne.jp") > -1
	){
		return false ;
	}else{
		return true ;
	}
}

function isHttpUrlValid(aurl){
	if(aurl.indexOf("http://")!=0){
		return false;
	}
	return true;
}

function checktelno(theelement){
	var pause="-";
	var n =0;
	var pos=new Array();
	for(i=0;i<=theelement.length-1;i++) {
		char1=theelement.charAt(i);
		if(char1==pause){ 
			pos[n]=i;
			n=n+1;
		}
	}
	if(n==2 && pos[0]>0 && pos[1]<theelement.length-1){
		return true;
	}
	return false;
}

//郵便番号check 012-4567
function checkzipno(theelement){
	var pause="-";
	var n =0;
	var pp=-1;
	for(i=0;i<=theelement.length-1;i++) {   
		char1=theelement.charAt(i);
		if(char1==pause){ 
			n=n+1;
			pp=i;
		}
	}
	if(n==1&&pp==3){
		return true;
	}
	return false;
}

function getHalfWidthLength(str) { 
	var lenTotal=0;
	for (var i = 0; i < str.length; i++) { 
		var c = str.charCodeAt(i); 
		// Shift_JIS: 0x0 ～ 0x80, 0xa0 , 0xa1 ～ 0xdf , 0xfd ～ 0xff 
		// Unicode : 0x0 ～ 0x80, 0xf8f0, 0xff61 ～ 0xff9f, 0xf8f1 ～ 0xf8f3 
		if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) 
				|| (c >= 0xff61 && c < 0xffa0) 
				|| (c >= 0xf8f1 && c < 0xf8f4)) { 
			lenTotal+=1;
		} else { 
			lenTotal+=2;
		}
	} 
	return lenTotal; 
}

function getStrLength(strValue) {
	return strValue.replace(new RegExp('\r','g'),'').length;
}

function getUTF8_ByteLength(strValue) {
	var escapedStr = encodeURI(strValue);
	if (escapedStr.indexOf("%") != -1) {
		var count = escapedStr.split("%").length - 1;
		if (count == 0) count++;  //perverse case; can't happen with real UTF-8
			var tmp = escapedStr.length - (count * 3)
			count = count + tmp;
		} else {
			count = escapedStr.length;
	}
	return count;
}

function trimAll(aStr) {
	aStr=aStr.replace(/^[\s　]+|[\s　]+$/, "");//全角、半角space @FF @ie
	return aStr;
}

function trimHalf(aStr) {
	aStr=aStr.replace(/^\s+|\s+$/g,"");//全角、半角space@FF, 半角space@ie
	return aStr;
}

function ltrim(str) { 
	for(var k = 0; k < str.length && isWhitespace(str.charAt(k)); k++);
	return str.substring(k, str.length);
}
function rtrim(str) {
	for(var j=str.length-1; j>=0 && isWhitespace(str.charAt(j)) ; j--) ;
	return str.substring(0,j+1);
}
function trim(str) {
	return ltrim(rtrim(str));//only half-width spaces
}
function isWhitespace(charToCheck) {
	var whitespaceChars = " \t\n\r\f";
	return (whitespaceChars.indexOf(charToCheck) != -1);
}

//remove invalid xml chars from the string
function stripNonValidXMLCharacters(inStr) {
    var out = ""; // Used to hold the output.
    var current; // Used to reference the current character.
    if (inStr==undefined || inStr == null || inStr=="" ) return ""; // vacancy test.
    for (var i = 0; i < inStr.length; i++) {
        //current = inStr.charAt(i); // NOTE: No IndexOutOfBoundsException caught here; it should not happen.
        var current = inStr.charCodeAt(i);
        var char0 = inStr.charAt(i);
        if ((current == 0x9) ||
            (current == 0xA) ||
            (current == 0xD) ||
            ((current >= 0x20) && (current <= 0xD7FF)) ||
            ((current >= 0xE000) && (current <= 0xFFFD)) ||
            ((current >= 0x10000) && (current <= 0x10FFFF)))
            out=out+String(char0);
    }
    return out;
}
