var mnAJAX = null;
var timeout;
var timeoutImg;
var pQ = "";
var saving = "<img src='/img/loading.gif' height='32' width='32'> Sparar...";
var loading = "<img src='/img/loading.gif' height='32' width='32'> Laddar...";
var searching = "<img src='/img/loading.gif' height='32' width='32'> Söker...";
var catLinkUnselected = "<a href='javascript:setMode(1)'>Kategorier</a>";
var catLinkSelected = "<strong>Kategorier</strong>";
var advLinkUnselected = "<a href='javascript:setMode(2)'>Avancerad sökning</a>";
var advLinkSelected = "<strong>Avancerad sökning</strong>";
var thisMode = "";
function ajaxInit()
{
	if (mnAJAX == null)
	{
		try
		{    
			// Firefox, Opera 8.0+, Safari    
			mnAJAX = new XMLHttpRequest();    
		}
		catch (e)
		{    
			// Internet Explorer    
			try
			{      
				mnAJAX = new ActiveXObject("Msxml2.XMLHTTP");      
			}
			catch (e)
			{      
				try
				{        
					mnAJAX = new ActiveXObject("Microsoft.XMLHTTP");        
				}
				catch (e)
				{        
					return null;        
				}	      
			}    
		}
	}
	else if (mnAJAX.readyState != 0)
	{
		mnAJAX.abort();
	}
	return mnAJAX;
}
function ajaxObject(url, obj, cb) 
{
	var that=this;      
	this.updating = false;
	this.update = function(passData,postMethod) 
	{ 
		if (that.updating==true) 
		{ 
			return false; 
		}
		that.updating=true;                       
		var AJAX = ajaxInit();                    
		if (AJAX == null) 
		{                             
			return false;                               
		} 
		else 
		{
			AJAX.onreadystatechange = function() 
			{  
				if (AJAX.readyState==4) 
				{             
					that.updating=false;
					if (that.object != null)
					{
						that.object.innerHTML = AJAX.responseText;
					}                
					else
					{
						that.callback(AJAX.responseText,AJAX.status,AJAX.responseXML);
					}        
					delete AJAX;                                         
				}                                                      
			}  
			
			var timestamp = new Date();                              
			if (postMethod=='POST') 
			{
				var uri=urlCall;
				AJAX.open("POST", uri, true);
				AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=ISO-8859-1");
				AJAX.setRequestHeader("Content-length", passData.length);
				AJAX.setRequestHeader("Connection", "close");
				AJAX.send(passData);
			} 
			else 
			{
				var uri=urlCall+'?'+passData;
				AJAX.open("GET", uri, true);                             
				AJAX.send(null);                                         
			}              
			return true;                                             
		}                                                                           
	}
	var urlCall = url;
	this.object = obj; 
	this.callback = cb || function () { };
} 

function gmapLoad(obj,a,z,error) 
{
	if (GBrowserIsCompatible()) 
	{
		a = unescape(a);
    var map = new GMap2(obj);
		var geocoder = new GClientGeocoder();
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
    geocoder.getLatLng(a, function(point) 
		{      
			if (point) 
			{        
				map.setCenter(point, z);        
				var marker = new GMarker(point);        
				map.addOverlay(marker);
			}
			else
			{
				error(a);
			}    
		});
	}
}

function ajaxPostMe(url,form,target,cb)
{
	var params = ajaxGetParams(form);
	var f = new ajaxObject(url,target,cb);
	f.update(params,'POST');
}
function ajaxGetMe(url,params,target,cb)
{
	var f = new ajaxObject(url,target,cb);
	f.update(params,'GET');
}

function setMode(x,s)
{
  if (!s) s=0;
  var nav = $("navdiv");
	var sform = $("searchform");
	var link1 = $("anav1");
	var link2 = $("anav2");
	var compL = $("compLink");
	var offL = $("offerLink");
	var simpleL = $("simple");
	if (x == 2)
	{
    thisMode = "o";
	  nav.className = 'navbar3';
	  link1.className = 'navunsel';
	  link2.className = 'navsel'
	  compL.className = 'menubarUnsel';
	  offL.className = 'menubar3';
	  sform.mode.value = 'off';
	  simple.href = '/offers.php';
	}
	else
	{
    thisMode = "s";
	  nav.className = 'navbar';
	  link1.className = 'navsel';
	  link2.className = 'navunsel'
	  compL.className = 'menubar';
	  offL.className = 'menubarUnsel';
	  sform.mode.value = 'com';
	  simple.href = '/';
	}
	if (s==0) doSearch();
}

