var w;

//no translations?
if (!TR) { var TR = function(t) { return t } }

/**
 * Create a new XML Http Request
 * Requires ActiveX in Internet Explorer
 *
 * @constructor
 */
function newXMLHttpRequest() {
  var xrq = false;

  if (window.XMLHttpRequest) {
    xrq = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    //IE
    try {
      xrq = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e1) {
      try {
        xrq = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e2) {
      	alert (TR("Please enable ActiveX in your browser"));
      }
    }
  }
  return xrq;
}

/**
 * Wrap request and result function in ReadyStateHandler
 * 
 * @param {newXMLHttpRequest} req
 * @param {Function} onRes result method
 * @param {DOMNode} tgt DOMNode to send to result method
 * @param {String} desc optional description
 * @return ready state handler pointer
 */
function getReadyStateHandler(req, onRes, tgt, desc, onError) {
	//show activity & measure timeout
	window.status = "AJAX:"+desc;
	
	return function () {
    if (req.readyState == 4) {
      if (req.status == 200) {
        onRes(req.responseXML, tgt);
      } else {
      	onError(req.status)
      }
    }
  }
}

/**
 * Make AJAX request
 * Call only this function directly!
 * always use MULTIPART if you are sending a lot of data or special characters
 * 
 * @param {Object} o all parameters as object
 * @param {String} o.service URL of service
 * @param {Object} o.params Parameters to send name:value
 * @param {Function} o.callBack result method 
 * @param {DOMNode} o.target DOMNode to send to result method
 * @param {String} o.description optional
 * @param {String} o.mode MULTIPART of XFORM
 * @param {Function} o.onError error fallback method
 * @param {Function} o.onNoAjax fallback method
 */
function ajax( o ) {

  if (typeof o != "object") alert("depricated use");

  //target body as source element if none other was defined
  if (!o.target) o.target = document.body;

  //show command url if no description was given
  if (!o.description) o.description = o.service;

  //set default mode
  if (!o.mode) o.mode = 'XFORM'
 
 //set error handler
  if (!o.onError) o.onError =  function (status) { alert(TR("HTTP error: ")+status) };
  
   //loosen security on mozilla
  try {
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
   } catch (e) {}

  var req = newXMLHttpRequest();

  //no AJAX?

  if (!req) {
  		if (o.onNoAjax) o.onNoAjax(o);
  		else alert(TR("This function is not available for non AJAX-browsers:\n"+o.service+"\n"+o.description));
 		return;
  }

  var handlerFunction = getReadyStateHandler(req, o.callBack, o.target, o.description, o.onError);
  req.onreadystatechange = handlerFunction;  
  if (o.service.indexOf(".xml") > -1 )
  	req.open("GET", o.service, true);
  else
  	req.open("POST", o.service, true);
  
  var s = "";

  if (o.mode == "MULTIPART") {
  	var d = new Date();
  	o.params.timestamp = d.getTime();
  	var boundary = "ambientia"+d.getTime();
  	req.setRequestHeader("Content-Type","multipart/form-data; charset=UTF-8; enctype=\"multipart/form-data\"; boundary="+boundary);
  	for(p in o.params) {
   		s += '--'+boundary+'\nContent-Disposition: form-data; name="'+p+'"\n\n'+o.params[p]+'\n\n';
  	}
  	s += '--'+boundary;  	
	req.setRequestHeader("Content-length", s.length+1);
  	req.setRequestHeader("Connection", "close");
  } else {
	  req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	  for(p in o.params) { 
	    if (s.length) s += "&";
	  	s += p + "=" + escape(o.params[p]);
	  } 
  }
  req.send(s);
}

/**
 * @param {XMLNode} xml
 * @param {String} nodeName
 * @return value of first node of that nodeName
 */
function getValue(xml, nodeName) {
	try {
		return xml.getElementsByTagName(nodeName)[0].firstChild.nodeValue;
		}
	catch (err) {
		return false;
		}
}

function tulosta(xmlSrc) {

  	ajax({
  		service:xmlSrc,
  		callBack:createPrintContent,
  		onError:function (error) { alert("Can't load xml:\n" + error) }
  		});
		
}

function createPrintContent(xml) {
	
	try {
		
		var html = '<html><head><link rel="stylesheet" type="text/css" href="/style/tulostus.css"/><title>Suurisiivousopas.fi</title></head><body>';
		
		if (getValue(xml,'otsikko'))
			html += '<h4>'+getValue(xml,'otsikko')+'</h4>';
		
		 html += "<img class='sollogo' src='/pics/kiiltoleima.gif' />";
		
 		html += '<div class="content"><h3>Vinkkejä</h3>'+getValue(xml, 'vinkki');

 		//tuote
 		for (var i = 1; i <= 6; i++) {
 			var tuote = xml.getElementsByTagName('tuote'+i)[0];
 			if (getValue(tuote, 'nimi')) {
 				html += '<h3>'+getValue(tuote, 'nimi')+'</h3>';
 				html += getValue(tuote, 'teksti');
 			}
 		}
			
		html += '</div>';
		
		//kuvat
 		var kuva = xml.getElementsByTagName('kuva');
		html += '<div id="kuvat">';
 		for (var i = 0; i < kuva.length; i++) {
 		
 			// html += '<a href="'+getValue(kuva[i], 'linkki')+'">';
 			html += '<img src="'+getValue(kuva[i], 'tiedostonimi')+'"/>';
 			// html += '<p>'+getValue(kuva[i],'nimi')+'</p>';
 		}
 		html += '</div>';
 		 
 		//html += '<a href="javascript:window.print()">Tulosta</a>';
		
 		html += "<div id='footer'></div></body></html>";

		w = window.open('Suurisiivousopas.fi','tulosta','width=650,height=800');
		w.document.open();
		w.document.writeln(html);
		w.document.close();

		setTimeout('w.print()',100)
		w.focus();
		
 		
	} catch (error) {
		alert("Tulostusta ei voitu aloittaa:\n" + error);
	}
}
