function enableCheckAllOnTable(tableId,oTable) {	
	$('#'+tableId+'jqtableCheckAll').click( 
		function() {			
			var selector = '#'+tableId+' :input[name="table_selection"]';			
			$(selector).attr('checked',this.checked);
		}	
	);
}

function checkboxFnRowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
	$('td:eq(0)', nRow).html( '<input type=\"checkbox\" name=\"table_selection\" value=\"' + aData[0] +  '\"></input>' );	
	return nRow;
}

function defaultFnRowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
	return nRow;
}


function reloadTable(table){	
	//Conver string to var
	if(typeof table == 'string'){
		table = eval(table);
	}	
	
	var oSettings = table.fnSettings();
	table.fnDraw();
	
}

/**
 * Function for adding additional parameters to table ajax call
 * @param formName
 * @param sSource
 * @param aoData
 * @param fnCallback
 * @return
 */
function defaultFnServerData(formName,sSource, aoData, fnCallback){
	//if(aoData == null || aoData == undefined) aoData = this.aoData;
	if(aoData != null && aoData != undefined){
		var arr = $('#'+formName).serializeArray();
		_insertZeroInUncheckedCheckbox(formName, arr);
		$.each(arr,function (key, value) {
					if(value != null && value != ""){
						aoData.push(value);
					}	
		        }
		);
	}	
	
	$.getJSON( sSource, aoData, function (json) { 
		/* Do whatever additional processing you want on the callback, then tell DataTables */
		fnCallback(json);
	} );	
}

function renderDialogLink(oObj,url,paramName,pkCol,dialogName,formName){	
	var text = oObj.aData[oObj.iDataColumn];
	return __renderDialogLinkImpl(oObj,url,paramName,pkCol,dialogName,formName, text); 
}

function renderDialogLinkWithText(oObj,url,paramName,pkCol,dialogName,formName, text){
	return __renderDialogLinkImpl(oObj,url,paramName,pkCol,dialogName,formName, text);
}

function __renderDialogLinkImpl(oObj,url,paramName,pkCol,dialogName,formName, text){
	var paramVal = oObj.aData[pkCol];	
	var link = '<a class=\"table_action\" href=\"'+url+ '\" ';		 
	link += '  onclick="try{showFormInDialog(this,{\''+paramName+'\' : '+paramVal+'}, \''+formName+'\', \''+dialogName+'\');} catch(e){alert(e);} return false;" ';
	link +=  '>' + text + '</a>';
	return link;
}
		 
function renderActionLink(oObj,textParam,tableName,url,paramName,pkCol,confirmText,successText,errorText){
	var paramVal = oObj.aData[pkCol];
	
	var text = "";
	if(textParam != null && textParam != undefined){
		text = textParam;
	}else{
		text = oObj.aData[oObj.iDataColumn];
	}
	
	var link = '<a class=\"table_action\" href=\"#\" ';
	link += ' onclick=\"';
	if(confirmText != null){
		link +=  "showConfirmDialog('"+confirmText+"',function(){";
	}
		link +=  "submitTableLink('"+url+"/"+paramName+"/"+paramVal+"',"+tableName;
		if(successText != null){
			link +=  ",'"+successText+"'";
		}else{
			link +=  ",null";
		}
		if(errorText != null){
			link +=  ",'"+errorText+"'";
		}else{
			link +=  ",null";
		}	
		link +=  ");";
	if(confirmText != null){
		link +=  "});";
	}	
	link +=  'return false;';
	link +=  '\">' + text + '</a>';
	return link;
}


function renderGoToLink(oObj,textParam,tableName,url,paramName,pkCol,confirmText){
	var paramVal = oObj.aData[pkCol];
	
	var text = "";
	if(textParam != null && textParam != undefined){
		text = textParam;
	}else{
		text = oObj.aData[oObj.iDataColumn];
	}
	
	var link = '<a class=\"table_action\" href=\"#\" ';
	link += ' onclick=\"';
	if(confirmText != null){
		link +=  'showConfirmDialog(\''+confirmText+'\',function(){ ';
	}
		link +=  'window.location = \''+url+ '/' + paramName + '/' + paramVal+'\';';		
			
		
	if(confirmText != null){
		link +=  '});';
	}	
	link +=  'return false;';
	link +=  '\">' + text + '</a>';
	return link;
}



