
/**
* @title: java-like Map
* @author: lizhantao
* @date: 2004-11-22
* @email: lazett@gmail.com
* @warning: only support simple type key,String best!;
*/
function Map() {
	this.pairs = new List();
	
	this.get = get;
	this.put = put;
	this.remove = remove;
	this.size = size;
	this.isEmpty = isEmpty;
	this.keySet = keySet;
	this.containsKey = containsKey;
	
	function Item(key, value){
		this.key = key;
		this.value = value;
	}

	function put(key, value){
		for(var iter = this.pairs.iterator();iter.hasNext();){
			var item = iter.next();
			if(item.key === key){
				item.value = value;
				return;
			}
		}
		this.pairs.add(new Item(key,value));
	}

	function get(key){
		for(var iter = this.pairs.iterator();iter.hasNext();){
			var item = iter.next();
			if(item.key === key){
				return item.value;
			}
		}
		return null;
	}

	function remove(key) {
		for(var iter = this.pairs.iterator();iter.hasNext();){
			var item = iter.next();
			if(item.key === key){
				iter.remove();
			}
		}
	}

	function size(){
		return this.pairs.size();
	}

	function isEmpty(){
		return this.pairs.size() <= 0;
	}

	function keySet(){
		var keys = new List();
		for(var iter = this.pairs.iterator();iter.hasNext();){
			var item = iter.next();
			keys.add(item.key);
		}
		return keys;
	}

	function containsKey(key){
		for(var iter = this.pairs.iterator();iter.hasNext();){
			var item = iter.next();
			if(item.key === key){
				return true;
			}
		}
		return false;
	}
}

/**
* @title: java-like List
* @author: lizhantao
* @date: 2004-11-22
* @email: lazett@gmail.com
*/
function List(){
	this.innerArray = new Array();
	this.add = add;
	this.get = get;
	this.remove = remove;
	this.size = size;
	this.isEmpty = isEmpty;
	this.iterator = iterator;
	this.contains = contains;

	function add(value){
		this.innerArray[this.innerArray.length] = value;
	}

	function get(i){
		if (i< 0 || i>= this.innerArray.length)	{
			return;
		}
		return this.innerArray[i];
	}

	function remove(i){
		if (i< 0 || i>= this.innerArray.length)	{
			return;
		}
		this.innerArray.splice(i,1);
	}

	function size(){
		return this.innerArray.length;
	}

	function isEmpty(){
		return this.innerArray.length <= 0;
	}
	
	function iterator(){
		return new Iterator(this);
	}

	function contains(object){
		for (var i = 0; i < this.pairs.length; i++){
			if ( this.innerArray[i] === object ){
				return true;
			}
		}
		return false;
	}
}

/**
* @title: java-like Set
* @author: lizhantao
* @date: 2004-11-22
* @email: lazett@gmail.com
* @warning: only support simple type value,String best!;
*/
function Set(){
	this.innerArray = new Array();
	this.add = add;
	this.get = get;
	this.remove = remove;
	this.size = size;
	this.isEmpty = isEmpty;
	this.iterator = iterator;
	this.contains = contains;

	function add(value){
		for (var i = 0; i < this.pairs.length; i++)	{
			if ( this.innerArray[i] === value )	{
				return;
			}
		}
		this.innerArray[this.innerArray.length] = value;
	}

	function get(i){
		if (i< 0 || i>= this.innerArray.length){
			return;
		}
		return this.innerArray[i];
	}

	function remove(i){
		if (i< 0 || i>= this.innerArray.length)	{
			return;
		}
		this.innerArray.splice(i,1);
	}

	function size(){
		return this.innerArray.length;
	}

	function isEmpty(){
		return this.innerArray.length <= 0;
	}

	function iterator(){
		return new Iterator(this);
	}

	function contains(object){
		for (var i = 0; i < this.pairs.length; i++){
			if ( this.innerArray[i] === object ){
				return true;
			}
		}
		return false;
	}
}

