/*
 * Updated by Anas Alkouz (am@bayt.net) ticketS (14755 , 15094 , 15196)
 * */

// LIST OF FORM OBJECT NAMES
var args = "";
function show_filter_box(base_name) {
	var lang = document.body.id;
	switch(lang)
	{
	case "ar":
		var criteriaTitle = "حدد صيغة البحث";
		break;    
	case "fr":
		var criteriaTitle = "Sélectionnez vos critères de recherche";	
		break;
	default:
		var criteriaTitle = "Select Your Search Criteria";
	}
	
	// Split arguments into array since it won't be accessible by outside functions
	args = Array.prototype.slice.call(arguments);
	
	// UNBIND ANY EVENT FROM CANCEL BUTTON IN MODAL WINDOW
	$('#globalMWCancel').unbind();
	// UNBIND KEYDOWN SO I CANT BIND AND EVENT AGAIN TO ESC KEY FOR HANDLING THE MODAL WINDOW
	$(document).unbind("keydown");
	// IS THE DIV SAVED BEFORE OR IT'S NEW DIV
	if(!$('div').is('#filter-' + base_name)) {
		
		var remote_page = '/app/sections/work/employer/cv_filter';
		var params = 'criteria=' + base_name ;
		var pageStatus;
	
		// GET THE DIV CONTENT
		baytModal.setModal("","",false);
		baytModal.postData(remote_page,
		  			{ criteria: base_name},
		 			function(html,status){
		 				show_hide_loading(false);
		 				if (html == "" || html == null) {
		 					// ERROR ON GETTING THE CONTENT
		 					pageStatus = 'error';
		 					$('#globalMW').modal();
							$('#globalMWError').html("<div><h3 style=\"color:#E00000;\">Server error while loading the filter!</h3></div>");
						}else{
			 				// SUCCESS:SHOW THE DIV IN MODAL WINDOW
			 			    // INSTEAD OF SUBMIT WE CALL SAVEFILTERVALUES FUNCTION TO SAVE THE DIV CONTENT
						    $("form[name=baytModalForm]").attr('onsubmit',"");
							$("form[name=baytModalForm]").attr('action',"javascript:if(saveFilterValues('"+base_name+"')){};");							 			 
				 			
			 			    $("#globalMWOk").removeClass();
			 				$('#globalMWContent').html(html);
			 				$("#globalMWTitle").html(criteriaTitle);
			 			}
			 			$('#globalMW').modal();
			 			
			 			// FOCUS INPUT TEXT IF EXIST ELSE FOCUS OK BUTTON
			 			if ( $("input:text[name="+base_name+"]").html() != null ) {
			 				$("input:text[name="+base_name+"]").focus();
			 			} else {
			 				$("#globalMWOk").focus();
			 			}
			 			
			 			// IF WE HAVE SELECT IN THE MODAL WINDOW, WE ADD EVENT ON LAST SELECT
			 			$("select",$("div#globalMWContent") ).each(function(e){
			 				// IF MULTIPLE SELECT WE ADD THE EVENT HANDELR ON ENTER BUTTON
			 				if ($(this).attr("multiple")) {
			 					$(this).keyup(function (e) {
			 						var KeyID = (window.event) ? event.keyCode : e.keyCode;
			 						if (KeyID == 13) {
			 							saveFilterValues(base_name);
			 						}
			 					} );
			 				} else if (($("select",$("div#globalMWContent") ).length - 1) == e) {
			 					// IF SINGLE SELECT WE ADD EVENT HANDLER ON CHANGE TO FOCUS
			 					// OK BUTTON THEN WHEN THE USER PRESS ENTER IT WILL SUBMIT
			 					$(this).change(function() { $("#globalMWOk").focus(); });	
			 				}
			 			});
			 		},
					function(){
						pageStatus = 'error'
		 				$('div#filter-' + base_name).remove();
					}
		 			
		 		);
		
		// SAVE THE DIV BEFORE WE CLOSE THE MODAL WINDOW WHEN WE PRESS Esc
		$(document).keydown(function(e){if(e == null){/*IE*/keycode = event.keyCode;}else{/*mozilla*/keycode = e.which;}if(keycode == 27){
			if (pageStatus != 'error') {
				$('div#filterbox').children().find('form').append('<div id=\"filter-' +base_name+ '\" class=\"hide\"></div>');
				$("div#filter-"+base_name).html($('#globalMWContent').html());
			}
			$.modal.close(true);
			$('#globalMWContent').html("");
		}});
		
		// SAVE THE DIV CONTENT WHEN THE USER CLICK ON CANCEL
		$('#globalMWCancel').bind('mousedown', function(e){
			if (pageStatus != 'error') {
				$('div#filterbox').children().find('form').append('<div id=\"filter-' +base_name+ '\" class=\"hide\"></div>');
				$("div#filter-"+base_name).html($('#globalMWContent').html());
			}
			$.modal.close(true);
			$('#globalMWContent').html("");
		}); 		
	
		
	} else {
		// GET THE EXISTING DIV CONTENT AND SHOW IT IN MODAL WINDOW
		// INSTEAD OF SUBMIT WE CALL SAVEFILTERVALUES FUNCTION TO SAVE THE DIV CONTENT
		$("form[name=baytModalForm]").attr('onsubmit',"");
		$("form[name=baytModalForm]").attr('action',"javascript:if(saveFilterValues('"+base_name+"')){};");
		
		var temporary_div = $('div#filter-' + base_name);
		show_hide_loading(false);
		$("#globalMWOk").removeClass()
		$('#globalMWContent').html( $('div#filter-' + base_name).html());
		$("#globalMWTitle").html(criteriaTitle);
		$('div#filter-' + base_name).remove();
		$('#globalMW').modal();
		
		// FOCUS INPUT TEXT IF EXIST ELSE FOCUS OK BUTTON
		if ( $("input:text[name="+base_name+"]").html() != null ) {
			$("input:text[name="+base_name+"]").focus();
		} else {
			$("#globalMWOk").focus();
		}
		
		// IF WE HAVE SELECT IN THE MODAL WINDOW, WE ADD EVENT ON LAST SELECT
		$("select",$("div#globalMWContent") ).each(function(e){
			// IF MULTIPLE SELECT WE ADD THE EVENT HANDELR ON ENTER BUTTON
			if ($(this).attr("multiple")) {
				$(this).keyup(function (e) {
					var KeyID = (window.event) ? event.keyCode : e.keyCode;
					if (KeyID == 13) {
						saveFilterValues(base_name);
					}
				} );
			} else if (($("select",$("div#globalMWContent") ).length - 1) == e) {
				// IF SINGLE SELECT WE ADD EVENT HANDLER ON CHANGE TO FOCUS
				// OK BUTTON THEN WHEN THE USER PRESS ENTER IT WILL SUBMIT
				$(this).change(function() { $("#globalMWOk").focus(); });	
			}
		});
		
		// SAVE THE DIV BEFORE WE CLOSE THE MODAL WINDOW WHEN WE PRESS Esc
		$(document).keydown(function(e){if(e == null){/*IE*/keycode = event.keyCode;}else{/*mozilla*/keycode = e.which;}if(keycode == 27){
			if (pageStatus != 'error') {
				$('div#filterbox').children().find('form').append('<div id=\"filter-' +base_name+ '\" class=\"hide\"></div>');
				$("div#filter-"+base_name).html(temporary_div.html());
			}
			$.modal.close(true);
			$('#globalMWContent').html("");
		}});
		// SAVE THE DIV CONTENT WHEN THE USER CLICK ON CANCEL
		$('#globalMWCancel').bind('mousedown', function(e){
			if (pageStatus != 'error') {
				$('div#filterbox').children().find('form').append('<div id=\"filter-' +base_name+ '\" class=\"hide\"></div>');
				$("div#filter-"+base_name).html(temporary_div.html());
			}
			$.modal.close(true);
			$('#globalMWContent').html("");
		});
		// SHOW / HIDE CVs BY MONTH AND CVs BY DATE RANGE FIELDS
		if ( base_name == 'cv_freshness' && $('div').is('#date_month-off') ) {
			if ( $("input[name='"+base_name+"']:checked").val() == 6 || $("input[name='"+base_name+"']:checked").val() == 7 ) {
				toggleRadio('date_month',document.baytModalForm.cv_freshness[$("input[name='"+base_name+"']:checked").val()-2],'6');
				toggleRadio('date_range',document.baytModalForm.cv_freshness[$("input[name='"+base_name+"']:checked").val()-2],'7');
			} else {
				toggleRadio('date_month',document.baytModalForm.cv_freshness[0],'6');
				toggleRadio('date_range',document.baytModalForm.cv_freshness[0],'7');
			}
		}
	}
}

