var settingTypeIdx; //reset before using get_settings, or use searchSettings
var lastRegion = false;
var lastCategory = false;


function reset_value(name) {
	var elems = document.getElementsByName(name);
	
	if (elems) {
		for (var e in elems)
			e.disabled = true;
	}
}

function search_key_lookup(key, data) {
	if (key == "parent") {
		if (category_list[data['category']])
			return category_list[data['category']]["parent"];
		return null;
	}
	if (key == "type") {
		if (data['type']) return data['type'][settingTypeIdx++];
		return null;
	}
    
    if (key == "b__lang") {
	return lang;
    }
	return data[key];
}



function appl() {
	if (document.getElementById("cmd") != null) 
		return 'aw';
	else if (document.getElementById("wid") != null)
		return 'adwatch';
	else
		return 'li';
}

function searchCategory() {
	var Category = document.getElementById("cat") ? document.getElementById("cat").value : queryString("c");
	var Categorygroup = document.getElementById("cat") ? document.getElementById("catgroup").value : queryString("cg");
	setTimeout("document.cookie='c="+Category+"'", 0);
	setTimeout("document.cookie='cg="+Categorygroup+"'", 0);
	setTimeout("document.cookie='features=0'", 0);
	return Categorygroup;
}

function searchTypes() {
	var adType = [];

	if ($('#type_boxes').css('display') != 'none') {
		$("input[name=st][type=checkbox]:checked:enabled").each(function() {adType.push(this.value);});
	}

	else if (document.getElementById('types').style.display != 'none') {
		adType.push(get_radio_value(document.forms.f.st));
	}
	else {
		for (i in default_types) {
			adType.push(default_types[i]);
		}
	}
	return adType;
}

function validSearchTypes(searchType, validType, lookup_data) {
	var result = Array();
	for (var i in searchType) {
		if (validType[searchType[i]]) {
			result.push(searchType[i]);
		}
	}
	return result;
}

function searchSettings(setting, config, lookup_data) {
	settingTypeIdx = 0;
	return split_setting(get_settings(setting, search_key_lookup, config, lookup_data));
}

function featurebox_subcat(field, extras, lookup_data) {
	var subcat = document.getElementById("cat");
	var selected = 0;
	if (!subcat.disabled) {
		selected = subcat.selectedIndex;
	}	
	if (!extras['subcat']) {
		field.style.display = 'none';
		subcat.disabled = true;
		return;
	}
	field.style.display = 'block';
	subcat.disabled = false;
	subcat.options.length = 1;
	subcat.options[0] = new Option(extras["subcat"], "0");
	var i = 1;
    	for (var k in category_list) {
		if (category_list[k]["level"] == 2 && category_list[k]["parent"] == lookup_data['category']) {
			subcat.options[i] = new Option(category_list[k]["name"], k);
			if (selected == i)
				subcat.selectedIndex = i;
			i++;
		}
	}
}



function featurebox_where(field, extras, lookup_data) {
	var region_control = document.getElementById('searcharea_expanded');
	var municipality_control = document.getElementById('municipality_control');
	var region = region_control.value;
	var iregion = parseInt(region);
	if (isNaN(iregion)) {
		iregion = 0;
	}
	if (lastRegion == region) {
		if (extras['area'] && municipality_control.length > 2 && region != '2' && region != '3' && iregion != 0) {
			municipality_control.style.display = 'block';
		}
		else {
			municipality_control.style.display = 'none';
			municipality_control.selectedIndex = 0;
		}
		return;
	}
	if (region != '2' && region != '3') lastRegion = region;
	
	var i = 1;
	if (region != '2' && region != '3' && iregion != 0 && extras['area']) {
		municipality_control.style.display = 'block';
		if (region > 100) {
			region = region - 100;
		}
		else {
			region = searchbox.get_current_region();
		}
		munics = regionArray[region]['municipality'];
		municipality_control.options.length = 1;
		for (var k in munics) {
			municipality_control.options[i] = new Option(munics[k]['name'], munics[k]['id']);
			i++;
		}
		if (i > 2) return;
	}
	municipality_control.style.display = 'none';
}

