function createXHR() {
    var xhrObj;
    
    if (window.XMLHttpRequest) {
        // branch for native XMLHttpRequest object - Mozilla, IE7
        try {
            xhrObj = new XMLHttpRequest();
        } catch (e) {
            xhrObj = null;
        }
    } else if (window.createRequest) {
        /* For ICEbrowser -- untested.
         * per their site 
         * http://support.icesoft.com/jive/entry.jspa?entryID=471&categoryID=21
         */
        try {
            xhrObj = window.createRequest();
        }
        catch (e) {
            xhrObj = null;
        }
    } else if (window.ActiveXObject) {
        // branch for IE/Windows ActiveX version
        try {
            xhrObj = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try{
                xhrObj = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e) {
                xhrObj = null;
            }
        }//catch
    } //if-else
    return xhrObj;
}//eof createXHR

function stripHTML(oldString) {

   var newString = "";
   var inTag = false;
   for(var i = 0; i < oldString.length; i++) {
   
        if(oldString.charAt(i) == '<') inTag = true;
        if(oldString.charAt(i) == '>') {
              if(oldString.charAt(i+1)=="<")
              {
              		//dont do anything
	}
	else
	{
		inTag = false;
		i++;
	}
        }
   
        if(!inTag) newString += oldString.charAt(i);

   }

   return newString;
}


function loadData(params, targetId, id, listTemplateId, itemTemplateId, readyFunction) 
{
  var xhr = createXHR();
	xhr.open("GET", params,true);
	xhr.onreadystatechange = function() 
	{
		if (xhr.readyState == 4 && xhr.status != 404) 
		{
		  var data = eval("(" + xhr.responseText + ")");
      
      prepareData(data, targetId, id, listTemplateId, itemTemplateId);
      if (readyFunction != "")
      {
        eval (readyFunction + "();");
      }
		} 
	}
  xhr.send(null);
}

function prepareData(data, targetId, id, listTemplateId, itemTemplateId)
{
  var targetElement = document.getElementById(targetId);
  var listTemplate = document.getElementById(listTemplateId).innerHTML;
  var itemTemplate = document.getElementById(itemTemplateId).innerHTML;
  
  var result = renderList(data, listTemplate, itemTemplate);
  targetElement.innerHTML = result;
}

function replaceAll(OldString, FindString, ReplaceString) {
  var SearchIndex = 0;
  var NewString = ""; 
  while (OldString.indexOf(FindString,SearchIndex) != -1)    {
    NewString += OldString.substring(SearchIndex,OldString.indexOf(FindString,SearchIndex));
    NewString += ReplaceString;
    SearchIndex = (OldString.indexOf(FindString,SearchIndex) + FindString.length);         
  }
  NewString += OldString.substring(SearchIndex,OldString.length);
  return NewString;
}

function renderItem(data, template)
{
  var result = template + "";

  for (var key in data) 
  {
    if (key == "tytul" && data.tytul.length > 150)
    {
      var value = data.tytul.substr(0,80) + "...";
    }
    else
    if (key == "opis" && data.opis.length > 150)
    {
      var value = data.opis.substr(0,140) + "...";
    }
    else
    {
      eval("var value = data." + key + ";");
    }
    result = replaceAll(result, "%"+key+"%", stripHTML(value));
  }

  // custom eveluators
  // custom price
  if (data['cenapromocyjna'] == undefined || data['cenapromocyjna'] == "" && data['cenasprzedazy'] != "")
  {
    value = data['cenasprzedazy'];      
    result = replaceAll(result, "%customprice%", value);
  }
  else
  {
    value = data['cenapromocyjna'];      
    result = replaceAll(result, "%customprice%", value);
  }
  
  return result;
}

function renderList(data, template, itemTemplate)
{
  var result = template;
  var items = "";
  
  for (var i = 0; i < data.ksiazki.ksiazka.length; i++ )
  {
    items+=renderItem(data.ksiazki.ksiazka[i], itemTemplate);
  }
  
  result = result.replace('%items%', items);
  
  return result;  
}


