var enumLanguaje = { ES: "es", EN: "en" };
var enumTypeRequest = { GET: "GET", POST: "POST" };
var enumTypeData = { XML: 0, TEXT: 1, JSON: 2 };

var isLoading = false;
var lastSsectionLoading = "";
var slashSection = ""


var Mgr = (function() {
    var instance = null;
    function newCtor() {
        var eLanguaje = enumLanguaje.ES;
        var eTypeRequest = enumTypeRequest.GET;
        var eTypeData = enumTypeData.JSON;
        /*http://github.com/coderifous/jquery-localize/tree/master*/
        var optionLanguaje = { language: "es", pathPrefix: "lang", skipLanguage: "en" };

        this.setLanguaje = function(languaje) {
            if (languaje != null || languaje != undefined) {
                if (languaje == enumLanguaje.ES || languaje == enumLanguaje.EN) {
                    //if (eLanguaje != languaje) {
                    eLanguaje = languaje;
                    this.localize();
                    //} else { throw { error: "e_lang", message: "languaje is equals"} }
                } else { throw { error: "e_lang", message: "incorrect parameter"} }
            } else { throw { error: "e_lang", message: "languaje is undefined"} }
        }
        this.localize = function() {
            var optionLanguaje;

            if (eLanguaje == enumLanguaje.EN) {
                optionLanguaje = { language: "en", pathPrefix: "lang", skipLanguage: "es" };
                $("#profile_empresa_es").hide();
                $("#profile_empresa_en").show();
            } else {
                optionLanguaje = { language: "es", pathPrefix: "lang", skipLanguage: "en" };
                $("#profile_empresa_en").hide();
                $("#profile_empresa_es").show();
            }
            try {
                $("[rel*=localize]").localize("languaje", optionLanguaje);

            } catch (e) { alert(e); }
        }
        this.getLanguaje = function() {
            return eLanguaje;
        }

        this.setTypeRequest = function(typeRequest) {
            if (typeRequest != null || typeRequest != undefined) {
                if (typeRequest == enumTypeRequest.GET || typeRequest == enumTypeRequest.POST) {
                    if (eTypeRequest != typeRequest) {
                        eTypeRequest = typeRequest;
                        onChangeTypeRequest();
                    } else { throw { error: "e_typeRequest", message: "type request are equals"} }
                } else { throw { error: "e_typeRequest", message: "incorrect parameter"} }
            } else { throw { error: "e_typeRequest", message: "typeRequest is undefined"} }
        }
        onChangeTypeRequest = function() {
        }
        this.getTypeRequest = function() {
            return eTypeRequest;
        }
        this.setTypeData = function(typeData) {
            if (typeData != null || typeData != undefined) {
                if (typeData == enumTypeData.JSON || typeData == enumTypeData.TEXTO || typeData == enumTypeData.XML) {
                    if (eTypeData != typeData) {
                        eTypeData = typeData;
                        onChangeTypeData();
                    } else { throw { error: "e_typeData", message: "type data are equals"} }
                } else { throw { error: "e_typeData", message: "incorrect parameter"} }
            } else { throw { error: "e_typeData", message: "typeData is undefined"} }
        }
        onChangeTypeData = function() {

        }
        this.getTypeData = function() {
            return eTypeData;
        }
        this.getVersion = function() {
            return "Manager version 1.0";
        }
        this.InstanceOf = function(object, constructorFunction) {
            while (object != null) {
                if (object == constructorFunction.prototype)
                { return true }
                object = object.__proto__;
            }
            return false;
        }
        this.__getValue = function(collection, valueparameter, valuedefault) {
            if (p == null || p == undefined) {
                return valuedefault;
            } else {
                if (collection[valueparameter] == undefined) {
                    return valuedefault;
                } else {
                    return collection[valueparameter];
                }
            }
        }

        var lIniatilize = false;
        var totalLoadScript = 0;

        var scriptToLoad = ["js/runOnLoad.js",
                             "js/macromedia.js",
                             "js/jquery/jquery-1.3.2.min.js",
                             "js/jquery/jquery.localize.js",
                             "js/dateTime.js",
                             "js/timerDisplay.js",
                             "js/sitesetup.js"]

        loadRemoteScript = function() {
            return true;
        }

        this.iniatilize = function() {
            var lIsOk = false;
            try {
                lIsOk = loadRemoteScript();
            } catch (e) {
                lIsOk = false;
            }
            finally {

            }
            if (lIsOk) {

            }
        }
    }
    return new function() {
        this.getInstance = function() {
            if (instance == null) {
                instance = new newCtor();
                instance.constructor = null;
            }
            return instance;
        }
    }
})();

