function bindSearchlinks() {
	$('#image-search').live('click', function() {
		$(this).attr('href', "http://images.google."+$('#postfix').val()+"/images?q="+encodeURI(($('#searchForm input.gsc-input').val()))+"&hl="+$('#lang').val());
	});
	$('#video-search').live('click', function() {
		$(this).attr('href', "http://video.google."+$('#postfix').val()+"/videosearch?q="+encodeURI(($('#searchForm input.gsc-input').val()))+"&hl="+$('#lang').val());
	});
	$('#map-search').live('click', function() {
		$(this).attr('href', "http://maps.google."+$('#postfix').val()+"/maps?tab=wl&q="+encodeURI($('#searchForm input.gsc-input').val())+"&hl="+$('#lang').val());
	});
	$('#price-search').live('click', function() {
		$(this).attr('href', "http://request.webwebweb.com/redirect.asp?target=idealo.de&keywords="+encodeURI($('#searchForm input.gsc-input').val())+"&country="+$('#country').val() );
	});
	$('#translate-search').live('click', function() {
		$(this).attr('href', "http://translate.google.de/#"+$('#lang').val()+"|"+$('#lang').val()+"|"+encodeURI($('#searchForm input.gsc-input').val()) );
	});
	$('#wiki-search').live('click', function() {
		$(this).attr('href', "http://"+$('#lang').val()+".wikipedia.org/wiki/"+encodeURI($('#searchForm input.gsc-input').val()));
	});
	$('.tag').live('click', function() {
		$('#as_q').val($('#as_q').val()+" "+$(this).html());
		processExtSearch();
		$('body:not(#exsearch) #searchForm form').submit();
		return false;
	});
	
	$('#filter_all_link').live('click', function() {
		$('#zip').val('');
		$('#zip').attr("name","zip");
		$('#town').val('');
		$('#town').attr("name","town");
		$('#searchForm form').submit();
		return false;
	});
	$('#filter_town_link').live('click', function() {
		$('#zip').val($('#basezip').val());
			$('#zip').attr("name","zip");
		$('#town').val($('#basetown').val());
			$('#town').attr("name","town");
		$('#searchForm form').submit();
		return false;
	});
	$('.exsearch-link').live('click', function() {
		if(this.id != "simple-search-link")
			$('form').attr('action','exsearch.php');
		$('#searchForm form').submit();
		return false;
	});
	$('.langItem').live('click', function() {
		$('#lang').val( $(this).attr('id').replace("langItem_",''));
		$('#lang').attr("name","lang");
		$('#searchForm form').submit();
		return false;
	});
	
	
}

function saveSettingsLanguages(id) {	
	if($("#settings_lang_"+id).attr('checked') == 1)
		storeLanguageCookie(id,"add");
	else {
		storeLanguageCookie(id,"del");
		if($('#lang').val() == id) {
			$('#lang').val(lang);
			$('#lang').attr("name","lang");
		}
	}
}

function saveSettings() {
	if($('#settings_town').val() == "")
		$('#town').val("null");
	else
		$('#town').val($('#settings_town').val());
	
	if($('#settings_zip').val() == "")
		$('#zip').val("null");
	else
		$('#zip').val($('#settings_zip').val());
	
	if($('#settings_country').val() == "")
		$('#country').val("null");
	else
		$('#country').val($('#settings_country').val());
	
	$('#town').attr("name","town");
	$('#zip').attr("name","zip");
	$('#country').attr("name","country");

	tb_remove();
	$('#searchForm form').submit();
}

function getCookie(c_name)
{
	if (document.cookie.length>0)
	  {
	  c_start=document.cookie.indexOf(c_name + "=");
	  if (c_start!=-1)
	    {
	    c_start=c_start + c_name.length+1;
	    c_end=document.cookie.indexOf(";",c_start);
	    if (c_end==-1) c_end=document.cookie.length;
	    return unescape(document.cookie.substring(c_start,c_end));
	    }
	  }
	return "";
	}
