var currentline_ = 1;
//order_lines[0] contains the number of records
var order_lines = new Array();
var findmode = false;
function SaveRecord(table){
	if(isdemo){
		alert("Can't save records in demo version");
		return;
	}
	MakeValidateDates();
	var v = $("#cmaForm").validate();
	if(v.form()){
		UnMakeValidateDates();
		MakeMysqlDates();
		var myId = $("#id_").val();
		if(myId != ''){		//its an old record
			var SQL = MakeUpdate(table);
			var result = UpdateRecord(SQL,"tab");
			if(isNaN(result)){
				MakeDates();
				alert(result);
				return(false);
			}
			else{	//clear for next record and reset defaults
			//	ClearRecord();
				MakeDates();
				global_window.setText("Record Updated");
				global_thisId = 			$("#id_").val();
			}
		}
		else{				//its a new one
			var SQL = MakeInsert(table);
			var mainresult = InsertRecord(SQL,"tab");
			if(isNaN(mainresult)){
				MakeDates();
				alert(mainresult);
				return(false);
			}
			$("#id_").val(mainresult);
			global_thisId = 			$("#id_").val();

			MakeDates();
			var x = $("#afterinsert").val();
			if(x){
				if(x.indexOf('()')!= -1){
					eval(x);	//its a function
				}
				else{
					var va = x.split(':');
					var SQL = va[0];
					var field = va[1];
					SQL += "'" + $("#" + field).val() + "'";
					var result = UpdateRecord(SQL,"tab");
					if(isNaN(result)){
						alert(result);
						return(false);
					}
				}
			}
			MakeDisable();
	//		ClearRecord();
			global_window.setText("Record Created");
			var def = 	$("#legend").attr("default");
			if(order_lines.length == 0){
				var x = parseInt(0,10);
				order_lines.push(x);
			}
			order_lines[0] += 1;
			order_lines.push(mainresult);
			var cnt = order_lines[0];
			$("#legend").text(def + "(" + cnt + "/" + currentline_ + ")");
		}
		return(true);
	}
	else{
		UnMakeValidateDates();
		return(false);
	}
}

function MakeCols(){
	var COLS = '';
	$('.inputclass').each(function(x){
		var field = $(this).attr('id');
		COLS += field + ","; 
	});
	COLS += ",";
	COLS = COLS.replace(/,,/,"");
	return(COLS);
}
function SizeCols(){
	var SIZE = 0;
	$('.inputclass').each(function(x){
		SIZE++; 
	});
	return(SIZE);
}
function MakeSelect(){
	var SELECT = 'select ';
	$('.inputclass').each(function(x){
		var field = $(this).attr('id');
		SELECT += field + ","; 
	});
	SELECT += ",";
	SELECT = SELECT.replace(/,,/,"");
	return(SELECT );
}
function MakeSelect(){
	var SELECT = 'select ';
	$('.inputclass').each(function(x){
		var field = $(this).attr('id');
		SELECT += field + ","; 
	});
	SELECT += ",";
	SELECT = SELECT.replace(/,,/,"");
	return(SELECT );
}

