

// For now enable cross-site scripting in jQuery
jQuery.support.cors = true;

//      <ul id="superfishmenu" class="sf-menu"> \

var monurlbase = '/_monp'; // Production
var ticketurlbase = monurlbase+'/95';
var eqticketurlbase = monurlbase+'/36';
var chkticketurlbase = monurlbase+'/26';
var monaccticketurlbase = monurlbase+'/26';

var gnotif = null;
var pgoverlay = null;

var notif_templates = ' \
		<div id="default"> \
			<h1>#{title}</h1> \
			<p>#{text}</p> \
		</div> \
\
		<div id="sticky"> \
			<a class="ui-notify-close ui-notify-cross" href="#">x</a> \
			<h1>#{title}</h1> \
			<p>#{text}</p> \
		</div> \
\
		<div id="error" style="padding:10px; background-color : #ffaaaa; -moz-box-shadow:0 0 6px #980000; -webkit-box-shadow:0 0 6px #980000; box-shadow:0 0 6px #980000;"> \
			<a class="ui-notify-close" href="#"><span class="ui-icon ui-icon-close" style="float:right"></span></a> \
			<span style="float:left; margin:2px 5px 0 0;" class="ui-icon ui-icon-alert"></span> \
			<h1>#{title}</h1> \
			<p>#{text}</p> \
			<p style="text-align:center"><a class="ui-notify-close" href="#">Close</a></p> \
		</div> \
\
		<div id="success" style="padding:10px; background-color : #559955; -moz-box-shadow:0 0 6px #009800; -webkit-box-shadow:0 0 6px #009800; box-shadow:0 0 6px #009800;"> \
			<a class="ui-notify-close" href="#"><span class="ui-icon ui-icon-close" style="float:right"></span></a> \
			<span style="float:left; margin:2px 5px 0 0;" class="ui-icon ui-icon-circle-check"></span> \
			<h1>#{title}</h1> \
			<p>#{text}</p> \
			<p style="text-align:center"><a class="ui-notify-close" href="#">Close</a></p> \
		</div> \
\
		<div id="info" style="padding:10px; background-color : #aaaaff; -moz-box-shadow:0 0 6px #000098; -webkit-box-shadow:0 0 6px #000098; box-shadow:0 0 6px #000098;"> \
			<a class="ui-notify-close" href="#"><span class="ui-icon ui-icon-close" style="float:right"></span></a> \
			<span style="float:left; margin:2px 5px 0 0;" class="ui-icon ui-icon-circle-check"></span> \
			<h1>#{title}</h1> \
			<p>#{text}</p> \
			<p style="text-align:center"><a class="ui-notify-close" href="#">Close</a></p> \
		</div> \
\
		<div id="themeroller" class="ui-state-error" style="padding:10px; -moz-box-shadow:0 0 6px #980000; -webkit-box-shadow:0 0 6px #980000; box-shadow:0 0 6px #980000;"> \
			<a class="ui-notify-close" href="#"><span class="ui-icon ui-icon-close" style="float:right"></span></a> \
			<span style="float:left; margin:2px 5px 0 0;" class="ui-icon ui-icon-alert"></span> \
			<h1>#{title}</h1> \
			<p>#{text}</p> \
			<p style="text-align:center"><a class="ui-notify-close" href="#">Close</a></p> \
		</div> \
\
		<div id="withIcon"> \
			<a class="ui-notify-close ui-notify-cross" href="#">x</a> \
			<div style="float:left;margin:0 10px 0 0"><img src="#{icon}" alt="warning"/></div> \
			<h1>#{title}</h1> \
			<p>#{text}</p> \
		</div> \
\
		<div id="buttons"> \
			<h1>#{title}</h1> \
			<p>#{text}</p> \
			<p style="margin-top:10px;text-align:center"> \
				<input type="button" class="confirm" value="Close Dialog"/> \
			</p> \
		</div> \
';

var tablemenu_eq_1 = ' \
	<li><a href="javascript:void(0);" onclick="javascript:eqload(\'a\')">Refresh</a></li> \
';

var tablemenu_chk_1 = ' \
	<li><a href="javascript:void(0);" onclick="javascript:chkload(\'a\')">Refresh</a></li> \
';


var tickettablemenu_generic = ' \
	<li><a href="javascript:void(0);">Selection</a> \
          <ul> \
    	    <li><a href="javascript:void(0);">Do operation</a> \
            <ul> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Annotate\')">Annotate</a></li> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Acknowledge\')">Acknowledge</a></li> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Close\')">Close</a></li> \
	    </ul> \
	    </li> \
            <li><a href="javascript:void(0);" onclick="javascript:selclear()">Clear selection</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:selall()">Select all visible</a></li> \
	  </ul> \
	</li> \
	<li><a href="javascript:void(0);" onclick="javascript:ticketload()">Refresh</a></li> \
';

