// JavaScript Document
//General Javascript Utility Functions

var currentDiv = null;
var commentVisible = false;

function createRequest() {
	try {
		request = new XMLHttpRequest();
	} catch (tryMS) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (otherMS) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(failed) {
				request = null;
			}
		}
	}
	return request;
}

function getParameter ( queryString, parameterName ) {
   // Add "=" to the parameter name (i.e. parameterName=value)
   var parameterName = parameterName + "=";
   if ( queryString.length > 0 ) {
      // Find the beginning of the string
      begin = queryString.indexOf ( parameterName );
      // If the parameter name is not found, skip it, otherwise return the value
      if ( begin != -1 ) {
         // Add the length (integer) to the beginning
         begin += parameterName.length;
         // Multiple parameters are separated by the "&" sign
         end = queryString.indexOf ( "&" , begin );
      if ( end == -1 ) {
         end = queryString.length
      }
      // Return the string
      return unescape ( queryString.substring ( begin, end ) );
   }
   // Return "null" if no parameter has been found
   return "null";
   }
}

function addEventHandler(obj,eventName,handler) {
	if(document.attachEvent) {
		obj.attachEvent("on" + eventName, handler);
	} else if (document.addEventListener) {
		obj.addEventListener(eventName, handler, false);
	}
}

function getActivatedObject(e) {
	
	var obj;
	
	if(!e) {
		//Early version of IE
		obj = window.event.srcElement;
	} else if (e.srcElement) {
		//IE 7 or later
		obj = e.srcElement;
	} else {
		//DOM Level 2 browser
		obj = e.target;
	}

return obj;

}

function isArray(arg) {
	if (typeof arg == 'object') {
		var criteria = arg.constructor.toString().match(/array/i);
		return (criteria != null);
	}
	
	return false;
}

//Show the popup
function showPopup(divName,width,height) {
	var scrolledX, scrolledY;
	if( self.pageYOffset ) {
	  scrolledX = self.pageXOffset;
	  scrolledY = self.pageYOffset;
	} else if( document.documentElement && document.documentElement.scrollTop ) {
	  scrolledX = document.documentElement.scrollLeft;
	  scrolledY = document.documentElement.scrollTop;
	} else if( document.body ) {
	  scrolledX = document.body.scrollLeft;
	  scrolledY = document.body.scrollTop;
	}

	// Determine the coordinates of the center of the page

	var centerX, centerY;
	if( self.innerHeight ) {
	  centerX = self.innerWidth;
	  centerY = self.innerHeight;
	} else if( document.documentElement && document.documentElement.clientHeight ) {
	  centerX = document.documentElement.clientWidth;
	  centerY = document.documentElement.clientHeight;
	} else if( document.body ) {
	  centerX = document.body.clientWidth;
	  centerY = document.body.clientHeight;
	}

	var leftOffset = scrolledX + (centerX - width) / 2;
	var topOffset = scrolledY + (centerY - height) / 2;

	//TEST
	/*var obj = getActivatedObject(event);
	var x = obj.clientX;
	var y = obj.clientY;*/
	
    //document.getElementById(divName).style.top = topOffset + "px";
    document.getElementById(divName).style.top = "200px";
	document.getElementById(divName).style.left = leftOffset + "px";
    document.getElementById(divName).style.display = "block";
    currentDiv = divName;
}

function showComment(divName) {
	if(!commentVisible) {
		document.getElementById(divName).style.display = "block";
		currentDiv = divName;
		commentVisible = true;
	} else {
		document.getElementById(divName).style.display = "none";
		currentDiv = divName;
		commentVisible = false;
	}
}

function sendComment(elementName, topicid) {
	request = createRequest();
	if(request==null) {
		alert("Unable to create request");
		return;
	}
	var url = "/docomment";
	var comment = document.getElementById(elementName).value;
	var name = document.getElementById("name").value;
	var email = document.getElementById("email").value;
	var requestData = "question=" + escape(comment)  + "&id=" + escape(topicid) + "&name=" + escape(name) + "&email=" + escape(email);
	
	document.getElementById(elementName).value = "";
	document.getElementById("name").value = "";
	document.getElementById("email").value = "";
	document.getElementById("msg").style.display = "block";
	
	request.onreadystatechange = closeCurrentDiv;
	request.open("POST",url,true);
	request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	request.send(requestData);
}

function closeCurrentDiv() {
	document.getElementById(currentDiv).style.display = "none";
}

function checkAgree() {
	if(document.getElementById("agree").checked) {
		return true;
	} else {
		return false;
	}
}

var Base64 = (function() {
	function encode_base64(data) {
	var out = "", c1, c2, c3, e1, e2, e3, e4;
	for (var i = 0; i < data.length; ) {
	c1 = data.charCodeAt(i++);
	c2 = data.charCodeAt(i++);
	c3 = data.charCodeAt(i++);
	e1 = c1 >> 2;
	e2 = ((c1 & 3) << 4) + (c2 >> 4);
	e3 = ((c2 & 15) << 2) + (c3 >> 6);
	e4 = c3 & 63;
	if (isNaN(c2))
	e3 = e4 = 64;
	else if (isNaN(c3))
	e4 = 64;
	out += tab.charAt(e1) + tab.charAt(e2) + tab.charAt(e3) + tab.charAt(e4);
	}
	return out;
	}

	function decode_base64(data) {
	var out = "", c1, c2, c3, e1, e2, e3, e4;
	for (var i = 0; i < data.length; ) {
	e1 = tab.indexOf(data.charAt(i++));
	e2 = tab.indexOf(data.charAt(i++));
	e3 = tab.indexOf(data.charAt(i++));
	e4 = tab.indexOf(data.charAt(i++));
	c1 = (e1 << 2) + (e2 >> 4);
	c2 = ((e2 & 15) << 4) + (e3 >> 2);
	c3 = ((e3 & 3) << 6) + e4;
	out += String.fromCharCode(c1);
	if (e3 != 64)
	out += String.fromCharCode(c2);
	if (e4 != 64)
	out += String.fromCharCode(c3);
	}
	return out;
	}

	var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	return { encode:encode_base64, decode:decode_base64 };
	})();

	//I transformed needed function to this (GWT native javascript function - just copy and paste it):

	/*public static native String base64decode(final String data) {

	var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	var out = "", c1, c2, c3, e1, e2, e3, e4;
	for (var i = 0; i < data.length; ) {
	e1 = tab.indexOf(data.charAt(i++));
	e2 = tab.indexOf(data.charAt(i++));
	e3 = tab.indexOf(data.charAt(i++));
	e4 = tab.indexOf(data.charAt(i++));
	c1 = (e1 << 2) + (e2 >> 4);
	c2 = ((e2 & 15) << 4) + (e3 >> 2);
	c3 = ((e3 & 3) << 6) + e4;
	out += String.fromCharCode(c1);
	if (e3 != 64)
	out += String.fromCharCode(c2);
	if (e4 != 64)
	out += String.fromCharCode(c3);
	}
	return out;

	};*/