// UPDATE FILTER VALUES AND SAVE THE CONTENT IN HIDDEN DIV
function saveFilterValues(base_name) {
	if (formValidator(document.baytModalForm )) {
		$('div#filter-' + base_name).remove();
		updateFilterValue(args);
		// SAVE THE MODAL CONTENT INTO HIDDEN DIV
		$('div#filterbox').children().find('form').append('<div id=\"filter-' +base_name+ '\" class=\"hide\"></div>');
		$("div#filter-"+base_name).html($('#globalMWContent').html());
		$.modal.close(true);
		$('#globalMWContent').html("");
		return false;
	}
}

// RESET FORM OBJECTS TO THEIR ORIGINAL VALUES
// ARGUMENTS PASSED ARE A LIST OF FORM OBJECT NAMES
function resetFilterValue(args){
	// loop through all args passed
	for (var i = 0; i < args.length; i++){
		var form_element = $('*[name='+args[i]+']');
		
		// if the object name exists more than once, then it's a radio or checkbox <input> object set
		if (form_element.length > 1) {
			$(form_element).each(function(){
				$(this)[0].checked = ($(this)[0].defaultChecked) ? true : false;
			});
		} else {
			var form_element = form_element[0];
			if ($(form_element).attr('type') == 'checkbox') {
				form_element.checked = (form_element.defaultChecked) ? true : false;
			} else {
				switch (form_element.tagName.toLowerCase()){
					case "select" :
						$(form_element).children('option').each(function () {
							$(this)[0].selected = ($(this)[0].defaultSelected) ? true : false;
						});				
						break;
					case "input" :
							form_element.value = form_element.defaultValue;				
						break;
					case "textarea" :	
							form_element.value = form_element.defaultValue;
						break;
				}
			}
		}
	}
}