var tickettablemenu_notok = ' \
	<li><a href="javascript:void(0);">Selection</a> \
          <ul> \
    	    <li><a href="javascript:void(0);">Do operation</a> \
            <ul> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Annotate\')">Annotate</a></li> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Acknowledge\')">Acknowledge</a></li> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Close\')">Close</a></li> \
	    </ul> \
	    </li> \
            <li><a href="javascript:void(0);" onclick="javascript:selclear()">Clear selection</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:selall()">Select all visible</a></li> \
	  </ul> \
	</li> \
	<li><a href="javascript:void(0);" onclick="javascript:ticketload(\'nc\')">Refresh</a></li> \
';

var tickettablemenu_1 = ' \
	<li><a href="javascript:void(0);">Selection</a> \
          <ul> \
    	    <li><a href="javascript:void(0);">Do operation</a> \
            <ul> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Annotate\')">Annotate</a></li> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Acknowledge\')">Acknowledge</a></li> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Close\')">Close</a></li> \
	    </ul> \
	    </li> \
            <li><a href="javascript:void(0);" onclick="javascript:selclear()">Clear selection</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:selall()">Select all visible</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:shsel()">Show selected</a></li> \
	  </ul> \
	</li> \
	<li><a href="javascript:void(0);">Tickets</a> \
          <ul> \
            <li><a href="javascript:void(0);" onclick="javascript:ticketload(\'a\')">List all</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:ticketload(\'nc\')">List non-closed</a></li> \
	  </ul> \
	</li> \
';


var tickettablemenudev = ' \
	<li><a href="javascript:void(0);">Selection</a> \
          <ul> \
    	    <li><a href="javascript:void(0);">Do operation</a> \
            <ul> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Annotate\')">Annotate</a></li> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Acknowledge\')">Acknowledge</a></li> \
              <li><a href="javascript:void(0);" onclick="javascript:ticket_op_form(\'Close\')">Close</a></li> \
	    </ul> \
	    </li> \
            <li><a href="javascript:void(0);" onclick="javascript:selclear()">Clear selection</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:selall()">Select all visible</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:shsel()">Show selected</a></li> \
	  </ul> \
	</li> \
	<li><a href="javascript:void(0);">Tickets</a> \
          <ul> \
            <li><a href="javascript:void(0);" onclick="javascript:ticketload(\'a\')">List all</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:ticketload(\'nc\')">List non-closed</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:selall()">Select all visible</a></li> \
	  </ul> \
	</li> \
	<li><a href="javascript:void(0);">Tests</a> \
          <ul> \
            <li><a href="javascript:void(0);" onclick="javascript:selall()">Select all visible</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:shsel()">Show selected</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:updatetstatus(\'inf\',\'Info msg\')">Status info</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:updatetstatus(\'ok\',\'Good msg\')">Status ok</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:updatetstatus(\'wrn\',\'Warning msg\')">Status wrn</a></li> \
            <li><a href="javascript:void(0);" onclick="javascript:updatetstatus(\'err\',\'Error msg\')">Status err</a></li> \
	  </ul> \
	</li> \
';

var testtickettabledata = [];
var tickettable = [];
var tickettablefilter = 'a';
var tickettableautorefresh = 0;

function sh_obj(o) {
    if(!o) return;
    var str=""; //variable which will hold property values
    for(prop in o) {
	str+=prop + " value :"+ o[prop]+"\n";//Concate prop and its value from object
    }
    alert(str); //Show all properties and its value
    if (o.ctrlKey) alert('Ctrl down');
    if (o.altKey) alert('Alt down');
    if (o.shiftKey==1)alert("The shift key was pressed!");
};

function pgoverlayhtml( template, html ) {
    if(pgoverlay) {
	pgoverlay.html(html);
	return 0;
    }
    return null;
}

function gnotify( template, vars, opts ) {
    if(gnotif) return gnotif.notify("create", template, vars, opts);
    return null;
}

function popup1($t) {
    var d = $('<div></div>');
    d.dialog();
    d.dialog('option', 'title', 'Notice');
    d.html($t);
    d.dialog('open');
    // prevent the default action, e.g., following a link
    return false;
};