/**
* @title: java-like Iterator
* @author: lizhantao
* @date: 2004-11-22
* @email: lazett@gmail.com
*/
function Iterator(list){
	this.list = list;
	this.cursor = 0;
	this.hasNext = hasNext;
	this.next = next;
	this.remove = remove;

	function hasNext(){
		return this.cursor != this.list.size();
	}
	function next(){
		var result = this.list.get(this.cursor);
		this.cursor++;
		return result;
	}
	
	function remove(){
		this.cursor--;
		this.list.remove(this.cursor);
	}
}

/**
* @title: ************demo example*************
* @author: lizhantao
* @date: 2004-11-22
* @email: lazett@gmail.com
*/
/*var a = new Map();
alert("a.isEmpty()=" + a.isEmpty());
a.put("1","lizhantao");
a.put("2","lazett@gmail.com");
a.put("3","beijing");
a.put("4","2004-11-22");
alert("a.isEmpty()=" + a.isEmpty());
a.remove("2");
alert("a.size()=" + a.size());
var b = a.keySet();
for(var c = b.iterator();c.hasNext();){
var key = c.next();
var value = a.get(key);
alert("key=" + key + " value=" + value);
}
document.write("using java-like util example end");
*/

function Stack() {
	this.innerArray = new Array();
	this.push = push;
	this.pop = pop;
	this.size = size;
	this.isEmpty = isEmpty;
	
	function push(obj) {
		this.innerArray[this.innerArray.length] = obj;
	}
	
	function pop() {
		var len = this.innerArray.length;
		if (len == 0) return;
		var obj = this.innerArray[len - 1];
		this.innerArray.length--;
		return obj;
	}
	
	function size() {
		return this.innerArray.length;
	}
	
	function isEmpty() {
		return this.innerArray.length == 0;
	}
}

function replaceVar(s,v)
{
	var map=new Map();
	var regexp=new RegExp("@{([^@]+)}", "g")
	//var regexp=/@{([^@]+)}/g;
	var match;
	for(;;)
	{
		match=regexp.exec(s);
		if(match)
		{
			map.put(match[0],match[1]);
		}
		else
		{
			break;
		}
	}
	
	var itor=map.keySet().iterator();
	while(itor.hasNext())
	{
		var match0=itor.next();
		var match1=map.get(match0);
		var r=eval("v."+match1);
		if(typeof(r) == 'undefined')
		{
			alert(match1+" not found!");
			return "";
		}
		s=s.replace(new RegExp(match0, "g"),r)
	}
	return s;
}

function trim(s)
{	
	s=s.replace(/^ */,"");
	return s.replace(/ *$/,"");
}

function chknum(s)
{
	var num;
	s=trim(s);
	if (s=="0")
		return true;
	if (s=="")
		return false;
	s=s.replace(/^0*/,"");
	num=parseInt(s);
	if (s!=''+num) 
		return false;
	else 
		return true;
}

function isAlien(a) {
   return isObject(a) && typeof a.constructor != 'function';
}

function isArray(a) {
    return isObject(a) && a.constructor == Array;
}

function isBoolean(a) {
    return typeof a == 'boolean';
}

function isEmpty(o) {
    var i, v;
    if (isObject(o)) {
        for (i in o) {
            v = o[i];
            if (isUndefined(v) && isFunction(v)) {
                return false;
            }
        }
    }
    return true;
}

function isFunction(a) {
    return typeof a == 'function';
}

function isNull(a) {
    return typeof a == 'object' && !a;
}

function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}

function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}

function isString(a) {
    return typeof a == 'string';
}

function isUndefined(a) {
    return typeof a == 'undefined';
} 



/***********************************************************
Function formatnumber(value,num)
Written by zergling
javascript???FormatNumber??????VBScript???????????????????????????
????????????
????????????????????????
***********************************************************/
function adv_format(value,num) //????
{
	var a_str = formatnumber(value,num);
	var a_int = parseFloat(a_str);
	if (value.toString().length>a_str.length)
	{
		var b_str = value.toString().substring(a_str.length,a_str.length+1);
		var b_int = parseFloat(b_str);
		if (b_int<5)
		{
			return a_str;
		}
		else
		{
			var bonus_str,bonus_int;
			if (num==0)
			{
				bonus_int = 1;
			}
			else
			{
				bonus_str = "0.";
				for (var i=1; i<num; i++)
					bonus_str+="0";
				bonus_str+="1";
				bonus_int = parseFloat(bonus_str);
			}
			a_str = formatnumber(a_int + bonus_int, num);
		}
	}
	return a_str;
}

