$(function() {

// Bind functions for handling css class to jQuery events
	$(".ui-state-default:not(.ui-state-disabled)").live("mouseover", function(){$(this).addClass("ui-state-hover")});
	$(".ui-state-default:not(.ui-state-disabled)").live("mouseout", function(){$(this).removeClass("ui-state-hover").removeClass("ui-state-focus")});
	$(".ui-state-default:not(.ui-state-disabled)").live("mousedown", function(){$(this).addClass("ui-state-focus")});
	$(".ui-state-default:not(.ui-state-disabled)").live("mouseup", function(){$(this).removeClass("ui-state-focus")});
	$(".ui-state-default:not(.ui-state-disabled)").live("focus", function(){$(this).addClass("ui-state-hover")});
	$(".ui-state-default:not(.ui-state-disabled)").live("blur", function(){$(this).removeClass("ui-state-hover");$(this).removeClass("ui-state-focus")});
	$(".ui-state-default:not(.ui-state-disabled)").live("keydown", function(){$(this).addClass("ui-state-focus")});
	$(".ui-state-default:not(.ui-state-disabled)").live("keyup", function(){$(this).removeClass("ui-state-focus")});

// Default values for datepicker
	$.datepicker.setDefaults(
	{
		dateFormat:"dd/mm/yyyy",
		showButtonPanel: true,
		showMonthAfterYear:false,
		changeMonth:true,
		changeYear:true,
		stepMonths:120
	});
	var lang18n = libAWS.lang;
	if(lang18n == "en")
	{
		lang18n = "en-GB";
	}
	$(".datepicker").datepicker($.datepicker.regional[lang18n]);
});