function ticket_op_form(m,refreshmode) {
    this.d = new Array;

    var h = ' \
<div id="pgoverlaymsg" class="pgoverlaymsg"> \
  <h3>Progress</h3> \
  <span id="pgoverlaymsgtxt">Processing</span> \
  <div id="pgoverlaypgbar" class="pgoverlaypgbar"></div> \
</div> \
';

    d.dia = $('<div></div>');
    d.f = $('<form action="javascript:void();"></form>');
    d.cnt = 0;
    d.ididx = 0;
    d.successcnt = 0;
    d.failurecnt = 0;
    d.ids = [];
    if(refreshmode) d.refreshmode = refreshmode;

    var a = tickettable.fnGetNodes();

    var txt = "";

    for ( var i=0 ; i<a.length ; i++ ) {
    	if ( $(a[i]).hasClass('row_selected') ) {
	    var data = tickettable.fnGetData(a[i]);
    	    d.ids.push(data[0]);
	    d.cnt++;
    	}
    }

    if(d.cnt < 1) {
	txt = "Need to select at least one ticket.";
    }
    else {
	txt += ' Enter any additional information in the box below.<p> \
<textarea rows=10 cols=70 name="note_info" class="required"></textarea><p> \
<input class="submit" type="submit" value="'+m+' ticket(s)" /> \
';
    }

    d.f.html(txt);

    d.dia.dialog({ height: 525, width: 650, 'title': m+" "+d.cnt+" ticket(s)" });
    d.dia.append(d.f);
    d.dia.dialog('open');

    d.f.validate({
    	debug: false,
    	submitHandler: function(form) {
	    function handle_success(d) {
		d.successcnt++;
		var total;
		var pct;
		total = d.successcnt + d.failurecnt;
		pct = total/d.ids.length * 100;
		$("#pgoverlaymsgtxt").html("Working... Processed "+total+" out of "+d.ids.length);
		$("#pgoverlaypgbar").progressbar({ "value": pct });
		if(total >= d.ids.length) {
		    d.dia.dialog('close');
		    selclear();
		    updatetstatus("ok",m+" was successful");
		    ticketload();
		    pgoverlay.hide("explode", {}, 1000);
		}
	    }

	    d.ididx = 0;
	    d.successcnt = 0;
	    d.failurecnt = 0;
	    pgoverlayhtml("default",h);
	    $("#pgoverlaypgbar").progressbar({ "value": 0 });
	    $("#pgoverlaymsgtxt").html("Working... Processed "+0+" out of "+d.ids.length);
	    pgoverlay.show();

	    while(d.ididx < d.ids.length) {
		var f2 = $('<form action="javascript:void();"></form>');
		var f2txt = "<input type=\"hidden\" name=\"op\" value=\""+m+"\"/> \n";
		f2txt += "<input type=hidden name=idselected[] value=\""+d.ids[d.ididx]+"\">\n";
		f2txt += "<textarea name='note_info'>"+d.f[0].note_info.value+"</textarea>\n";
		f2.html(f2txt);

    		// do other stuff for a valid form
		$.ajax({
		    url: '/_monp/57/401',
		    type: 'POST',
		    data: f2.serialize(),
		    success: function(data) {handle_success(d);},
		    error:function (xhr, ajaxOptions, thrownError){d.failurecnt++;console.log("err",xhr.status+": "+xhr.statusText);}
		});

		d.ididx++;
    	    }
	}
    });

    // prevent the default action, e.g., following a link
    return false;
};

function updatetstatus(t,m) {
    gnc = "default";

    switch(t) {
    case "ok":
	c = "tstatusok";
	gnc = "success";
	break;
    case "wrn":
	c = "tstatuswrn";
	gnc = "error";
	break;
    case "err":
	c = "tstatuserr";
	gnc = "error";
	break;
    default:
	c = "tstatusinf";
	break;
    }

    $("div.tstatus").html("<div class='tstatustxt "+c+"'>"+m+"</div>");
    $("div.tstatus").fadeIn(500).delay(5000).fadeOut(1000);

    gnotify(gnc, {text: m});

    return 0;
}

function shsel() {
    // var a = TableTools.fnGetInstance( 'tickettable' ).fnGetSelected();
    // for ( var i=0 ; i<a.length ; i++ ) {
    // 	if ( $(a[i]).hasClass('row_selected') ) {
    // 	    console.log(a[i][1]);
    // 	    //aReturn.push( aTrs[i] );
    // 	}
    // }

    var a = tickettable.fnGetNodes();
    for ( var i=0 ; i<a.length ; i++ ) {
    	if ( $(a[i]).hasClass('row_selected') ) {
    	    console.log(a[i].children[0].innerHTML);
    	    //aReturn.push( aTrs[i] );
    	}
    }
    return 0;
}

function selall() {
    var a = tickettable.fnGetDisplayNodes();
    // var a = tickettable.fnGetNodes();
    for ( var i=0 ; i<a.length ; i++ ) {
    	if (! $(a[i]).hasClass('row_selected') ) {
	    $(a[i]).addClass('row_selected');
	}
    }

    return 0;
}

function selclear() {
    var a = tickettable.fnGetNodes();
    for ( var i=0 ; i<a.length ; i++ ) {
    	if ( $(a[i]).hasClass('row_selected') ) {
	    $(a[i]).removeClass('row_selected');
	}
    }

    return 0;
}

function updatetind(m,s,t) {
    if($("div.tind")) $("div.tind").html(t);

    return 0;
}

