﻿// Constructor
function QueryControl(controlId, key) {
	this.ControlId = controlId;
	this.Key = key;
	var Control = document.getElementById(this.ControlId);
	if (Control != null) {
		var unencodetxt = "";
		if (!Control.type) {
			// loop through child controls
			var i = 0;
			while (Control) {
				var Control = document.getElementById(controlId + "_" + i);
				if (Control && Control.checked) {
					if (unencodetxt != "") {
						unencodetxt += ",";
					}
					var FrigValue = Control.parentNode.attributes['FrigValue'].value;
					unencodetxt += FrigValue;
				}
				i++;
			}
		}
		else if (Control.type == "checkbox" || Control.type == "radio" && Control.checked) {
			unencodetxt = Control.value;
		}
		else if (Control.type == "text" || Control.type == "textarea") {
			unencodetxt = Control.value;
		}
		else if (Control.type == "select-one" || Control.type == "select-multiple") {
			unencodetxt = ItterateDropdownOptionsValue(Control);
		}
		
		var encodetxt = encodeURI(unencodetxt);
		this.Value = encodetxt;
	}
}

// Create a property
QueryControl.prototype.ControlId = '';
QueryControl.prototype.Key = '';
QueryControl.prototype.Value = '';

// Create a method
QueryControl.prototype.GetValue = function() {
	
}

// Constructor
function QueryUrl() {
}

QueryUrl.prototype.QueryControlList = new Array();


// Create a method
QueryUrl.prototype.GetUrlValues = function() {
	var result = "";
	for (var i = 0, len = this.QueryControlList.length; i < len; ++i) {
		if (result != "") {
			result += "|";
		}
		result += this.QueryControlList[i].Key;
		result += "~";
		result += this.QueryControlList[i].Value;
	}
	return result;
}


function ItterateDropdownOptionsValue(dropdown) {
	var result = "";
	 for (var i = 0, len = dropdown.options.length; i < len; ++i) {
		 if (dropdown.options[i].selected) {
			 if (result != "") {
				 result += ",";
			 }
			result += dropdown.options[i].value;
		}
	}
	return result;
}



function ItterateDropdownOptions(dropdown) {
	for (var i = 0, len = dropdown.options.length; i < len; ++i) {
		if (dropdown.options[i].selected) {
			return dropdown.options[i].text;
		}
	}
}

function ItterateRadiosCheckboxes(options) {
	var result = "";
	for (var i = 0, len = options.length; i < len; ++i) {
		if (options[i].checked) {
			result += " " + options[i].nextSibling.innerHTML;
		}
	}
	return result;
}

var DropDownHandleSuccess = function(o) {

	try {
		var options = [];

		try {
			options = YAHOO.lang.JSON.parse(o.responseText);
		}
		catch (x) {
			alert("JSON Parse failed!");
		}

		var dropdown = this.argument.dropdown;
		
		for (var i = 0, len = options.length; i < len; ++i) {
			var option = options[i];
			var objOption = new Option(option.label, option.value);
			dropdown.options.add(objOption);
		}
	} catch (e) {
		alert("Option Data Call failed 1!");
		return;
	}
}

var DropDownHandleFailure = function(o) {
	alert("Option Data Call failed!");
}




function IsValueIn(ValueBeingTested, ValuePart) {
	var result = false;
	if(ValueBeingTested.indexOf(",") == -1)
	{
		result = ValueBeingTested == ValuePart;
	}
	else
	{
		var Values = ValueBeingTested.split(",");
		var i=0;
		for (i=0;i<=Values.length;i++)
		{
			var ValueItem = Values[i];
			result = ValueItem == ValuePart;
			if(result)
			{
				break;
			}
		}
	}
	return result;
}

function SetValueRow(id, value, myDataTable) {

	var Element = document.getElementById(id);
	var selectedRos = myDataTable.getSelectedTrEls();
	var NewElementValue = '';
	for (var i = 0, l = selectedRos.length; i < l; i++) {
		dataSelected = myDataTable.getRecord(selectedRos[i]).getData();
		if (i != 0) {
			NewElementValue += ',';
		}

		NewElementValue += dataSelected.name;
	}
	Element.value = NewElementValue;
	Element.focus();
}

