
var __data;
var __error = "";

var block = 0;
var lastFromAmount = "1";
var lastToAmount = "";

var interval = null;

function setError(msg){
	var e = document.getElementById("error");
	e.innerHTML = msg;
}

function currencyChanged(source){
	if (block)
		return;
	block = 1;
	setError("");

	var from = document.getElementById("from").value;
	var to = document.getElementById("to").value;
	if (from == "" || to == "")
		return;
	var leftCode = from;
	var rightCode = to;
	if (source == "to_amount"){
		var t = from;		//changing 'from' to 'to' and 'to' to 'from'
		from = to;
		to = t;
	}
	var fromAmount = document.getElementById(source).value;
	if (fromAmount == "")
		return;


	var s = document.createElement('script');
	var src = 'http://currate.com/econverterbox.php?task=calculate';
	src += '&f=' + from + "&t=" + to + "&l=" + leftCode + "&r=" + rightCode + "&amount=" + fromAmount;
	src += '&dummy=' + new String (Math.random()).substring (2, 11);
	s.setAttribute('charset', 'utf-8');
	s.setAttribute('src',  src);

	s.setAttribute('type', 'text/javascript');
	container = document.getElementById('scripts_container');
	container.innerHTML = '';
	container.appendChild(s);
	interval = setInterval("doneFunction('" + source + "')", 200);
}

function doneFunction(source){
	if (block == 1)
		return;
	clearInterval(interval);
	if (__error != ""){
		block = 0;
		setError(__error);
		return;
	}
	var v = __data['value'];
	if (v != ""){
		if (source == "from_amount"){
			document.getElementById("to_amount").value = v;
			lastToAmount = v;
		}
		else {
			document.getElementById("from_amount").value = v;
			lastFromAmount = v;
		}
	}

	var content = __data['table'];
	if (content != ""){
		var ctElem = document.getElementById("converterTable");
		if (ctElem != null)
			ctElem.innerHTML = content;
	}
	initLightbox();
	block = 0;
	__error = "";
}


function checkAmount(e){
	if (!isUnsignedDouble(e.value) || (isUnsignedDouble(e.value) && parseFloat(e.value)>1000000000 )) {
		e.value = (e.id == "from_amount")?lastFromAmount:lastToAmount;
		return false;
	}
	else {
		if (e.id == "from_amount")
			lastFromAmount = e.value;
		else
			lastToAmount = e.value;
		return true;
	}
}

function isUnsignedDouble(str){
	var index;
	var temp;
	  
	index = str.indexOf('.');
	if (index == -1)
 		return isUnsignedInt(str);
	else {											//there is at least one dot - removing it and checking if it's a valid int number
		temp = str.substring(0, index) + str.substring(index + 1, str.length);
		return isUnsignedInt(temp);
	}
}


function isDigit(c) {
	var string="1234567890";
      
	if (string.indexOf(c) != -1)
		return true;
	else
		return false;
}

function isUnsignedInt(str){
	for (pos=0;pos<str.length;pos++){
		if (!isDigit(str.charAt(pos)))
			return false;
	}
	return true;
}

function amountChanged(e){
	if (!checkAmount(e))
		return;
	currencyChanged(e.id);
}

function getResults(str) {
	index = 0;
	result = new Array();
	for (i=0;i<_names.length;i++) {
		if (_names[i].toLowerCase().indexOf(str.toLowerCase()) != -1) {
			obj = {};
			obj.id = _codes[i];
			obj.text = _names[i];

			result[index] = obj;
			index++;
		}
	}
	return result;
}

function handleFromChoice(code, desc, arrExtra) {
	var sb = document.getElementById("suggestResultsA");
	var fromElement = document.getElementById("from");
	fromElement.value = code;
	document.getElementById("from_amount").focus();
	currencyChanged("from_amount");
	return true;
}

function handleToChoice(code, desc, arrExtra) {
	var sb = document.getElementById("suggestResultsB");
	var toElement = document.getElementById("to");
	toElement.value = code;
	document.getElementById("to_amount").focus();
	currencyChanged("from_amount");
	return true;
}
























/*
	Lightbox JS: Fullsize Image Overlays 
	by Lokesh Dhakar - http://www.huddletogether.com

	For more information on this script, visit:
	http://huddletogether.com/projects/lightbox/

	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
	(basically, do anything you want, just leave my name and link)
	
	Table of Contents
	-----------------
	Configuration
	
	Functions
	- getPageScroll()
	- getPageSize()
	- pause()
	- getKey()
	- listenKey()
	- showLightbox()
	- hideLightbox()
	- initLightbox()
	- addLoadEvent()
	
	Function Calls
	- addLoadEvent(initLightbox)

*/