function selectagentmap(event,chkid) {
    this.d = new Array;

    $('#chagentmapdiv').remove();

    d.dia = $('<div id="chagentmapdiv"></div>');
    d.f = $('<form action="javascript:void(0);">Loading data...</form>');
    d.chkid = chkid;
    d.currids = [];

    d.availdata = null;
    d.currdata = null;

    d.curr = $('<div style="display:inline-block;float:left"></div>');
    d.avail = $('<div style="display:inline-block;margin: 0px 0px 0px 60px"></div>');

    d.dia.dialog( {
	'title': " Change check agent(s) map",
	width: 600,
        height: 600,
	modal: true,
        position: [event.clientX,event.clientY]
    });

    d.dia.append(d.f);
    d.dia.dialog('open');

    function submitForm() {
	$.ajax({url : monurlbase+'/57/703',
		type: 'POST',
		data: d.f.serialize(),
		dataType : 'json',
		success : function(response) {
    		    gnotify("success", {text: "Check agent(s) updated successfully"});
		    $('#chagentmapdiv').remove();
		},
		error: function(req,status,error) {ajaxerror(req,status,error);}
	       });
    }

    function dispUpdate() {
	if(d.availdata && d.currdata) {
    	    t = "<H4>Current agents</H4>\n<ul>";
    	    for ( var i=0 ; i<d.currdata.length ; i++ ) {
    		t += "<li>"+d.currdata[i]["name"]+"</li>\n";
		d.currids.push(d.currdata[i]["id"]);
    	    };
    	    t += "</ul>";
    	    d.curr.html(t);


	    d.avail.html("<H4>Select available agents</H4>\n");

	    d.availselect = $('<select id="chagentmapsel" name="chagentmapsel[]" multiple="multiple"></select>');
	    t = "";
	    for ( var i=0 ; i<d.availdata.length ; i++ ) {
		t += "<option value='"+d.availdata[i]["id"]+"'";
		if(d.currids.indexOf(d.availdata[i]["id"]) > -1) t += " selected";
		t += ">"+d.availdata[i]["name"]+"</option>\n";
	    };
	    d.availselect.html(t);

    	    d.f.html("<input type=\"hidden\" name=\"chkid[]\" value=\""+chkid+"\"/> \n");
    	    //d.f.append("<input type=\"hidden\" name=\"chkid[]\" value=\""+(chkid+100000)+"\"/> \n");
    	    d.f.append(d.curr);
    	    d.f.append(d.avail);
    	    d.avail.append(d.availselect);

	    d.availselect.multiselect({
		noneSelectedText: 'Select at least 1',
		minWidth: 315,
		selectedList: 8,
		autoOpen: true
	    });

	    b = $("<input type='button' value='Submit' />");

	    b.click(function() {
		submitForm();
	    });

	    d.curr.append(b);
    	}
	else if(d.availdata) d.f.html('Loading current agents data...');
	else if(d.currdata) d.f.html('Loading available agents data...');
	else d.f.html('Loading data...');
    }

    function ajaxerror(req,status,error) {
	var jr = jQuery.parseJSON(req.responseText);
	if(jr && jr["msg"]) {
	    t = jr["msg"];
	}
	else {
    	    switch(req.status) {
    	    case 401:
    		t = "Unauthorized, current session probably timed out.";
    		break;
    	    case 403:
    		t = "This resource is forbidden within this session access rights.";
    		break;
    	    case 503:
    		t = "Service is temporarily unavailable.";
    		break;
    	    default:
    		t = req.status+": "+error;
    		break;
    	    }
	}

    	gnotify("error", {text: t});
    }

    $.ajax({url : monurlbase+'/57/702',
    	    data : {
    		'chkid' : chkid
    	    },
            method: 'GET',
    	    dataType : 'json',
    	    success : function(response) {
		d.currdata = response;
		dispUpdate();
   	    },
	    error: function(req,status,error) {ajaxerror(req,status,error);}
    	   });

    $.ajax({url : monurlbase+'/57/701',
	    data : {
		'chkid' : chkid
	    },
            method: 'GET',
	    dataType : 'json',
	    success : function(response) {
		d.availdata = response;
		dispUpdate();
	    },
	    error: function(req,status,error) {ajaxerror(req,status,error);}
	   });

    event.preventDefault();
}

