var DIV_LOADING_MAIN = 'divLoadingMain';

// prototype framework patch
Ajax.Responders.register({
  onCreate: function() {
    Ajax.activeRequestCount++;

		showObj(DIV_LOADING_MAIN);
  },

  onComplete: function() {
    Ajax.activeRequestCount--;
		
		if (Ajax.activeRequestCount == 0) {
			hideObj(DIV_LOADING_MAIN);
		}
  }
});

// ajax common function 
function doAjaxUpdate(divId, url, pars, func) {
  return new Ajax.Updater(divId, url, 
													{method: 'post', 
													parameters: pars, 
													onComplete: (func==null?'':func)
													});
}

function doAjaxRequest(url, pars, func) {
	return new Ajax.Request(url, 
																{method: 'post', 
																parameters: pars, 
																onComplete: (func==null?'':func)
																});
}

function doAjaxAutocomplete(objName, divId, url, pars, update_func, func) {
	return new Ajax.Autocompleter(objName, divId, url,
																{parameters: pars,
																frequency: 1,
																minChars: 2,
																afterUpdateElement: (update_func==null?'':update_func),
																onComplete: (func==null?'':func)
																});
}

// common funciton
function encode(str) {return encodeURIComponent(str);}

function getFormQS(id) {
	//return Form.serialize($(id));
	var elements = new Form.getElements($(id));
  var str = '';

	var tmp = null;
	var tp = '';
	var bValid = false;
  for (var i = 0; i < elements.length; i++) {
		tmp = elements[i];
		tp = tmp.type;
		bValid = false;
		if (!tmp.disabled && tmp.name != '' && tmp.value != '') {
			if (tp == 'radio' || tp == 'checkbox') {
				if (tmp.checked) bValid = true;
			}
			else if (tp != 'button') bValid = true;
		}
		if (bValid) {
			//if (str != '') 
			str += '&';
			str += tmp.name + '=' + encode((tmp.value)).replace(/\&/g, "%26");
		}
	}
	return str;
}

function rw(str) {document.write(str);}

function obj(id) {return $(id);}

function has(id) {return obj(id) != null;}

function val(id) {return $F(id);}

function isVisible(id) {return Element.visible(id);}

function showObj(id) {Element.show(id);}

function hideObj(id) {Element.hide(id);}

function toggleObj(id) {Element.toggle(id);}

function enableObj(id) {obj(id).disabled = '';}

function disableObj(id) {obj(id).disabled = 'true';}

function setValue(id, val) {obj(id).value = val;}

function clearValue(id) {setValue(id, '');}

function setHtml(id, val) {obj(id).innerHTML = val;}

function clearHtml(id) {setHtml(id, '');}

function msg(id) {return id + '_msg';}

function setMsg(id, val) {setHtml(msg(id), val); }

function clearMsg(id) {setMsg(id, '');}

function setMsgOk(id, val) {setHtml(msg(id), '<span class="ok">'+val+'</span>'); }

function setMsgError(id, val) {setHtml(msg(id), '<span class="error">'+val+'</span>'); }

function isEmpty(str) {return str == null || str == '';}

function isNotEmpty(str) {return !isEmpty(str);}

function hasStr(txt, str) {return (txt.indexOf(str) != -1);}

function wait(func, second) {setTimeout(func, second*1000);}

function setClipboard(id) {
	var txt = val(id);
	if (window.clipboardData) {
		window.clipboardData.setData('Text', txt);
	}
	else if (window.netscape) {
		setClipboardNetscape(txt);
	}
	return false;
}

