(function ($) {
    jQuery.support.cors = true;

    $.fn.faroForm = function (options) {

        var element = this;

        var defaults = {
            actionUrl: 'http://formcms.faro.com/Frontend/Form/Details/',
            language: 'en',
            form_id: '',
            form_wrapper: ''
        };

        var options = $.extend(defaults, options);

        if (location.href.lastIndexOf('#confirmationpage=') > 0)
        {
            _id = location.href.substring(location.href.lastIndexOf('#confirmationpage=') + 18);
            var ids = _id.split('_');
            _id = ids[0];
            _form_submit_id = ids[1];
            $().faroPage({ language: options.language, page_id: _id, page_wrapper: options.form_wrapper, form_submit_id: _form_submit_id});

            return;
        }

        if (checkValue(options.language) && checkValue(options.form_id) && checkValue(options.form_wrapper)) {
            loadForm(options.actionUrl, options.language, options.form_id);
        }

        function loadForm(actionUrl, language, form_id) {
            if ($.browser.msie && window.XDomainRequest && (actionUrl.indexOf('GetPreviewForm') == -1)) {
                // Use Microsoft XDR
                var xdr = new XDomainRequest();
                xdr.open("get", actionUrl + '?id=' + form_id + '&language=' + language);
                xdr.onload = function () {
                    displayForm(xdr.responseText);
                };
                xdr.onerror = function () {
                    alert("An error has occurred");
                };
				xdr.onprogress = function() {};
                xdr.ontimeout = function() {};
                xdr.timeout = 5000;
                xdr.send();
            } else {
                $.ajax({
                    url: actionUrl,
                    data: ({
                        id: form_id,
                        language: language
                    }),
                    success: displayForm,
                    error: function (xhr, ajaxOptions, error) {
                        if (xhr.isRejected())
				null;
                           // alert("error: Request has been rejected.\n");
                        //alert("responseText: " + xhr.responseText + "  Status: " + xhr.status + "  Status Text: " + xhr.statusText + "  AjaxOptions: " + ajaxOptions + "  ThrownError: " + error);
                    }
                });
            }
        }

        function displayForm(data) {
            $('#'+options.form_wrapper).html(data);
        }

        function checkValue(val) {
            if (val != null && val.length > 0) {
                return true;
            }
            return false;
        }
    };
})(jQuery);


(function ($) {
    jQuery.support.cors = true;

    $.fn.faroPage = function (options) {

        var element = this;

        var defaults = {
            actionUrl: 'http://formcms.faro.com/Frontend/Page/Index/',
            language: 'en',
            page_id: '',
            page_wrapper: '',
            form_submit_id: ''
        };

        var options = $.extend(defaults, options);

        if (checkValue(options.language) && checkValue(options.page_id) && checkValue(options.page_wrapper)) {
            loadPage(options.actionUrl, options.language, options.page_id, options.form_submit_id);
        }

        function loadPage(actionUrl, language, page_id, form_submit_id) {
            if ($.browser.msie && window.XDomainRequest) {
                // Use Microsoft XDR
                var xdr = new XDomainRequest();
                xdr.open("get", actionUrl + '?id=' + page_id + '&formSubmitId=' + form_submit_id + '&language=' + language);
                xdr.onload = function () {
                    displayPage(xdr.responseText);
                };
                xdr.onerror = function () {
                    alert("An error has occurred");
                };
				xdr.onprogress = function() {};
                xdr.ontimeout = function() {};
                xdr.timeout = 5000;
                xdr.send();
            } else {
                $.ajax({
                    url: actionUrl,
                    data: ({
                        id: page_id,
                        language: language,
                        formSubmitId: form_submit_id
                    }),
                    success: displayPage,
                    error: function (error) {
                        if (error.isRejected())
                            alert("error: Request has been rejected.\n" + error.responseText);
                        else
                            alert("error: " + error.responseText);
                    }
                });
            }
        }

        function displayPage(data) {
            $('#' + options.page_wrapper).html(data);
        }

        function checkValue(val) {
            if (val != null && val.length > 0) {
                return true;
            }
            return false;
        }
    };
})(jQuery);


(function ($) {
    jQuery.support.cors = true;

    $.fn.faroGetCityNameFromZipCode = function (options) {

            var actionUrl = 'http://formcms.faro.com/Frontend/Form/GetCityNameFromZipCode/';

            if ($.browser.msie && window.XDomainRequest) {
                // Use Microsoft XDR
                var xdr = new XDomainRequest();
                xdr.open("get", actionUrl + '?country=' + options.country + '&zipCode=' + options.zipCode);
                xdr.onload = function () {
                    updateCity($.parseJSON(xdr.responseText));
                };
                xdr.onerror = function () {
                    alert("An error has occurred");
                };
				xdr.onprogress = function() {};
                xdr.ontimeout = function() {};
                xdr.timeout = 5000;
                xdr.send();
            } else {
                $.ajax({
                    url: actionUrl,
                    data: ({
                        country: options.country,
                        zipCode: options.zipCode
                    }),
                    dataType: "json",
                    success: updateCity,
                    error: function (xhr, ajaxOptions, error) {
                        if (xhr.isRejected())
                            alert("error: Request has been rejected.\n");
                        alert("responseText: " + xhr.responseText + "  Status: " + xhr.status + "  Status Text: " + xhr.statusText + "  AjaxOptions: " + ajaxOptions + "  ThrownError: " + error);
                    }
                });
            }

        function updateCity(data) {
            $('#C_City').val(data);
        }
    };
})(jQuery);