//
// Configuration
//

// If you would like to use a custom loading image or close button reference them in the next two lines.
var loadingImage = 'loading.gif';		
var closeButton = 'close.gif';		

var selectsState = new Array();



//
// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.org
//
function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;
}



//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}


//
// pause(numberMillis)
// Pauses code execution for specified time. Uses busy code, not good.
// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602
//
function pause(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
			return;
	}
}

//
// getKey(key)
// Gets keycode. If 'x' is pressed then it hides the lightbox.
//

function getKey(e){
	if (e == null) { // ie
		keycode = event.keyCode;
	} else { // mozilla
		keycode = e.which;
	}
	key = String.fromCharCode(keycode).toLowerCase();
	
	if(key == 'x'){ hideLightbox(); }
}


//
// listenKey()
//
function listenKey () {	document.onkeypress = getKey; }
	

//
// showLightbox()
// Preloads images. Pleaces new image in lightbox then centers and displays.
//
function showLightbox(objLink)
{
	// prep objects
	var objOverlay = document.getElementById('overlay');
	var objLightbox = document.getElementById('lightbox');
	var objCaption = document.getElementById('lightboxCaption');
	var objImage = document.getElementById('lightboxImage');
	var objLoadingImage = document.getElementById('loadingImage');
	var objLightboxDetails = document.getElementById('lightboxDetails');

	
	var arrayPageSize = getPageSize();
	var arrayPageScroll = getPageScroll();

	// center loadingImage if it exists
	if (objLoadingImage) {
		objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageSize[3] - 35 - objLoadingImage.height) / 2) + 'px');
		objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoadingImage.width) / 2) + 'px');
		objLoadingImage.style.display = 'block';
	}

	// set height of Overlay to take up whole page and show
	objOverlay.style.height = (arrayPageSize[1] + 'px');
	objOverlay.style.display = 'block';

	// preload image
	imgPreload = new Image();

	imgPreload.onload=function(){
		objImage.src = objLink.href;

		// center lightbox and make sure that the top and left values are not negative
		// and the image placed outside the viewport
		var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35 - imgPreload.height) / 2);
		var lightboxLeft = ((arrayPageSize[0] - 20 - imgPreload.width) / 2);
		
		objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTop + "px";
		objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightboxLeft + "px";


		objLightboxDetails.style.width = imgPreload.width + 'px';
		
		if(objLink.getAttribute('title')){
			objCaption.style.display = 'block';
			//objCaption.style.width = imgPreload.width + 'px';
			objCaption.innerHTML = objLink.getAttribute('title');
		} else {
			objCaption.style.display = 'none';
		}
		
		// A small pause between the image loading and displaying is required with IE,
		// this prevents the previous image displaying for a short burst causing flicker.
		if (navigator.appVersion.indexOf("MSIE")!=-1){
			pause(250);
		} 

		if (objLoadingImage) {	objLoadingImage.style.display = 'none'; }

		// Hide select boxes as they will 'peek' through the image in IE
		selectsState = new Array();
		selects = document.getElementsByTagName("select");
        	for (i = 0; i != selects.length; i++) {
			selectsState[i] = selects[i].style.visibility;
                	selects[i].style.visibility = "hidden";
        	}

	
		objLightbox.style.display = 'block';

		// After image is loaded, update the overlay height as the new image might have
		// increased the overall page height.
		arrayPageSize = getPageSize();
		objOverlay.style.height = (arrayPageSize[1] + 'px');
		
		// Check for 'x' keypress
		listenKey();

		return false;
	}

	imgPreload.src = objLink.href;
	
}





//
// hideLightbox()
//
function hideLightbox()
{
	// get objects
	objOverlay = document.getElementById('overlay');
	objLightbox = document.getElementById('lightbox');

	// hide lightbox and overlay
	objOverlay.style.display = 'none';
	objLightbox.style.display = 'none';

	// make select boxes visible
	selects = document.getElementsByTagName("select");
    	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = selectsState[i];
	}

	// disable keypress listener
	document.onkeypress = '';
}