function MakeUpdate(table){
	var UPDATE = "update " + table + " set ";
	$('.inputclass').each(function(x){
		var field = $(this).attr('id');
		var value = $(this).val();
		value = value.replace(/'/g,"\\'");
		value = value.replace(/"/g,"\"");
		value = value.replace(/\n/g,"");
		value = value.replace(/\r/g,"");
		UPDATE += field + "='" + value + "',"; 
	});
	UPDATE += ",";
	UPDATE = UPDATE.replace(",,","");
	UPDATE += " where id_ = " + $("#id_").val();
	return(UPDATE );
}

function MakeInsert(table){
	var INSERT = "insert into " + table + "(";
	var COLS = MakeCols();
	INSERT += COLS + ") values (";
	$('.inputclass').each(function(x){
		var value = $(this).val();
		value = value.replace(/'/g,"\\'");
		value = value.replace(/"/g,"\"");
		value = value.replace(/\n/g,"");
		value = value.replace(/\r/g,"");
		INSERT += "'" + value + "',"; 
	});
	INSERT += ",)";
	INSERT = INSERT.replace(",,","");
	return(INSERT);
}

function MakeWhere(table){
	var SQLCOLS = " from " + table + " where ";
	$('.inputclass').each(function(x){
		var field = $(this).attr('id');
		var value = $(this).val();
		value = rtrim(value);
		var dtype = $(this).attr('class');
		if(value != ''){
			if(dtype.indexOf('date') != -1)
				SQLCOLS += field + "='" + SetDate(value) + "'";
			else
				SQLCOLS += field + "='" + value + "'";
			SQLCOLS += ' and ';
		}
	});
	SQLCOLS += 'EOF';
	SQLCOLS = SQLCOLS.replace(/and EOF/,"");
	return(SQLCOLS);
}
function rtrim(str) {
    return str.replace(/\s+$/, '');
}

function MakeDisable(){
	$('.disable').each(function(x){
		$(this).attr('disabled','disabled');
	});
}
function MakeDisableOnNew(){
	$('.disableonnew').each(function(x){
		$(this).attr('disabled','disabled');
	});
}
function MakeEnable(){
	$('.inputclass').each(function(x){
		var dtype = $(this).attr('class');
		if(dtype.indexOf('disable') != -1)
			$(this).attr('disabled',false);
	});
}

function MakeDates  (){
	$('.inputclass').each(function(x){
		var dtype = $(this).attr('class');
		if(dtype.indexOf('date') != -1){
			var d = $(this).val();
			if(d != '')
				$(this).val(UnSetDate(d));
			else
				$(this).val("00/00/0000");
				
		}
	});
}

function MakeMysqlDates(){
	$('.inputclass').each(function(x){
		var dtype = $(this).attr('class');
		if(dtype.indexOf('date') != -1){
			var d = $(this).val();
			if(d != '')
				$(this).val(SetDate(d));
else
				$(this).val("0000-00-00");
			
		}
	});
}

function MakeValidateDates  (){ //change format from dd/mm/yyyy to mm/dd/yyyy for jquery validation
	$('.inputclass').each(function(x){
		var dtype = $(this).attr('class');
		if(dtype.indexOf('date') != -1){
			var d = $(this).val();
			if(d != ''){
				var x = d.split('/');
				var xx = x[1] + "/" + x[0] + "/" +x[2];
				$(this).val(xx);
			}
			if($(this).val() == "00/00/0000")
				$(this).val("");				
		}
	});
}
function UnMakeValidateDates  (){ //change format from mm/dd/yyyy to dd/mm/yyyy for jquery validation
	$('.inputclass').each(function(x){
		var dtype = $(this).attr('class');
		if(dtype.indexOf('date') != -1){
			var d = $(this).val();
			if(d != ''){
				var x = d.split('/');
				var xx = x[1] + "/" + x[0] + "/" +x[2];
				$(this).val(xx);
			}
			if($(this).val() == '')
				$(this).val("00/00/0000");				
		}
	});
}


function NewRecord(table,field){
	if(currentline_ == 1){
		ClearRecord();
	}
	else{
	GoLast(table,field);
	GoNext(table,field);
	}
}

function ClearRecord(){
	$('.gc').each(function(x){
		var field = ($(this).attr("id"));
		rId = field;
		var value = ($(this).attr("default"));
		$("#" + field).val('');
		if(value == "today")
			$("#" + field).val(GetDate());
		else if(value == "year")
			$("#" + field).val(GetYear());
		else if(value == "nextyear")
			$("#" + field).val(GetNextYear());
		else
			$("#" + field).val(value);
	});
}

function UpdateRecord(SQL,fieldname){

	var ESQL = escape(SQL);

	var myData = '';
	$.ajax({
		type: "post",url: "gophpupdate.php", data:"cmd=" + ESQL,
	    async: false,
		beforeSend: function(){
			$("#load_" + fieldname).html('<img src="images/wait.gif" />');
			$("#load_" + fieldname).show("fast");
   		},
   		complete: function(){ 
   			$("#load_" + fieldname).html('');
   			$("#load_" + fieldname).hide("slow");
   		},
   		success: function(data){
   			var xml;
   			if($.browser.msie){
   				if (typeof data == "string") {
   					xml = new ActiveXObject("Microsoft.XMLDOM");
   					xml.async = false;
   					xml.loadXML(data);
   				} 
   				else
   					xml = data;	
   			}
   			else 
   				xml = data;
   				$(xml).find('record').each(function(x){
   					myData = $(this).find("pkey").text();
   				});
   			},
   		error: function(){
   			alert("There has been an error");
   			myData = "error";
   		}
	});
	return(myData);
}

function InsertRecord(SQL,fieldname){
	var ESQL = escape(SQL);
	var myData = '';
	$.ajax({
		type: "post",url: "gophpinsert.php", data:"cmd=" + ESQL,
	    async: false,
		beforeSend: function(){
			$("#load_" + fieldname).html('<img src="images/wait.gif" />');
			$("#load_" + fieldname).show("fast");
		},
		complete: function(){ 
			$("#load_" + fieldname).html('');
			$("#load_" + fieldname).hide("slow");
		},
		success: function(data){
			var xml;
			if($.browser.msie){
				if (typeof data == "string") {
					xml = new ActiveXObject("Microsoft.XMLDOM");
					xml.async = false;
					xml.loadXML(data);
				} 
				else
					xml = data;	
			}
			else 
				xml = data;
			$(xml).find('record').each(function(x){
				myData = $(this).find("pkey").text();
			});
		},
		error: function(){
			alert("There has been an error");
			myData = "error";
		}
	});
	return(myData);
}


function GoFindRecords(table,field){
	var result = new Array();
	findmode = true;
	var SQLCOLS = MakeCols();
	var SIZE = SizeCols();
	var SQL = MakeSelect();
	SQL += MakeWhere(table);
	AjaxSql("find",SQL,SQLCOLS,result);
	var cnt = result[0];
	if(cnt == 0){
		alert("No records Found");
		return;
	}
	currentline_ = 1;
	InitOrderLines();
	var COLS = SQLCOLS.split(',');
	for(var j=0;j<SIZE;j++){
		var x = result[j+1];
		if( x == "0000-00-00")
			x = GetDate();
		$("#" + COLS[j]).val(x);
	}
	order_lines.push(cnt);
	for(var j=0;j<cnt;j++){
		var pos = (j*SIZE)+1;
		
		var z = result[pos];
		order_lines.push(z);
	}
	findmode = false;
	MakeDisable();
	MakeDates();
	GoToField("#" +field);
	var def = 	$("#legend").attr("default");
	var cnt = order_lines[0];
	$("#legend").text(def + "(" + cnt + "/" + currentline_ + ")");
}

function InitOrderLines(){
	var len = order_lines.length;
	for(var i=0;i<len;i++){
		order_lines.pop();
	}
}

function GoNext(table,field){
	if(!SaveRecord(table))
		return;
	currentline_ = parseInt(currentline_,10)+1;
	var myId = order_lines[currentline_];
	if(!isNaN(myId)){
		var SQLCOLS = MakeCols();
		var SIZE = SizeCols();
		var SQL = MakeSelect();
		SQL += " from " + table + " where id_= " + myId;
		var result = new Array();
		AjaxSql("find",SQL,SQLCOLS,result);
		var COLS = SQLCOLS.split(',');
		for(var j=0;j<SIZE;j++){
			var x = result[j+1];
			$("#" + COLS[j]).val(x);
		}
		MakeDates();
		var def = 	$("#legend").attr("default");
		var cnt = order_lines[0];
		$("#legend").text(def + "(" + cnt + "/" + currentline_ + ")");
		GoToField("#" + field);
	}

}
function GoPrev(table,field){
	if(currentline_ == 1)
		return;
	SaveRecord(table);
	if(currentline_ == order_lines.length){
		var v = $("#cmaForm").validate();
		v.prepareForm();
		v.hideErrors();
	}
	var x  = currentline_;
	x--;
	currentline_ = x;
	var myId = order_lines[currentline_];
	var SQLCOLS = MakeCols();
	var SIZE = SizeCols();
	var SQL = MakeSelect();
	SQL += " from " + table + " where id_= " + myId;
	var result = new Array();
	AjaxSql("find",SQL,SQLCOLS,result);
	var COLS = SQLCOLS.split(',');
	for(var j=0;j<SIZE;j++){
		var x = result[j+1];
		$("#" + COLS[j]).val(x);
	}
	MakeDates();
	var def = 	$("#legend").attr("default");
	var cnt = order_lines[0];
	$("#legend").text(def + "(" + cnt + "/" + currentline_ + ")");
	GoToField("#" + field);
}
function GoLast(table,field){
	if(!SaveRecord(table))
		return;
	var x  = order_lines.length;
	currentline_ = x;
	GoPrev(table,field);
}
function GetNextOrder(table,field,php,gotofield){
	var myValue = $("#" + field).val();
	InitOrderLines();
	currentline_ = 1;
	var def = 	$("#legend").attr("default");
	$("#legend").text(def);
	findmode = false;
	if(myValue != ''){
		GoFindRecords(table,field);
	}
	else{
       	$.ajax({
       	   	method: "get",url: php,
       	   	async: false,
       	   	beforeSend: function(){
       			$('#load_order_').html('<img src="images/wait.gif" />');
       	      	$("#load_order_").show("fast");
       	   	},
       	    complete: function(){ 
       			$('#load_order_').html('');
       	   		$("#load_order_").hide("slow");
       	   	},
       	    success: function(data){
       	   		var xml;
       	   		if($.browser.msie){
       	   			if (typeof data == "string") {
       	   				xml = new ActiveXObject("Microsoft.XMLDOM");
       	   				xml.async = false;
       	   				xml.loadXML(data);
       	   			} 
       	   			else
       	   				xml = data;
       	   		}
	        	else 
	        		xml = data;
	        	$(xml).find('record').each(function(x){
	        	   	var myData = $(this).find("order").text();
	        		$("#" + field).val(myData);
	        		ClearRecord();
	        		MakeDisableOnNew();
	        		GoToField("#" + gotofield);
	        	});
       	   	},
       	   	error: function(){
       	   		alert('Error');
       	   	}
        });
   	}
}

function GoClearAll(field){
	var v = $("#cmaForm").validate();
	$("#cmaForm").clearForm();
	v.prepareForm();
	v.hideErrors();
	MakeEnable();
	InitOrderLines();
	currentline_ = 1;
	var def = $("#legend").attr("default");
	$("#legend").text(def);
	findmode = false;
	GoToField(field);
}

function FinishRecord(){
	SaveRecord();
	$("#wizard").remove();
	$("#workbar").append("<div id=\"wizard\"></div>");
}

function GoNew(mygrid,table,formname,COLS,fieldname,h,w,SQL){
	currentline_ = 1;
	InitOrderLines();
	order_lines[0] = 0;
	var dhxWins,w1,	tabbar;
	dhxWins = new dhtmlXWindows();
    dhxWins.enableAutoViewport(true);
    dhxWins.setImagePath("imgs/");
    w1 = dhxWins.createWindow("w1", 100, 100, h, w);
    dhxWins.attachEvent("onClose", function(win){
    	mygrid.clearAll();
    	if($("#id_").val() != ''){
    		var ESQL = SQL + " where id_ = " + 	$("#id_").val(); 
    		mygrid.loadXML("connector.php?cmd="+ESQL+"&cols="+COLS+"&");
    	}
    	else
    		mygrid.loadXML("connector.php?cmd="+SQL+"&cols="+COLS+"&");
    	return true; 
    });
    w1.setText("Enter Record: " + formname);
	global_window = w1;
	w1.setModal(true);
    tabbar = w1.attachTabbar();
    tabbar.setSkin("dhx_skyblue");
    tabbar.setImagePath("imgs/");
    tabbar.attachEvent("onXLE", function() { //row_id will be the first row
    	showLoading(false);
        SetMouseKeys();
    	SetValidator();
    	GoClearAll(fieldname);
    	MakeDisableOnNew();
    	ClearRecord();
    	if(global_location != ''){
    		$("#location_").val(global_location);
    		$("#location_").attr("disabled",true);
    		$("#locationview_").val(global_location);
    		$("#locationview_").attr("disabled",true);
    	}
    	GoToField("#" + fieldname);
    });
    tabbar.attachEvent("onXLS", function() {
        showLoading(true);
    });
    tabbar.loadXML(formname);

}


//display the window and the form 
function EntryForm(mygrid,formname,COLS,fieldname,h,w){
	var dhxWins,w1,	tabbar;
	dhxWins = new dhtmlXWindows();
    dhxWins.enableAutoViewport(true);
    dhxWins.setImagePath("imgs/");
    w1 = dhxWins.createWindow("w1", 100, 100, h, w);
    w1.setText("Enter Record");
	global_window = w1;
	w1.setModal(true);
    tabbar = w1.attachTabbar();
    tabbar.setSkin("dhx_skyblue");
    tabbar.setImagePath("imgs/");
    tabbar.attachEvent("onXLE", function() { //row_id will be the first row
        showLoading(false);
    	AmendRecord(mygrid,fieldname,COLS);
	});
    tabbar.attachEvent("onXLS", function() {
        showLoading(true);
    });
    tabbar.loadXML(formname);
	
}

function AmendRecord(mygrid,fieldname,COLS){
	var a = new Array();
	a = COLS.split(',');
	ClearRecord();
	for(var i=0;i<a.length;i++){
		var myField = mygrid.cellById(order_lines[currentline_], i).getValue();
		$("#" + a[i]).val(myField);
	}
	SetMouseKeys();
	SetValidator();
	MakeDisable();
	GoToField("#" + fieldname);
}

function LoadAmend(mygrid,table,formname,COLS,fieldname,h,w){
	var cnt = 1;
	currentline_ = 1;
	InitOrderLines();
	order_lines[0] = 0;
	var checked=mygrid.getCheckedRows(1);
	if(!checked){
		alert("Please check at least one record");
		return;
	}
	var a = checked.split(',');
	order_lines[0] = a.length;
	for(var i=0;i<a.length;i++){
//		var myId = mygrid.cellById(a[i], 2).getValue();
		order_lines[i+1] = a[i];
	}
	EntryForm(mygrid,formname,COLS,fieldname,h,w);
}

function LoadSubAmend(mysubgrid,table,formname,COLS,fieldname,h,w){
	var cnt = 1;
	currentline_ = 1;
	InitOrderLines();
	order_lines[0] = 0;
	var checked=mysubgrid.getCheckedRows(1);
	if(!checked){
		alert("Please check at least one record");
		return;
	}
	var a = checked.split(',');
	order_lines[0] = a.length;
	for(var i=0;i<a.length;i++){
//		var myId = mygrid.cellById(a[i], 2).getValue();
		order_lines[i+1] = a[i];
	}
	EntryForm(mysubgrid,formname,COLS,fieldname,h,w);
}

function GoCopy(mygrid,table,formname,COLS,fieldname,h,w){
	currentline_ = 1;
	InitOrderLines();
	order_lines[0] = 0;
	var checked=mygrid.getCheckedRows(1);
	if(!checked){
		alert("Please check at least one record");
		return;
	}
	var dhxWins,w1,	tabbar;
	dhxWins = new dhtmlXWindows();
    dhxWins.enableAutoViewport(true);
    dhxWins.setImagePath("imgs/");
    w1 = dhxWins.createWindow("w1", 100, 100, h, w);
    w1.setText("Enter Record");
	global_window = w1;
	w1.setModal(true);
    tabbar = w1.attachTabbar();
    tabbar.setSkin("dhx_skyblue");
    tabbar.setImagePath("imgs/");
    tabbar.attachEvent("onXLE", function() { //row_id will be the first row
    	showLoading(false);
        SetMouseKeys();
    	SetValidator();
    	ClearRecord();
    	MakeDisableOnNew();
    	var a = checked.split(',');
    	order_lines[0] = a.length;
    	for(var i=0;i<a.length;i++){
    		var myId = mygrid.cellById(a[i], 2).getValue();
    		order_lines[i+1] = myId;
    	}
    	var x = order_lines[1];
    	$("#catalogue_").val(x);
    	GoToField("#" + fieldname);
    });
    tabbar.attachEvent("onXLS", function() {
        showLoading(true);
    });
    tabbar.loadXML(formname);

}
function GoOrderCopy(mygrid,table,formname,COLS,fieldname,h,w){
	currentline_ = 1;
	InitOrderLines();
	order_lines[0] = 0;
	var checked=mygrid.getCheckedRows(1);
	if(!checked){
		alert("Please check at least one record");
		return;
	}
	var dhxWins,w1,	tabbar;
	dhxWins = new dhtmlXWindows();
    dhxWins.enableAutoViewport(true);
    dhxWins.setImagePath("imgs/");
    w1 = dhxWins.createWindow("w1", 100, 100, h, w);
    w1.setText("Enter Record");
	global_window = w1;
	w1.setModal(true);
    tabbar = w1.attachTabbar();
    tabbar.setSkin("dhx_skyblue");
    tabbar.setImagePath("imgs/");
    tabbar.attachEvent("onXLE", function() { //row_id will be the first row
    	showLoading(false);
        SetMouseKeys();
    	SetValidator();
    	ClearRecord();
    	MakeDisableOnNew();
    	var a = checked.split(',');
    	order_lines[0] = a.length;
    	for(var i=0;i<a.length;i++){
    		var myId = mygrid.cellById(a[i], 2).getValue();
    		order_lines[i+1] = myId;
    	}
    	var x = order_lines[1];
    	$("#id_").val(x);
    	GoToField("#" + fieldname);
    });
    tabbar.attachEvent("onXLS", function() {
        showLoading(true);
    });
    tabbar.loadXML(formname);

}


