application.search.Criteria = function(column) {
	this.column = column,
	
	this.selectedOperator = this.getOperatorList()[0].operator,
	this.searchValue = '',

	this.linkOperator = 'AND'
};

application.search.Criteria.prototype = {
	operatorList: [
		{
			widgets:  [
				application.widgetNames.SIMPLETEXT,
				application.widgetNames.MULTIVALUEDSIMPLETEXT,
				application.widgetNames.MULTILINETEXT,
				application.widgetNames.CONTACT
			],
		 	list: [
				{operator:'content', label: 'Contient au moins un des mots'},
				{operator:'contentExact', label: 'Contient cette expression'},
				{operator:'begin', label: 'Commence par'},
				{operator:'end', label: 'Finit par'},
			]
		},
		{
			widgets: [
				application.widgetNames.EXCLUSIVELEXIQUE
			],
			list: [
				{operator:'=', label: 'Est &eacute;gal &agrave;'}
			]
		},
		{
			widgets: [
				application.widgetNames.DATE
			],
			list: [
				{operator:'=', label: 'Est &eacute;gal &agrave;'},
				{operator:'>', label: 'Est ant&eacute;rieur &agrave;'},
				{operator:'<', label: 'Est post&eacute;rieur &agrave;'}
			]
		},
		{
			widgets: [
				application.widgetNames.LEXIQUE,
				application.widgetNames.GEOG,
				application.widgetNames.TREE
			],
			list: [
				{operator:'contentExact', label: 'Est &eacute;gal &agrave;'}
			]
		}
	],
	
	getOperatorList: function() {
		for (var i=0; i<this.operatorList.length; i++) {
			var widgetList =this.operatorList[i].widgets;
			for (var w=0; w<widgetList.length; w++) {
				if (widgetList[w] == this.column.widget) {
					return this.operatorList[i].list;
				}
			}
		}
		return [];
	},
	
	getSearchString: function() {
		var searchString = this.column.searchPattern;
		
		if (this.selectedOperator == 'content') {
			searchString = searchString.replace("%val%",this.searchValue);
		} else if (this.selectedOperator == 'contentExact') {
			searchString = searchString.replace("%val%","\"" + this.searchValue + "\"");
		} else if (this.selectedOperator == 'begin') {
			searchString = searchString.replace("%val%",this.searchValue + "*");
		} else if (this.selectedOperator == 'end') {
			searchString = searchString.replace("%val%","*" + this.searchValue);
		} else if (this.selectedOperator == '=') {
			if (this.column.id == 'TabExtensionGeo' && this.searchValue == 'no_geog') {
				searchString = "place:(No geography)";
			} else if (this.column.searchPattern.indexOf("corporate") > -1) {
				searchString = searchString.replace("%val%",this.searchValue);
			} else if (this.column.id == 'TabAdherent') {
				searchString = searchString.replace("%val%",this.searchValue);
			} else {
				searchString = searchString.replace("%val%"," == " + this.searchValue);
			}
		} else if (this.selectedOperator == '>') {
			searchString = searchString.replace("%val%"," >= " + this.searchValue);
		} else if (this.selectedOperator == '<') {
			searchString = searchString.replace("%val%"," <= " + this.searchValue);
		}
		
		return searchString;
	},
	
	getSearchObject: function() {
		if (this.column.widget == application.widgetNames.TREE) {
			if (this.searchValue) {
				var values = this.searchValue.split('/');
				var field = [this.column.searchFields[0]];
				var search = this.searchValue;
				
				if (values) {
					if (values.length > 0) {
						field = [values[0].toLowerCase()];
					}
					if (values.length > 1) {
						search = values[1];
						if (values.length > 2) {
							search += "/" + values[2];
						}
					}	
				}
			}
			return {
				linkOperator : this.linkOperator,
				searchOperator : this.selectedOperator,
				searchFields : application.serializeArray(field),
				searchValue : search
		};

		}
		return {
				linkOperator : this.linkOperator,
				searchOperator : this.selectedOperator,
				searchFields : application.serializeArray(this.column.searchFields),
				searchValue : this.searchValue
		};
	}
	
};