function featurebox_type_boxes(field, extras, lookup_data) {
	if (extras['type_boxes']) {
		var categoryObj = document.getElementById("catgroup");
		var category_group = categoryObj.options[categoryObj.selectedIndex].value;
		var labels = getElementsByClassName(document.getElementById('type_boxes'), 'label', 'st_label');
		showField("type_boxes", "block");
		adTypes = searchSettings('types', category_settings, lookup_data);
		var one_checked = false;
		var searchType = Array();
		searchType = lookup_data['type'];
		for (var i = 0; i < labels.length; i++) {
			var l = labels[i];
			var t = l.id.replace("label_boxes_st_", "");
			var inp = document.getElementById("type_boxes_" + t);
			if (adTypes[t]) {
				inp.disabled = false;
				l.style.display = 'inline';
				for (var j = 0; j < searchType.length; ++j) {
					if (t == searchType[j] ) {
						inp.checked = true;
						one_checked = true;
						break;
					}
					else {
						inp.checked = false;
					}
				}
				if (typeof typeList[category_group] != "undefined") {
					$('#span_' + l.id).text(typeList[category_group][t]);
				}
			} else {
				l.style.display = 'none';
				inp.disabled = true;
				inp.checked = false;
			}
		}

	}
	else {
		showField("type_boxes", "none");
		var labels = getElementsByClassName(document.getElementById('type_boxes'), 'label', 'st_label');
		for (var i = 0; i < labels.length; i++) {
			var l = labels[i];
			var t = l.id.replace("label_boxes_st_", "");
			var inp = document.getElementById("type_boxes_" + t);
			l.style.display = 'none';
			inp.disabled = true;
			inp.checked = false;
		}
	}

}

function featurebox_types(field, extras, lookup_data) {
	if (!extras['types']) {
		showField('types', 'none');
		if (lookup_data['change_type_control']) {
			var labels = getElementsByClassName(field, 'label', 'st_label');
			for (var i = 0; i < labels.length; i++) {
				var l = labels[i];
				var t = l.id.replace("label_st_", "");
				var inp = document.getElementById("type_" + t);
				inp.checked = false;
			}
		}
		return;
	}
	var labels = getElementsByClassName(field, 'label', 'st_label');
	showField('types', 'block');
	var one_checked = false;
	var adTypes = searchSettings('types', category_settings, lookup_data);
	for (var i = 0; i < labels.length; i++) {
		var l = labels[i];
		var t = l.id.replace("label_st_", "");
		var inp = document.getElementById("type_" + t);
		if (t == "a") {
			l_all = l;
			inp_all = inp;
		}  
		if (adTypes[t]) {
			inp.disabled = false;
			inp.style.display = 'inline';
			l.style.display = 'inline';
			for (var j in lookup_data['type']) {
				if (t == lookup_data['type'][j]) {
					inp.checked = true;
					one_checked = true;
					break;
				}
				else {
					inp.checked = false;
				}
			}
		} else {
			l.style.display = 'none';
			inp.disabled = true;
			inp.style.display = 'none';
			inp.checked = false;
		}
	}
	 if (!one_checked) {
		document.getElementById('type_s').checked = true;
	}
}