// UPDATE THE DISPLAY OF THE CURRENT FORM OBJECT VALUE IN THE FILTER BOX
// ARGUMENTS PASSED ARE A LIST OF FORM OBJECT NAMES
function updateFilterValue(args){
	var lang = document.body.id;
	switch(lang)
	{
	case "ar":
		var clearBttn = "تراجع";
		var freshness = "السير الذاتية من";
		var join_word_and = " و "
		var join_word_or = " أو "
		break;    
	case "fr":
		var clearBttn = "Annuler";	
		var freshness = "CV depuis";
		var join_word_and = " ET "
		var join_word_or = " OU "
		break;
	default:
		var clearBttn = "Undo";
		var freshness = "CVs from";
		var join_word_and = " AND "
		var join_word_or = " OR "
	}
	
	var first_base_name = args[0].replace(/'/g,"");
	var first_element = $('*[name='+first_base_name+']');
	// 0 : means don't to show clear button (There is no value or the value is empty)
	// 1 : means show clear button (The value is not empty) 
	var clear_bttn_p = 0;
	// loop through all args passed
	for (var i = 0; i < args.length; i++){
		var base_name = args[i].replace(/'/g,"");
		// IF IT'S CV FRESHNESS BY DATE RANGE (For NCB)
		if(base_name == "date_from" || base_name == "date_to") {
			var filter_value = ""
			var Dates=new Array("year","month","day");
			for (x in Dates)
			{
				var new_base_name = base_name+"_"+Dates[x];
				var form_element = $('*[name='+new_base_name+']');
				var form_element = $(form_element)[0];
				$(form_element).find('option').each(function () {
					if ($(this)[0].selected && $(this).val()) {
						filter_value = (filter_value == "") ? this.value :	filter_value + "-" + this.value;
						
						$(this)[0].defaultSelected = true;
					    // IF THE FIRST ELEMENT IS SELECTED THEN SHOW THE CLEAR BUTTON
					    if ( $(first_element).attr('name') == $(form_element).attr('name') ) {
							clear_bttn_p = 1
						}						
					} else {
						$(this)[0].defaultSelected = false;
					}
				});
			}
		} else {
			var form_element = $('*[name='+base_name+']');
			var filter_value = "";
			if ($(form_element).attr('type') == 'radio' || $(form_element).attr('type') == 'checkbox') {
				$(form_element).each(function(){
					if ($(this).attr('checked')){
						if ($(this).val() != ""){
							    // IF WE CHOOSE CVS BY DATE RANGE OR CVS BY MONTHS (FOR NCB)
							    if ( base_name == 'cv_freshness' && ( $(this).val() == 6 || $(this).val() == 7 ) ) {
							    	filter_value = (filter_value == "") ? freshness : filter_value + "; " + freshness
							    } else {
							    	filter_value = (filter_value == "") ? $(this).next().html() : filter_value + "; " + $(this).next().html();
							    }
						}
						$(this)[0].defaultChecked = true;
						// IF THE FIRST ELEMENT IS CHECKED THEN SHOW CLEAR BUTTON
						if ( $(first_element).attr('name') == $(form_element).attr('name') ) {
							if ( $(this).val() == "" ) {
								clear_bttn_p = 0;
							} else {
								clear_bttn_p = 1;
							}
						}
					} else {
						$(this)[0].defaultChecked = false;
					}
				});
			} else {
				var form_element = $(form_element)[0];
				switch (form_element.tagName.toLowerCase()){
					case "select" :
						$(form_element).find('option').each(function () {
							if ($(this)[0].selected && $(this).val()) {
								filter_value = (filter_value == "") ? $(this).text() :	filter_value + "; " + $(this).text();
							    $(this)[0].defaultSelected = true;
							    if ( $(form_element).val() != "" ) {
									clear_bttn_p = 1
								}						
							} else {
								$(this)[0].defaultSelected = false;
							}
						});	
						break;
					case "input" :
						filter_value = $(form_element).val();
						// IF MULTIPLE SELECT (ADD ANOTHER FUNCTIONALITY)
						var element_name = $(form_element).attr("name");
						if ( element_name == "rescountry" || 
							 element_name == "citizen" || 
							 element_name == "jobcategory" || 
							 element_name == "expcountry" || 
							 element_name == "educountry" || 
							 element_name == "joblocation"  || 
							 element_name == "car_driving_loc" ||
							 element_name == "exp_industry") {
							var selected_values = filter_value.split(" ")
							var array_of_names = new Array(selected_values.length -1);
							var join_word = '; ';
							// GET THE NAME FOR EACH VALUE AND SAVE IT IN ARRAY
							for (j=0 ; j< selected_values.length ; j++) {
								var element_value = selected_values[j];
								var value_of_select = $("#id-"+base_name+"_1").find("option[value="+element_value+"]").val();
								if (value_of_select != '') {
									array_of_names[j] = $("#id-"+base_name+"_1").find("option[value="+element_value+"]").html();
								}
								
								// SET THE DEFAULT VALUE FOR EACH SELECT
								$("#id-"+base_name+"_"+ (j+1) +" option").removeAttr("selected");
								$("#id-"+base_name+"_"+ (j+1)).find("option[value="+element_value+"]").each(function () {
									$(this)[0].defaultSelected = true
								});	
							}
							filter_value = array_of_names.join("; ");
						} else if (element_name == "language_skills") {
							var selected_values = filter_value.split(" ")
							var array_of_names = new Array(selected_values.length -1);
							var join_word = join_word_or;
							var search_mode = $("input[name=lang_search_mode]:checked").val();
							if ( search_mode == 2) join_word = join_word_and;
							
							// GET THE NAME FOR EACH VALUE AND SAVE IT IN ARRAY
							for (j=0 ; j< selected_values.length ; j++) {
								var cmpst_element = selected_values[j].split(",");
								var frst_element = cmpst_element[0];
								var scnd_element = cmpst_element[1];
								array_of_names[j] = '';
								
								var value_of_frst_select = $("#id-"+base_name+"_1").find("option[value="+frst_element+"]").val();
								if ( value_of_frst_select != '') {
									array_of_names[j] = $("#id-"+base_name+"_1").find("option[value="+frst_element+"]").html();
								}
								
								var value_of_scnd_select = $("#id-lang_level_1").find("option[value="+scnd_element+"]").val();
								if (value_of_scnd_select && value_of_scnd_select != '') {
									array_of_names[j] = array_of_names[j] + '('+$("#id-lang_level_1").find("option[value="+scnd_element+"]").html()+')';
								}

								// SET THE DEFAULT VALUE FOR EACH SELECT
								$("#id-"+base_name+"_"+ (j+1) +" option").removeAttr("selected");
								$("#id-"+base_name+"_"+ (j+1)).find("option[value="+frst_element+"]").each(function () {
									$(this)[0].defaultSelected = true
								});
								$("#id-lang_level_"+ (j+1)).find("option[value="+scnd_element+"]").each(function () {
									$(this)[0].defaultSelected = true
								});
							}
							filter_value = array_of_names.join(join_word);
						}
						
						
						form_element.defaultValue = $(form_element).val();
						
						// IF THE FIRST ELEMENT HAS VALUE THEN SHOW THE CLEAR BUTTON
						if ( $(first_element).attr('name') == $(form_element).attr('name') ) {
							if ( $(form_element).val() == "" ) {
								clear_bttn_p = 0;
							} else {
								clear_bttn_p = 1;
							}
						}
						
						break;
					case "textarea" :	
						filter_value = $(form_element).val();
						form_element.defaultValue = $(form_element).val();
						
						// IF THE FIRST ELEMENT HAS VALUE THEN SHOW THE CLEAR BUTTON
						if ( $(first_element).attr('name') == $(form_element).attr('name') ) {
							if ( $(form_element).val() == "" ) {
								clear_bttn_p = 0;
							} else {
								clear_bttn_p = 1;
							}
						}
						break;
				}
			}
	    }

		filter_value  = formatNewString(base_name,filter_value); // format the potential new string
		if ($('span#view-' + base_name).html() != "") {
			if ($('span#view-' + base_name).html() != filter_value) {
					$('span#view-' + base_name).empty().append(filter_value + ' ').addClass('newfiltertext');
			}
		} else {
			$('span#view-' + base_name).append(filter_value + ' ').addClass('newfiltertext');
		}
	}
	
	
	
	// SHOW OR HIDE CLEAR BUTTON
	if ( clear_bttn_p == 1) {
		var last_base_name = args[args.length -1].replace(/'/g,"");
		var args_string = args.join(",");
		$('#clear-' + first_base_name).remove();
		$('span#view-' + last_base_name).after('<a id=\"clear-'+first_base_name+'\" href=\"javascript:clearCriteria(\''+args_string+'\');\">'+clearBttn+'</a>')
	} else {
		$('#clear-' + first_base_name).remove();		
	}
}

// TO CLEAR THE SELECTED CRITERIA
function clearCriteria(args) {
	var args_array = args.split(","); 
	// REMOVE THE SHOWN TEXT
	for (var i = 0; i < args_array.length; i++) {
		var base_name = args_array[i].replace(/'/g,"");
		$('span#view-' + base_name).empty();
		if ( base_name == 'date_from' || base_name == 'date_to') {
			var Dates=new Array("day","month","year");
			for (x in Dates)
			{
				var new_base_name = base_name+"_"+Dates[x];
				var form_element = $('*[name='+new_base_name+']');
				form_element.find('option').each(function () {
					$(this)[0].defaultSelected = false;
				});
				form_element.val("");
			}
		} else {
			var form_element = $('*[name='+base_name+']');
			if ($(form_element).attr('type') == 'radio' || $(form_element).attr('type') == 'checkbox') {
				var first_element = true
				$(form_element).each(function() {
					if ( first_element && $(form_element).attr('type') == 'radio' ) {
						$(this)[0].defaultChecked = true;
						$(this).attr({ checked: "checked" });
						first_element = false;
					} else {
						$(this)[0].defaultChecked = false;
						$(this).removeAttr("checked")
					}
				});
			} else {
				var form_element = $(form_element)[0];
				if ( form_element ) {
					switch (form_element.tagName.toLowerCase()){
						case "select" :
							$(form_element).find('option').each(function () {
								$(this)[0].defaultSelected = false;
							});
							$(form_element).val("");
							break;
						case "input" :
							// IF MULTIPLE SELECT (ADD ANOTHER FUNCTIONALITY)
							var element_name = $(form_element).attr("name");
							if ( element_name == "rescountry" || element_name == "citizen" || element_name == "jobcategory" || element_name == "expcountry" || element_name == "educountry" || element_name == "joblocation" ) {
								clearMultiSelect( base_name , '5' )
							} else if (element_name == "language_skills") {
								
								clearMultiSelect(base_name , '5', 'lang_level');
							} else {
								// TEXT INPUT
								form_element.defaultValue = "";
								$(form_element).val("");
							}
							break;
						case "textarea" :	
							form_element.defaultValue = "";
							break;
					}
				}
			}
		}
	}
	
	var baseName = args_array[0]
	$('#clear-' + baseName).remove();
}

function formatNewString(baseName,theString){
	var newString = "";
	// baseName is one of the keyword operators; the new string will contain parantheses around it
	if (baseName.indexOf("_operator") > -1){
		var operatorString = baseName.replace("_operator", ""); // get the name of the corresponding keyword <input>
		// if value for the corresponding keyword <input> is empty, then set newString for the radio <input> to empty
		// else, set the newString with surrounding parantheses
		newString = (trim($('*[name='+operatorString+']').val()) == "") ? "" : "(" + theString + ")";
	} else if (baseName.indexOf("_last_only") > -1 && theString != "") {
		var lastOnlyString = baseName.replace("_last_only", ""); // get the name of the corresponding keyword <input>
		// if value for the corresponding keyword <input> is empty, then set newString for the radio <input> to empty
		// else, set the newString with surrounding parantheses
		newString = (trim($('*[name='+lastOnlyString+']').val()) == "") ? "" : "(" + theString + ")";	
	} else if (baseName.indexOf("_min") > -1) {
		var minString = ($('body').attr('id') == "ar") ? "الحد الأدنى" : "Min"
		newString = (theString != "") ?	newString = minString + ': ' + theString : '';
	} else if (baseName.indexOf("_max") > -1) {
		var maxString = ($('body').attr('id') == "ar") ? "الحد الأقصى" : "Max"
		newString = (theString != "") ?	newString = maxString + ': ' + theString : '';
	// baseName is not one of the keywordOperators
	} else if (baseName.indexOf("_industry") > -1) {
		var maxString = ($('body').attr('id') == "ar") ? "مجال الشركة" : "Company Industry"
		newString = (theString != "") ?	newString = '<b>'+ maxString + '</b>: ' + theString + '<br />': '';
	} else if (baseName.indexOf("_job_role") > -1) {
		var maxString = ($('body').attr('id') == "ar") ? "الدور الوظيفي" : "Job Role/Department"
		newString = (theString != "") ?	newString = '<b>'+ maxString + '</b>: ' + theString + '<br />': '';
	} else if (baseName.indexOf("lang_search_mode") > -1) {
		newString = ""
	} else {
		newString = trim(theString);
	}
	return newString;
}