﻿//檢驗必填
function isFill(id){
	if(id.value == ""){
		id.focus();
		return false;
	}
	return true;
}

//檢驗圖片
function isImage(image){
	var dotpos = image.lastIndexOf(".");
	var filetype = image.substring(dotpos + 1);

	if((filetype == "jpg") || (filetype == "jpeg") || (filetype == "gif") || (filetype == "png")){
		return true;
	}
	else{
		return false;
	}
}
//檢驗圖片格式
function checkImage(image){
	var dpos = image.lastIndexOf("\\");
	var dotpos = image.lastIndexOf(".");

	for(var i = dpos + 1; i < image.length - 1; i++){
		var ch = image.charAt(i);
		if(!isEngNum(ch) && (ch != "-") && (ch != "_") && (ch != ".")){
			return false;
		}
	}

	if(!isImage(image)){
		return false;
	}

	return true;
}

//檢驗Email
function isEmail(email){
	var apos = email.indexOf("@");
	var dotpos = email.lastIndexOf(".");
	if((apos < 1) || (dotpos - apos < 2) || ((email.length - 1) == dotpos)){
		return false;
	}
	else{
		return true;
	}
}
//檢驗Email格式
function checkEmail(id){
	for(var i = 0; i < id.value.length; i++){
		var ch = id.value.charAt(i);
		if(!isEngNum(ch) && (ch != "@") && (ch != "_") && (ch != ".")){
			id.focus();
			return false;
		}
	}

	if(!isEmail(id.value)){
		id.focus();
		return false;
	}
	return true;
}

//檢驗URL
function isURL(url){
	var httppos = url.indexOf("http://");
	var dotpos = url.lastIndexOf(".");
	if((httppos != 0) || (dotpos < 8) || ((url.length - 1) == dotpos)){
		return false;
	}
	else{
		return true;
	}
}

//檢驗英數字
function isEngNum(text){
	var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var num = "0123456789";
	for(var i = 0; i < text.length; i++){
		var ch = text.charAt(i);
		if((num.indexOf(ch) < 0) && ((str.indexOf(ch.toUpperCase()) < 0))){
			return false;
		}
	}
	return true;
}
//檢驗英文
function isEng(text){
	var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	for(var i = 0; i < text.length; i++){
		var ch = text.charAt(i);
		if(str.indexOf(ch.toUpperCase()) < 0){
			return false;
		}
	}
	return true;
}
//檢驗數字
function isNum(text){
	var num = "0123456789";
	for(var i = 0; i < text.length; i++){
		var ch = text.charAt(i);
		if(num.indexOf(ch) < 0){
			return false;
		}
	}
	return true;
}
//檢驗英數字
function checkEngNum(id){
	if(!isEngNum(id.value)){
		id.focus();
		return false;
	}
	return true;
}
//檢驗英文格式
function checkEng(id){
	if(!isEng(id.value)){
		id.focus();
		return false;
	}
	return true;
}
//檢驗數字格式
function checkNum(id){
	if(!isNum(id.value)){
		id.focus();
		return false;
	}
	return true;
}

//檢驗全型符號(若有任一全型英數字或符號, 則 return false)
function isEntireSymbol(x){
	var symbolStr = "１２３４５６７８９０ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ‵～！＠＃＄％︿＆＊（）＿－＋＝［］｛｝＼｜／？；：、＂，。＜＞€┌┬┐├┼┤└┴┘〝〞‘’“”『』「」※〈〉《》﹝﹞【】○●↑↓←→─│◎§　";
	for(var i = 0; i < x.length; i++){
		for(var j = 0; j < symbolStr.length; j++){
			if(x.charCodeAt(i) == symbolStr.charCodeAt(j)){
				return false;
			}
		}
	}
	return true;
}

//檢驗全型字(若有任一非全型字, 則 return false)
function isEntireText(x){
	for(i=0; i<x.length; i++){
		if(x.charCodeAt(i) <= 256){
			return false;
		}
	}
	return true;
}

//檢驗文字長度
function checkText(x,min,max){
	var length = 0;
	//任何全形字(無論中文或英文)都算2個bytes
	for(i=0; i<x.length; i++){
		if(x.charCodeAt(i) > 256){
			length+=2;
		}
		else{
			length++;
		}
	}

	if(length>=min && length<=max){
		return true;
	}
	else{
		return false;
	}
}