function ShowMeHideMe(id) {
	YAHOO.util.Dom.removeClass(id, 'ShowMe');
	YAHOO.util.Dom.addClass(id, 'HideMe');
}

function DisplayText(Control, Message) {
	if (Control) {
		YAHOO.util.Dom.addClass(Control.id, 'ShowMe');
		YAHOO.util.Dom.removeClass(Control.id, 'HideMe');
		Control.innerHTML = Message;
		setTimeout("ShowMeHideMe('" + Control.id + "');", 3000);
	}
	else if (Message) {
		alert(Message)
	}
}

function GenericDeleteAsyncSubmitter(DataTable, row, record, url, action, ErrorControlId, SuccessControlId) {
	if (confirm('Are you sure?')) {
		var ErrorControl = document.getElementById(ErrorControlId);
		var SuccessControl = document.getElementById(SuccessControlId);
		var Id = 0;
		if (record.Id) {
			Id = record.Id;
		}
		var sUrl = url + '&action=' + action + '&deleteRow=' + Id;

		YAHOO.util.Connect.asyncRequest(
					'GET',
					sUrl,
					{
						success: function(o) {
							var r = YAHOO.lang.JSON.parse(o.responseText);
							if (r.replyCode == 201) {
								DisplayText(SuccessControl, 'Record deleted.');
								DisplayText(ErrorControl, '');
								DataTable.deleteRow(row);
							} else {
								DisplayText(SuccessControl, '');
								DisplayText(ErrorControl, r.replyText);
							}
						},
						failure: function(o) {
							alert(o.statusText);
						},
						scope: this
					}
				);

	}

}

function GenericAsyncSubmitter(url, action, ControlId) {
	var Control = document.getElementById(ControlId);
	var AsyncSubmitterFunction = function (callback, newValue) {
		var record = this.getRecord(),
			column = this.getColumn(),
			oldValue = this.value,
			datatable = this.getDataTable();

		//var r = this.getRecord().getData();

		var AutoCompleteId = -1;
		var HiddenControl = document.getElementById('HiddenControlAjaxCellEditor');
		if (HiddenControl != null) {
			AutoCompleteId = HiddenControl.value;
		}

		try {
			var TempnewValue = newValue.toUTCString();
			var iMonth =  newValue.getMonth() + 1;
			var sMonth =  iMonth.toString();
			if(sMonth.length == 1)
			{
				sMonth = "0" + sMonth;
			}

			var iDate =  newValue.getDate();
			var sDate =  iDate.toString();
			if(sDate.length == 1)
			{
				sDate = "0" + sDate;
			}

			var StringDate = newValue.getFullYear() + '-' + sMonth + '-' + sDate;
			newValue = StringDate;
		}
		catch (err) {
			var errDebug = err;
		}
		if (oldValue != column.key) {

			YAHOO.util.Connect.asyncRequest(
				'POST'
				, url
				, { success: function (o) {

					var r = YAHOO.lang.JSON.parse(o.responseText);
					if (r.replyCode == 201) {
						DisplayText(Control, ' ');
						callback(true, r.data);
					} else {
						DisplayText(Control, r.replyText);
						callback();
					}
				}

				, failure: function (o) {
					alert(o.statusText);
					callback();
				}
				, scope: this
				}
				, 'action=' + action + '&column=' + column.key + '&newValue=' +
					escape(newValue) + '&oldValue=' + escape(oldValue) + '&AutoCompleteId=' + escape(AutoCompleteId) + myBuildUrl(datatable, record)
			);
		}
	} // end of asyncSubmitter
	;

	return AsyncSubmitterFunction;
}

var myBuildUrl = function(datatable, record) {
	var url = '';
	var cols = datatable.getColumnSet().keys;
	for (var i = 0; i < cols.length; i++) {
		if (cols[i].isPrimaryKey) {
			url += '&' + cols[i].key + '=' + escape(record.getData(cols[i].key));
		}
	}

	if (url == '') {
		var r = record.getData();
		if (r.Id) {
			url += '&id=' + r.Id
		}
		else if (r.IrId) {
			url += '&id=' + r.IrId
		}
	}
	return url;
};

var formatDateUk = function (elCell, oRecord, oColumn, oData) {
	var sDate = "&nbsp;";
	if (oData != null) {
		var dDate = new Date(oData);
		sDate = YAHOO.util.Date.format(dDate, { format: "%d/%m/%Y", locale: "en-GB" });
	}
	elCell.innerHTML = sDate;
};

