var AppUtil = {
	Version: '0.1.0',
	FileName: '/js/appUtil.js',
	WebServicePath: '/webservice/'
};

var APP_ERROR_NUMBER = {
	REQUEST_ERROR_PARAMETER_REQUIRED_1 : 400,	
	DATA_ERROR_NOT_FOUND_1 : 404,
	DATA_ERROR_ALREADY_EXIST_2 : 450,	
	FORM_ERROR_REQUIRED_1 : 440,
	FORM_ERROR_INVALID_1 : 441,
	FORM_ERROR_REQUIRED_2 : 442,	
	TASKLET_ERROR_NOT_ACTIVE_2 : 480,	
	SYSTEM_ERROR_CLASS_NOT_FOUND_1 : 550,
	SYSTEM_ERROR_CLASS_NOT_INTERFACE_2 : 551,
	SYSTEM_ERROR_CLASS_NOT_INSTANTIATED_1 : 552,
	SYSTEM_ERROR_NOT_SUPPORT : 553,
	SYSTEM_ERROR_SQL : 570,
	SYSTEM_ERROR_INTERNAL : 500
};

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

function app_parseMyQLDate(date_str) {
	var current_dt = new Date();
	
	if (date_str.length == 10) {
		var year = parseInt(date_str.substring(0,4), 10);
		var month = parseInt(date_str.substring(5,7), 10) - 1;			
		var day = parseInt(date_str.substring(8,10), 10);	
		current_dt.setFullYear(year,month,day);
	} else {
		var year = parseInt(date_str.substring(0,4), 10);
		var month = parseInt(date_str.substring(5,7), 10) - 1;	
		var day = parseInt(date_str.substring(8,10), 10);	
		
		var hour = parseInt(date_str.substring(11,13), 10);	
		var minute = parseInt(date_str.substring(14,16), 10);	
		var second = parseInt(date_str.substring(17,19), 10);	
		current_dt.setFullYear(year,month,day);
		current_dt.setHours(hour, minute,second);
	}
	return current_dt;
}

function app_getCurrentPageName() {
	var c_path = location.pathname;
	pos = c_path.lastIndexOf('/');
	if (pos == -1) return c_path;
	return c_path.substring(pos + 1);
}


function app_getContextPath() {
	if (AppUtil.ContextPath) return AppUtil.ContextPath;
	var script_elems = dojo.query("script");

	if (script_elems) {
		for (var i = 0; i < script_elems.length; i++) {
			if (!script_elems[i].src) continue;				
			var c_script_src = script_elems[i].src;
			pos = c_script_src.lastIndexOf(AppUtil.FileName);
			if (pos != -1) {
				AppUtil.ContextPath = c_script_src.substring(0, pos);
				return AppUtil.ContextPath;
			}
		}
	}
	return null;
}

function app_getErrorMessage(error_num) {
			
	var error_message = app_getWebMessage("errormessage", String(error_num));
	if (error_message) {
		var argv = app_getErrorMessage.arguments;
		for (var i = 1; i < argv.length; i++) {
			error_message = error_message.replace(/%s/, argv[i]);
		}
	} else {
		error_message = "Error No " + error_num;
	}
	return error_message;
}

function app_formatMessage(message) {	
	var msg_argv = app_formatMessage.arguments;	
	for (var i = 1; i < msg_argv.length; i++) {		
		message = message.replace("{" + (i-1) + "}", msg_argv[i]);
	}
	return message;
}

/*private used*/ var _app_message_cache = {};

function app_getWebMessage(section, key) {

	if (!_app_message_cache[section]) {		

		var json_response = null;

		var d = dojo.xhrPost({
			url: app_getContextPath() + AppUtil.WebServicePath + "queryWebMessage.jsp",
			timeout : 5000,
			sync : true,
			handleAs : 'json', 
			content : {
				category : section
			},
			load : function(response, ioArgs) {
				json_response = response;
			},
			error : function(response, ioArgs) {
				alert(response);		
			}
		});
		

		if (json_response == null) return null;

		if (json_response.status != 0) {
			alert("Application Error : " + json_response.errormessage);
			return null;
		}

		var rs = json_response.items;
		if (!rs) return null;		
		_app_message_cache[section] = rs;		
	}
	return _app_message_cache[section][key];	
}