function featurebox(field, extras, lookup_data) {
	var eid = Array();
	var offs = field.id.search(/[0-9]/);

	if (offs > -1) {
		eid[0] = field.id.substr(0, offs - 1);
		eid[1] = field.id.substr(offs);
	} else {
		eid[0] = field.id;
	}
	var fieldFunc = "featurebox_"+field.id;
	if (eval("typeof " + fieldFunc + " == 'function'")) {
		eval(fieldFunc + "(field, extras, lookup_data)");
		return;
	}
	var select = field.getElementsByTagName('select');
	var inputs = field.getElementsByTagName('input');
	if ((eid.length == 2 && extras[eid[0]] == eid[1]) || (eid.length == 1 && extras[eid[0]]) || extras[field.id]) {
		if (extras["display_none"] != eid[0])
			showField(field.id, 'block');
		if (select) {
			for (var j = 0; j < select.length; j++) {
				enable_field(select[j]);
			}
		}
			
		if (inputs) {
			for (var j = 0; j < inputs.length; j++) {
				if (inputs[j].type == "radio") {
					//if ((additional_key == inputs[j].id) || inputs[j].id.substr(inputs[j].id.length-2, 2) == "_0")
						//inputs[j].checked = "checked";
				}	
				enable_field(inputs[j]);
			}	
		}	
	} else {
		showField(field.id, 'none');
		if (select) {
			for (var j = 0; j < select.length; j++) {
				setValue(select[j], "");
				disable_field(select[j]);
			}
		} 
			
		if (inputs) {
			for (var j = 0; j < inputs.length; j++) {
				disable_field(inputs[j]);
			}	
		}
	}
}

function SearchCrit() {
	lookup_data = Array();
	lookup_data['appl'] = appl();
	lookup_data['category'] = searchCategory();
	lookup_data['categoryChanged'] = lookup_data['category'] != lastCategory;
	lastCategory = lookup_data['category'];
	lookup_data['type'] = searchTypes();
	var validTypes = searchSettings('types', category_settings, lookup_data);
	lookup_data['type'] = validSearchTypes(lookup_data['type'], validTypes);
	var extras = searchSettings('searchextras', list_settings, lookup_data);
	lookup_data['change_type_control'] = (($('#type_boxes').css('display') != 'none' && extras['types'] != null) || ($('#types').css('display') != 'none' && extras['type_boxes']));
	if (lookup_data['change_type_control'] || (lookup_data['categoryChanged'] && lookup_data['type']).length == 0) {
		if (extras['types'] == 'all' && validTypes['a']) {
			lookup_data['type'] = ['a'];
		}
		else {
			var tmp = validSearchTypes(default_types, validTypes);
			if (extras['types'] != null) {
				lookup_data['type'] = [tmp[0]];
			}
			else {
				lookup_data['type'] = tmp;
			}
		}
	}
	var extras = searchSettings('searchextras', list_settings, lookup_data);
	var fields = getElementsByClassName(document.getElementById('search'), 'div', 'featurebox');
	for (var i = 0; i < fields.length; i++) {
		featurebox(fields[i], extras, lookup_data);
	}
}


/*
 * Set category cookie, used by searchbox and reset the searchbox feature cookie
 */ 
function clearSearch(_category) {
	setCookie('c', _category);
	setCookie('features', '0');
}

function get_radio_value(radio_container) {
	if(!radio_container)
		return;

	for(var i=0; i < radio_container.length; i++) {
		if(radio_container[i].checked) {
			return radio_container[i].value;	
		}
	}	

	return null;
}

function set_ca_param(){
	var w = document.getElementById("searcharea_expanded").value;
	var new_caller;
	if(w >100){
		new_caller = w - 100;
		new_caller = new_caller + "_";
		new_caller = new_caller + document.getElementById('ca').value.split('_')[1];	
		document.getElementById("ca").value = new_caller;
	} else {	
		document.getElementById('ca').value =  searchbox.get_current_region();
	}
}

function friendly_name_change(){
	var w = document.getElementById("searcharea_expanded").value;
	var tmp = document.getElementById('ca').value.split('_')[0];
	var friendly_name = friendlyregion[tmp];
	if(w == 3){
		friendly_name = "greece";
	}else if(w == 2){
		friendly_name = friendly_name + "-nearby-regions";
	}
	var search_form_action = document.getElementById("search_form").action;
	search_form_action = search_form_action.replace("-nearby-regions","");
	var tmp2 = queryString('ca').split('_')[0];
	document.getElementById("search_form").action = search_form_action.replace(friendlyregion[tmp2], friendly_name);
}