Mgr.req = function(valueurl, objIn) {
	if (valueurl.substr(0,1)!="/"){
		valueurl = "/" + valueurl ;
	}
	valueurl = Mgr.FixUrl(valueurl);
    $.ajax({
        url: valueurl,
        async: true, data: {},
        success: function(d) {
		    $(objIn).html(" ");
            $(objIn).after(d);
        },
        error: function(obj, errormessaje, oobj) {
    		$(objIn).html(" ");
            $(objIn).after(errormessaje);
        },
        timeout: 100000, type: "GET"
    });
}

Mgr.getLanguaje = function() {
    return Mgr.getInstance().getLanguaje();
}
Mgr.FixUrl = function(url) {
    url += (url.match(/\?/) == null ? "?rand=" : "&rand=") + (new Date()).getTime();
    return url;
}
Mgr.Localize = function() {
    Mgr.getInstance().localize();
}
Mgr.RetryOnCall = 0;
Mgr.GetSectionHtml = function(section, inDivID, callBackFunc)
{
    $("#imgloading").remove();
    $("#load_error").remove();
    if (section != "tpl_listaproducto.html" && section == lastSsectionLoading)
        return false;

    lastSsectionLoading = section;
    var objDiv = $("#" + inDivID);
    $("#lista").remove();
	objDiv.html(" ");
    objDiv.empty().after('<img src="imagenes/loading.gif" id="imgloading"/>');
    var loadSection = Mgr.FixUrl("tpl//" + section);
    objDiv.load(loadSection, function(responseText, textStatus, XMLHttpRequest)
    {
        if (textStatus == "success" && (XMLHttpRequest != null && XMLHttpRequest.status == "200" && XMLHttpRequest.readyState == 4))
        {
            $("span#load_error").remove();
            $("img#imgloading").remove();
            /* "beforeSend", "success", "complete", and "error".*/
            if (inDivID != "divContenido")
            {
                objDiv.show();
            } else
            {
                objDiv.hide();
                objDiv.slideDown("slow");
            }
            Mgr.RetryOnCall = 0;
            
            if (callBackFunc && callBackFunc != null && callBackFunc != undefined)
                callBackFunc(objDiv)
        } else
        {
		    try{
            lastSsectionLoading = "";
            $("#load_error").remove();
            objDiv.html("");
            objDiv.after("<span id='load_error'>Error :EX_" + XMLHttpRequest.status + "</span>");
            if (Mgr.RetryOnCall < 3)
            {
                Mgr.GetSectionHtml(section, inDivID, callBackFunc);
                Mgr.RetryOnCall = Mgr.RetryOnCall + 1;
            }
			}catch(e){}
        }
        $("#imgloading").remove();
        /*       if (textStatus == "error")
        {
        lastSsectionLoading = "";
        $("#load_error").remove();

            objDiv.html("");
        objDiv.after("<span id='load_error'>Error :EX_" + XMLHttpRequest.status + "</span>");
        }
        */
        Mgr.Localize();
		return false;
    });
}
//function ValidURL(str) {
//    var pattern = new RegExp('^(https?:\/\/)?' + // protocol
//    '((([a-z\d]([a-z\d-]*[a-z\d])*)\.)+[a-z]{2,}|' + // domain name
//    '((\d{1,3}\.){3}\d{1,3}))' + // OR ip (v4) address
//    '(\:\d+)?(\/[-a-z\d%_.~+]*)*' + // port and path
//    '(\?[;&a-z\d%_.~+=-]*)?' + // query string
//    '(\#[-a-z\d_]*)?$', 'i'); // fragment locater
//    if (!pattern.test(str)) {
//        alert("Please enter a valid URL.");
//        return false;
//    } else {
//        return true;
//    }
//    var source = document.forms.referral_form.original_url.value;
//    var url_pattern = new RegExp("((http|https)(:\/\/))?([a-zA-Z0-9]+[.]{1}){2}[a-zA-z0-9]+(\/{1}[a-zA-Z0-9]+)*\/?", "i");

//    if (url_pattern.exec(source) == null || url_pattern.exec(source).index > 0) {
//        errors += "Please enter a valid original url. \n";
//    } // end else if(!url_pattern.test(source))
//    http://www.web-wise-wizard.com/javascript-tutorials/javascript-regular-expressions-regexp.html
//}