function formatnumber(value,num) //????
{
	var a,b,c,i;
	a = value.toString();
	b = a.indexOf('.');
	c = a.length;
	if (num==0)
	{
		if (b!=-1)
			a = a.substring(0,b);
	}
	else
	{
		if (b==-1)
		{
			a = a + ".";
			for (i=1;i<=num;i++) a = a + "0";
		}
		else
		{
			a = a.substring(0,b+num+1);
			for (i=c;i<=b+num;i++) a = a + "0";
		}
	}
	return a;
}

var useNativeDialog = false;
function dialogAction(url, title, width, height, callback)
{
	var callback_arguments = [];
	callback_arguments[0] = null;
	for (var i = 5; i < arguments.length; i++) {
		callback_arguments[callback_arguments.length] = arguments[i];
	}
	if (useNativeDialog) {
		var v = window.showModalDialog(
					'showDialog.do?title='+title+"&"+url, 
					null, 'dialogWidth:'+width+'px;dialogHeight:'+height+'px;status:no;help:no;scroll:no');
		if (callback != null) {
			callback_arguments[0] = v;
			callback.apply(this, callback_arguments);
		}
	} else {
		top.showPopWin(url, width, height, callback, callback_arguments);
	}
}

function closeDialog(returnValue) {
	if (useNativeDialog) {
    	window.parent.returnValue = returnValue;
    	window.parent.close();
	} else {
		top.hidePopWin(returnValue);
	}
}

function confirmDialog(url, title, message) {
	var confirmUrl="confirmOperationDialog.do?message="+message+"&"+url;
	var dialog_arguments = [ confirmUrl, title ];
	for (var i = 3; i < arguments.length; i++) {
		dialog_arguments[dialog_arguments.length] = arguments[i];
	}
	dialogAction.apply(this, dialog_arguments);	
}


function validateFormFloat(value)
{
	var bValid=true;
	if (value.length > 0) {
        // remove '.' before checking digits
        var tempArray = value.split('.');
        if(tempArray.length>2) return false;
        //Strip off leading '0'
        var zeroIndex = 0;
        var joinedString= tempArray.join('');
        while (joinedString.charAt(zeroIndex) == '0') {
            zeroIndex++;
        }
        var noZeroString = joinedString.substring(zeroIndex,joinedString.length);

        if (!isAllDigits(noZeroString)) {
            return false;
        } else {
	        var iValue = parseFloat(value);
	        if (isNaN(iValue)) {
	            bValid = false;
	        }
        }
    }
    return bValid;
}

function getFullDate(date) {
	return date.substring(0,4)+"?"+date.substring(4,2)+"?"+date.substring(6)+"?"
}

/*  ????: dateValue ????? YYYY/MM/DD
 *  ????:
 *		true 	??????
 *		false 	??????
 *
 *	Author	: derek
 *      Date	: 2004/09/23
 *
 */
function checkCenturyDate(dateValue) {	
        if(dateValue == null || dateValue == "" ){
            return true;
        }else{
	    var dateData = dateValue.match(/(\d{4})\/(\d{2})\/(\d{2})/);      
	    if(dateData == null ){
	          return false;
	    }else{  // ???? 0000/00/00 ???	 	
	          year = parseFloat(RegExp.$1); 
	          month = parseFloat(RegExp.$2);
	          day = parseFloat(RegExp.$3);
	          checkDate = new Date(year,(month-1),day); 	  
	          // ?????????????????????????????????????????:1?32??
	          // ???????2?1?(??????)???????if????????????????????????,
	          // ?????, ????????? 
	          if(checkDate.getFullYear() == year && checkDate.getMonth()+1 == month && checkDate.getDate() == day ){
	                   // ????
	                   return true;	   
	          }else{
	                   return false;
	          }
	        }
         }	
}	