function eqload(f) {
    //$rdata["pager"]["offset"] = 0;
    //$rdata["pager"]["limit"] = $ggspaginator["curr"]["limit"];

    updatetind(1,0,"Loading...");

    $.ajax({url : monurlbase+'/36/0/131',
	    data : {
		'f' : f
	    },
            method: 'GET',
	    dataType : 'json',
	    success : function(response) {
		//console.log(response);
		var cnt;

		updatetind(1,0,"Processing...");

		testeqtabledata = [];

		$.each(response["eq"],function (id,eq) {
		    name = "<a href='"+monurlbase+"/36/"+eq.id+"'>"+eq.name+"</a>";
		    testeqtabledata.push([eq.id,name,eq.type,eq.opercode]);
		});
		eqtable.fnClearTable();
		eqtable.fnAddData(testeqtabledata);
		eqtable.fnAdjustColumnSizing();
		
		var a = eqtable.fnGetNodes();
		for ( var i=0 ; i<a.length ; i++ ) {
		    $(a[i]).click( function() {
			    if ( $(this).hasClass('row_selected') ) $(this).removeClass('row_selected');
			    else $(this).addClass('row_selected');
			} );
		}

		updatetind(1,0,"");
	    },
	    error: function(req,status,error) {
		updatetind(1,0,"Error");

		switch(req.status) {
		case 401: // Unauthorized
		    alert("Unauthorized, current session probably timed out.");
		    break;
		case 403: // Forbidden
		    alert("This resource is forbidden within this session access rights.");
		    break;
		case 503: // Service Unavailable (normally temporary in nature)
		    alert("Service is temporarily unavailable.");
		    break;
		default:
		    alert(req.status+": "+error);
		    break;
		}
	    }
	   });
}

function chkload(f) {
    //$rdata["pager"]["offset"] = 0;
    //$rdata["pager"]["limit"] = $ggspaginator["curr"]["limit"];

    updatetind(1,0,"Loading...");

    $.ajax({url : monurlbase+'/26/0/131',
	    data : {
		'f' : f
	    },
            method: 'GET',
	    dataType : 'json',
	    success : function(response) {
		//console.log(response);
		var cnt;

		updatetind(1,0,"Processing...");

		testchktabledata = [];

		$.each(response["chk"],function (id,chk) {
		    t = chk.status.resulttext;
		    name = "<a href='"+monurlbase+"/26/"+chk.id+"'>"+chk.name+"</a>";
		    eqname = "<a href='"+monurlbase+"/36/"+chk.eq.id+"'>"+chk.eq.name+"</a>";
		    st = "<span title=\""+chk.status.resulttext+"\" style=\"background-color : "+chk.status.color+";\">"+chk.status.text+"</span>";
		    // st = "<span title=\""+chk.status.resulttext.replace(/"/,"\\\"")+"\" style=\"background-color : "+chk.status.color+";\">"+chk.status.text+"</span>";
		    //st = "<span style=\"background-color : "+chk.status.color+";\">"+chk.status.text+"<pre>\n"+chk.status.resulttext+"</pre></span>";
		    //st = "<span onmouseover=\"console.log(t);\" style=\"background-color : "+chk.status.color+";\">"+chk.status.text+chk.status.resulttext+"</span>";
		    testchktabledata.push([chk.id,eqname,name,chk.type,chk.opercode,st]);
		});
		chktable.fnClearTable();
		chktable.fnAddData(testchktabledata);
		chktable.fnAdjustColumnSizing();
		
		var a = chktable.fnGetNodes();
		for ( var i=0 ; i<a.length ; i++ ) {
		    $(a[i]).click( function() {
			    if ( $(this).hasClass('row_selected') ) $(this).removeClass('row_selected');
			    else $(this).addClass('row_selected');
			} );
		}

		updatetind(1,0,"");
	    },
	    error: function(req,status,error) {
		updatetind(1,0,"Error");

		switch(req.status) {
		case 401: // Unauthorized
		    alert("Unauthorized, current session probably timed out.");
		    break;
		case 403: // Forbidden
		    alert("This resource is forbidden within this session access rights.");
		    break;
		case 503: // Service Unavailable (normally temporary in nature)
		    alert("Service is temporarily unavailable.");
		    break;
		default:
		    alert(req.status+": "+error);
		    break;
		}
	    }
	   });
}