function submitTableLink(url,table,successText,errorText)
{		
	$.ajax({
		  type: 'POST',
		  async: false,
		  url: url,
		  data: {},
		  success: function(data, textStatus, XMLHttpRequest){
			  reloadTable(table);
			  var message = successText;			    
			  if(data.message){
				  message = data.message;
			  }
			  displayMessageDialog(message,data.type);
		  },
		  error: function(XMLHttpRequest, textStatus, errorThrown){
			  var message = errorText;	
			  if(errorText != null){
				  message = errorThrown;
			  }	  	
			  displayMessageDialog(message,'fatal');
		  },
		  dataType: 'json'
	});   
}

function addDialogLinkVertical(o,oObj,text, url,paramName,pkCol,dialogName,formName){
	if(o.value == null || o.value == 'undefined'){
		o.value = '<li class=\"table_action_li\">'+ renderDialogLinkWithText(oObj,url,paramName,pkCol,dialogName,formName, text) + '</li>';
	}else{
		o.value = o.value + '<li class=\"table_action_li\">'+ renderDialogLinkWithText(oObj,url,paramName,pkCol,dialogName,formName, text) + '</li>';
	}
}

function addDialogLinkHorizontal(o,oObj,text, url,paramName,pkCol,dialogName,formName){
	if(o.value == null || o.value == 'undefined'){
		o.value = renderDialogLinkWithText(oObj,url,paramName,pkCol,dialogName,formName, text) + '&nbsp;';
	}else{
		o.value = o.value + renderDialogLinkWithText(oObj,url,paramName,pkCol,dialogName,formName, text) + '&nbsp;';
	}
}


function addLinkVertical(o,oObj,type,text,url,paramName,pkCol,tableName, confirmText){
	var renderedContent = "";
	
	if(type == 'submit'){
		renderedContent = '<li class=\"table_action_li\">'+ renderGoToLink(oObj,text,tableName,url,paramName,pkCol,confirmText) + '</li>';															  
	} else if(type == 'ajax'){
		renderedContent = '<li class=\"table_action_li\">'+ renderActionLink(oObj,text,tableName,url,paramName,pkCol,confirmText) + '</li>';
	}else{
		console.debug('Invalid link type.');
	}

	if(o.value == null || o.value == 'undefined'){
		o.value = renderedContent;			
	}else{
		o.value = o.value + renderedContent;
	}		
}

function addLinkHorizontal(o,oObj,type,text,url,paramName,pkCol,tableName,confirmText){
	var renderedContent = "";
	
	if(type == 'submit'){
		renderedContent = renderGoToLink(oObj,text,tableName,url,paramName,pkCol,confirmText) + '&nbsp;';							
	} else if(type == 'ajax'){
		renderedContent = renderActionLink(oObj,text,tableName,url,paramName,pkCol,confirmText) + '&nbsp;';
	}else{
		console.debug('Invalid link type.');
	}
	
	if(o.value == null || o.value == 'undefined'){
		o.value = renderedContent;			
	}else{
		o.value = o.value + renderedContent;
	}	
}

function _insertZeroInUncheckedCheckbox(formName, formData)
{
	var tmp = $("#" + formName).find('input:checkbox.TinsSinglCheckbox').not(':checked')
	.each(function(index) {
	    if($(this).attr('name')){
	    	var element_name = $(this).attr('name');
	    	jQuery.each(formData, function(name, value) {
	    	    if(value.name == element_name){
	    	    	formData[name].value = 0;	    	    	
	    	    }
	    	});
	    }
	  });	
}

function submitFormFromModalDialog(formName, dialogNeme, tableName)
{		
	var formData = $("#" + formName).serializeArray();	

	_insertZeroInUncheckedCheckbox(formName, formData);
		
	$.ajax({
		  type: 'POST',
		  url: $("#" + formName).attr('action'),
		  data: formData,
		  success: function(data){					
					if(data.type == 'success'){
						if(tableName){
							reloadTable(tableName);
						}
						$("#" + dialogNeme).dialog("close");
					}else if(data.type == 'warning'){						
						displayMessageDialog(data.message,data.type);
						if(tableName){
							reloadTable(tableName);
						}
						$("#" + dialogNeme).dialog("close");
					}else{						
						displayMessageDialog(data.message,data.type);						
					}
				},
		  error: function(XMLHttpRequest, textStatus, errorThrown){			  
				displayMessageDialog("Fatal error has occured",'fatal');
		  },
		  dataType: 'json'
		});
}


