dojo.require("dojo.cookie");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");

var logging = true;

function get_rsp_code(rsp) {
	if (!rsp || !rsp.rc)
		return "?";
	var n = rsp.rc.indexOf(" ");
	if (n == -1)
		return rsp.rc;
	return rsp.rc.substring(0,n);
}

function get_rsp_msg(rsp) {
	if (!rsp || !rsp.rc)
		return "?";
	var n = rsp.rc.indexOf(" ");
	if (n == -1)
		return rsp.rc;
	return rsp.rc.substring(n+1);
}

function log(pamArr){
	if(logging === true && (pamArr.rc!="ok"))
		dojo.xhrPost({
			url: "/hc/log",
			content:pamArr,
			load: function () {
				console.dir(pamArr);
			}
		});
}

function refresh_msg_cnt() {
	dojo.xhrPost({
		url: "/hc/getNumNewMsgs.action",
		handleAs: "json",
		preventCache: true,
		load: function (rsp) {
			log({'action':'getNumNewMsgs','rc':rsp.rc});
			if (!check_rsp(rsp))
				return;
			if (!rsp.rc || rsp.rc != "ok") {
				$('#msgs_holder').html("??");
			} else {
				messages = rsp.cnt;
				var messages_str = messages + " Messages";
				if(messages == 1){
					messages_str = "1 Message";
				}
				name = decodeURIComponent(dojo.cookie('first_name'));
				$('#msgs_holder').html(messages_str);
			}
		}
	});
}

function refresh_user_info(fun) {
	dojo.xhrPost({
		url: "/hc/getUserInfo.action",
		handleAs: "json",
		preventCache: true,
		load: function(rsp) {
			log({'action':'getUserInfo','rc':rsp.rc});
			if (!check_rsp(rsp))
				return;
			if (!rsp.rc || rsp.rc != "ok") {
				$('#name_holder').html("??");
			} else {
				$('#name_holder').html(rsp.fn);
				dojo.cookie("plan",rsp.plan.name);
				refresh_msg_cnt();
				if(fun)
					fun(rsp);
			}
		}
	});		
}


function strip(html)
{
   var tmp = document.createElement("DIV");
   tmp.innerHTML = html;
   return tmp.textContent||tmp.innerText;
}


function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function goto_homepage(){
	window.location = "/";
}

function pausecomp(millis){
	var date = new Date();
	var curDate = null;

	do { curDate = new Date(); }
	while(curDate-date < millis);
} 

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}


//show dialog with title
function tdlg(titleText, msgText, func, withcancel) {
	var dlg = new dijit.Dialog(); 
	dojo.style(dlg.closeButtonNode, "visibility", "hidden"); 
	var win = dce("div");
	win.style.width = "300px";
	
	var center = dce("center");
	if (titleText && titleText != "") {
		dlg.attr("title",titleText);
		//var title = dce("div");
		//title.style.fontWeight = "bolder";
		//title.style.fontSize = "120%";
		//title.innerHTML = titleText;
		//center.appendChild(title);
		//win.appendChild(center);
	}	
	
	if (dojo.isArray(msgText)) {
		for (var i = 0; i < msgText.length; i++) {
			var msg = dce("div");
			msg.style.padding = "10px 30px 10px 30px";
			msg.innerHTML = msgText[i];
			win.appendChild(msg);
		}
	} else {
		var msg = dce("div");
		msg.style.padding = "10px 30px 10px 30px";
		msg.innerHTML = msgText;
		win.appendChild(msg);
	}
	
	var btnCancel, handleOK, handleCancel;
	if (withcancel) {
		btnCancel = new dijit.form.Button({label: "Cancel"}); 
		handleCancel = dojo.connect(btnCancel, "onClick", function() {
			dlg.hide(); 
			dojo.disconnect(handleOK);
			dojo.disconnect(handleCancel); 
			dlg.destroy();
		});
	}
	
	var btnOK = new dijit.form.Button({label: "OK"}); 
	handleOK = dojo.connect(btnOK, "onClick", function() {
		dlg.hide(); 
		dojo.disconnect(handleOK);
		if (withcancel)
			dojo.disconnect(handleCancel);
		if (func)
			func();
		dlg.destroy();
	});
	var center2 = dce("center");
	if (withcancel)
		center2.appendChild(btnCancel.domNode);
	center2.appendChild(btnOK.domNode);
	win.appendChild(center2);
	dlg.setContent(win); 
	dlg.show(); 
	
	dlg._onKey = function(evt){
		if (evt.keyCode == dojo.keys.ESCAPE) {
			if (withcancel) {
				btnCancel.onClick();
			} else {
				btnOK.onClick();
			}
		} else if (evt.keyCode == dojo.keys.ENTER){
			btnOK.onClick();
		}
	};
}

function has_type(types, type) {
	if (!types)
		return false;
		for (var i = 0; i < types.length; i++) {
			if (types[i] == type)
				return true;
		}
		return false;
}

function logout(){
	if (!dojo.cookie("hcsid")) {
		document.location = "/login";
		return;
	}
	dojo.xhrPost({
		url: "/hc/logout.action",
		handleAs: "json",
		error: function(err) {
			clr_sid(); 
			document.location = "/login";			
		},
		load: function(rsp) { 
			clr_sid(); 
			document.location = "/login";			
		}
	});
}