function ticketload(f) {
    //$rdata["pager"]["offset"] = 0;
    //$rdata["pager"]["limit"] = $ggspaginator["curr"]["limit"];

    //qurl = '/ajaxdev/php_json_test3.php';
    //qurl = 'https://beta1.ggsys.net/_monp/57/400';
    //qurl = 'https://secure.in1.ggsys.net/_monp/57/400';

    if(f) tickettablefilter = f;

    updatetind(1,0,"Loading...");

    $.ajax({url : monurlbase+'/57/400',
	    data : {
		'f' : tickettablefilter,
		'q' : 500
	    },
            method: 'GET',
	    dataType : 'json',
	    success : function(response) {
		//console.log(response);
		var cdate;
		var mdate;
		var cnt;

		updatetind(1,0,"Processing...");

		testtickettabledata = [];


		$.each(response["tickets"],function (id,ticket) {
		    mdate = new Date(ticket.mtime * 1000);
		    cdate = new Date(ticket.ctime * 1000);
		    switch(ticket.catid) {
		    case 5: // Eq.
			title = "<a href='"+eqticketurlbase+"/"+ticket.refid+"/27/"+id+"'>"+ticket.title+"</a>";
			break;
		    case 2: // Check
			title = "<a href='"+chkticketurlbase+"/"+ticket.refid+"/28/"+id+"'>"+ticket.title+"</a>";
			break;
		    case 10: // Monitoring account
			//title = "<a href='"+monaccticketurlbase+"/"+ticket.refid+"/36/"+id+"'>"+ticket.title+"</a>";
			title = "<a href='"+ticketurlbase+"/"+id+"/191/"+ticket.refid+"'>"+ticket.title+"</a>";
			break;
		    default:
			//title = id+" "+ticket.catid+" "+ticket.title;
			title = ticket.title;
			break;
		    }

		    testtickettabledata.push([id,title,
					      ticket.addedby,ticket.assignedto,
					      ticket.status,
					      cdate.toLocaleString(),mdate.toLocaleString()]);
		    //testtickettabledata.push([this[0],this[1],this[2],this[3],cdate.toLocaleString(),mdate.toLocaleString()]);
		});

		tickettable.fnClearTable();
		tickettable.fnAddData(testtickettabledata);
		tickettable.fnAdjustColumnSizing();
		
		var a = tickettable.fnGetNodes();
		for ( var i=0 ; i<a.length ; i++ ) {
		    $(a[i]).click( function(e) {
			//if(e.shiftKey) {
			//if(e.altKey) {
			if(e.ctrlKey && !$(this).hasClass('row_selected')) {
			    var clickedidx = tickettable.fnGetPosition( this );
			    var previdx = 0;
			    var done = 0;
			    var b = tickettable.fnGetNodes();
			    for(var j = 0; j < clickedidx; j++) {
				if($(b[j]).hasClass('row_selected')) previdx = j;
			    }
			    //console.log("Clicked idx "+clickedidx+" prev clicked idx "+previdx);
			    for(var j = previdx; j <= clickedidx; j++) {
				$(b[j]).addClass('row_selected');
			    }
			}
			else {
			    if ( $(this).hasClass('row_selected') ) $(this).removeClass('row_selected');
			    else $(this).addClass('row_selected');
			}
		    } );
		}

		// $(tickettable.fnGetNodes()).tooltip( {
		//     "delay": 0,
		//     "track": true,
		//     "fade": 250
		// } );

		updatetind(1,0,"");
	    },
	    error: function(req,status,error) {
		updatetind(1,0,"Error");

		switch(req.status) {
		case 401: // Unauthorized
		    alert("Unauthorized, current session probably timed out.");
		    break;
		case 403: // Forbidden
		    alert("This resource is forbidden within this session access rights.");
		    break;
		case 503: // Service Unavailable (normally temporary in nature)
		    alert("Service is temporarily unavailable.");
		    break;
		default:
		    alert(req.status+": "+error);
		    break;
		}
	    }
	   });
}

/*
 * Function: fnGetDisplayNodes
 * Purpose:  Return an array with the TR nodes used for displaying the table
 * Returns:  array node: TR elements
 *           or
 *           node (if iRow specified)
 * Inputs:   object:oSettings - automatically added by DataTables
 *           int:iRow - optional - if present then the array returned will be the node for
 *             the row with the index 'iRow'
 */
$.fn.dataTableExt.oApi.fnGetDisplayNodes = function ( oSettings, iRow ) {
    var anRows = [];
    if ( oSettings.aiDisplay.length !== 0 ) {
	if ( typeof iRow != 'undefined' ) {
	    return oSettings.aoData[ oSettings.aiDisplay[iRow] ].nTr;
	}
	else {
	    for ( var j=oSettings._iDisplayStart ; j<oSettings._iDisplayEnd ; j++ ) {
		var nRow = oSettings.aoData[ oSettings.aiDisplay[j] ].nTr;
		anRows.push( nRow );
	    }
	}
    }
    return anRows;
};

function ondocready() {
    settickettable('tickettable');
    seteqtable('eqtable');
    setchktable('chktable');

    if($("div.tind")) $("div.tind").html("Loading...");

    if($("#pgoverlaydiv")) {
	pgoverlay = $("#pgoverlaydiv");
	//console.log("pgoverlaydiv initialized.");
    }

    if($("#notifdiv")) {
	$("#notifdiv").html(notif_templates);
    }

    if($("div.notifdiv")) {
	//gnotif = $("#notifdiv").notify({speed: 500});
	gnotif = $("#notifdiv").notify({speed: 500, expires: 5000});
	gnotif.css("top",110);
    }
}