function app_getFullMonths() {
	return [ 
			"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21",
			"\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c",
			"\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21",
			"\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19",
			"\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21",
			"\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19",
			"\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21",
			"\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21",
			"\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19",
			"\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21", 
			"\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19",
			"\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"
		];	
}


function app_formatMySQLDate(date_str) {
	if (date_str == undefined || date_str == null || date_str == "" )
		return "";
		
	var c_date = app_parseMyQLDate(date_str);
	
	var fmt_date = String(c_date.getDate());
	switch(c_date.getMonth()) {
		case 0:
			fmt_date += " \u0e21.\u0e04."; break;
		case 1:
			fmt_date += " \u0e01.\u0e1e."; break;		
		case 2:
			fmt_date += " \u0e21\u0e35.\u0e04."; break;		
		case 3:
			fmt_date += " \u0e40\u0e21.\u0e22."; break;
		case 4:
			fmt_date += " \u0e1e.\u0e04."; break;		
		case 5:
			fmt_date += " \u0e21\u0e34.\u0e22."; break;		
		case 6:
			fmt_date += " \u0e01.\u0e04."; break;		
		case 7: 
			fmt_date += " \u0e2a.\u0e04."; break;		
		case 8:
			fmt_date += " \u0e01.\u0e22."; break;		
		case 9:
			fmt_date += " \u0e15.\u0e04."; break;		
		case 10:
			fmt_date += " \u0e1e.\u0e22."; break;		
		case 11:
			fmt_date += " \u0e18.\u0e04."; break;				
	}
	fmt_date += " " +  c_date.getFullYear();
	if (date_str.length > 10) {
		fmt_date += date_str.substring(10);// + " \u0e19.";
	}
	return fmt_date;
}

function createAjaxWaitingDialog() {
	dojo.require('dijit.Dialog');
	dojo.require('dijit.form.Button');
	
	var node = document.createElement("div");
	//node.setAttribute("id","waitDlg");
	
	dojo.body().appendChild(node);
	
	var dlg = new dijit.Dialog({ title: "test" }, node);	
	dojo.style(dlg.titleBar, 'display', 'none');	
		
	var div_center = document.createElement("div");	
	dojo.style(div_center, 'textAlign', 'center');	

	var div_border = document.createElement("div");		
	dojo.style(div_border, 'padding', '10px');		
		
	var div_running_image = document.createElement("span");
	dojo.addClass(div_running_image, 'img_running');
	div_running_image.innerHTML=' ';
	div_border.appendChild(div_running_image);
	
	var span_running_message = document.createElement("span");
	span_running_message.innerHTML = "<img src='./images/ajax-loader.gif' />&nbsp;" + app_getWebMessage("application", "waiting.message");
//	span_running_message.style.marginLeft = '20px';
	div_border.appendChild(span_running_message);
		
	div_center.appendChild(div_border);
	var hr_elem = document.createElement("br");
	div_center.appendChild(hr_elem);
	
	
	var btn = new dijit.form.Button(
		{ 
			label: app_getWebMessage("application", "cancel.message"), 
			iconClass: 'tb_close'
		}
	);		
	div_center.appendChild(btn.domNode);
	dlg.containerNode.appendChild(div_center);
	dojo.connect(btn, "onClick", function(){
		if (dlg.Deferred) {
			dlg.Deferred.cancel();
		}
		dlg.destroy();
	});	
	return dlg;
}