(function($) {
	window.searchbox = window.searchbox || {};

	var searchbox = window.searchbox;
 	var friendlyname = window.friendlyname;	
	/* remove placeholder or not */
	var user_entered_text = false;

	searchbox.get_st = function () {
		/* radio input container */
		var radio_types = $("#types");
		/* checkbox */
		var checkbox_types = $("#type_boxes");
		var st_string = "";
		var all_st = null;

		if (checkbox_types.css("display") != "none") {
			all_st = $("input[name=st]:checked", checkbox_types);	
		} else if (radio_types.css("display") != "none") {
			all_st  = $("input[name=st]:checked", radio_types);
		}

		if (all_st && all_st.length > 0) {
			all_st.each(function() {
				var parent = $(this).parent();
				if (!this.disabled && parent && parent.css("display") != "none") {
					st_string += this.value;
				}
			});
		}
		
		return st_string;
	};	
	
	searchbox.get_preferred_st = function(st) {
		return  (friendlyname.preferred_st[st])? friendlyname.preferred_st[st] : "";
	};
	
	searchbox.clean_and_serialize_form_data = function(data, fields) {
		var serialized_data = [];
		if (!$.isArray(data)) {
			throw new Error("data must be an array");
		}

		if (!$.isArray(fields)) {
			throw new Error("fields must be an array");
		}

		for (var index in data) {
			if ($.inArray(data[index].name,fields) == -1) {
				var param = data[index].name + "=" + ((data[index].value)? data[index].value: "");
				serialized_data.push(param);
			}
		}
		
		return serialized_data.join("&");
	};

	searchbox.get_current_region = function() {
		var ca_el = $("input[name=ca]");
		if (ca_el) {
			return ca_el.val();
		}
		return "";
	};

	searchbox.get_region_seo = function(region) {
                var reg_seo = (friendlyname.region[region])? friendlyname.region[region][lang] : "";
		return reg_seo;

        };

	searchbox.get_munic_seo = function(region, munic) {
                return  (friendlyname.municipality[region] && friendlyname.municipality[region][munic])? friendlyname.municipality[region][munic][lang] : "";
        };
	
	searchbox.get_category_seo = function(category) {
                return  (friendlyname.cat[category])? friendlyname.cat[category][lang] : "";
        };
	
	searchbox.get_st_seo = function(st, has_subject) {
		var lookup_data = [];
		var has_subject_as_string = (has_subject)?"true":"false"; 
		var st_seo = split_setting(get_settings("st", searchbox.st_key_lookup, friendlyname, {"st": st, "lang": lang,"have_subject": has_subject_as_string}));
		var st_name = st_seo.name;
	        return  (st_name)? st_name : "";
        };

	searchbox.st_key_lookup = function(key, data) {
        	var val = data[key];
		/*console.log(val);*/
		return val;
	}

	
	searchbox.remove_param_by_value = function(data, value, name) {
		var new_data = [];
		for (var index in data) {
			if (!(data[index].name == name && data[index].value == value)) {
				new_data.push(data[index]);
			}
		}
		return new_data;
	};

	searchbox.init = function() {
		/* temporary support build-in only */	
	        if (friendlyname.semantic_enabled == 1) {
                     $("#search_form").bind("submit", searchbox.submit_handler);
                }
	};
	
	searchbox.placeholder_keyup_handler = function() {
		var searchtext = $("#searchtext");
		if (searchtext.val() != searchtext.attr("title")) {
			user_entered_text = true;
			/* job done, don't care what user wants to do next */
			searchtext.unbind("keyup", searchbox.placeholder_keyup_handler);
		}
        }

	searchbox.placeholder_submit_handler = function() {
		var searchtext = $("#searchtext");
		if (searchtext.data("placeholder_set")) {	
			searchtext.val("");
		}
		if (friendlyname.semantic_enabled == 1) {
                        return searchbox.submit_handler();
               	}
	}

	searchbox.submit_handler = function() {
		var params = $(this).serializeArray();
		var uri;
		var fields_to_clean = ["q", "w", "c", "cg", "m", "ca", "md"];
		var region_el_id = "searcharea_expanded", category_el_id = "catgroup", munic_el_id = "municipality_control",
			query_el_id = "searchtext", subcat_el_id = "cat", subcat_container_el_id = "subcat"; 
		var action, region, region_seo, category, category_seo, munic_seo, munic_el, st, st_seo, query, subcat_el;
		var current_region = searchbox.get_current_region();
		/* those chars will be replaced with an _ which means white space when comming to server */
		var forbidden_chars_regex = /[#?&]+/g;

		try {
			if ((query = $("#" + query_el_id).val())) {
				query = query.replace(forbidden_chars_regex," ");
				query = query.replace(/^\s+/g,"");
				query = query.replace(/\s+$/g,"");
				query = query.replace(/\s+/g,"_");
			}

			region = parseInt($("#" + region_el_id).val());
			if (region != $("#" + region_el_id).val()) {
				region_seo = $("#" + region_el_id).val(); region = null;
			} else {
			if (region > 100) {
				region -= 100;
				region_seo = (friendlyname.region[region])? friendlyname.region[region][lang] : "";
			} else if (region == 3) {
				region_seo = friendlyname.allcountry;
			} else if (region == 2) {
				if (current_region) {
					region_seo = friendlyname.nearby_url.replace("%s", searchbox.get_region_seo(current_region));
				}
			} else if (region == 1) {
				/* need to update action here also */
				if (current_region) {
					region = current_region;
				}
				region_seo = searchbox.get_region_seo(region);
			}
			}
			category = $("#" + category_el_id).val();

			if ((subcat_el = $("#" + subcat_el_id))) {
				var subcat_container_el =  $("#" + subcat_container_el_id);
				if (subcat_container_el && subcat_container_el.css("display") != "none" && subcat_el.val() > 0) {
					category = subcat_el.val();
				}
			}

			category_seo = searchbox.get_category_seo(category);
			
			if ((st = searchbox.get_st())) {
				try {
					var preferred_st = searchbox.get_preferred_st(st);
					var has_subject = (query || category_seo)? true:false;
					st_seo = searchbox.get_st_seo(preferred_st, has_subject);
					/* found preferred_st remove it from params */
					if (preferred_st) {
						params = searchbox.remove_param_by_value(params, preferred_st, "st");
					}
				} catch(e) {
					/* optional so just continue if it failed somehow */
				}
			}

			if (region_seo && region) {
				munic_el = $("#" + munic_el_id);
				if (munic_el && munic_el.css("display") != "none") {
					if (munic_el.val() > 0) {
						munic_seo = searchbox.get_munic_seo(region, munic_el.val());
					}
				}
			}

			if (region_seo) {
				uri = "";
				if (friendlyname.hreflang_enabled) {
					uri += "/" + lang;
				}
				uri += "/" + region_seo;
				if (munic_seo) {
					uri += "/" + munic_seo;
				}
				if (st_seo) {
					if (category_seo && query) {
						uri += "/" + category_seo + "/" + query + friendlyname.query_st_separator + st_seo;
					} else if (!category_seo && query) {
						uri += "/" + query + friendlyname.query_st_separator + st_seo;
					} else if (category_seo && !query) {
						uri += "/" + category_seo + "-" + st_seo;
					} else {
						uri += "/" + st_seo;
					}
				} else {
					if (category_seo && query) {
						uri += "/" + category_seo + "/" + query;
					} else if (!category_seo && query) {
						uri += "/" + query;
					} else if (category_seo && !query) {
						uri += "/" + category_seo;
					}
				}
				var clean_qs = searchbox.clean_and_serialize_form_data(params,fields_to_clean);
				window.location = uri + ((clean_qs)? "?" + clean_qs : "");
				return false;	
			}
		} catch(e) {
			/*console.log(e);
			return false;*/
		}
		/* return true for submitting if we fail to rewrite */
		return true;
	};

	$(document).ready(function() {
		var inp = document.createElement('input');	
		if('placeholder' in inp){
                	$("input.placeholder").each(function(){
                        	$(this).attr("placeholder", $(this).attr("title"));
                	});
		}
		searchbox.init();
	});

})(jQuery);


