	function in_array(neddle, array)
	{
		for(key in array)
		{
			if(array[key]==neddle)return key;
		}
		return null;
	}

	function array_unique(arrToUni)
	{
		dummyArray = new Array();
		for($i = 0; $i < arrToUni.length; $i++)
		{
			val = arrToUni[i];
			if(val && !in_array(val, dummyArray))dummyArray[dummyArray.length]=val;
		} // for
		return dummyArray;
	}


	function delServerData(kdData)
	{
		if(confirm('Anda Yakin Ingin Menghapus Data Ini'))
		{
			var delsuccess	= function(t){eval(t.responseText);}
			var delfailure	= function(t){alert('Gagal Menghapus');}

			var pars= '';
			var delAjax = new Ajax.Request(pathFilePHP+'?do=del&id='+escape(kdData), {method:'get', postBody:pars, onSuccess:delsuccess, onFailure:delfailure});
		}
	}

	function editServerData(kdData)
	{
		var editsuccess	= function(t){eval(t.responseText);MM_swapImage('Image1','','images/subnav_c.gif',1); showLayer('tambah', 'shadowLayer'); hideLayer('data');}
		var editfailure	= function(t){alert('Gagal Mengambil Data');}

		var pars= '';
		var editAjax = new Ajax.Request(pathFilePHP+'?do=edit&id='+escape(kdData), {method:'get', postBody:pars, onSuccess:editsuccess, onFailure:editfailure});
	}

	function viewServerData(kdData)
	{
		var editsuccess	= function(t){eval(t.responseText);switchView('view')}
		var editfailure	= function(t){alert('Gagal Mengambil Data');}

		var pars= '';
		var editAjax = new Ajax.Request(pathFilePHP+'?do=view&id='+escape(kdData), {method:'get', postBody:pars, onSuccess:editsuccess, onFailure:editfailure});
	}

  	function postServerData()
	{
		//Form.disable(document.forms[formName]);

		var success	= function(t){eval(t.responseText);}
		var failure	= function(t){updateFailed(t);}

		if(arguments.length)
		{
			var pars = arguments[0];
		}
		else
		{
			var pars = Form.serialize(document.forms[formName]);
		}
		var postAjax = new Ajax.Request(pathFilePHP, {method:'post', postBody:pars, onSuccess:success, onFailure:failure});
		return false;
	}

  	function getServerData(query, pathFile)
	{
		//Form.disable(document.forms[formName]);

		var getsuccess	= function(t){eval(t.responseText);}
		var getfailure	= function(t){updateFailed(t);}
		if(!pathFile)pathFile = pathFilePHP

		var pars = '';
		var getAjax = new Ajax.Request(pathFile+'?'+query, {method:'get', postBody:pars, onSuccess:getsuccess, onFailure:getfailure});
		return false;
	}

	function elementFormFocus(elm)
	{
		if(elm)eval("document.forms['"+formName+"']."+elm+".focus();");
	}

	function setFormValue(formName, input, theValue)
	{
		try
		{
			eval("objForm = document.forms['"+formName+"']."+input);
			switch (objForm.type.toLowerCase())
			{
		        case 'select-one':
	    	    case 'select-multiple':
					for(key in objForm.options)
					{
						if((key-0)==key)
						{
							if(objForm.options[key].value == theValue)
							{
								objForm.options[key].selected = true;
							}
						}
					}
				break;
				case 'password':
	   		    case 'text':
   	    		case 'textarea':
   	    		case 'hidden':
					objForm.value = theValue;
				break;
				case 'radio':
				case 'checkbox':
					if(elem.value == theValue)elem.checked = true;
					else elem.checked = false;
				break;
			}
		}
		catch (e) {null}
	}

	function setFormElemValue(elem, theValue)
	{
		switch (elem.type.toLowerCase())
		{
	        case 'select-one':
    	    case 'select-multiple':
				for(key in elem.options)
				{
					if((key-0)==key)
					{
						if(elem.options[key].value == theValue)
						{
							elem.options[key].selected = true;
						}
					}
				}
			break;
			case 'password':
   		    case 'text':
       		case 'textarea':
				try{elem.value = theValue;}
				catch (e) {null}
			break;
		}
	}

	function getFormValue(element)
	{
		switch (element.type.toLowerCase())
		{
	        case 'select-one':
    	    case 'select-multiple':
				theIndex = element.selectedIndex;
				theValue = element.options[theIndex].text;
			break;
			default:
				theValue = elem.value;
			break;
		}
		return theValue;
	}

	function getkeycode(e)
	{
	    if (document.layers)
    	    return e.which;
    	else if (document.all)
    	    return event.keyCode;
    	else if (document.getElementById)
    	    return e.keyCode;
    	return 0;
	}

	function countdowntimer(cmd, ms)
	{
	    this.cmd = cmd;
	    this.ms = ms;
	    this.tp = 0;
	}

	countdowntimer.prototype.start = function()
	{
	    if (this.tp > 0)
	        this.reset();
	    this.tp = window.setTimeout(this.cmd, this.ms);
	}

	countdowntimer.prototype.reset = function()
	{
	    if (this.tp > 0)
	        window.clearTimeout(this.tp);
	    this.tp = 0;
	}

	function trim(str)
	{
	    return str.replace(/^(\s+)?(\S*)(\s+)?$/, '$2');
	}

	function ltrim(str)
	{
	    return str.replace(/^\s*/, '');
	}

	function rtrim(str)
	{
	    return str.replace(/\s*$/, '');
	}

	function selectText(objInput, text)
	{
		if(objInput)
		{
			objInput.value = text;
			if(objInput.createTextRange)
			{
				r = objInput.createTextRange();
				r.moveStart('character', thisQuery.length);
				r.moveEnd('character', objInput.value.length);
				r.select();
			}
			else if(objInput.setSelectionRange)
			{
				objInput.setSelectionRange(thisQuery.length,objInput.value.length);
			}
		}
	}

	function delay(milliseconds)
	{
	    var then, now;
	    then = new Date().getTime();
	    now = then;
	    while ((now - then) < milliseconds) {
	        now = new Date().getTime();
	    }
	}

	ajaxTimer = new countdowntimer('ajaxTimer.ontimerexpire()', 100);
	ajaxTimer.ontimerexpire = function()
	{
		if(typeof ajaxTimerOn == 'function')ajaxTimerOn();
	}

	function formatCurrency(num)
	{
		num = num.toString().replace(/\$|\,/g,'');

		if(isNaN(num))num = "0";

		sign = (num == (num = Math.abs(num)));
		num = Math.floor(num*100+0.50000000001);
		cents = num%100;
		num = Math.floor(num/100).toString();
		for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
			num = num.substring(0,num.length-(4*i+3))+'.'+num.substring(num.length-(4*i+3));
		return (((sign)?'':'-')  + num);
	}

	function parseCurrency(num)
	{
		var creg=/\./gi;
		mystring = new String(num);
		var results = mystring.replace(creg,"");
		return results;
	}

	function windowWidth()
	{
		if(typeof(window.innerWidth)!= 'undefined')return window.innerWidth;
		else if(typeof(document.body.clientWidth)!= 'undefined') return document.body.clientWidth;
		else return window.width;
		return (0);
	}

	function windowHeight()
	{
		if(typeof(window.innerHeight)!= 'undefined')return window.innerHeight;
		else if(typeof(document.body.clientHeight)!= 'undefined')return document.body.clientHeight;
		else return window.height;
		return (0);
	}
	function switchView(view)
	{
		if(view == 'tambah')
		{
			MM_swapImage('Image1','','images/subnav_b.gif',1);
			showLayer('tambah', 'shadowLayer');
			hideLayer('data');
			hideLayer('view');
		}
		else if(view == 'edit')
		{
			MM_swapImage('Image1','','images/subnav_c.gif',1);
			showLayer('tambah', 'shadowLayer');
			hideLayer('data');
			hideLayer('view');
		}
		else if(view == 'view')
		{
			MM_swapImage('Image1','','images/subnav_e.gif',1);
			showLayer('view', 'shadowLayer');
			hideLayer('data');
			hideLayer('tambah');
		}
		else
		{
			MM_swapImage('Image1','','images/subnav_a.gif',1);
			showLayer('data', 'shadowLayer');
			hideLayer('tambah');
			hideLayer('view');
		}
	}
	/**
	 *
	 **/
	function switchToView()
	{
		document.forms[formName].detail.style.visibility = 'visible';
		elems = Form.getElements(document.forms[formName]);
		for(i = 0; i < elems.length; i++)
		{
			elem = elems[i];
			if(elem.type.toLowerCase()== 'submit')null;
			else if(elem.type.toLowerCase()== 'reset')null;
			else if(elem.type.toLowerCase()== 'hidden')null;
			else
			{
				try{$(elem.name).innerHTML = getFormValue(elem);}
				catch (e) {null}
			}
		} // for
    }

	function resetAllForm()
	{
		try
		{
			for(x = 0; x < document.forms.length; x++)
			{
				elems = document.forms[x];
				for(i = 0; i < elems.length; i++)
				{
					elem = elems[i];
					if(elem.type.toLowerCase()== 'submit')null;
					else if(elem.type.toLowerCase()== 'reset')null;
					else if(elem.type.toLowerCase()== 'hidden')
					{
						if(elem.name == 'do')setFormElemValue(elem, 'add')
					}
					else
					{
						try{setFormElemValue(elem, '')}
						catch (e) {null}
					}
				} // for
			}
		}
		catch (e) {null}

		try
		{
			resetForm();
			$('nama_ref').innerHTML = '';
			$('telp_ref').innerHTML = '';
			$('nama_ref2').innerHTML = '';
			$('telp_ref2').innerHTML = '';
		}
		catch (e) {null}
	}