function settickettable(id) {
    tickettable = $('#'+id).dataTable( {
	"bJQueryUI": true,
	"sPaginationType": "full_numbers",
	"aaSorting": [[5,'desc']],
	"sDom": '<"H"l<"tmenu">fr<"tind">>t<"F"i<"tstatus">p>',
	"iDisplayLength": 20,
	"oLanguage": {
	    "sLengthMenu": 'Page length: <select>'+
		'<option value="10">10</option>'+
		'<option value="20">20</option>'+
		'<option value="50">50</option>'+
		'<option value="100">100</option>'+
		'<option value="-1">All</option>'+
		'</select>',
            "sSearch": "Filter:",
	    "sProcessing": "Busy",
            "sZeroRecords": "No matching records found"
	},
        "aoColumns": [{ "sTitle": "ID", "bSearchable": false, "bVisible": false },
		      { "sTitle": "Title", "sWidth": "350px" },
		      { "sTitle": "Added by", "sWidth": "150px" },
		      { "sTitle": "Assigned to", "sWidth": "150px" },
		      { "sTitle": "Status" },
		      { "sTitle": "Created" , "sType": "date" },
		      { "sTitle": "Modified" , "sType": "date" }
		     ]
    });
}

function seteqtable(id) {
    eqtable = $('#'+id).dataTable( {
	"bJQueryUI": true,
	"sPaginationType": "full_numbers",
	"aaSorting": [[1,'asc']],
	"sDom": '<"H"l<"tmenu">fr<"tind">>t<"F"i<"tstatus">p>',
	"iDisplayLength": 20,
	"oLanguage": {
	    "sLengthMenu": 'Page length: <select>'+
		'<option value="10">10</option>'+
		'<option value="20">20</option>'+
		'<option value="50">50</option>'+
		'<option value="100">100</option>'+
		'<option value="-1">All</option>'+
		'</select>',
            "sSearch": "Filter:",
	    "sProcessing": "Busy",
            "sZeroRecords": "No matching records found"
	},
        "aoColumns": [{ "sTitle": "ID", "bSearchable": false, "bVisible": false },
		      { "sTitle": "Name", "sWidth": "500px" },
		      { "sTitle": "Type", "sWidth": "150px" },
		      { "sTitle": "Oper. code", "sWidth": "150px" }
		     ]
    });
}

function setchktable(id) {
    chktable = $('#'+id).dataTable( {
	"bJQueryUI": true,
	"sPaginationType": "full_numbers",
	"aaSorting": [[1,'asc']],
	"sDom": '<"H"l<"tmenu">fr<"tind">>t<"F"i<"tstatus">p>',
	"iDisplayLength": 20,
	"oLanguage": {
	    "sLengthMenu": 'Page length: <select>'+
		'<option value="10">10</option>'+
		'<option value="20">20</option>'+
		'<option value="50">50</option>'+
		'<option value="100">100</option>'+
		'<option value="-1">All</option>'+
		'</select>',
            "sSearch": "Filter:",
	    "sProcessing": "Busy",
            "sZeroRecords": "No matching records found"
	},
        "aoColumns": [{ "sTitle": "ID", "bSearchable": false, "bVisible": false },
		      { "sTitle": "Equipment", "sWidth": "100px" },
		      { "sTitle": "Name", "sWidth": "200px" },
		      { "sTitle": "Type", "sWidth": "150px" },
		      { "sTitle": "Oper. code", "sWidth": "150px" },
		      { "sTitle": "Status", "sWidth": "100px" }
		     ]
    });
}


var sh_data = [];


function searchhelper_eqhandler() {
    // Make sure this is not due to a page refresh (ie. old request)
    if(!ajaxObj) return;

    if(ajaxObj.readyState == 4) {
	if(ajaxObj.status != 200) {
	}
	else {
	    sh_data["eq"] = ajaxObj.responseText;
	}
	ajaxObjBusy = 0;
    }
}

function searchhelper_updatediv() {
    f = document.getElementById("hdrsearchformresults");
    if(!f) return -1;
    t = "<table class=\"lyrtoolbar\"><tr><td><a href=\"#\" onclick=\"javascript:document.getElementById(\'hdrsearchformresults\').style.visibility = \'hidden\';\">X</a></td></tr></table>";
    t = "<div style=\"float: left; background-color: gray; color: white; font-weight: bold; text-align: center; cursor: pointer; position: relative;\" onclick=\"javascript:document.getElementById(\'hdrsearchformresults\').style.visibility = \'hidden\';\">X</div><br>";
    t = "";


    t = " \
<div class=\"tbar1\"> \
<img src=\"/images/close-button.png\" onclick=\"javascript:document.getElementById(\'hdrsearchformresults\').style.visibility = \'hidden\';\" ALT=\"Close\"> \
</div> \
<div class=\"qsresult hdrsearchformresults\"><h1>Equipment</h1>"+sh_data["eq"]+"<p><h1>Checks</h1>"+sh_data["chk"]+"</div> \
";
    f.innerHTML = t;
    if(t.length < 1) f.style.visibility = "hidden";
    else f.style.visibility = "visible";
}