function isAllDigits(argvalue) {
    argvalue = argvalue.toString();
    var validChars = "0123456789";
    var startFrom = 0;
	if (argvalue.charAt(0) == "-") {
        startFrom = 1;
    }

    for (var n = startFrom; n < argvalue.length; n++) {
        if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
    }
    return true;
}

function selectAll(form, elementName) {
	var elements = elementName == null ? form.elements : form.elements[elementName];
	if (elements == null) return;
	var len = elements.length;
	if (len == null) {
		elements = [ elements ];
		len = 1;
	}
    for (var index = 0; index < len; index++) {
        if (elements[index].type == "checkbox") {
            elements[index].checked = true;
        }
	}	
}

function selectNone(form, elementName) {
	var elements = elementName == null ? form.elements : form.elements[elementName];
	if (elements == null) return;
	var len = elements.length;
	if (len == null) {
		elements = [ elements ];
		len = 1;
	}
    for (var index = 0; index < len; index++) {
        if (elements[index].type == "checkbox") {
            elements[index].checked = false;
        }
	}	
}

function hasCheckboxSelected(form, elementName) {
	var elements = elementName == null ? form.elements : form.elements[elementName];
	if (elements == null) return;
	var len = elements.length;
	if (len == null) {
		elements = [ elements ];
		len = 1;
	}
    for (var index = 0; index < len; index++) {
        if (elements[index].type == "checkbox") {
        	if (elements[index].checked) {
        		return true;
        	}
        }
	}
	return false;
}

function form_prevent_repeat_submit_onsubmit() {
	var form = event.srcElement;
	if (form.original_onsubmit != null) {
		form.detachEvent("onsubmit", form_prevent_repeat_submit_onsubmit);
		form.attachEvent("onsubmit", form.original_onsubmit);
		var cansubmit = form.fireEvent("onsubmit");
		form.detachEvent("onsubmit", form.original_onsubmit);
		form.attachEvent("onsubmit", form_prevent_repeat_submit_onsubmit);
		if (!cansubmit) {
			return false;
		}
	}
	if (form.target == "_self" || form.target == "") {
		if (form.submitted) {
			return false;
		}
		form.submitted = true;
		form_prevent_repeat_submit_disable_button();
	}
}

function form_prevent_repeat_submit_submit() {
	if (this.target == "_self" || this.target == "") {
		if (this.submitted) {
			return;
		}
		this.submitted = true;
		form_prevent_repeat_submit_disable_button();
	}
	this.original_submit();
}

function form_prevent_repeat_submit_disable_button() {
	var inputElements = document.getElementsByTagName("INPUT");
	for (var i = 0; i < inputElements.length; i++) {
		var e = inputElements[i];
		if (e.type == "button" || e.type == "submit") {
			e.disabled = "true";
		}
	}
}

function setFormPreventRepeatSubmit() {
	for (var i = 0; i < document.forms.length; i++) {
		var form = document.forms[i];
		form.original_onsubmit = form.onsubmit;
		form.onsubmit = null;
		form.attachEvent("onsubmit", form_prevent_repeat_submit_onsubmit);
		form.original_submit = form.submit;
		form.submit = form_prevent_repeat_submit_submit;
		form.submitted = false;
	}
}

function sendEmail(email_to, msg) {
	url = "newCommonEmail.do?email_to=" + email_to;
	title = "commonEmail.new.title";
	dialogAction(url, title, 744, 520, sendEmail_callback, msg);
}

function sendEmail_callback(v, msg) {
	if (v && msg) {
		alert(msg);
	}
}

function setTab(area,id) {
	var tabArea=document.getElementById(area);
	var contentArea=document.getElementById(area+'_contents');
	
	var contents=contentArea.childNodes;
	for(i=0; i<contents.length; i++) {
		if(contents[i].className=='tabcontent'){contents[i].style.display='none';}
	}
	document.getElementById(id).style.display='';

	var tabs=document.getElementById(area+'_btn').getElementsByTagName('li');
	for(i=0; i<tabs.length; i++) { tabs[i].className='btn1'; }
	document.getElementById(id+'_tab').className='btn2';
	document.getElementById(id+'_tab').blur();
}