function setClipboardNetscape(text){
	var url = [
		'data:text/html;charset=utf-8;base64,PGJvZHk+PC9ib2',
		'R5PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKGZ1',
		'bmN0aW9uKGVuY29kZWQpe3ZhciBzd2ZfZGF0YSA9IFsKICdkYX',
		'RhOmFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoO2Jhc2U2',
		'NCxRMWRUQjJ3JywKICdBQUFCNG5EUGdZbGpBd01qSTRNejAlMk',
		'YlMkY5JTJGZTJaZkJnYUdhV3dNRE1uNUthJywKICdrTU10TjRH',
		'ZGdaZ1NJTXdaWEZKYW01UUFFJTJCQm9iaTFCTG5uTXlDcFB6RW',
		'9oU0dJJywKICdQRnAlMkZBeHNEREJRa3BGWkRGUUZGQ2d1eVM4',
		'QXlqSTRBRVVCaXkwVndBJTNEJTNEJwpdLmpvaW4oIiIpOwpkb2',
		'N1bWVudC5ib2R5LmlubmVySFRNTCA9IFsKICc8ZW1iZWQgc3Jj',
		'PSInLHN3Zl9kYXRhLCciICcsCiAnRmxhc2hWYXJzPSJjb2RlPS',
		'csZW5jb2RlZCwnIj4nLAogJzwvZW1iZWQ+JwpdLmpvaW4oIiIp',
		'Owp9KSgi',
		base64encode(encode(text) + '")</'+'script>')
	].join("");
	var tmp = document.createElement("div");
	tmp.innerHTML = [
		 '<iframe src="',url,'"'
		,' width="0" height="0">'
		,'</iframe>'
	].join("");
	with(tmp.style){
		position ="absolute";
		left = "-10px";
		top  = "-10px";
		visibility = "hidden";
	};
	document.body.appendChild(tmp);
	setTimeout(
		function() {
			document.body.removeChild(tmp);
		}
		, 1000);
	function base64encode(str){
		var Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
		var c1, c2, c3;
		var buf = [];
		var len = str.length;
		var i = 0;
		while(i < len){
			c1 = str.charCodeAt(i) & 0xff;
			c2 = str.charCodeAt(i+1);
			c3 = str.charCodeAt(i+2);
			buf.push(Chars[(c1 >> 2)]);
			if(i+1 == len){
				buf.push(Chars[(c1 & 0x3) << 4],"==");
				break;
			}
			buf.push(Chars[((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)]);
			if(i+2 == len){
				buf.push(Chars[(c2 & 0xF) << 2],"=");
				break;
			}
			buf.push(
				Chars[((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)],
				Chars[(c3 & 0x3F)]
			);
			i+=3;
		}
		return buf.join("")
	}
}

function getUrl(url) {
	if (isNotEmpty(url)) {
		if (!hasStr(url, '://')) {
			return 'http://' + url;
		}
		return url;
	}
	return '#';
}

function goUrl(url) {location.href = getUrl(url);}

function locateUrl(url) {location.href = url;}

function openUrl(url) {window.open(getUrl(url));}

function goBack() {history.go(-1);}

function showDate(obj) {displayCalendar(obj, 'yyyy-mm-dd', obj);}

function showDatetime(obj) {displayCalendar(obj, 'yyyy-mm-dd hh:ii', obj, true);}

function showCalendar(obj) {
	var cn = obj.className;
	if (hasStr(cn, 'datetime')) showDatetime(obj);
	else showDate(obj);
}

function clickObj(id) {obj(id).click(); }


/* check function */

function checkUsernameStr(str) {
	return /^([a-zA-Z0-9_])+\s?$/.test(str);
}

function checkNumStr(str) {
	return /^([a-zA-Z0-9_\.\-])+\s?$/.test(str);
}

function checkEmail(str) {
	return /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(str);
}

	
function getCookie(name) { 
	 var start = document.cookie.indexOf(name+'='); 
	 var len = start+name.length+1; 
	 if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
	 if (start == -1) return null; 
	 var end = document.cookie.indexOf(';',len); 
	 if (end == -1) end = document.cookie.length; 
	 return unescape(document.cookie.substring(len,end)); 
} 

function setCookie(name,value,expires,path,domain,secure) { 
	expires = expires * 60*60*24*1000;
	var today = new Date();
	var expires_date = new Date( today.getTime() + (expires) );
	var cookieString = name + '=' +escape(value) + 
		 ( (expires) ? ';expires=' + expires_date.toGMTString() : '') + 
		 ( (path) ? ';path=' + path : '') + 
		 ( (domain) ? ';domain=' + domain : '') + 
		 ( (secure) ? ';secure' : ''); 
	document.cookie = cookieString; 
} 



//Flash
function getFlashStr(id, url, width, height, bgcolor) {
	var s = '';
	s += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+width+'" height="'+height+'" id="'+id+'" align="middle">';
	s += '<param name="allowScriptAccess" value="sameDomain" />';
	s += '<param name="movie" value="'+url+'" />';
	s += '<param name="quality" value="high" />';
	s += '<param name="wmode" value="transparent" />';
	if (bgcolor) {
		s += '<param name="bgcolor" value="'+bgcolor+'" />';
	}
	s += '<embed src="'+url+'" quality="high" ';
	if (bgcolor) {
		s += 'bgcolor="'+bgcolor+'"';
	}
	s += 'width="'+width+'" height="'+height+'" swliveconnect="true" name="'+id+'" allowScriptAccess="sameDomain" quality="high" wmode="transparent" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
	s += '</object>';
	return s;
}

function writeFlash(id, url, width, height, bgcolor) {
	rw(getFlashStr(id, url, width, height, bgcolor));
}

function getFlashObject(movieName)
{
  if (window.document[movieName]) 
  {
    return window.document[movieName];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName]; 
  }
  else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
  {
    return document.getElementById(movieName);
  }
}



var _timer;
function wait(code, time, timer) { try { clearTimeout(timer == null ? _timer : timer); return _timer = setTimeout(code, time * 1000); } catch (e) { pe(e); } }
function repeat(code, time, timer) { try { stop(timer); return _timer = setInterval(code, time * 1000); } catch (e) { pe(e); } }
function stop(timer) { try { clearInterval(timer == null ? _timer : timer); } catch (e) { pe(e); } }

function pe(e) {
	//alert(e.description);
}



//input reg check
function regInput(obj, reg, inputStr) {
  var docSel = document.selection.createRange();
  if (docSel.parentElement().tagName != "INPUT") return false;
  oSel = docSel.duplicate();
  oSel.text = "";
  var srcRange = obj.createTextRange();
  oSel.setEndPoint("StartToStart", srcRange);
  var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length);
  return reg.test(str);
}
//check Number
//var ___regStr = /^\d*\.?\d{0,2}$/; //2位小数浮点数
var ___regStr = /^\d*$/; //整数
function doOnKeyPress(obj) {
	return regInput(obj, ___regStr,  String.fromCharCode(event.keyCode));
}

function doOnPaste(obj) {
	return regInput(obj, ___regStr,  window.clipboardData.getData('Text'));
}

function doOnDrop(obj) {
	return regInput(obj, ___regStr,  event.dataTransfer.getData('Text'));
}


function previousObj(o) { return obj(o).previousSibling; }

function value(o, v) { try { var o = obj(o); if (v != null) o.value = v; return o.value; } catch (e) { return null; } }
function qs(s) { return "?" + (s == null ? "" : s); }
function nv(n, v, e) { return e && v == null ? "" : "&" + n + "=" + (v == null ? "" : encode(v)); }
function param(n, o, e) { var v = o == null ? value(n) : value(o); try { return e && isEmpty(v) ? "" : nv(n, v); } catch (e) { pe(e); return ""; } }