//
// initLightbox()
// Function runs on window load, going through link tags looking for rel="lightbox".
// These links receive onclick events that enable the lightbox display for their targets.
// The function also inserts html markup at the top of the page which will be used as a
// container for the overlay pattern and the inline image.
//
function initLightbox()
{
	
	if (!document.getElementsByTagName){ return; }
	var anchors = document.getElementsByTagName("a");

	// loop through all anchor tags
	for (var i=0; i<anchors.length; i++){
		var anchor = anchors[i];

		if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox")){
			anchor.onclick = function () {showLightbox(this); return false;}
		}
	}

	// the rest of this code inserts html at the top of the page that looks like this:
	//
	// <div id="overlay">
	//		<a href="#" onclick="hideLightbox(); return false;"><img id="loadingImage" /></a>
	//	</div>
	// <div id="lightbox">
	//		<a href="#" onclick="hideLightbox(); return false;" title="Click anywhere to close image">
	//			<img id="closeButton" />		
	//			<img id="lightboxImage" />
	//		</a>
	//		<div id="lightboxDetails">
	//			<div id="lightboxCaption"></div>
	//			<div id="keyboardMsg"></div>
	//		</div>
	// </div>
	
	var objBody = document.getElementsByTagName("body").item(0);
	
	// create overlay div and hardcode some functional styles (aesthetic styles are in CSS file)
	var objOverlay = document.createElement("div");
	objOverlay.setAttribute('id','overlay');
	objOverlay.onclick = function () {hideLightbox(); return false;}
	objOverlay.style.display = 'none';
	objOverlay.style.position = 'absolute';
	objOverlay.style.top = '0';
	objOverlay.style.left = '0';
	objOverlay.style.zIndex = '90';
 	objOverlay.style.width = '100%';
	objBody.insertBefore(objOverlay, objBody.firstChild);
	
	var arrayPageSize = getPageSize();
	var arrayPageScroll = getPageScroll();

	// preload and create loader image
	var imgPreloader = new Image();
	
	// if loader image found, create link to hide lightbox and create loadingimage
	imgPreloader.onload=function(){

		var objLoadingImageLink = document.createElement("a");
		objLoadingImageLink.setAttribute('href','#');
		objLoadingImageLink.onclick = function () {hideLightbox(); return false;}
		objOverlay.appendChild(objLoadingImageLink);
		
		var objLoadingImage = document.createElement("img");
		objLoadingImage.src = loadingImage;
		objLoadingImage.setAttribute('id','loadingImage');
		objLoadingImage.style.position = 'absolute';
		objLoadingImage.style.zIndex = '150';
		objLoadingImageLink.appendChild(objLoadingImage);

		imgPreloader.onload=function(){};	//	clear onLoad, as IE will flip out w/animated gifs

		return false;
	}

	imgPreloader.src = loadingImage;

	// create lightbox div, same note about styles as above
	var objLightbox = document.createElement("div");
	objLightbox.setAttribute('id','lightbox');
	objLightbox.style.display = 'none';
	objLightbox.style.position = 'absolute';
	objLightbox.style.zIndex = '100';	
	objBody.insertBefore(objLightbox, objOverlay.nextSibling);
	
	// create link
	var objLink = document.createElement("a");
	objLink.setAttribute('href','#');
	objLink.setAttribute('title','Click to close');
	objLink.onclick = function () {hideLightbox(); return false;}
	objLightbox.appendChild(objLink);

	// preload and create close button image
	var imgPreloadCloseButton = new Image();

	// if close button image found, 
	imgPreloadCloseButton.onload=function(){

		var objCloseButton = document.createElement("img");
		objCloseButton.src = closeButton;
		objCloseButton.setAttribute('id','closeButton');
		objCloseButton.style.position = 'absolute';
		objCloseButton.style.zIndex = '200';
		objLink.appendChild(objCloseButton);

		return false;
	}

	imgPreloadCloseButton.src = closeButton;

	// create image
	var objImage = document.createElement("img");
	objImage.setAttribute('id','lightboxImage');
	objLink.appendChild(objImage);
	
	// create details div, a container for the caption and keyboard message
	var objLightboxDetails = document.createElement("div");
	objLightboxDetails.setAttribute('id','lightboxDetails');
	objLightbox.appendChild(objLightboxDetails);

	// create caption
	var objCaption = document.createElement("div");
	objCaption.setAttribute('id','lightboxCaption');
	objCaption.style.display = 'none';
	objLightboxDetails.appendChild(objCaption);

}