var formatDateUkWithTime = function (elCell, oRecord, oColumn, oData) {
	var sDate = "&nbsp;";
	if (oData != null) {
		var dDate = new Date(oData);
		sDate = YAHOO.util.Date.format(dDate, { format: "%d/%m/%Y %H:%M", locale: "en-GB" });
	}
	elCell.innerHTML = sDate;
};

var formatIsYours = function (elCell, oRecord, oColumn, oData) {
	var sValue = "&nbsp;";
	var record = oRecord.getData();
	if (record != null) {
		if (record.CountOwner != 0
			|| record.CountNonOwner != 0
			|| record.CountProjectLeader != 0) {
			sValue = "Yes";
		}
	}
	elCell.innerHTML = sValue;
};




var formatEmail = function(elCell, oRecord, oColumn, oData) {
	elCell.innerHTML = "<a href=\"mailto:" + oData + "\">" + oData + "</a>"; 
};

var formatTest = function(elCell, oRecord, oColumn, oData) {
	elCell.innerHTML = 'blah';
};

var formatSpecies = function (elCell, oRecord, oColumn, oData) {
	var result = "";
	for (i in oData) {
		if (result != "") {
			result += ", <br />";
		}
		result += oData[i];
	}
	elCell.innerHTML = result;
};

var parseSQLDate = function (data) {
	try {
		if (data != null) {
			var date1 = new Date(parseInt(data.slice(6, -2)));

			return date1;
		}
		else {
			return null;
		}
	}
	catch (e) {
		return false;
	}
};


var parseSQLDate_old = function(data) {

	try {
		var date1 = new Date();
		date1.setISO8601(data);
		return date1;
	}
	catch (e) {
		return false;
	}
};

Date.prototype.setISO8601 = function(string) {
	var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
		"(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
		"(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
	var d = string.match(new RegExp(regexp));

	if (d != null) {

		var offset = 0;
		var date = new Date(d[1], 0, 1);

		if (d[3]) { date.setMonth(d[3] - 1); }
		if (d[5]) { date.setDate(d[5]); }
		if (d[7]) { date.setHours(d[7]); }
		if (d[8]) { date.setMinutes(d[8]); }
		if (d[10]) { date.setSeconds(d[10]); }
		if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
		if (d[14]) {
			offset = (Number(d[16]) * 60) + Number(d[17]);
			offset *= ((d[15] == '-') ? 1 : -1);
		}

		offset -= date.getTimezoneOffset();
		time = (Number(date) + (offset * 60 * 1000));
		this.setTime(Number(time));
	}
	else {
		this.setFullYear(0, 0, 0);
	}
}

function GetQueryData(id) {
	var HiddenControl = document.getElementById(id);
	var HiddenControlValue = "";
	if (HiddenControl != null) {
		HiddenControlValue = HiddenControl.value;
	}
	return "&query=" + HiddenControlValue;
}

function ServerDropdownPopulate(editor, sId, SomeProperty, url) {
	if (editor.getColumn().key = SomeProperty) {
		editor.dropdown.options.length = 0;
		var DropDownCallback =
						{
							success: DropDownHandleSuccess,
							failure: DropDownHandleFailure,
							argument: editor
						};
		var Id = editor._oRecord.getData(sId);
		var request = YAHOO.util.Connect.asyncRequest('GET', url + Id, DropDownCallback);
	}
}

var unmatchedHandler = function(oSelf) {
	// assumes control called HiddenControlAjaxCellEditor
	var HiddenControl = document.getElementById('HiddenControlAjaxCellEditor');
	if (HiddenControl != null) {
		HiddenControl.value = '';
	}
}

var onSelect = function(sType, aArgs) {

	// assumes control called HiddenControlAjaxCellEditor
	// assumes field key for record is called Id

	var oMyAcInstance = aArgs[0]; // your AutoComplete instance 
	var elListItem = aArgs[1]; //the <li> element selected in the suggestion container 
	var aData = aArgs[2]; //array of the data for the item as returned by the DataSource
	var Id = GenericGetId(aData);
	var HiddenControl = document.getElementById('HiddenControlAjaxCellEditor');
	if (HiddenControl != null) {
		HiddenControl.value = Id;
	}
}



