if(typeof(Payments) == 'undefined') {
	var Payments = new Object();
}


Payments.PaymentInfo = function() { }


Payments.PaymentInfo.tryRetrieve = function(params) {
    var data = null;
    var onComplete = function() { };
    var request = Payments.PaymentInfo._getRequestObject();
    var serviceUrl = 'http://' + location.host + '/KeywordResearch/PaymentService.aspx?t=4&o=2';

    if (!params) {
        params = {};
    }

    if (params.onComplete) {
        onComplete = params.onComplete;
    }

    if (params.optionName) {
        serviceUrl += '&CUSTOM_OptionName=' + params.optionName;
    }

    if (params.target) {
        serviceUrl += '&CUSTOM_Target=' + params.target;
    }

	if (request) {
		Payments.PaymentInfo.setState('loading');
		
        request.open('GET', serviceUrl, true);
        request.onreadystatechange = function() {
            if (request.readyState == 4 && request.status == 200) {
                if (request.responseText.length > 0) {
                    try {
                        data = eval('(' + request.responseText + ')');
                    } catch (ex) { }
                }

                Payments.PaymentInfo.fillBox(data);
                onComplete(data);
            }
        }

        request.send(null);
    }
}

Payments.PaymentInfo.setState = function(state) {
	var boxLoading = Payments.PaymentInfo._e('boxContentLoading');
    var boxContent = Payments.PaymentInfo._e('boxContentAvailable');
	var boxNotAvailable = Payments.PaymentInfo._e('boxContentNotAvailable');
	
	boxLoading.style.display = 'none';
	boxContent.style.display = 'none';
	boxNotAvailable.style.display = 'none';
	
	if (state == 'loading') {
		boxLoading.style.display = '';
	} else if (state == 'success') {
		boxContent.style.display = '';
	} else if (state == 'unavailable') {
		boxNotAvailable.style.display = '';
	}
}

Payments.PaymentInfo.fillBox = function(data) {
    var periodUnit = '';
    var periodUnitSingle = '';
    var periodUnitElement = Payments.PaymentInfo._e('paymentPeriodUnit');
    var periodUnitSingleElement = Payments.PaymentInfo._e('paymentPeriodUnitSingle');    

    if (periodUnitElement) {
        periodUnit = periodUnitElement.innerHTML;
    }

    if (periodUnitSingleElement) {
        periodUnitSingle = periodUnitSingleElement.innerHTML;
    } else {
        periodUnitSingle = 'month';
    }

    if (data) {
        if (data.IsAvailable) {
            Payments.PaymentInfo.setState('success');

            Payments.PaymentInfo._html('paymentDescription', data.Description);
            Payments.PaymentInfo._html('paymentPeriod', data.Period + '&nbsp;' + periodUnit);
            Payments.PaymentInfo._html('paymentAmount', data.Currency + ' ' + Math.ceil(data.Amount / data.Period) + '.00/' + periodUnitSingle);
        } else {
            Payments.PaymentInfo.setState('unavailable');
        }
    } else {
        Payments.PaymentInfo.setState('unavailable');
    }
}


Payments.PaymentInfo._getRequestObject = function() {
	var ret;
	try {
		ret = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) { ret = null; }
	
	if(!ret) {
		try {
			ret = new ActiveXObject("Microsoft.XMLHTTP");
		} catch(e) { ret = null; }
	}
		
	if (!ret && typeof(XMLHttpRequest) != 'undefined') {
		ret = new XMLHttpRequest();
	}
  
	return ret;
}


Payments.PaymentInfo._e = function(id) {
	return document.getElementById(id);
}


Payments.PaymentInfo._html = function(id, html) {
	var elm = Payments.PaymentInfo._e(id);
	
	if(elm) {
		elm.innerHTML = html;
	}
}

Payments.Receipt = new Object();

Payments.Receipt.tryRetrieve = function (params) {
    var data = null;
    var onComplete = function () { };
    var request = Payments.PaymentInfo._getRequestObject();
    var serviceUrl = 'http://' + location.host + '/KeywordResearch/PaymentService.aspx?t=5&o=2';

    if (!params) {
        params = {};
    }

    if (params.onComplete) {
        onComplete = params.onComplete;
    }

    if (params.ticket) {
        serviceUrl += '&ticket=' + params.ticket;
    }

    if (request) {
        Payments.Receipt.setState('loading');

        request.open('GET', serviceUrl, true);
        request.onreadystatechange = function () {
            if (request.readyState == 4 && request.status == 200) {
                if (request.responseText.length > 0) {
                    try {
                        data = eval('(' + request.responseText + ')');
                    } catch (ex) { }
                }

                Payments.Receipt.fillBox(data);
                onComplete(data);
            }
        }

        request.send(null);
    }
}

Payments.Receipt.setState = function (state) {
    var boxContent = Payments.PaymentInfo._e('tabReceipt');
    var boxLoading = Payments.PaymentInfo._e('divReceiptRetrieving');
    var boxNotAvailable = Payments.PaymentInfo._e('divReceiptUnavailable');

    boxLoading.style.display = 'none';
    boxContent.style.display = 'none';
    boxNotAvailable.style.display = 'none';

    if (state == 'loading') {
        boxLoading.style.display = '';
    } else if (state == 'success') {
        boxContent.style.display = '';
    } else if (state == 'unavailable') {
        boxNotAvailable.style.display = '';
    }
}

Payments.Receipt.fillBox = function (data) {
    if (data) {
        if (data.IsAvailable) {
            Payments.Receipt.setState('success');
            
            Payments.PaymentInfo._html('receiptTransactionID', data.TransactionID);
            Payments.PaymentInfo._html('receiptOrderNumber', data.OrderNumber);
            Payments.PaymentInfo._html('receiptAmount', data.Currency + ' ' + data.Amount + '.00');
            Payments.PaymentInfo._html('receiptTime', new Date(data.Time).toLocaleString());
            Payments.PaymentInfo._html('receiptCardHolder', decodeURIComponent(data.CardHolder).replace(/\+/g, ' '));
            Payments.PaymentInfo._html('receiptCompany', decodeURIComponent(data.Company).replace(/\+/g, ' '));
            Payments.PaymentInfo._html('receiptVAT', data.VAT);
            Payments.PaymentInfo._html('receiptCountry', data.Country);
            Payments.PaymentInfo._html('receiptOptionName', data.OptionName);
            Payments.PaymentInfo._html('receiptTarget', data.Target);
        } else {
            Payments.Receipt.setState('unavailable');
        }
    } else {
        Payments.Receipt.setState('unavailable');
    }
}
