/* 

 *
 */

Event.observe(window, 'load', init);

/**
 * Adjust links to use javascript
 *
 */

function init()
{
	var linkList = $$('#search_selector li a');
	var links = $A(linkList);
        var cookie_name = 'lang';
       
        currentLang = Cookie.get(cookie_name);
        countryElem = $('country');

        for(j=0;j<countryElem.options.length;j++)
        {
                if(currentLang == countryElem.options[j].value) {
                        countryElem.options[j].selected = true;        
                }
        }

        if(currentLang && currentLang.length == 2) {
                $('country').options.selected = currentLang;
        }

	links.each(function(node) {
                Event.observe(node, 'click', fetchForm);
        });

	Event.observe($('default'), 'click', setDefault);
	Event.observe('country', 'change', changeCountry);
}

// js var_dump
function var_dump(obj) {
	if(typeof obj == "object") {
		return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "")+"\nValue: " + obj;
   	} else {
		return "Type: "+typeof(obj)+"\nValue: "+obj;
	}
}//end function var_dump

function changeCountry(event)
{
	var elem = Event.element(event);
	var country_code = elem.options[elem.selectedIndex].value;
	
	var currentSearch = getCurrentSearch();
	var search = currentSearch.replace('_search', '');
        
	var requestUrl = '/xml/' + search + '/?country=' + country_code;
	
        Cookie.set('lang', country_code, 30);

        if ($('search_form_input') && '' !== $('search_form_input').value) {
		requestUrl = requestUrl + '&q=' + escape($('search_form_input').value);
	}

	new Ajax.Request(requestUrl, {
                method: 'get',
                onSuccess: setNewForm
	});
}

function fetchForm(event)
{
        var elem = Event.element(event);
	Event.stop(event);
	var item = elem.up()
        var requestUrl = '/xml/' + item.getAttribute('id');
	if ('' !== $('search_form_input').value) {
		requestUrl = requestUrl + '/?q=' + escape($('search_form_input').value);
	}
	new Ajax.Request(requestUrl, {
		method: 'get',
		onSuccess: setNewForm
	});
}

function setNewForm(response)
{
	$('search_box').innerHTML = response.responseText;
	$('search_box').blur();
	setDefaultCheckBox();
}

function getCurrentSearch()
{
	var currentSearch = [ 'yahoo_search', 'google_search', 'ask_search', 'ebay_search' ].find(function(s) {
		var elem = $(s);
		return null !== elem;
	});
	return currentSearch;
}

function setDefault()
{
	var currentSearch = getCurrentSearch();
	
	if (true === $('default').checked) {
		Cookie.set('defaultSearch', currentSearch, 30);
	} else {
		Cookie.erase('defaultSearch');
	}
}

function setDefaultCheckBox()
{
	// Set default checkbox
	var defaultSearch = Cookie.get('defaultSearch');
	if (defaultSearch && $(defaultSearch)) {
		$('default').checked = true;
	} else {
		$('default').checked = false;
	}
}

/**
 * Convenience cookie functions thanks to http://gorondowtl.sourceforge.net/wiki/Cookie
 */
var Cookie = {
  set: function(name, value, daysToExpire) {
    var expire = '';
    if (daysToExpire != undefined) {
      var d = new Date();
      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
      expire = '; expires=' + d.toGMTString();
    }
    return (document.cookie = escape(name) + '=' + escape(value || '') + expire);
  },
  get: function(name) {
    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
  },
  erase: function(name) {
    var cookie = Cookie.get(name) || true;
    Cookie.set(name, '', -1);
    return cookie;
  },
  accept: function() {
    if (typeof navigator.cookieEnabled == 'boolean') {
      return navigator.cookieEnabled;
    }
    Cookie.set('_test', '1');
    return (Cookie.erase('_test') === '1');
  }
};

/**
 * Get URL param
 *
 */
function gup(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}
