String.prototype.format = function()
{
	var pattern = /\{\d+\}/g;
	var args = arguments;
	return this.replace(pattern, function(capture){ return args[capture.match(/\d+/)]; });
}

function executeGet(location, command)
{
	var targetControl = document.getElementById(location);
	
	targetControl.innerHTML = "";
	var objRequest = getRequest();
	if (objRequest == null)
	{
		alert ("Browser does not support HTTP Request");
		return;
	}
	var url = command;
	url = url + "&sid=" + Math.random();
	objRequest.onreadystatechange = function()
	{
		if (objRequest.readyState == 4 || objRequest.readyState=="complete")
		{
			if (objRequest.status == 200) targetControl.innerHTML = objRequest.responseText;
			objRequest = null;
		}else{
			targetControl.innerHTML = "<span style='font-size:11px;font-family: Arial, Helvetica, sans-serif;color: #003399;letter-spacing: 1px;font-weight:bold;'>&nbsp;Loading...&nbsp;</span>";
		}
	};
	objRequest.open("GET",url,true);
	objRequest.send(null);
}
function executePost(location, command)
{
	var targetControl = document.getElementById(location);
	
	targetControl.innerHTML = "";
	var objRequest = getRequest();
	if (objRequest == null)
	{
		alert ("Browser does not support HTTP Request");
		return;
	}
	var url = command;
	objRequest.onreadystatechange = function()
	{
		if (objRequest.readyState == 4 || objRequest.readyState=="complete")
		{
			if (objRequest.status == 200) 
			{
				targetControl.innerHTML = objRequest.responseText;
				execJS(targetControl);
			}
			objRequest = null;
		}else{
			targetControl.innerHTML = "<span style='font-size:11px;font-family: Arial, Helvetica, sans-serif;color: #003399;letter-spacing: 1px;font-weight:bold;'>&nbsp;Loading...&nbsp;</span>";
		}
	};
	objRequest.open("POST",url,true);
	objRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	objRequest.send(null);
}
function getRequest()
{
	var xmlHttp=null;
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
var bMoz = (navigator.appName == 'Netscape');

function execJS(node) {
  var st = node.getElementsByTagName('SCRIPT');
  var strExec;
  for(var i=0;i<st.length; i++) {     
    if (bSaf) {
      strExec = st[i].innerHTML;
    }
    else if (bOpera) {
      strExec = st[i].text;
    }
    else if (bMoz) {
      strExec = st[i].textContent;
    }
    else {
      strExec = st[i].text;
    }
    try {
      eval(strExec.split("<!--").join("").split("-->").join(""));
    } catch(e) {
      alert(e);
    }
  }
}
function isInteger(value)
{
	return /^-?\d+$/.test(value);
}
function isDigit(value)
{   
	return /^\d$/.test(value);
}
function isValidEmail(value) 
{
	if (value == null || value == "") return false;
	if (/^[a-zA-Z0-9_+.-]+\@([a-zA-Z0-9_+.-]+\.)+[a-zA-Z0-9]{2,}$/.test( value )) return true;
	return false;
}
function isDate(strYear, strMonth, strDay) 
{
	if (!isInteger(strYear) || !isInteger(strMonth) || !isInteger(strDay)) return false;
	
	var intYear = new Number(strYear);
	var intMonth = new Number(strMonth);
	var intDay = new Number(strDay);
	
	if (intYear < 0 || intMonth < 1 || intDay < 1) return false;
	if (intMonth > 12) return false;
	
	// checking february
	var isLeap = ((intYear % 4)==0);
	if (isLeap && (intMonth==2) && intDay > 29) return false;
	if (!isLeap && (intMonth==2) && intDay > 28) return false;
	
	// checking months
	if ((intDay > 31) && ((intMonth==1) || (intMonth==3) || (intMonth==5) || (intMonth==7) || (intMonth==8) || (intMonth==10) || (intMonth==12))) return false;
	if ((intDay > 30) && ((intMonth==4) || (intMonth==6) || (intMonth==9) || (intMonth==11))) return false;

	return true;
}

function populateDateTimePicker(cmbYear, cmbMonth, cmbDay)
{
	var dtSelected = new Date(cmbYear.value, cmbMonth.value, 1);
	var dtLastMonth = new Date(cmbYear.value, cmbMonth.value, 1);
	
	var dtSelectedMonth = dtSelected.getMonth();
	dtSelectedMonth--;
	
	dtLastMonth.setMonth(dtSelectedMonth);
	
	var diff = dtSelected - dtLastMonth;
	var endOfMonth = diff/86400000;

	var selectedDate = cmbDay.value;
	var counter = 0;
	var i;

	for(i=0;i<cmbDay.length;i++)
	{
		cmbDay.remove(i);
	}

	for (i=1;i<=endOfMonth; i++)
	{
		var tmpOption = new Option();
		__display = new String(i);
		if (__display.length == 1) __display = "0" + __display;
		tmpOption.text = __display;
		tmpOption.value = i;
		
		cmbDay.options[counter++] = tmpOption;
	}
	
	if (selectedDate > endOfMonth) selectedDate = endOfMonth;
	if (!selectedDate) selectedDate = 1;
	cmbDay.value = selectedDate;
}

function initDtPicker(cmbYear, cmbMonth, cmbDay)
{
	var dtToday = new Date();
	var todayYear = dtToday.getFullYear();
	
	var counter = 0;
	var i;
	for (i=1980;i <= todayYear; i++)
	{
		var tmpOption = new Option();
		tmpOption.text = i;
		tmpOption.value = i;
		
		cmbYear.options[counter++] = tmpOption;
	}
	
	counter = 0;
	for (i=1;i<=12; i++)
	{
		var tmpOption = new Option();
		tmpOption.text = i;
		tmpOption.value = i;
		
		cmbMonth.options[counter++] = tmpOption;
	}
	cmbYear.value = todayYear;
	
	populateDateTimePicker(cmbYear, cmbMonth, cmbDay);
}

function initDtPicker2(hiddenValue, cmbYearID, cmbMonthID, cmbDayID, startYear)
{
	var cmbYear = $("#" + cmbYearID)[0];
	var cmbMonth = $("#" + cmbMonthID)[0];
	var cmbDay = $("#" + cmbDayID)[0];
	var hiddenValue = $("#" + hiddenValue)[0];
	
	var dtToday = new Date();
	var todayYear = dtToday.getFullYear();
	
	var counter = 0;
	var i;
	for (i=startYear; i <= todayYear; i++)
	{
		var tmpOption = new Option();
		tmpOption.text = i;
		tmpOption.value = i;
		
		cmbYear.options[counter++] = tmpOption;
	}
	
	counter = 0;
	for (i=1;i<=12; i++)
	{
		var tmpOption = new Option();
		__display = new String(i);
		if (__display.length == 1) __display = "0" + __display;
		tmpOption.text = __display;
		tmpOption.value = i;
		
		cmbMonth.options[counter++] = tmpOption;
	}

	var dtSelected = new Date();
	if(hiddenValue.value != "") dtSelected = new Date(hiddenValue.value);

	populateDateTimePicker(cmbYear, cmbMonth, cmbDay);
	
	$("#" + cmbYearID).change(function(){return changeDate(cmbYearID, cmbMonthID, cmbDayID)});
	$("#" + cmbMonthID).change(function(){return changeDate(cmbYearID, cmbMonthID, cmbDayID)});
	$("#" + cmbDayID).change(function(){return changeDate(cmbYearID, cmbMonthID, cmbDayID)});

	cmbYear.value 	= dtSelected.getFullYear();
	cmbMonth.value 	= dtSelected.getMonth() + 1;
	cmbDay.value 		= dtSelected.getDate();
}

function changeDate(cmbYearID, cmbMonthID, cmbDayID)
{
	var cmbYear = $("#" + cmbYearID)[0];
	var cmbMonth = $("#" + cmbMonthID)[0];
	var cmbDay = $("#" + cmbDayID)[0];
	populateDateTimePicker(cmbYear, cmbMonth, cmbDay);
}
function initDtPicker3(cmbYearID, cmbMonthID, cmbDayID)
{
	initDtPicker2(cmbYearID, cmbMonthID, cmbDayID, 1980)
}

function initDtPicker4(hiddenValue, cmbYearID, cmbMonthID, cmbDayID, nYearBefore)
{
	var dtToday = new Date();
	var todayYear = dtToday.getFullYear();
	var startYear = todayYear - nYearBefore;
	
	initDtPicker2(hiddenValue, cmbYearID, cmbMonthID, cmbDayID, startYear);
}

/*
	Untuk mengambil ukuran Minimum dan Maksimum
	berdasarkan ukuran lebar window
*/
function getMinMaxW(a,b)
{
	var nw="auto",w=document.documentElement.clientWidth;
	if(w>=b){nw=b+"px";}if(w<=a){nw=a+"px";}return nw;
}

/*
	Fungsi-fungsi untuk mendukung transaksi form dan grid
*/
function initGridStyle(class_name)
{
	$("." + class_name + " tr:nth-child(even)").addClass("wtcGrid_striped");
	$("." + class_name + " tr:nth-child(odd)").addClass("wtcGrid_normal");
}
function doNew(formName)
{
	$("#_ACTION")[0].value = "new";
	$("#" + formName).submit();
}
function doNewForm(formName)
{
	if(!confirm("Are you sure to discard the changes ? Click OK to discard or Cancel to continue editing.")) return;
	doNew(formName);
}
function doEdit(formName, primaryValue)
{
	$("#_ACTION")[0].value = "edit";
	$("#_BUFF")[0].value = primaryValue;
	$("#" + formName).submit();
}
function doDelete(formName, primaryValue, formAction)
{
	if(!confirm("Are you sure to delete this ? Click OK to continue delete or Cancel to discard.")) return false;
	
	$("#_ACTION")[0].value = "delete";
	$("#_BUFF")[0].value = primaryValue;
	$("#" + formName).attr("action", formAction);
	$("#" + formName).submit();
}
function doDeleteEdited(formName)
{
	doDelete(formName, $("#_BUFF")[0].value, "")
}
function doCancel(formName)
{
	if(confirm("Are you sure to discard the changes ? Click OK to discard or Cancel to continue editing."))
	{
		$("#_ACTION")[0].value = "";
		$("#" + formName).submit();
	}
}
function onChangeImage(comboID, controlID)
{
	comboID = "#" + comboID;
	is_upload = ($(comboID)[0].value=="");
	is_none = ($(comboID)[0].value=="-1");
	
	if(is_none || is_upload)
	{
		$("#" + controlID + "PanelPreview").hide();
		$("#" + controlID + "Panel").hide();
		
		if(is_upload)
		{$("#" + controlID + "Panel").show();}
		
		if(is_none)
		{$("#" + controlID + "Buffer")[0].value = "";}
		
	}else{
		$("#" + controlID + "Buffer")[0].value = $("#" + controlID + "Combo")[0].value;	
		img_src = $("#" + controlID + "Combo")[0].value;

		$("#" + controlID + "Panel").hide();
		$("#" + controlID + "PanelPreview").show();
		$("#" + controlID + "ImagePreview").attr("src", img_src);
		$("#" + controlID + "ImagePreview").attr("title", img_src);
		$("#" + controlID + "ImagePreview").attr("alt", img_src);
	}
}

function doClearImage(controlID)
{
	controlID = "#" + controlID;
	$(controlID + "Buffer")[0].value = "";
	$("#panelPreview")[0].innerHTML = "";
}

function tableContentOnCenterPage()
{
	rePos();
	window.onresize = function(){rePos();};
}
function rePos()
{
	varTop = ($(window).height()-$('#table_content').height())/2;
	if(varTop < 0) varTop = 0;
	
	varLeft = ($(window).width()-$('#table_content').width())/2;
	if(varLeft < 0) varLeft = 0;
	
	$('#table_content').css(
			{
				position:'absolute'
				, top:varTop
				, left:varLeft
			}
		);
}


//Disable right mouse click Script
//By Maximus (maximus@nsimail.com) w/ mods by DynamicDrive
//For full source code, visit http://www.dynamicdrive.com
var message="All Rights Reserved - www.wiltech-center.com";
function clickIE4()
{
	if (event.button==2)
	{
		alert(message);
		return false;
	}
}
function clickNS4(e)
{
	if (document.layers||document.getElementById&&!document.all)
	{
		if (e.which==2||e.which==3)
		{
			alert(message);
			return false;
		}
	}
}
if (document.layers)
{
	document.captureEvents(Event.MOUSEDOWN);
	document.onmousedown=clickNS4;
}
else if (document.all&&!document.getElementById)
{
	document.onmousedown=clickIE4;
}
//document.oncontextmenu=new Function("alert(message);return false")
// --> 
function noCTRL(e)
{
	var code = (document.all) ? event.keyCode:e.which;
	
	var msg = message;
	if (parseInt(code)==17) //CTRL
	{
		alert(msg);
		window.event.returnValue = false;
	}
} 
//document.onkeydown =  noCTRL;

function doBookmark()
{
	if (window.sidebar)
	{
		window.sidebar.addPanel(document.title,document.URL,"");
	} else if (document.all)
	{
		window.external.AddFavorite(document.URL, document.title);
	}
}

function isYMOnline(yahooId)
{
	$.ajax({
			url: "http://opi.yahoo.com/online?u=" + yahooId + "&m=a&t=1"
		, type: 'get'
		, async: false
		, dataType: 'html'
		, success: function(data)
			{
				ret = (data=="01")
			}
		, error: function(xhr)
			{
				ret = false;
			}
	});
	
	return ret;
} 