function toggleCat(id)
{
  toggleSelectCat(id);
  doSearch();
}
function toggleSelectCat(id)
{
	var classid = "pcat"+id;
	var obj = $(classid);
	if (obj.className == 'pcatselected')
	{
		obj.className = 'pcatunselected';
	}
	else
	{
		obj.className = 'pcatselected';
	}
}
//Get all the elements of the given classname of the given tag.
function getElementsByClassName(classname,tag) {
 if(!tag) tag = "*";
 var anchs =  document.getElementsByTagName(tag);
 var total_anchs = anchs.length;
 var regexp = new RegExp('\\b' + classname + '\\b');
 var class_items = new Array()
 
 for(var i=0;i<total_anchs;i++) {
  var this_item = anchs[i];
  if(regexp.test(this_item.className)) {
   class_items.push(this_item);
  }
 }
 return class_items;
}

function selectAllCats()
{
	var objects = getElementsByClassName('pcatunselected','p');
	for (i=0;i<objects.length;i++)
	{
		obj = objects[i];
		objid = obj.id;
		objidlen = objid.length;
		id = objid.substr(4,objidlen-4);
		toggleSelectCat(id);
	}
	doSearch();
}
function unselectAllCats()
{
	var objects = getElementsByClassName('pcatselected','p');
	for (i=0;i<objects.length;i++)
	{
		obj = objects[i];
		objid = obj.id;
		objidlen = objid.length;
		id = objid.substr(4,objidlen-4);
		toggleSelectCat(id);
	}
	doSearch();
}
// Save categories
function getCatKeys()
{
  var objects = getElementsByClassName('pcatselected','p');
  var noobjects = getElementsByClassName('pcatunselected','p');
  
  if (!noobjects || (noobjects.length == 0))
  {
    return "all";
  }
  else if (!objects || (objects.length == 0))
  {
    return "none";
  }
	var keystr = "";
	for (i=0;i<objects.length;i++)
	{
		obj = objects[i];
		objid = obj.id;
		objidlen = objid.length;
		keystr += objid.substr(4,objidlen-4)+":";
	}
	return keystr;
}
// For user.php
function showhide(id)
{
	var obj = $(id);
	if(obj.style.display == 'block')
	{
		obj.style.display = 'none';
	}
	else
	{
		obj.style.display = 'block';
	}
}
// Update munics when county selected
function countySelected()
{
	form = $("locform");
	var id = form.loc_county.value;
	obj = $("municselect");
	var param = 'action=getLocMunics&loc_county='+id;
	ajaxGetMe('http://www.bildelar.se/ajaxGet.php',param,obj);
}
// Update munics and reload search
function searchCounty()
{
	form = $("searchform");
	var id = form.loc_county.value;
	var adjcounties = (form.adjcounties.checked == true)? 1:0;
	var param = 'action=getLocMunics&searchMode=1&loc_county='+id+'&adjcounties='+adjcounties;
	ajaxGetMe('http://www.bildelar.se/ajaxGet.php',param,null,searchCountyDone);
}
function searchCountyDone(text,status,xml)
{
  $("municselect").innerHTML = text;
  doSearch();
}
// Help function for freetext
function cleanMe(s)
{
	var q = s;
	var len = q.length;
	while ((len > 0) && ((q.substr(len-1,1) == "-") || (q.substr(len-1,1) == " ")))
	{
		len = len-1;
		q = q.substr(0,len);
	}
	return q;
}
// Freetext has changed?
function goQ()
{
	if(timeout) clearTimeout(timeout);
  var param = cleanMe($("searchform").q.value);
  if (param == pQ) return;
	timeout = setTimeout("doSearch()",500);
}
function showOffers(s)
{
  $("searchform").q.value = s;
  setMode(2);
}
function clearQ()
{
  form = $("searchform");
  form.adjcounties.checked = false;
  form.webshop.checked = false;
  form.q.value = "";
  form.loc_county[0].selected = "selected";
  form.loc_munic[0].selected = "selected";
  selectAllCats();
}
// Perform search
function doSearch(page)
{ 
  page = (page)? page:1;
  form = $("searchform");
  $("searchList").innerHTML = searching; 
  var mode = escape(form.mode.value);
  var categories = getCatKeys();
  var loc_county = escape(form.loc_county.value);
  var adjcounties = (form.adjcounties.checked == true)? 1:0;
  var loc_munic = escape(form.loc_munic.value);
  var q = escape(form.q.value);
  pQ = q;
  var webshop = (form.webshop.checked == true)? 1:0;
  var param = 'action=getSearchResult&mode='+mode+'&categories='+categories+'&loc_county='+loc_county+'&adjcounties='+adjcounties+'&loc_munic='+loc_munic+'&q='+q+'&webshop='+webshop+'&page='+page;
	ajaxGetMe('http://www.bildelar.se/ajaxSearch.php',param,null,doneSearch);
}
function doneSearch(text,status,xml)
{
  $("searchList").innerHTML = text;
}
function InsertDyn()
{
  var target = $("dyn"); 
  if (target)
  {  
    var ns = document.createElement('script');
    ns.type = 'text/javascript';
    ns.src = 'http://www.bildelar.se/adsense.js';
    target.appendChild(ns);
    var newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    newScript.id = 'pf_ads';
    newScript.src = 'http://hst.tradedoubler.com/file/20649/contextual/pf2.js';
    target.appendChild(newScript);
  }
}
// Class for showing map
function cLoadInfoMap(comp_id,offer_id,loc_id)
{
	var that = this;
	this.target_id = "infoMap"+comp_id+offer_id;
	this.loc_id = loc_id;
	
	this.update = function() 
	{
		var param = 'action=getInfoMap&comp_id='+comp_id+'&loc_id='+loc_id;
    ajaxGetMe('http://www.bildelar.se/ajaxSearch.php',param,null,that.done);
	}
	this.done = function(text,status,xml)
	{
    if (text != "")
    {
      $(that.target_id).style.display = "block";
      gmapLoad($(that.target_id),escape(text),10,that.error);
    }
    else
    {
      $(that.target_id).style.display = "none";
    }
	}
	this.error = function(a)
	{
    $(that.target_id).innerHTML = "Kunde ej hitta karta för sökorden:<br><br>" + a + "<br><br>Stänger om 5 sekunder...";
    setTimeout ("$(that.target_id).style.display='none';", 5000); 
    
	}
}
// Class for showing locations and map
function cLoadInfoLoc(comp_id, offer_id, loc_id)
{
  var that = this;
	this.target_id = "infoLoc"+comp_id+offer_id;
	this.comp_id = comp_id;
	this.offer_id = offer_id;
	this.loc_id = loc_id;
	
	this.update = function() 
	{
		$(that.target_id).innerHTML = loading;
		var param = 'action=getInfoLocs&comp_id='+comp_id+'&offer_id='+offer_id+'&loc_id='+loc_id;
    ajaxGetMe('http://www.bildelar.se/ajaxSearch.php',param,null,that.done);
	}
	this.done = function(text,status,xml)
	{
    $(that.target_id).innerHTML = text;
		var l = new cLoadInfoMap(that.comp_id,that.offer_id,that.loc_id);
		l.update();
	}
}
// Class for showing categories, locations and map
function cLoadInfoCat(comp_id, offer_id,loc_id)
{
  var that = this;
	this.target_id = "infoCat"+comp_id+offer_id;
	this.comp_id = comp_id;
	this.offer_id = offer_id;
	this.loc_id = loc_id;
	this.update = function() 
	{
	  $(that.target_id).innerHTML = loading;
		var param = 'action=getInfoCats&comp_id='+comp_id;
    ajaxGetMe('http://www.bildelar.se/ajaxSearch.php',param,null,that.done);
	}
	this.done = function(text,status,xml)
	{
    $(that.target_id).innerHTML = text;
		var l = new cLoadInfoLoc(that.comp_id,that.offer_id,that.loc_id);
		l.update();
	}
}
// Show information
function showInfo(comp_id, offer_id)
{
  ptarget = $("pics"+comp_id+offer_id);
  if (ptarget)
  {
    ptarget.style.display = 'none';
  }
  target = $("info"+comp_id+offer_id);
  if (target.style.display == 'block')
  {
    target.style.display = 'none';
  }
  else 
  {
    target.style.display = 'block';
    var l = new cLoadInfoCat(comp_id,offer_id,-1);
		l.update();
  }
}

// Change location
function showInfoLoc(comp_id, offer_id, loc_id)
{
  var l = new cLoadInfoLoc(comp_id,offer_id,loc_id);
	l.update();
}
// Load images
function loadPics(comp_id, offer_id)
{
  ptarget = $("info"+comp_id+offer_id);
  if (ptarget)
  {
    ptarget.style.display = 'none';
  }
  target = $("pics"+comp_id+offer_id);
  if (target.style.display == 'block')
  {
    target.style.display = 'none';
  }
  else 
  {
    target.style.display = 'block';
    target.innerHTML = loading;
    var param = 'action=getPictures&comp_id='+comp_id+'&offer_id='+offer_id;
    ajaxGetMe('http://www.bildelar.se/ajaxSearch.php',param,target);
  }
}
function loadImage(offer_id,thumbId,src,width,height)
{
  var objects = getElementsByClassName('current','img');
	for (i=0;i<objects.length;i++)
	{
		obj = objects[i];
		obj.className = '';
	}
  thumb = $(thumbId);
  thumb.className = "current";
  image = $("fullsize"+offer_id);
  image.src = src;
  image.width = width;
  image.height = height;
}
function $(s)
{
	return document.getElementById(s);
} 