function SelectFiler(oArgs, dataRightClick) {
	var Values = oArgs.split("|");
	var ButtonFilterId = Values[0];
	var HiddenFieldFilterIdId = Values[1];

	var ButtonFilter = document.getElementById(ButtonFilterId);
	var HiddenFieldFilterId = document.getElementById(HiddenFieldFilterIdId);

	if (HiddenFieldFilterId != null && ButtonFilter) {

		HiddenFieldFilterId.value = dataRightClick.Id;
		ButtonFilter.click();
	}
}

var CodeSwitch = false;

var SelectRow = function(args, Id) {

	if (this._oRecordSet) {

		var records = this._oRecordSet.getRecords();

		for (var i = 0, l = records.length; i < l; i++) {
			var record = records[i];
			if (record) {
				var r = record.getData();
				if (r.Id) {
					if (r.Id == Id) {
						CodeSwitch = true;
						this.selectRow(record);
					}
				}
			}
		}
	}

}

var GenericPopUp = null;

function ShowPopupSetSrc(record, Popup, iFrameId, src) {
	GenericPopUp = Popup;
	var Id = 0;
	if (record) {
		if (record.Id) {
			Id = record.Id;
		}
		else if (record.IrId) {
			Id = record.IrId
		}
	}
	var iFrame = document.getElementById(iFrameId);
	if (iFrame) {
		var iFrameDom = (iFrame.contentWindow || iFrame.contentDocument);
		if (iFrameDom) {
			iFrameDom.document.body.innerHTML = "Loading ...";
		}
		
		var random = Math.random();
		iFrame.src = src + "&r=" + random + "&Id=" + Id;
	}
	Popup.show();
}

function ShowPopupSetSrcNoTable(Popup, iFrameId, src) {
	GenericPopUp = Popup;
	var iFrame = document.getElementById(iFrameId);
	if (iFrame) {
		var iFrameDom = (iFrame.contentWindow || iFrame.contentDocument);
		if (iFrameDom) {
			iFrameDom.document.body.innerHTML = "Loading ...";
		}
		var random = Math.random();
		iFrame.src = src + "&r=" + random;
	}
	Popup.show();
}

function DownLoadChunk(record, url) {
	var Eventid = 0;
	var Filename = '';
	var ChunkNumber = 0;
	if (record && record.Eventid && record.Filename && record.ChunkNumber) {
		Eventid = record.Eventid;
		Filename = record.Filename;
		ChunkNumber = record.ChunkNumber;
	}
	LoadWindowLocation(url + "?Eventid=" + Eventid + "&Filename=" + Filename + "&ChunkNumber=" + ChunkNumber);
}

function PreLoadWindowLocation(record, url, name) {
	var Id = GenericGetId(record);
	LoadWindowLocation(url + Id, name);
}

function LoadWindowLocation(url, name) {
	var UsedName = "_top";
	if (name) {
		UsedName = name;
	}
	window.open(url, UsedName);
	//window.location.href = url;
}

function GenericGetId(record) {
	var Id = 0;
	if (record) {
		if (record.Id) {
			Id = record.Id;
		}
		else if (record.IrId) {
			Id = record.IrId
		}
		else if (record.ProjectId) {
			Id = record.ProjectId
		}
	}
	return Id;
}

function SetIdFireButton(record, ControlId, ControlButton) {
	var Id = GenericGetId(record);
	var eControlId = document.getElementById(ControlId);
	var eControlButton = document.getElementById(ControlButton);
	if (eControlId && eControlButton) {
		eControlId.value = Id;
		eControlButton.click();
	}
}

function RowSelected(oArgs1, oArgs2) {

	if (!CodeSwitch) {
		var jsonData = YAHOO.lang.JSON.parse(oArgs2);
		if (jsonData) {
			SetIdFireButton(oArgs1.record.getData(), jsonData.HiddenFieldId, jsonData.ButtonId);
		}

	}
	CodeSwitch = false;	
}

function RowSelected_(oArgs) {

	//alert("RowSelected" + oArgs.record.getData().Title);
}

function RowUnSelected(oArgs) {
	//alert("RowUnSelected" + oArgs.record.getData().Title);
}

