/* do not change */

function init_post_request() {

  this.fn_request = false;

  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    this.fn_request = new XMLHttpRequest();
    if (this.fn_request.overrideMimeType) {
      this.fn_request.overrideMimeType('text/html');
    }
  }
  else if (window.ActiveXObject) { // IE
    try {
      this.fn_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
       try {
         this.fn_request = new ActiveXObject("Microsoft.XMLHTTP");
       } catch (e) {}
    }
  }
  if (!this.fn_request) {
    alert('Cannot create XMLHTTP instance');
    return false;
  }

}

function post_request(obj, url, parameters) {

  obj.open('POST', url, true);
  obj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  obj.setRequestHeader("Content-length", parameters.length);
  obj.setRequestHeader("Connection", "close");
  obj.send(parameters);

}

function build_query(frm) {
  var str = "";
  var element, i = 0;
  while ((element = document.getElementById(frm).elements[i++]) != null) {
      var qc = toQueryComponent(element);
      if (qc != "") str += "&" + qc;
  }
  return str.substring(1);
}

function toQueryComponent(input) {
    if (!input.name || input.disabled)
        return "";

    var n = urlencode(input.name);

    switch (input.type) {
    case "text":
    case "password":
    case "submit":
    case "hidden":
        return n + "=" + urlencode(input.value);
    case "textarea":
        // normalize line breaks as CR LF pairs as per RFC 1866
        var v = input.value.split(/\r\n|\r|\n/).join("\r\n");
        return n + "=" + urlencode(v);
    case "checkbox":
    case "radio":
        if (!input.checked)
            return "";
        //var v = getRealValue(input);
        var v = input.value;
        if (v === null) v = "on";
        return n + "=" + urlencode(v);
    case "select-one":
    case "select-multiple":
        var nvp = [];
        var opt, i = 0;
        while ((opt = input.options[i++]) != null) {
            if (opt.selected) {
                var v = getRealValue(opt);
                if (v === null) v = opt.text;
                // older versions of IE do not support Array.push
                nvp[nvp.length] = n + "=" + urlencode(v);
            }
        }
        return nvp.join("&");
    default:
        // input types reset, button, image, and file not implemented
        return "";
    }
}

function urlencode(str) {
    var v;
    try { v = encodeURIComponent(str); } catch (e) { v = escape(str); }
    return v.replace(/%20/g,"+");
}

function getRealValue(input) {
    var attr = input.getAttributeNode("value");
    return (attr && attr.specified) ? input.getAttribute("value") : null;
}

function launch_js(data) {
  // RegExp from prototype.sonio.net

  data = data.replace("<!--", "");
  data = data.replace("-->", "");

  var ScriptFragment = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';

  var match    = new RegExp(ScriptFragment, 'img');
  var scripts  = data.match(match);

    if(scripts) {
        var js = '';
        for(var s = 0; s < scripts.length; s++) {
            var match = new RegExp(ScriptFragment, 'im');
            js += scripts[s].match(match)[1];
        }
        eval(js);
    }
}

/* end of do not change  */

function change_opacity(id, opacStart, opacEnd, millisec) {
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;

	//determine the direction for the blending, if start and end are the same nothing happens
	if(opacStart > opacEnd) {
		for(i = opacStart; i >= opacEnd; i--) {
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
			timer++;
		}
			
	} else if(opacStart < opacEnd) {
		for(i = opacStart; i <= opacEnd; i++)
			{
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
			timer++;
		}
	}
	
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
	var object = document.getElementById(id).style;
	object.opacity = (opacity / 100); 
	//object.MozOpacity = (opacity / 100);    
	object.filter = "alpha(opacity=" + opacity + ")";
}

var featured_req ="";
function show_featured(doc_id) {  	
  var url   = "/ajax/featured_articles.ajx.php?doc_id=" + doc_id;
	query = "";	
	tmp_http_req = new init_post_request();
	featured_req  = tmp_http_req.fn_request;
	featured_req.onreadystatechange = update_featured;		
	post_request(featured_req, url, query);
	 
}

function update_featured() {
  if (featured_req.readyState == 4 || featured_req.readyState == "complete")  {  			    			
		data = featured_req.responseText;
		change_opacity('featured_div', 100, 0, 500);	
		setTimeout("document.getElementById(\"featured_div\").innerHTML = data; change_opacity('featured_div', 0, 100, 200);",500);							
  }
}

var subscribe_req ="";
function subscribe(){
	email_add = document.getElementById("subscribe_email").value;
	subscriber = document.getElementById("subscribe_name").value;
	if(subscriber == "" || subscriber == "Name"){
		alert("Please enter your name.")
		return false;
	}
	if (email_add.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) == -1){
		alert("Please enter a valid email address.")
		return false;
	}else{
		var url   = "/index.php?cmd=subscribe&email=" + email_add + "&name=" + subscriber;
		query = "";
		//document.getElementById("subscribe_td").innerHTML = "Saving...";		
		tmp_http_req = new init_post_request();
		subscribe_req  = tmp_http_req.fn_request;
		subscribe_req.onreadystatechange = update_subscribe;		
		post_request(subscribe_req, url, query);
	}	
}
function update_subscribe() {
  if (subscribe_req.readyState == 4 || subscribe_req.readyState == "complete")  {  			    			
		data = subscribe_req.responseText;			
		//document.getElementById("subscribe_td").innerHTML = data;	
		document.getElementById("subscribe_email").value = "Email address";
		document.getElementById("subscribe_name").value = "Name";
		alert("You have successfully subscribed to our newsletter.");
		
  }
}

var map_update_req = ""

function update_map(map_id) {	

	var url   = "/ajax/maps.ajx.php?map_id=" + map_id;
  var query = "";
	document.getElementById('map_details').innerHTML = "Loading...";
  tmp_http_req    = new init_post_request();
  map_update_req = tmp_http_req.fn_request;

  map_update_req.onreadystatechange = update_map_details;

  post_request(map_update_req, url, query);

}

function update_map_details() {

	if (map_update_req.readyState == 4 || map_update_req.readyState == "complete") {
    data = map_update_req.responseText;
		document.getElementById('map_details').innerHTML = data;
		launch_js(data);
	}

}

var model_update_req = ""

function update_model(brand, address) {	

	var url   = address + "?cmd=update_model&manufacturer=" + brand;
  var query = "";
	document.getElementById('model_span').innerHTML = "Loading...";
  tmp_http_req    = new init_post_request();
  model_update_req = tmp_http_req.fn_request;

  model_update_req.onreadystatechange = update_model_details;

  post_request(model_update_req, url, query);

}

function update_model_details() {

	if (model_update_req.readyState == 4 || model_update_req.readyState == "complete") {
    data = model_update_req.responseText;
		document.getElementById('model_span').innerHTML = data;
	}

}


var lookup_req = ""

function torch_lookup(address) {	
	var brand = document.getElementById('brand').value;
	var model = document.getElementById('model').value;
	
	if(brand != "" && model != ""){
	
		var url   = address + "?cmd=lookup&manufacturer=" + brand + "&model=" + model;
		var query = "";
		document.getElementById('torch_result').innerHTML = "Searching...";
		tmp_http_req    = new init_post_request();
		lookup_req = tmp_http_req.fn_request;
	
		lookup_req.onreadystatechange = update_torch_details;
	
		post_request(lookup_req, url, query);
	}

}

function update_torch_details() {

	if (lookup_req.readyState == 4 || lookup_req.readyState == "complete") {
    data = lookup_req.responseText;
		document.getElementById('torch_result').innerHTML = data;
	}

}