/*
ver 2007.07.09
*/

var MathUtil = {
	
	roundTo: function(base, precision) {
		var m = Math.pow(10, precision);
		var a = Math.round(base * m) / m;
		return a;
	},
	randomBetween: function(min, max) {
		return min + Math.floor(Math.random() * (max - min + 1));
	},
	
	formatTo: function(base, precision) {
		var a = this.roundTo(base, precision);
		var s = a.toString();
		var decimalIndex = s.indexOf(".");
		if (precision > 0 && decimalIndex < 0) {
			decimalIndex = s.length;
			s += '.';
		}
		while (decimalIndex + precision + 1 > s.length) {
			s += '0';
		}
		return s;
	},
	getOrdinal: function(n) {
		var ord = 'th';
		if (n % 10 == 1 && n % 100 != 11) {
			ord = 'st';
		} else if (n % 10 == 2 && n % 100 != 12) {
			ord = 'nd';
		} else if (n % 10 == 3 && n % 100 != 13) {
			ord = 'rd';
		}
		return ord;
	}
	
}



var StringUtil = {
	startsWith: function(target, prefix) {
		return (target.substr(0, prefix.length) == prefix);
	},
	endsWith: function(target, suffix) {
		return target.substring(target.length-suffix.length)==suffix;
	},	
	concat: function(target, str) {
		return new String(target.toString()+str);
	},
	toCharArray: function(target) {
		var charArr=new Array(target.length);
		for(var i=0;i<target.length;i++) {
			charArr[i]=target.charAt(i);
		}
		return charArr;
	},
	containedChinese: function(target) {
		//return (target.length != target.replace(/[^\x00-\xff]/g,"**").length);
		return (/[^\x00-\xff]/g.test(target));
	},
	getlength: function(target) {
		return target.length+(temp==null?0:temp.length);
	},
	trim: function(target) {
		return target.replace(/(^\s*)|(\s*$)/g,"");
	}
}

var ArrayUtil = {
	max: function(target) {
		var i, max = target[0];
		for (i = 1; i < target.length; i++) {
			if (max < target[i]) {
				max = target[i];
			}
		}
		return max;
	}
};

var ElementUtil = {
	hiddenElement : function(elementTagName) {
		var selects = document.getElementsByTagName(elementTagName); 
		for(i = 0; i < selects.length; i++) { 
		       selects[i].style.visibility = "hidden"; 
		} 
	},
	showElement: function(elementTagName) {
		var selects = document.getElementsByTagName(elementTagName); 
		for(i = 0; i < selects.length; i++) { 
		       selects[i].style.visibility = ""; 
		} 
	}
}

var SelectUtil = {
	selectOption: function(name, value) {
		document.getElementsByName(name)[0].value=value;
	},
	hiddenAllSelect: function() {
		var selects = document.getElementsByTagName("select"); 
		for(i = 0; i < selects.length; i++) { 
		       selects[i].style.visibility = visibility; 
		} 
	}
};


var CheckboxUtil = {

	checkedByValue: function(state, name, value) {
		value = ""+value;
		var checkObject = document.getElementsByName(name);
		var values = value.split(",");
		for(var j = 0; j < values.length; j++) {
			for (var i = 0; i < checkObject.length; i++) {
				if(checkObject[i].value == values[j]) {
					checkObject[i].checked = state;
					break;
				}
			}
		}
	},
	checkedAll: function(state) {
		var inputs = document.getElementsByTagName("input");
		for(var i =0;i<inputs.length;i++) {
			if(inputs[i].type == "checkbox") {
				inputs[i].checked =state;
			}
		}
	},
	getChecked: function(name) {
		var checkboxObject = document.getElementsByName(name);
		var checkboxs=new Array();
		for(var i = 0; i < checkboxObject.length; i++) {
			if(checkboxObject[i].checked) {
				checkboxs[checkboxs.length] = checkboxObject[i];
			}
		}
		return checkboxs;
	},
	getCheckedValue: function(name) {
		var checkboxObject = document.getElementsByName(name);
		var checkboxs=new Array();
		for(var i = 0; i < checkboxObject.length; i++) {
			if(checkboxObject[i].checked) {
				checkboxs[checkboxs.length] = checkboxObject[i].value;
			}
		}
		return checkboxs;
	}
};


var RadioUtil = {

	checkedByValue: function(name,value) {
		var radioObject = document.getElementsByName(name);
		if(value === "") {
			radioObject[0].checked = true;
			return;
		}
		for (var i = 0; i < radioObject.length; i++) {
			if(radioObject[i].value == value) {
				radioObject[i].checked = true;
				break;
			}
		}
	},
	getChecked: function(name) {
		var radioObject = document.getElementsByName(name);
		for(var i = 0; i < radioObject.length; i++) {
			if(radioObject[i].checked) {
				return radioObject[i].value;
			}
		}
		return null;
	}
};

var ObjectUtil = {
	clone: function(target) {
		var newObj = new Object();
		for(elements in target){
			newObj[elements] = target[elements];
		}
		return newObj;
	},
	cloneAll: function(target) {
		function clonePrototype(){}
		clonePrototype.prototype = target;
		var obj = new clonePrototype();
		for(var ele in obj){
			if(typeof(obj[ele])=="object") obj[ele] = obj[ele].cloneAll();
		}
		return obj;
	}
};

var DOMUtil = {
	getElementsByClassName: function(className, tag, elm) {
    	if (document.getElementsByClassName) {
    		getElementsByClassName = function (className, tag, elm) {
    			elm = elm || document;
    			var elements = elm.getElementsByClassName(className),
    				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
    				returnElements = [],
    				current;
    			for(var i=0, il=elements.length; i<il; i+=1){
    				current = elements[i];
    				if(!nodeName || nodeName.test(current.nodeName)) {
    					returnElements.push(current);
    				}
    			}
    			return returnElements;
    		};
    	} else if (document.evaluate) {
    		getElementsByClassName = function (className, tag, elm) {
    			tag = tag || "*";
    			elm = elm || document;
    			var classes = className.split(" "),
    				classesToCheck = "",
    				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
    				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
    				returnElements = [],
    				elements,
    				node;
    			for(var j=0, jl=classes.length; j<jl; j+=1){
    				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
    			}
    			try	{
    				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
    			}
    			catch (e) {
    				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
    			}
    			while ((node = elements.iterateNext())) {
    				returnElements.push(node);
    			}
    			return returnElements;
    		};
    	} else {
    		getElementsByClassName = function (className, tag, elm) {
    			tag = tag || "*";
    			elm = elm || document;
    			var classes = className.split(" "),
    				classesToCheck = [],
    				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
    				current,
    				returnElements = [],
    				match;
    			for(var k=0, kl=classes.length; k<kl; k+=1){
    				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
    			}
    			for(var l=0, ll=elements.length; l<ll; l+=1){
    				current = elements[l];
    				match = false;
    				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
    					match = classesToCheck[m].test(current.className);
    					if (!match) {
    						break;
    					}
    				}
    				if (match) {
    					returnElements.push(current);
    				}
    			}
    			return returnElements;
    		};
    	}
    	return getElementsByClassName(className, tag, elm);
	}
};