function submitTableMultipleAction(element, tableName){	
	var confMsg = element.attr("conf");
	var urlString = element.attr("url");	
	var dialog = element.attr("dialog");	
	
	var selectedIds = new Array();
	$('#'+tableName+' :input[name="table_selection"]:checked')
	.each(function(index) {
	    if($(this).val()){
	    	selectedIds.push($(this).val());
	    }
	  });		
	
	if(selectedIds.length > 0){		
		if(dialog){
			dialog = eval('(' + dialog + ')');
			if(confMsg){
				showConfirmDialog(confMsg ,function(){
					closeMessageDialog();	
					showFormInDialog({href:urlString},{ids:selectedIds}, dialog.form, tableName+dialog.name);
				});		
			}else{
				showFormInDialog({href:urlString},{ids:selectedIds}, dialog.form, tableName+dialog.name);
			}	 
		}else {
			if(confMsg){
				showConfirmDialog(confMsg ,function(){
					closeMessageDialog();	
					__submitTableMultipleAction(selectedIds,urlString,tableName);
				});		
			}else{
				__submitTableMultipleAction(selectedIds,urlString,tableName);
			}	 
		}	
	}	
}

function __submitTableMultipleAction(selectedIds, urlString, tableName){
	$.ajax({
		  type: 'POST',
		  url: urlString,
		  data: {id: selectedIds},
		  success: function(data){
					reloadTable(tableName);						
					displayMessageDialog(data.message,data.type);											
				},
		  error: function(XMLHttpRequest, textStatus, errorThrown){			  
			  displayMessageDialog("Fatal error has occured",'fatal');
		  },
		  dataType: 'json'		
	});
}
 

function showConfirmDialog(confirmMessage, callback) {

	if(!confirmMessage) return true;	

	displayMessageDialog(confirmMessage, 'question', function() {
				callback();
	        }, function() {
	        	closeMessageDialog();
	        });

    return false;
}

function showFormInDialog(elementOrEvent,params, formName, dialogName)
{	
	var targetUrl = null;
	if (typeof elementOrEvent=="string"){
		//Ako je tring koristi to kao url
		targetUrl = elementOrEvent;
	}else if(typeof elementOrEvent=="undefined"){
		//Ako nije definisana koristi trenutni event
		var elementOrEvent = window.event;
	}else if(elementOrEvent.href){
		//Ako je element koristi href
		targetUrl = elementOrEvent.href;
	}else {
		//event
		var targ = elementOrEvent.target ? elementOrEvent.target : elementOrEvent.srcElement;//IE Hack
		if(targ){
			targetUrl = targ.href;
		} else{
			alert("Url is not defined");
		}	
	}	
	
	//alert(targetUrl); return false;
	
	if(targetUrl){
		//JQ ne hendluje greske u ajax-u tako da ako se desi exception nece biti potrebe za proverama
		$.post(
				targetUrl,
				params,
				function(data){		  
					populateForm($("#" + formName),data,true);				    
					$("#" + dialogName).dialog('open');
				},	
				"json"
		    );
	}else{
		populateForm($("#" + formName),{},true);			
		$("#" + dialogName).dialog('open');
	}			

    return false;
}

function populateForm(form,data1,resetForm){
	
	form.populate(data1,{resetForm:resetForm});
	
	$.each(data1, function(k, v) {
		$(form).data(k,v);
	});
	
	//Set datapickers in correct format.
	form.find(".TinsDatePicker").each(function(index) {
		try{
			$(this).datepicker("setDate", $(this).val());
		}catch (e) {
			alert(e);
		}	
		
	});	
}


function closeMessageDialog(dialogName){
	if(dialogName && typeof(dialogName)=='string'){
		$('#' + dialogName).dialog('close');
	}else{
		$('#messageDialog').dialog('close');
	}		
}


function getElementValueAsJson(formName,elementName){
	var form = $("#" + formName);

	var elementValue = form.find('input[name=\''+elementName+'\']').val();
	var evalScript = "var jsonArr = {"+elementName+":\""+elementValue+"\"}";
	eval(evalScript); 
	return jsonArr;
}