//
// addLoadEvent()
// Adds event to window.onload without overwriting currently assigned onload functions.
// Function found at Simon Willison's weblog - http://simon.incutio.com/
//
function addLoadEvent(func)
{	
	var oldonload = window.onload;
	if (typeof window.onload != 'function'){
    	window.onload = func;
	} else {
		window.onload = function(){
		oldonload();
		func();
		}
	}

}

addLoadEvent(initLightbox);	// run initLightbox onLoad


























/*  
	Title : Auto Suggest Box
	Author : Tom Coote
	Wedsite : http://www.tomcoote.co.uk
*/

 /**
	* @argument SearchInputID - The id of the text input for the loop up.
	* @argument MultiSelectID - The id of the select tag for the results to be placed.
	* @argument fnSearch - The JavaScript function to call to get results, 
	*						this function will get passed a string value of the requested search text and
	*						must return an array of objects with the following members; id, text
	* @argument fnFound - The JavaScript function to call when a result is selected,
	*						this function will get passed the id and text of the selected object plus any extra arguments passed in
	*						when the results were created.
	*/
function AutoSuggestBox(SearchInputID, MultiSelectID, fnSearch, fnFound) {
    
	var that = {}; // Must use 'that' so not to confuse with 'this' which is the global object.

	/* Private Variables 
	*
	* These variables can only be accessed by functions inside the scope of this object.
	*/
	var eSearchInput, eMultiSelect;
	var iMaxListHeight = 280;
	var arrArgs; 
	var iSelectTextHeight = 22; // You may need to change this depending on your CSS.
	var selectedIndex = -1;
	var ignoreMouseOver = false;

	var ie = (document.all) ? true : false;
    /* Private Functions 
	*
	* These functions can only be accessed by functions inside the scope of this object.
	*/

	function Initiate() {
		eSearchInput = document.getElementById(SearchInputID);
		eMultiSelect = document.getElementById(MultiSelectID);

		// Position the results area directly underneath the input box ready for deployment
		PositionElement();
		eMultiSelect.style.visibility = 'hidden';

		eSearchInput.ondblclick = function (){
			that.showResults("");
		};
	}

	function GetResultClickHandler() {
		if (selectedIndex == -1)
			return;
		document.onclick = "";
		document.onkeydown = "";
		document.onkeypress = "";

		var lis = eMultiSelect.getElementsByTagName("li");

		var l = lis[selectedIndex];
		var temp = l.getElementsByTagName("span");

		var text = temp[0].innerHTML;
		var temp = l.getElementsByTagName("input");
		var id = temp[0].value;

		eSearchInput.value = text;
		eMultiSelect.style.visibility = 'hidden';
		fnFound(id,text,arrArgs);
	}
/*	function GetResultKeyPressHandler(e) {
		if (GetKeyCode(e) == 13) 
			GetResultClickHandler();
	}
*/
	function GetKeyCode(e)
	{
		if (e) {
			return e.charCode ? e.charCode : e.keyCode;
		}
		else {
			return window.event.charCode ? window.event.charCode : window.event.keyCode;
		}
	}

	function PositionElement() {
		eMultiSelect.style.position = 'absolute';
		eMultiSelect.style.width = eSearchInput.offsetWidth + 'px';
	}

	/* Public Variables 
	*
	* These variables are available from the returning object that this constructor creates,
	* new public variables can be added to the returning object at any time.
	*/
	var undefined;

	/* Public Functions 
	*
	* These functions are available from the returning object that this constructor creates,
	* new public functions can be added to the returning object at any time.
	*/
	that.KeyPressHandler = function(e){
		var unicode = GetKeyCode(e);

		var lis = eMultiSelect.getElementsByTagName('li');
		//tab pressed
		if (unicode == 9){
			eMultiSelect.style.visibility = 'hidden';
			document.onclick = "";
			document.onkeydown = "";
			document.onkeypress = "";
			return false;
		}

		if (unicode == 13 && eMultiSelect.style.visibility == 'visible'){
			if (selectedIndex != -1){
				GetResultClickHandler();
				return false;
			}
		}
		// Check for up/down key press
		if (unicode == 40) {
			if (selectedIndex == -1)
				that.changeSelected(0, true);
			else 
				that.changeSelected(selectedIndex + 1, true);
			return;
		}
		if (unicode == 38) {
			if (selectedIndex == -1)
				that.changeSelected(0, true);
			else 
				that.changeSelected(selectedIndex - 1, true);
			return;
		}
	}
			

	that.CreateResults = function(e) {
		// Check for additional arguments
		if (arguments != undefined) {
			arrArgs = arguments;
		}
		
		var unicode = GetKeyCode(e);
		if (unicode == 13 && eMultiSelect.style.visibility == 'visible'){
			var lis = eMultiSelect.getElementsByTagName("li");
			if (lis.length == 1){
				selectedIndex = 0;
				GetResultClickHandler();
				return false;
			}
		}

		if ((unicode == 40 || unicode == 38) && eMultiSelect.style.visibility == "visible")
			return;

		that.showResults(eSearchInput.value);
	}

	that.changeSelected = function(newIndex, controlScroll){
		var lis = eMultiSelect.getElementsByTagName("li");
 		if (newIndex >= lis.length || newIndex < 0)
			return;
		for (i=0;i<lis.length;i++)
			lis[i].id = "";
		lis[newIndex].id = "marked";
		if (controlScroll){
			if (lis[newIndex].offsetTop > eMultiSelect.offsetHeight/2){
				that.ignoreMouseOver = true;
				eMultiSelect.scrollTop = lis[newIndex].offsetTop - eMultiSelect.offsetHeight/2;
			}
			else {
				that.ignoreMouseOver = true;
				eMultiSelect.scrollTop = 0;
			}
		}
		selectedIndex = newIndex;
	}

	that.showResults = function(str){
		selectedIndex = -1;
		// Get results
		document.onclick = function(event){
			if (!event)					//ie 
				event = window.event;
			var srcElement = event.srcElement;
			if (!srcElement)
				srcElement = event.target;
			if (srcElement != eMultiSelect && srcElement != eSearchInput){
				document.onclick = "";
				document.onkeydown = "";
				document.onkeypress = "";
				eMultiSelect.style.visibility = 'hidden';
			}
		}
		if (!ie || (navigator.userAgent && navigator.userAgent.indexOf("Opera") != -1))
			document.onkeypress = that.KeyPressHandler;
		else
			document.onkeydown = that.KeyPressHandler;

		var arrResults = fnSearch(str), i, eOption, iCount = 0;
		
		if (arrResults == undefined) {
			eMultiSelect.style.visibility = 'hidden';
			document.onclick = "";
			document.onkeydown = "";
			document.onkeypress = "";
			return;
		}

		eMultiSelect.innerHTML = ''; 

		for (i=0; i < arrResults.length; i++) {
			if (arrResults[i] != undefined) {

				eOption = document.createElement('li');
				var textElem = document.createElement('span');
				textElem.innerHTML = arrResults[i].text;
				
				var idElem = document.createElement('input');
				idElem.type = "hidden";
				idElem.value = arrResults[i].id;

				var posElem = document.createElement('input');
				posElem.type = "hidden";
				posElem.value = i;
				
				eOption.appendChild(textElem);
				eOption.appendChild(idElem);
				eOption.appendChild(posElem);

				eOption.onclick = function (){
					var inputs = this.getElementsByTagName("input");
					selectedIndex = inputs[1].value;
					GetResultClickHandler();
				}
				eOption.onmouseover = function (){
					if (that.ignoreMouseOver){
						that.ignoreMouseOver = false;
						return;
					}
					
					var lis = eMultiSelect.getElementsByTagName("li");
					for (k=0;k<lis.length;k++){
						if (lis[k] == this){
							that.changeSelected(k, false);
							break;
						}
					}
				};
				

				eMultiSelect.appendChild(eOption);

				iCount++;
			}
		}

		if (iCount < 1) {
			eMultiSelect.style.visibility = 'hidden';
			document.onclick = "";
			document.onkeydown = "";
			document.onkeypress = "";
			return; // No results found.
		}

		PositionElement();
		var iHeight = iCount*iSelectTextHeight; 
	
		if (iCount > 2) {
			if (iHeight > iMaxListHeight) { // Don't want it to tall on the page
				eMultiSelect.style.height = iMaxListHeight+'px';
			}
			else {
				eMultiSelect.style.height = iHeight+'px';
			}
		}

		eMultiSelect.style.visibility = 'visible';
	}

	Initiate(); // Do all setup when the object is created.

	/* 
	* This (or that) is the object returned with all public members and
	* functions included above when the contructor is instantiated.
	*/
    return that;
}