// Upload control:
$(document).ready(function(){
	var iUploadControlsCount = $(".clsUploadField").length + $(".clsPictureUploadField").length;
	if(iUploadControlsCount > 0)
	{
// load needed library:
		if(typeof(jqSwfUploadUi) === "undefined")
		{
			$.ajax({
				url: "/includes/SwfUploadUi.jquery.js",
				dataType: 'script',
				async: false
				});
		}
// instantiate the upload objects:
		var oUpload = new Array();
		var oSwf = new Array();
// files upload:
		$(".clsUploadField .swfupload-object").each(function(index)
		{
			oSwf[index] = jQuery.extend(true, {}, jqSwfUploadUi);
			oSwf[index].id = this.id.substr();
			oSwf[index].swfSettings.button_placeholder_id = this.id;
			oSwf[index].swfSettings.post_params["id"] = this.id.substr(15);
			oSwf[index].swfSettings.post_params["action"]='upload';
			oUpload[index] = new SWFUpload(oSwf[index].swfSettings);
		});
// pictures upload:
		$(".clsPictureUploadField .swfupload-object").each(function(index)
		{
			oSwf[index] = jQuery.extend(true, {}, jqSwfUploadUi);
			oSwf[index].id = this.id.substr();
			oSwf[index].swfSettings.button_placeholder_id = this.id;
			oSwf[index].swfSettings.post_params["id"] = this.id.substr(15);
			oSwf[index].swfSettings.post_params["action"]='upload';
			oUpload[index] = new SWFUpload(oSwf[index].swfSettings);
		});
	}
});
// Autocomplete:
$(document).ready(function()
{
	if($(".autocomplete").length > 0)
	{
		$(".autocomplete").autocomplete(
		{
			source:function(request, response)
			{
				sFieldId = this.element[0].id.substr(0, this.element[0].id.length-11);
				$.ajax(
				{
					url: "/includes/actLoad.php",
					type: "POST",
					data:(
					{
						'autocomplete':sFieldId,
						'term':this.term
					}),
					success: function(data)
					{
						response(data);
						if(data.length == 1)
						{
							$('#'+sFieldId).val(data[0].id);
							$('#'+this.id).val(data[0].value);
							//console.info(data);
						}
					},
					async:false,
					dataType: "json"
				});
			},
			minLength: 1,
			select: function(event, ui)
			{
				sFieldId = this.id.substr(0, this.id.length-11);
				if(ui.item)
				{
					$('#'+sFieldId).val(ui.item.id);
				}
			},
			close: function(event, ui)
			{
				sFieldId = this.id.substr(0, this.id.length-11);
				sFieldDescription = this.id;
				sFieldIdValue = $('#'+sFieldId).val();
				sFieldDescriptonValue = $('#'+sFieldDescription).val();

				if(sFieldDescriptonValue == '')
				{
					$('#'+sFieldId).val('');
				}
				else
				{
// check if the id is the right one, if not remove the data:
					$.ajax(
					{
						url: "/includes/actLoad.php",
						type: "POST",
						data:(
						{
							'autocomplete':sFieldId,
							'term':sFieldDescriptonValue,
							'id':sFieldIdValue
						}),
						success: function(data)
						{

							if($('#'+sFieldId).val() == '')
							{
								$('#'+sFieldDescription).val('');
							}
							else
							{
								if(data.length == 1)
								{
									if(data[0].id == '')
									{
										$('#'+sFieldId).val('');
										$('#'+sFieldDescription).val('');
										//console.info(data);
									}
									else
									{
										$('#'+sFieldId).val(data[0].id);
										$('#'+sFieldDescription).val(data[0].value);
									}
								}
							}

						},
						async: false,
						dataType: "json"
					});
				}
			}
		});
	}
	
	if($(".autocompletemulti").length > 0)
	{
		// here added the filter parameter used when we have to filter values by
		// certain grouping value like users by idGroup.
		function split( val ) {
			return val.split( /,\s*/ );
		}
		function extractLast( term ) {
			return split( term ).pop();
		}
		$(".autocompletemulti")
		// don't navigate away from the field on tab when selecting an item
		.bind( "keydown", function( event ) {
			if ( event.keyCode === $.ui.keyCode.TAB &&
					$( this ).data( "autocomplete" ).menu.active ) {
				event.preventDefault();
			}
			ResizeTextArea(this);
		})
				.bind("focusout",function(event){		
			//if ($.browser.msie){
				//console.log('out');
				ResizeTextArea(this);
				processChangesAM(this);	
				setTimeout(function(){
					return true;	
				},500);
			//}
		})
		.autocomplete({
			source: function( request, response ) {
		
				sFieldId = this.element[0].id.substr(0, this.element[0].id.length-11);
				sFieldIdValue = $('#'+sFieldId).val();
				sFieldIdFilterVal = $('#'+sFieldId+'Filter').val();
				$.ajax(
				{
					url: "/includes/actLoad.php",
					type: "POST",
					data:(
					{
						'autocomplete':sFieldId,
						 'term': extractLast(this.term),
						'filter':sFieldIdFilterVal
					}),
	
					success: function(data)
					{
						response(data);
					},
					async:false,
					dataType: "json"
				});
			},
			search: function() {
				// custom minLength
			var allow_search=true;
				var term = extractLast( this.value );
				if ( term.length < 2 ) {
					allow_search=false;
				}
				// if is defined the attribute 'maxvalues' we limit the search
				// to it
				if ($(this).attr('maxvalues')!=undefined){
					var terms = split(this.value)
					terms.pop(); //removing last blank ? value
					if (terms.length>=$(this).attr('maxvalues')){
						terms.push("");
						$('#'+this.id).val(terms.join( ", " ));
						allow_search=false;
					}
				}
				return allow_search;
			},
			focus: function() {
			// prevent value inserted on focus				
				return false;
			},
			select: function(event, ui)
			{
				var terms = split( this.value );
				// remove the current input
				terms.pop();
				// add the selected item
				terms.push( ui.item.value );
				// add placeholder to get the comma-and-space at the end
				terms.push( "" );
				this.value = terms.join( ", " );
				sFieldId = this.id.substr(0, this.id.length-11);
					var idx = split($('#'+sFieldId).val());
					idx.pop();
					idx.push( ui.item.id);
					idx.push( "" );
				$('#'+sFieldId).val(idx.join( ", " ));
				ResizeTextArea(this);
				return false;			
			},
			close:function (event, ui){
				 ResizeTextArea(this);				
			},
			change: function (event, ui){
					ResizeTextArea(this);
					processChangesAM(this);
			setTimeout(function(){
					return true;	
				},500);

			}
		});
		// $(".autocompletemulti").data({objStore:new Array()});
		// console.log($(".autocompletemulti").data().objStore);
	}
	
	ResizeTextArea($(".autocompletemulti").get(0));
	
	function processChangesAM(obj){
		//console.log('changed');
		//console.log(obj.id);
		sFieldId = obj.id.substr(0, obj.id.length-11);
		sFieldDescription = obj.id;
		arrFieldIdValue = split($('#'+sFieldId).val());
		sFieldIdFilterVal = $('#'+sFieldId+'Filter').val();
		arrFieldDescriptonValue = split($('#'+sFieldDescription).val());

		var values=encodeURIComponent(JSON.stringify(arrFieldDescriptonValue));
		// console.log(values);
		//var idx = encodeURIComponent(JSON.stringify(arrFieldIdValue));
  		if (arrFieldDescriptonValue.length<=1){ // or values ?			
			$('#'+sFieldId).val("");
			$('#'+sFieldDescription).val("");
		}else{
			$('#'+sFieldId).val("");
			$('#'+sFieldDescription).val("");
			$.ajax({
				url: "/includes/actLoad.php",
				type: "POST",
				global: false,
				data:(
				{
					'autocompletemulti':sFieldId,
					 'term':values,
					//'id':idx,
					'filter':sFieldIdFilterVal
				}),
				success: function(data)
				{
				$(data).each(function(id,obj){
					// console.info(obj.id);
					$('#'+sFieldId).val($('#'+sFieldId).val()+obj.id+", ")
					$('#'+sFieldDescription).val($('#'+sFieldDescription).val()+obj.value+", ");
					//console.info($('#'+sFieldId).val());
				});
				},
				async:false,
				dataType: "json"								
			});	
		
	  }
	}
	function checkValsAutoCompleteMulti(obj)
	{
		// this function is used by autocompletemulti.
		//console.log('closed');
		sFieldId = obj.id.substr(0, obj.id.length-11);
		sFieldDescription = obj.id;
		arrFieldIdValue = split($('#'+sFieldId).val());
		arrFieldDescriptonValue = split($('#'+sFieldDescription).val());
		// $(".autocompletemulti").data().objStore=[];
		var arrNewIdx= new Array();
		var arrNewVals= new Array()
			for(var i=0;i<arrFieldDescriptonValue.length-1;i++){
				for(var j=0;j<arrFieldIdValue.length-1;j++){
					var idxElem=arrFieldIdValue[j].slice(arrFieldIdValue[j].indexOf("=")+1);
					// if (idxElem==arrFieldDescriptonValue[i] &&
					// $(".autocompletemulti").data().objStore.toString().indexOf(idxElem)==-1){
					if (idxElem==arrFieldDescriptonValue[i] && arrNewIdx.toString().indexOf(idxElem)==-1){
					// $(".autocompletemulti").data().objStore.push(arrFieldIdValue[j]);
						arrNewIdx.push(arrFieldIdValue[j]);
						arrNewVals.push(arrFieldDescriptonValue[i]);
					}
				}
			}
		arrNewIdx.push("");
		arrNewVals.push("");
		$('#'+sFieldId).val(arrNewIdx.join(", "));
		$('#'+sFieldDescription).val(arrNewVals.join(", "));
		// console.log($(".autocompletemulti").data().objStore.join(", "));
	}
});