/**
 * this library for check input by type
 * @author aji <dpk4210@yahoo.co.uk>
 * @time thursday 20060126 0200
 * @revised thursday 20060126 1106
 * @version 1.0.0
 *
 * @param string|number input value to check note: input from input form always string
 * @param string type to check option 'email', 'url', 'number', 'idcard'
 * @access public
 * @return boolean
 **/
function checkType(thisValue, thisType)
{
	/**
	 *  first make some list for the regex check
	 **/
	var emailCheck = /^[a-z0-9&'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*?[a-z]+$/gi;//'
	var urlCheck = /^(http|https|ftp)+:\/\/[a-z0-9\-]+\.([a-z0-9\-]+\.)*?[a-z]+$/gi;
	var userCheck = /^[\d\w_]{4,12}$/gi;
	var passCheck = /^.{4,}$/gi;
	var numCheck = /^[\d]+$/gi;
	var kdPosCheck = /^[\d]{5}$/gi;
	var idCheck = /^[\d\.\/]+$/gi;

	/**
	 * convert the value to check to string
	 **/
	thisValue = thisValue.toString();

	/**
	 * check the value by type and return the result
	 **/
	if(thisType == 'email')return emailCheck.test(thisValue);
	else if(thisType == 'url')return urlCheck.test(thisValue);
	else if(thisType == 'number')return numCheck.test(thisValue);
	else if(thisType == 'user')return userCheck.test(thisValue);
	else if(thisType == 'pass')return passCheck.test(thisValue);
	else if(thisType == 'kdpos')return kdPosCheck.test(thisValue);
	else if(thisType == 'idcard')return idCheck.test(thisValue);

	/**
	 * return true if no type to check
	 **/
	return true;
}

function createElement(type, objClass, objWidth, objName, objAlign, innerHTML)
{
    objElement = document.createElement(type);
    if(objClass)objElement.className = objClass;
    if(objWidth)objElement.style.width = objWidth;
    if(objName)objElement.name = objName;
    if(objAlign)objElement.align = objAlign;
    if(innerHTML)objElement.innerHTML = innerHTML;
    return objElement;
}

function appendElement(parent, child){
    parent.appendChild(child);
}

function genRandId(prefix)
{
    if(!prefix)prefix = 'tdr';
    rPrefId = Math.floor(Math.random()*100000)
    return prefix + '_' + rPrefId;
}

function removeCellSpacing()
{
    aReturn=document.getElementsByTagName("TABLE");
    for(x=0;x<aReturn.length;x++)
    {
        aReturn[x].cellSpacing = 0;
    }

}

function removeButton()
{
    aReturn=document.getElementsByTagName("INPUT");
    for(x=0;x<aReturn.length;x++)
    {
        if(aReturn[x].type=='submit'||aReturn[x].type=='reset'||aReturn[x].type=='button')aReturn[x].style.display='none';
    }
}