function searchhelper(str) {
    var term = str;

    // Deal with smart searches
    if(str[0] == ':') {
	i = str.indexOf(":",1);
	if(i > -1) term = str.substr(i+1);
    }

   if(!term || (term.length < 2)) {
      f = document.getElementById("hdrsearchformresults");
      f.innerHTML = "";
      f.style.visibility = "hidden";
      return 0;
   }

   u = eqticketurlbase+"/0/71";
   //console.log(u);

   $.ajax({url : u,
	   data : {
		'str' : term
	   },
	   method: 'GET',
	   success : function(data, textStatus, jqXHR) {
	       sh_data["eq"] = data;
	       searchhelper_updatediv();
	   },
	   error: function(req,status,error) {}
	  });

   u = chkticketurlbase+"/0/71";
   //console.log(u);


   $.ajax({url : u,
	   data : {
		'str' : term
	   },
	   method: 'GET',
	   success : function(data, textStatus, jqXHR) {
	       sh_data["chk"] = data;
	       searchhelper_updatediv();
	   },
	   error: function(req,status,error) {}
	  });

}





function formval_addhooks(id) {
    //console.log("HHHHHHHHHH");
    var infields = document.getElementById(id).getElementsByTagName("input");
    if(!infields) return;
    for(var i=0; i<infields.length; i++) {
	//console.log(infields[i].type);
	infields[i].onchange = function() { formval_validatefield(this);formval_updatebuttons(id); }
	infields[i].onblur = function() { formval_validatefield(this);formval_updatebuttons(id); }
	// Do initial field validation
	formval_validatefield(infields[i]);
    }

    //newaccupdate(null);
    formval_updatebuttons(id);
}

// The main validation-function
function formval_validatefield(f) {
    var testresult = -1;
    var fconf = null;
    var inputobj = null;
    var errcnt = 0;
    var rc = 0;

    if((f.id == "Submit") || (f.id == "sb")) return true;
    if(!f || !f.id || (f.id == "")) return false;
    inputobj = $("#"+f.id);
    if(!inputobj) return false;

    if(!f.value || (f.value == "")) {
	if(reqfields.indexOf(f.id) < 0) testresult = 0;
	else testresult = 2;
    }
    else {
	if(fieldreqexp[f.id]) {
	    if(!f.value.match(fieldreqexp[f.id])) testresult = 3;
	    else testresult = 1;
	}
	else {
	    testresult = 0;
	}
    }

    if((testresult < 2) && (fieldconf[f.id])) {
	fconf = document.getElementById(fieldconf[f.id]);
	if(!fconf) testresult = 3;
	else if(fconf.value != f.value) testresult = 5;
    }

    if((reqchecked.indexOf(f.id) >= 0) && !f.checked) {
	testresult = 6;
    }

    //console.log("VF:"+f.name+"/"+f.id+": TR="+testresult);

    inputobj.removeClass('inputnochk');
    inputobj.removeClass('inputfailed');
    inputobj.removeClass('inputpass');


    switch(testresult) {
    case 1:
	inputobj.addClass('inputpass');
	break;
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
	errcnt++;
	inputobj.addClass('inputfailed');
	break;
    default:
	inputobj.addClass('inputnochk');
	break;
    }

    for(k in fieldconf) {
	if(fieldconf[k] == f.id) {
	    //console.log("HH"+f.id+" K:"+k);
	    rc = formval_validatefield(document.getElementById(k));
	    if(rc == false) errcnt++;
	}
    }

    //console.log("VF:"+f.name+"/"+f.id+": ec="+errcnt);

    if(errcnt == 0) return true;
    else return false;
}

function formval_updatebuttons(id) {
    var rc = 0;
    var errcnt = 0;

    b = $("#sb");
    if(!b) return false;

    b.removeClass('fbuttondisabled');
    b.removeClass('fbuttonenabled');

    var infields = document.getElementById(id).getElementsByTagName("input");
    if(!infields) return;
    for(var i=0; i<infields.length; i++) {
	rc = formval_validatefield(infields[i]);
	if(rc != true) errcnt++;
	//console.log("F:"+infields[i].name+"/"+infields[i].id+" rc="+rc);
    }

    if(errcnt > 0) {
	b.addClass('fbuttondisabled');
    }
    else {
	//alert("K"+errcnt);
	b.addClass('fbuttonenabled');
    }

    //console.log("EC:"+errcnt);
}

function featsel(id) {
    var rc = 0;
    var errcnt = 0;

    if(!featcfg || !featcfg["divs"]) return 0;

    for(var i=0; i<featcfg["divs"].length; i++) {
	$('#'+featcfg["divs"][i]).hide();
    }

    if(featcfg && featcfg[id]["div"]) $('#'+featcfg[id]["div"]).show();

    if(featcfg && featcfg[id]["img1"]) {
	$('#slide1').attr("src",featcfg[id]["img1"]);
	if(featcfg && featcfg[id]["img2"]) {
	    $('#slide2').attr("src",featcfg[id]["img2"]);
	    $('#slide2').show();
	}
	else {
	    $('#slide2').hide();
	}
	$('#featp_slide').show();
    }
    else {
	$('#featp_slide').hide();
    }

    return 0;
}