function ResizeTextArea(txtBox)
{
if (txtBox!=undefined){
	nCols = txtBox.cols;
	sVal = txtBox.value;
	nVal = sVal.length;
	nRowCnt = 1;
// is a space character is input, increment nRowCnt; not needed
/*
 * for (i=0;i<nVal;i++){ if (sVal.charAt(i).charCodeAt(0) == 13) { nRowCnt +=1; } }
 */
	if (nRowCnt < (nVal / nCols)) {
		nRowCnt = 1 + (nVal / nCols); 
	}
	txtBox.rows = nRowCnt;
}
} 

function DeleteUploadedFile(sObjectId, sControlId)
{
	$('body').children().last().after('<div id="deleteFileDialog"><p><span id="status" class="field">Cancellare il file?</span></p></div>');
	$('#deleteFileDialog').dialog(
	{

		buttons:
		{
			'No': function()
			{
				$(this).dialog('destroy');
				$('#deleteFileDialog').remove();
			},
			'Si': function()
			{
				$(this).dialog('option', 'buttons', {'Chiudi': function(){$(this).dialog('destroy');$('#deleteFileDialog').remove();window.location.reload(true)}});								
				$.ajax({
					url:'/includes/actFileSys.php',
					timeout:5000,
					async: false,
					type: "POST",
					data: (
					{
						'action':'delete',
						'id':sObjectId
					}),
					success: function(serverData)
					{
						oFileData = jQuery.parseJSON(serverData);
						$('#deleteFileDialog #status').text(oFileData.message);
						if(oFileData.error === 0)
						{
// from upload control:
							$('#'+sControlId+' div.link.add').attr('class', 'link add');
							$('#'+sControlId+' div.link.preview').attr('class', 'link preview hidden');
							$('#'+sControlId+' div.link.change').attr('class', 'link change hidden');
							$('#'+sControlId+' div.link.delete').attr('class', 'link delete hidden');
							$('#'+sControlId+' .file .icon').attr('class', 'icon icon_file_unknown');
							$('#'+sControlId+' .control .filename').text(oFileData.fileName);
							$('#'+sControlId+' .control .filedetails .item.type .value').text(oFileData.fileType);
							$('#'+sControlId+' .control .filedetails .item.date .value').text(oFileData.fileDate);
							$('#'+sControlId+' .control .filedetails .item.size .value').text(oFileData.fileSize);
// from picture upload control:
							$('#'+sControlId+' .file .preview .thumbnail img').attr('src', '/includes/libImg.php?file=../public/NoImage.gif&width=240&height=180');
						}
						else
						{
							$('#deleteFileDialog').dialog('option', 'title', 'Error #'+oFileData.error);
						};
						setTimeout(function()
						{
							$('#deleteFileDialog').dialog('destroy');
							$('#deleteFileDialog').remove();
						}, 3000);
					},
					error: function(req,error)
					{
						console.info(req);
						console.info(error);
					},
					beforeSend: function(data)
					{
						$('#deleteFileDialog').dialog('option', 'title', 'File cancellato!');
						$('#deleteFileDialog #status').text('File cancellato!');
					}
				})
			}
		},
		title:'Conferma la Cancellazione!',
		modal:true,
		 beforeClose: function(event, ui) { window.location.reload(true); }
	});
}