function setCookie(c_name,value,expiredays)
{
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value)+
	((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}

function storeLanguageCookie(lang,action) {
	if(lang == "" || lang == "null")
		return;
	
	var cookie_langs = new Array();
	tmp = getCookie('langs');
	if(tmp != "")
		cookie_langs = $.evalJSON(tmp);
	
	if(action == "add")
		cookie_langs[lang] = lang;
	else
		delete cookie_langs[lang];
	tmp = $.toJSON(array_unique(cookie_langs));
	setCookie('langs', tmp, 365 );
}

function setLanguages() {
	var langs = $.evalJSON($('#browser_languages').val());

	if($('#lang') && $('#lang') != "" && $('#lang') != "null")
		storeLanguageCookie($('#lang').val(),"add");
	
	var cookie_langs = new Array();
	tmp = getCookie('langs');
	if(tmp != "")
		cookie_langs = $.evalJSON(tmp);
	
	tmp = new Array();
	j=0;
	for(i=0; i < langs.length; i++) {
		tmp[j] = langs[i];j++;
	}
	for(i in cookie_langs) {
		tmp[j] = cookie_langs[i];j++;
	}
	tmp = array_unique(tmp);
	for(i in tmp) {
		$('<span><a href="search.php" class="langItem" id="langItem_'+tmp[i]+'">'+$('#langs_'+tmp[i]).val()+'</a> </span>').insertBefore("#langItem_other");
	}
	$('#languages').remove();
	$('#langItem_'+$('#lang').val()).addClass('active');
}

function bindFilteraction() {
	$('#filter-filetype .clear-filter').bind('click', function() {
		$('#as_filetype').val('');
		processExtSearch();
		$('body:not(#exsearch) #searchForm form').submit();
	});
	
	$('#filter-site .clear-filter').bind('click', function() {
		$('#site').val('')
		processExtSearch();
		$('body:not(#exsearch) #searchForm form').submit();
	});
	
	$('#filter-eq .clear-filter').bind('click', function() {
		//var re = new RegExp('-(.*?) ', "g");
		//var tmp = $('#hquery').val() + " ";
		//tmp = tmp.replace(re,'');
		$('#as_eq').val("");  
		processExtSearch();
		$('body:not(#exsearch) #searchForm form').submit();
	});
}

function hideGetVars() {
	if($('#town').val() == "") {
		$('#town').remove();
	}
	if( $('#zip').val() == "") {
		$('#zip').remove();
	}  
	if( $('#lang').val() == "") {
		$('#lang').remove();
	}
	if($('#country').val() == "") {
		$('#country').remove();
	}
	if(!$('#gui').val()) {
		$('#gui').remove();
	}
	if($('#zip').val() == null && $('#town').val() == null) 
		$('#lquery').remove();
	$('input.gsc-input').attr("disabled","disabled");	
}

function getCompleteQuerystring(nonLocal) {
	var q = Array();
	var i = 0;
	if(nonLocal == null) {
		if($('#zip').val() != "")
			q[i++] = $('#zip').val();
		if($('#town').val() != "")
			q[i++] = $('#town').val();
	}
	
	if($('#vquery').val() != "")
		q[i++] = $('#vquery').val();
	if($('#hquery').val() != "")
		q[i++] = $('#hquery').val();
	x = implode(" ",q);
	return x;
}

function updateLeftsideVisibility() {
	$('.filter').each(function () {
		if($(this).find('.filter-value').html() == '') {
			$(this).addClass('hidden');
		}
		else $(this).removeClass('hidden');
	});
}
function initSettings() {
	var cookie_langs = new Array();
	tmp = getCookie('langs');
	if(tmp != "")
		cookie_langs = $.evalJSON(tmp);
	for(i in cookie_langs) {
		$('#settings_lang_'+cookie_langs[i]).attr('checked', true);
	}
	
	
}
function initExtSearch() {
	$('.ex_input').bind('keyup', function() { processExtSearch(); });
	$('.ex_input').bind('change', function() { processExtSearch(); });
	$('.ex_select').bind('change', function() { processExtSearch(); });
	$('.ex_input').bind('blur',function() { $(this).val($.trim($(this).val())) });
	
	$('body#exsearch input.gsc-input').focus( function() { 
		$('#as_q').focus();
	    $('#as_q').setCursorPosition($('#as_q').val().length );
	});
	
	$('#lang option').each(function() {
		if($('#ex_lang').val() == $(this).val()) {
			$(this).attr('selected','selected');
		}
	}); 
	$('#as_filetype option').each(function() {
		if($('#ex_filetype').val() == $(this).val()) {  
			$(this).attr('selected','selected');
		}
	});
	
	processExtSearch();
	return;
}

function processExtSearch() {

	as_q = $.trim($('#as_q').val());
	
	as_eq_array = $('#as_eq').val().split(" ");
	var tmp = Array();
	for(i=0; i < as_eq_array.length; i++) {
		if(as_eq_array[i]) tmp[i] = "-"+as_eq_array[i];
	}
	as_eq = implode(" ",tmp);
	 
	as_epq = "";
	if($('#as_epq').val()) as_epq = "\""+$('#as_epq').val()+"\"";
	
	var as_oq = new Array();
	var i=0;
	$('.as_oq').each(function() {
		if(this.value) {
			as_oq[i] = this.value;
			i++;
		}
	});
	as_oq = implode(" OR ", as_oq);
	
	
	as_filetype = "";
	if($('#as_filetype').val()) 
		as_filetype = "filetype:"+$('#as_filetype').val();
	as_sitesearch = "";
	if($('#site').val()) as_sitesearch = "site:"+$('#site').val();
	
	updateLeftside();
	
	i = 0;
	querystring_array = Array();
	if( as_q != '') querystring_array[i++] = as_q;
	if( as_epq != '') querystring_array[i++] = as_epq;
	if( as_oq != '') querystring_array[i++] = as_oq;
	if( as_eq != '') querystring_array[i++] = as_eq;
	
	querystring = implode(" ", querystring_array );
	querystring = $.trim(querystring);
	$('#vquery').val(querystring);
	i = 0;
	
	querystring_array = Array();
	
	if( as_filetype != '') querystring_array[i++] = as_filetype;
	if( as_sitesearch != '') querystring_array[i++] = as_sitesearch;
	querystring = implode(" ", querystring_array );
	querystring = $.trim(querystring);
	$('#hquery').val(querystring);

	$('input.gsc-input').val(getCompleteQuerystring(true));
	updateLeftsideVisibility();
}

function updateLeftside() {
	$('#filter-filetype .filter-value').html($('#as_filetype').val());
	$('#filter-site .filter-value').html($('#site').val());
	$('#filter-eq .filter-value').html($('#as_eq').val());
}


function RawSearchControl() {
	  this.results = document.getElementById("results");
	  this.searcher = new google.search.LocalSearch();
	  this.searcher.setLinkTarget(google.search.Search.LINK_TARGET_SELF);
	//  this.searcher.setCenterPoint("Amsterdam, Netherlands");
	  this.searcher.setSearchCompleteCallback(this,
	    RawSearchControl.prototype.searchComplete,
	    [this.searcher]
	    );
	}
	RawSearchControl.prototype.searchComplete = function(searcher) {
	  this.clearResults();
		
	  if (searcher.results && searcher.results.length > 0) {

	    // now manually generate the html that we disabled
	    // initially and display it
	    for (var i=0; i < searcher.results.length; i++) {
	      var result = searcher.results[i];
	      div = result.html.cloneNode(true);

	      this.results.appendChild(div);
	      var breaker = createDiv(null,"breaker");
	      this.results.appendChild(breaker);
	    }

	    var imageUrl = GlocalSearch.computeStaticMapUrl(searcher.results, 310, 300, google.search.LocalSearch.STATIC_MAP_ZOOM_NEAREST);
	    
	    $("#resultsImg").attr('src',imageUrl);
	    $('#mapsearch').removeClass('hidden');
	  }
	}
	RawSearchControl.prototype.clearResults = function() {
	  removeChildren(this.results);
	}

	
	
	
	
	
	
	
/*============================================================================*/
/*HELPERS*/
function implode (glue, pieces) {
    var i = '', retVal='', tGlue='';
    if (arguments.length === 1) {        pieces = glue;
        glue = '';
    }
    if (typeof(pieces) === 'object') {
        if (pieces instanceof Array) {            return pieces.join(glue);
        }
        else {
            for (i in pieces) {
                retVal += tGlue + pieces[i];                tGlue = glue;
            }
            return retVal;
        }
    }    else {
        return pieces;
    }
}

function array_unique (inputArr) {
    var key = '', tmp_arr2 = {}, val = '';

    var __array_search = function (needle, haystack) {
        var fkey = '';
        for (fkey in haystack) {
            if (haystack.hasOwnProperty(fkey)) {
                if ((haystack[fkey] + '') === (needle + '')) {
                    return fkey;
                }
            }
        }
        return false;
    };

    for (key in inputArr) {
        if (inputArr.hasOwnProperty(key)) {
            val = inputArr[key];
            if (false === __array_search(val, tmp_arr2)) {
                tmp_arr2[key] = val;
            }
        }
    }

    return tmp_arr2;
}
function array_merge () {
    var args = Array.prototype.slice.call(arguments),
                            retObj = {}, k, j = 0, i = 0, retArr = true;
    
    for (i=0; i < args.length; i++) {
        if (!(args[i] instanceof Array)) {
            retArr=false;
            break;
        }
    }
    
    if (retArr) {
        retArr = [];
        for (i=0; i < args.length; i++) {
            retArr = retArr.concat(args[i]);
        }
        return retArr;
    }
    var ct = 0;
    
    for (i=0, ct=0; i < args.length; i++) {
        if (args[i] instanceof Array) {
            for (j=0; j < args[i].length; j++) {
                retObj[ct++] = args[i][j];
            }
        } else {
            for (k in args[i]) {
                if (args[i].hasOwnProperty(k)) {
                    if (parseInt(k, 10)+'' === k) {
                        retObj[ct++] = args[i][k];
                    } else {
                        retObj[k] = args[i][k];
                    }
                }
            }
        }
    }
    return retObj;
}

function removeChildren(parent) {
  while (parent.firstChild) {
    parent.removeChild(parent.firstChild);
  }
}
function createDiv(opt_text, opt_className) {
  var el = document.createElement("div");
  if (opt_text) {
    el.innerHTML = opt_text;
  }
  if (opt_className) { el.className = opt_className; }
  return el;
}

new function($) {
	  $.fn.setCursorPosition = function(pos) {
	    if ($(this).get(0).setSelectionRange) {
	      $(this).get(0).setSelectionRange(pos, pos);
	    } else if ($(this).get(0).createTextRange) {
	      var range = $(this).get(0).createTextRange();
	      range.collapse(true);
	      range.moveEnd('character', pos);
	      range.moveStart('character', pos);
	      range.select();
	    }
	  }
	}(jQuery);