function check_rsp(response) {
	update_sid(response);
	if (response && response.rc) {
		if (response.rc == "errhcexp" || response.rc == "errhctok") {
			clr_sid();
			show_expired();
			return false;
		}
	}
	return true;
}

function set_sid(sid) {
	dojo.cookie("hcsid", sid, {path: '/'});
}

function update_sid(rsp){
	if(rsp['sid'])
		set_sid(rsp['sid']);
	return get_sid();
}

function get_sid() {
	return dojo.cookie('hcsid');
}

function clr_sid() {
	dojo.cookie("hcsid", null, {expires: -1}); 
}

function show_expired(){
	//dijit.byId('timeoutDialog').show();
	// expiredDialog = new dijit.Dialog({
	// 	title: "Connection Timeout",
	// 	content: "<center><div>You have been logged out of the GotoCamera System<br>due to a long period of inactivity.</div>"+
	// 	"<button style=\"margin-top:10px;\" dojoType=\"dijit.form.Button\" onclick=\"window.location='/home'\">Take me to the Login Page</button></center>"
	// });
	// dojo.style(expiredDialog.closeButtonNode, "visibility", "hidden"); 
	// expiredDialog.show();
	if (String.indexOf(window.location, "access_denied") == -1) {
		window.location = "/access_denied?err=2";
	}
}

function check_sid_ok() {
	if (!dojo.cookie("hcsid")){
		show_expired();
		return false;
	}
	
	var valid = dojo.xhrGet({
		url: "/hc/verifySid.action",
		handleAs: "json",
		preventCache: true,
		load: function(response) { 
			log({'action':'verifySid','rc':response.rc});
			if (response.rc && response.rc == "ok") {
				if (response.sid)
					set_sid(response.sid);
				return true;
			} else {
				if (response.rc == "errhctok" || response.rc == "errhcexp"){
					clr_sid();
					show_expired();
				}
				return false;
			}
		}
	});
	return valid;
}


function rc_msg(rc) {
	if (!rc)
		return "undefined";
	if (rc == "errto")
		return "Request timeout";
	else if (rc == "errsys")
		return "System error";
	else if (rc == "errexp")
		return "Session expired";
	else if (rc == "errtok")
		return "Invalid session";
	else if (rc == "errpm")
		return "Invalid parameter";
	else if (rc == "errno")
		return "Object not found";
	return rc;
}

function dce(n) {
	return document.createElement(n);
}

function select_option(id, value) {
	var opts = dojo.byId(id);
	for (i = 0; i < opts.length; i++) {
		if (opts.options[i].value == value) {
			opts.selectedIndex = i;
			break;
		}
	}
}

function fmt_num(n) {
	s = "" + n;
	if (s.length < 3)
		return s;
	rc = s.substring(s.length-3);
	s = s.substring(0, s.length-3);
	while (s.length > 3) {
		rc = s.substring(s.length-3) + "," + rc;
		s = s.substring(0, s.length-3);
	}
	if (s.length > 0)
		rc = s + "," + rc;
	return rc;
}

function clr_sid() {
	dojo.cookie("hcsid", null, {expires: -1}); 
}
 
function check_sid_err(errpg, func) {
	if (!dojo.cookie("hcsid")) {
		tdlg("Error", "You don't have a valid HomeCamera session.", function() {
			document.location = errpg;
		});
		return;
	}
	var c_hcsid = dojo.cookie("hcsid")
	dojo.xhrPost({
		url: "/hc/verifySid.action",
		content: {
			hcsid: c_hcsid
		},
		handleAs: "json",
		preventCache: true,
		error: function(err) {
			log({'action':'verifySid','c_hcsid':c_hcsid,'err':err.message});
			tdlg("Error", "Failed to verify your HomeCamera session: " + err.message, function() {
				document.location = errpg; 
			});
		},
		load: function(response) {
			log({'action':'verifySid','c_hcsid':c_hcsid,'rc':response.rc});
			if (!check_rsp(response))
				return;
			if (!response.rc || response.rc != "ok") {
				tdlg("Error", "Your HomeCamera session is invalid: " + response.rc, function() {
					document.location = errpg; 
				});
				return;
			} 
			if (func)
				func();
		}
	});			
}

function refresh_usage() {
	dojo.xhrPost({
		url: "/hc/getUsageInfo.action",
		handleAs: "json",
		preventCache: true,
		error: function (err) {
			log({'action':'getUsageInfo','err':err.message});
			dojo.byId("tot_usg").innerHTML = "??";
		},
		load: function(rsp) {
			log({'action':'getUsageInfo','rc':rsp.rc});
			if (!check_rsp(rsp))
				return;
			if (!rsp.rc || rsp.rc != "ok" || rsp.au == null || rsp.aq == null) {
				dojo.byId("tot_usg").innerHTML = "";
				dojo.byId("av_spc").innerHTML = "";
				return;
			}
			dojo.byId("tot_usg").innerHTML = fmt_num(rsp.au);
			dojo.byId("av_spc").innerHTML = fmt_num(rsp.aq - rsp.au);

		}
	});	
}

function is_iphone() {
	return navigator.userAgent && navigator.userAgent.toLowerCase().indexOf('iphone') != -1;
}

function is_ipad() {
	return navigator.userAgent && navigator.userAgent.toLowerCase().indexOf('ipad') != -1;
}

