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; 
} 


