if(typeof Array.prototype.indexOf==='undefined'){
	Array.prototype.indexOf=function(v,b,s){
		for(var i=+b || 0,l=this.length;i<l;i++){
			if(this[i]===v || s && this[i]==v){
				return i;
			}
		}
		return -1;
	}
}


if(typeof Array.prototype.unique==='undefined'){
	Array.prototype.unique=function(b){
		var a=[],i,l=this.length;
		for(i=0;i<l;i++){
			if(a.indexOf(this[i],0,b)<0){
				a.push(this[i]);
			}
		}
		return a;
	}
}


if(typeof Array.prototype.sum==='undefined'){
	Array.prototype.sum=function(){
		var i=this.length,k=0;
		while(i--){
			k+=parseFloat(this[i]);
		}
		return k;
	};
}

if(typeof String.prototype.right==='undefined'){
	String.prototype.right=function(n){
		var start=this.length-n;

		return this.substr(start,n);
	};
}

if(typeof String.prototype.left==='undefined'){
	String.prototype.left=function(n){

		return this.substr(0,n);
	};
}

function getTagValue(xml,tag){
	var na=xml.getElementsByTagName(tag);
	return na.nodeType;
}
/*
getNodeContent(xmldoc,key,label)

Copyright 卜維丰
http://audi.tw

歡迎無償使用，在套用時，請勿移除本版本權告

取得節點內容值

輸入項:
	xmldoc	:xml文件
	key	:標籤名稱
	label	:子節點屬性名稱,用於取得屬性值
輸出項:
	Array([a,b])
	a=標籤名稱, 或標籤中指定屬性值
	b=標籤字串值
	例:
	<product>
	<name value="產品">Sony Handy Cam</name>
	<price value="單價">21000</name>
	</product>
	getNodeContent(xml,'product') 回傳值為[name,Sony Handy Cam][price,21000]
	getNodeContent(xml,'product','value') 回傳值為[產品,Sony Handy Cam][單價,21000]
*/

function getNodeContent(xmldoc,key,label) {
	var na=[],va=[],l;
	var outstr='';

	key=(typeof key=='undefined')?getNodeName(xmldoc,false):key;

	for (var i=0;i<xmldoc.getElementsByTagName(key).length;i++){
		var xml=xmldoc.getElementsByTagName(key)[i];
		na=getNodeName(xml,false);	//必需是唯一值,因為接下來的動作,會依序讀出

		for (var j=0;j<na.length;j++){
			var xmlk=xml.getElementsByTagName(na[j]);
			for (var k=0;k<xmlk.length;k++){
				l=Math.max(va.length,va.length-1);
				if(typeof label!='undefined'){
					if(typeof xmlk[k].getAttribute(label)!=null && typeof xmlk[k].getAttribute(label)!=''){
						va[l]=[xmlk[k].getAttribute(label),xmlk[k].childNodes[0].nodeValue];
					}else{
						va[l]=[na[j],xmlk[k].childNodes[0].nodeValue];
					}
				}else{
					va[l]=[na[j],xmlk[k].childNodes[0].nodeValue];
				}
				outstr+=va[l]+'\n';
			}
		}
	}

	//alert(outstr);
	//xmlToTable(va);

	return va
}

/*
getNodeName(xmldoc,duplicate)

Copyright 卜維丰
http://audi.tw

歡迎無償使用，在套用時，請勿移除本版本權告

取得子節點標籤名稱

輸入項:
	xmldoc		:xml文件
	duplicate	:boolean,允許重複項,預設為 true
輸出項:
	Array()
	以第一層子節點標籤名稱組成的陣列
*/

function getNodeName(xmldoc,duplicate){
	/*

	*/

	var d;
	var na=[];

	d=(typeof duplicate=='undefined')?true:duplicate;

	for (var i=0;i<xmldoc.childNodes.length;i++){
		if (xmldoc.childNodes[i].hasChildNodes()){
			na=na.concat(xmldoc.childNodes[i].tagName);
		}
	}

	na=(d)?na:na.unique();

	return na
}