function CompareSpeed(speed1, speed2) {
	var speed_compare1=speed1;
	var speed_compare2=speed2;
	if(speed_compare1.indexOf("/") > 0) {
		speed_compare1=new String(speed_compare1.substr(0,speed_compare1.indexOf("/"))).trim();
	}
	if(speed_compare2.indexOf("/") > 0) {
		speed_compare2=new String(speed_compare2.substr(0,speed_compare2.indexOf("/"))).trim();
	}
	var speed_compare_int_1=0;
	var speed_compare_int_2=0;
	if(speed_compare1.substr(speed_compare1.length-1)=="M") {
		speed_compare1=speed_compare1.substr(0,speed_compare1.length-1)
		speed_compare_int_1=parseInt(speed_compare1)*1024;
	} else if((speed_compare1.length>3)&&(speed_compare1.substr(speed_compare1.length-4,4).toLowerCase()=="mbps")) {
		speed_compare1=speed_compare1.substr(0,speed_compare1.length-4)
		speed_compare_int_1=parseInt(speed_compare1)*1024;
	} else if(speed_compare1.substr(speed_compare1.length-1)=="K") {
		speed_compare1=speed_compare1.substr(0,speed_compare1.length-1)
		speed_compare_int_1=parseInt(speed_compare1);
	} else {
		speed_compare_int_1=parseInt(speed_compare1);
	}
	if(speed_compare2.substr(speed_compare2.length-1)=="M") {
		speed_compare2=speed_compare1.substr(0,speed_compare2.length-1)
		speed_compare_int_2=parseInt(speed_compare2)*1024;
	}else if((speed_compare2.length>3)&&(speed_compare2.substr(speed_compare2.length-4,4).toLowerCase()=="mbps")) {
		speed_compare2=speed_compare2.substr(0,speed_compare2.length-4)
		speed_compare_int_2=parseInt(speed_compare2)*1024;
	}else if(speed_compare2.substr(speed_compare2.length-1)=="K") {
		speed_compare2=speed_compare1.substr(0,speed_compare2.length-1)
		speed_compare_int_2=parseInt(speed_compare2);
	} else {
		speed_compare_int_2=parseInt(speed_compare2);
	}
	
	if(speed_compare_int_1 > speed_compare_int_2) {
		return -1;
	} else if (speed_compare_int_1==speed_compare_int_2) {
		return 0;
	} else {
		return 1;
	}
}

function convertToMbps(speed) {
	var speedOut=speed;
	if((speed==null)||(speed.length==0)) {
		return "";
	} else if(speedOut.indexOf("/") > 0) {
		var a=speedOut.indexOf("/");
		var speedDown=speedOut.substr(0,a);
		var speedUp=speedOut.substr(a+1);
		return convertToMbps(speedDown) + ' / ' + convertToMbps(speedUp);
	} else if(speedOut.substr(speedOut.length-3)=="Mbps") {
		return speedOut;
	} else if(speedOut.substr(speedOut.length-1)=="M") {
		return speedOut+'bps';
	} else if(speedOut.substr(speedOut.length-1)=="K") {
		speedOut=speedOut.substring(0,speedOut.length-1);
	}
	var speedInt=parseInt(speedOut);
	if (speedInt<1024) {
		return speedInt + ' Kbps';
	}
	var speedM = speedInt/1024;
	return speedM+' Mbps'
}

function convertTo02(telnum) {
	var telOut = telnum
	if((telOut==null)||(telOut.length==0)) {
		return "";
	} else if((telOut.length==9)&&(telOut.substring(0,2)=='02')) {
		return telOut;
	} else if((telOut.length=12)&&(telOut.substring(0,5)=='00000')) {
		return "02" + telOut.substring(5);
	} else {
		return telOut;
	}
}

function printDiv(prtContent)
{
    var WinPrint = window.open('','','left=0,top=0,width=400,height=400,toolbar=0,scrollbars=0,status=0');
    WinPrint.document.write(prtContent.innerHTML);
    WinPrint.document.close();
    WinPrint.focus();
    WinPrint.print();
    WinPrint.close();
}

function verifyEmail(emailAddress){
var status = false;     
var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
     if (emailAddress.search(emailRegEx) != -1) {
          status = true;
     }
     return status;
}