//檢驗 textarea 行數及字數(中文算兩個字)
function checkEntireTextarea(obj, line, length){
	var token = "\n";	//Firefox
	if(document.all){
		token = "\r\n";	//IE
	}
	
	var textarea = obj;
	var textArr = textarea.split(token);	//存入每行內容

	//判斷行數
	if(textArr.length > line){
		return false;
	}

	//判斷字數
	for(var i = 0; i < textArr.length; i++){
		if(!checkText(textArr[i],0,length)){
			return false;
		}
	}

	return true;
}

//檢驗radio
function checkRadio(obj) {
	for(i=0; i<obj.length; i++){
		if(obj[i].checked) {
			return true;
		}
	}
	return false;
}

//回傳checkbox數目總和
function checkboxCount(obj){
	var count = 0;
	for(var i = 0; i < obj.length; i++){
		if(obj[i].checked){
			count++;
		}
	}
	return count;
}
//回傳checkbox內容值(數字總和)
function checkboxSummary(obj){
	var sum = 0;
	for(var i = 0; i < obj.length; i++){
		if(obj[i].checked){
			sum += parseInt(obj[i].value,10);
		}
	}
	return sum;
}
//回傳checkbox內容值(文字陣列)
function checkboxArray(obj){
	var textArr = new Array();
	var count = 0;
	for(var i = 0; i < obj.length; i++){
		if(obj[i].checked){
			textArr[count] = obj[i].value;
			count++;
		}
	}
	return textArr;
}

//數字排序用
function sortNumber(a, b){
	return a - b;
}

//千位分隔符號
function thousandFormat(number){
	var num = number.toString();
	var text = "";
	if(isNum(num)){
		while(num.length > 3){
			text = "," + num.substring(num.length-3) + text;
			num = num.substring(0, num.length-3);
		}
		text = num + text;
	}
	else{
		text = num;
	}
	return text;
}

//抓取絕對位置
function bindPos(obj){
	var h = document.getElementById(obj);
	var ot = h.offsetTop;
	var ol = h.offsetLeft;
	
	while((h = h.offsetParent) != null){
		ot += h.offsetTop;
		ol += h.offsetLeft;
	}
	
	return {'top':ot, 'left':ol};
}

var xmlHttp;
function createXMLHttpRequest() {
    if(window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
        if (xmlHttp.overrideMimeType) {
            xmlHttp.overrideMimeType('text/xml');
        }
    }
    else if(window.ActiveXObject) {
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!xmlHttp) {
        alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }
}


/* 
Round a string to some decimal places 
*/ 
function roundp(v, dp) { 
var dotpos; // position of decimal point 
var ary = new Array(); 

// Make sure it has a dot 
if ( v.indexOf('.') == -1 ) v += '.'; 

dotpos = v.indexOf("."); 

// Convert string to Array 
for (var i = 0 ; i < v.length ; i++) ary[i] = v.charAt(i); 

// Append trailing zero if the string is too short 
var temp = dotpos + dp - v.length + 1; 
for (var i = 0 ; i <= temp ; i++) ary[ary.length] = '0'; 

// Check if carry is needed after rounding 
var carry_flag = false; 
if ( ary[dotpos + dp + 1] >= 5 ) carry_flag = true; 

// Do carry for other digit 
for (var i = dotpos + dp ; i >= 0 && carry_flag ; i--) { 
// Skip the dot and pocess the next digit 
if (ary[i] == '.') continue; 

if (ary[i] != '9') { 
ary[i]++; 
carry_flag = false; 
} else { // 9 + 1 = 10 
ary[i] = '0'; 
carry_flag = true; 
} 
} 

// Check if a new digit is needed after carry 
v = (carry_flag)? '1' : ''; 

// Chop the last digit 
ary.length = dotpos + dp + 1; 

// Chop the dot if no decimal place 
if (dp == 0) ary.length--; 

// Convert array into string 
for (var i = 0 ; i < ary.length ; i++) v = v + ary[i]; 

return v; 
}