function getTagValue(xmldoc,tag){
	if (typeof xmldoc=='undefined')return false;
	if (typeof tag=='undefined')return false;

	var t=xmldoc.getElementsByTagName(tag);

	if (t.length>0){
		return t[0].childNodes[0].nodeValue;
	}
}
/*
getFormValue(form)

Copyright 卜維丰
http://audi.tw

歡迎無償使用，在套用時，請勿移除本版本權告

取得表單欄位值

輸入項
	form		:表單
	例:
	getFormValue(document.form1);
*/

function getFormValue(form){
	var str='',ft,fv;

	for (var i=0;i<form.elements.length;i++){
		fv=form.elements[i];
		if (typeof fv.name!='undefined'){
			ft=fv.type.toLowerCase();

			switch(ft){
				case 'select-one':
					str+=fv.name+'='+escape(fv.value)+'&';
					break;
				case 'radio':
					if (fv.checked){
						str+=fv.name+'='+escape(fv.value)+'&';
					}
					break;
				case 'checkbox':
					if (fv.checked){
						str+=fv.name+'='+escape(fv.value)+'&';
					}
					break;
				case 'text':
					str+=fv.name+'='+escape(fv.value)+'&';
					break;
				case 'password':
					str+=fv.name+'='+escape(fv.value)+'&';
					break;
				case 'hidden':
					str+=fv.name+'='+escape(fv.value)+'&';
					break;
				case 'textarea':
					str+=fv.name+'='+escape(fv.value)+'&';
					break;
				default:
					break;
			}
		}
	}

	return str.split(/\s/).join('')
}

function restoreFormValue(form,xml,tag){
	var na=getNodeContent(xml,tag);
	for (var i=0;i<na.length;i++){
		eval('fv=form.'+na[i][0]);
		if (fv.type=='undefined' || fv.type==null){
			a='radio-checkbox';
		}else{
			ft=fv.type.toLowerCase();
			a=ft;
		}
		switch(a){
			case 'select-one':
				//alert(fv.name+':'+fv.length+','+na[i][1]);
				for (var k=0;k<fv.length;k++){
					if (fv.options[k].text==na[i][1]){
						fv.selectedIndex=k;
						break;
					}
				}
				//增加值的比對, 計價方式的值和文字不同 6/14 08'
				for (var k=0;k<fv.length;k++){
					if (fv.options[k].value==na[i][1]){
						fv.selectedIndex=k;
						break;
					}
				}
				break;
			case 'checkbox':
				if (na[i][1]){a.checked=true;}
				break;
			//增加 radio 比對 6/14 08'
			case 'radio-checkbox':
				for (var k=0;k<fv.length;k++){
					if (fv[k].value==na[i][1]){
						fv[k].checked=true;
						break;
					}
				}
			default:
				fv.value=unescape(na[i][1]);
				break;
		}
	}
}

function JSON(xmldoc,key) {
	var na=[],va=[],l;
	var outstr='';

	key=(typeof key=='undefined')?getNodeName(xmldoc,false):key;

	for (var i=0;i<xmldoc.getElementsByTagName(key).length;i++){
		var xml=xmldoc.getElementsByTagName(key)[i];
		va[i]='{';
		for (var j=0;j<xml.attributes.length;j++){
			va[i]+=xml.attributes[j].name+':\''+unescape(xml.attributes[j].value)+'\',';
		}
		va[i]+='_nValue:\''+xml.childNodes[0].nodeValue+'\'}';
	}

	//alert(outstr);
	//xmlToTable(va);

	return va
}



function createXHR(){
	var xmlhttp;
	if (window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	}else if (window.ActiveXObject) {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}

	if (!xmlhttp) {
		alert(alert_4);
		return false;
	}else{
		return xmlhttp;
	}
}

function initForm(form){
	var str='',ft,fv;

	for (var i=0;i<form.elements.length;i++){
		fv=form.elements[i];
		if (typeof fv.name!='undefined'){
			ft=fv.type.toLowerCase();

			switch(ft){
				case 'select-one':
					fv.selectedIndex=0;
					break;
				case 'checkbox':
					fv.checked=false;
					break;
				default:
					break;
			}
		}
	}
}