function verifyCustId(custId) {
var custIdRegEx = /^[0-9]{13}$/;
    if (custId.search(custIdRegEx) != -1) {
		for(i=0, sum=0; i < 12; i++) {
			sum += parseFloat(custId.charAt(i))*(13-i); 
		}
		if((11-sum%11)%10!=parseFloat(custId.charAt(12))) {
			return false; 
		}
		return true;
    } else {
		return false;
	}
}

function removeAllChild(cell) {
	if ( cell.hasChildNodes() )
	{
		while ( cell.childNodes.length >= 1 )
		{
			cell.removeChild( cell.firstChild );       
		} 
	}
}

function ifSignedIn()
{
    if(gSignedIn) {
		return true;
	}
 	var ajaxResponse;
	
	dojo.xhrPost({
		url: "./webservice/checkIfSignIn.jsp",
		timeout : 30000,
		sync : true,
		handleAs : 'json', 		
		load : function(response, ioArgs) {
			ajaxResponse = response;
		},
		error : function(response, ioArgs) {
			ajaxResponse = response;
		}
	});		
	if (ajaxResponse instanceof Error) 
		throw ajaxResponse.message;
	gSignedIn = ajaxResponse.Result;
	return (ajaxResponse.Result);
}
function post_to_url(path, params, method) {
    method = method || "post"; // Set method to post by default, if not specified.

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);

        form.appendChild(hiddenField);
    }

    document.body.appendChild(form);    // Not entirely sure if this is necessary
    form.submit();
}

function getGeoCodeCountry(components) {
	if(components) {
		for(var i=0;i<components.length;i++) {
			if(components[i].types[0]=='country') {
				return components[i].short_name
			}
		}
	}
	return "";
}

function getDataArray(dataMessage) {
	var a=dataMessage.indexOf('(');
	var b=dataMessage.indexOf(')');
	var strData = dataMessage.substring(a+1,b);
	return strData.split(',');
}

function customDialog(className, contentHtml) {
	var me = this;
	me.overlay_container_ = document.createElement("div");
	me.dialog_ = document.createElement("div");
	me.overlay_container_.className = "commonOverlay";
	me.dialog_.className = className;
	me.dialog_.innerHTML = contentHtml;
}	
	customDialog.prototype.show = function() {
		document.body.appendChild(this.dialog_);
		document.body.appendChild(this.overlay_container_);
    }

	customDialog.prototype.hide = function() {
		document.body.removeChild(this.dialog_);
		document.body.removeChild(this.overlay_container_);
	}
	
	customDialog.prototype.close = function() {
		this.hide();
		this.dialog_ = null;
		this.overlay_container_=null;
	}
	
function ClearOptionsFast(id)
{
	var selectObj = document.getElementById(id);
	var selectParentNode = selectObj.parentNode;
	var newSelectObj = selectObj.cloneNode(false); // Make a shallow copy
	selectParentNode.replaceChild(newSelectObj, selectObj);
	return newSelectObj;
}


function openPopup(popup_width,popup_height,popup_url,var_name){
 var windowHeight = popup_height;
 var windowWidth = popup_width;
 var windowName = var_name;
 var windowUri = popup_url;
 var newwindow;

 var centerWidth = (window.screen.width - windowWidth) / 2;
 var centerHeight = (window.screen.height - windowHeight) / 2;

if ( !newwindow || newwindow.closed ){
 newwindow = window.open(windowUri, windowName,'addressbar=0,menubar=0,location=0,status=0,scrollbars=yes,resizable=0,width=' + windowWidth + ',height=' + windowHeight +',left=' + centerWidth + ',top=' + centerHeight);
}
 else if ( newwindow && ! newwindow.closed ){
 newwindow.location = windowUri;
 // newwindow.focus();
 }
} 

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function openPopup(url, iw, ih){
window.open(url, "myWindow", "status = 1, height="+ih+", width="+iw+", resizable = 0" );
} 
