// Globals

// Major version of Flash required
var requiredMajorVersion = 7;
// Minor version of Flash required
var requiredMinorVersion = 0;
// Revision of Flash required
var requiredRevision = 0;

var BYOResources = new Resources();
var CopyWindow = null;
var ToolbarResponse = null;
var ProjectItems = new Array();

var LoadingCount = 0;
//var ViewAreaCount = 0;

//IE6 Fix
try
{
    document.execCommand("BackgroundImageCache", false, true);
} catch(err) {}
function ToggleCollapse(TargetID, ButtonID, CollapseClass, ExpandClass)
{
    if ($(TargetID) == null || $(TargetID).style == null || $(ButtonID) == null)
    {
        return false;
    }

    if ($(TargetID).style.visibility == "visible")
    {
        $(TargetID).style.visibility = "hidden";
        $(ButtonID).className = ExpandClass;
    }
    else
    {
        $(TargetID).style.visibility = "visible";
        $(ButtonID).className = CollapseClass;
    }
    
    return true;
}


function LogIn(Username, Password, Callback)
{
//    LoadingOn();
    var Response = Common.UpdateToolbar(Username, Password);
    
    if (ValidateResponse(BYOResources.BYO_RESOURCE_COMMONJS_LOGINNAME, Response))
    {
        if (Response.value != "False")
        {
            if (Callback != null)
            {
                ToolbarResponse = Response;
                Effect.SlideUp($("BYOToolbar_LoginControl_Container"));
                
                setTimeout("ContinueLogIn(\"" + Callback + "\");", 1500);
            }
            else
            {
                ChangeControl(BYOResources.BYO_RESOURCE_COMMONJS_LOGINNAME, "BYOToolbar", Response);
//                LoadingOff();
            }                
            
            return true;
        }
    }
    
//    LoadingOff();
    return false;
}

function ContinueLogIn(Callback)
{
//    LoadingOn();
    ChangeControl(BYOResources.BYO_RESOURCE_COMMONJS_LOGINNAME, "BYOToolbar", ToolbarResponse);
    
    eval(Callback);
//    LoadingOff();
}

function LogOut()
{
//    LoadingOn();
    var Response = Common.UpdateToolbar("", "");
    
    if (ValidateResponse(BYOResources.BYO_RESOURCE_COMMONJS_LOGINNAME, Response))
    {
        if (Response.value != "False")
        {
            ChangeControl(BYOResources.BYO_RESOURCE_COMMONJS_LOGINNAME, "BYOToolbar", Response);
            
//            LoadingOff();
            return true;
        }
    }
    
//    LoadingOff();
    return false;
}



//Ajax Functions
function ChangeControl(ControlName, ID, Response)
{
    var temp = new Array();
    
    if (ValidateResponse(ControlName, Response))
    {
        var Control = null;
        
        if ("Configurator_OptionSelectionArea" == ID)
        {
            temp = ConvertToArray(Response.value, BYOResources.BYO_AUTOCONTINUE_SEPERATOR);
            Response.value = temp[0];
            AutoContinueMode = temp[1];
        }
    
        $(ID + "_Container").innerHTML = Response.value;
        
        if (isDefined(window, ID))
        {
            Control = eval(ID);

            if (Control.initialize != null)
            {
                Control.initialize(ID);
            }
        }
    }
    
    return;
}


function ValidateResponse(ControlName, Response)
{
    if (Response.error != null)
    {
        if (Response.error.description.indexOf('CONTROL') == 0)
        {
            var Conversion = this.ConvertToArray(Response.error.description, '~`~');
            
            var err = new Error("1FORMAT~`~" + Conversion[1] + "~`~" + Conversion[2] + "~`~" + Conversion[3]);
            err.name = Conversion[1];
            
            throw err;
        }
        else
        {
            var err = new Error("2FORMAT~`~" + Response.error.name + "~`~" + Response.error.description);
            err.name = Response.error.name;

            throw err;
        }
     
        return false;
    }
    if (Response == null || Response.value == null || Response.value.length <= 0)
    {
        var Message = BYOResources.BYO_RESOURCE_COMMONJS_LOGINERROR;
        Message = Message.replace("{0}", ControlName);

        var Name = ControlName + "Exception";

        var err = new Error("2FORMAT~`~" + Name + "~`~" + Message);
        err.name = Name
     
        throw err;
        
        return false;
    }

    return true;
}










//Compatibility Functions
function ConvertToBoolean(Value)
{
    if (Value == "True" || Value == "true")
    {
        return true;
    }
    
    return false;
}

function ConvertToArray(Value, Delimiter)
{
    if (Value != null && Value.length > 0)
    {
        return Value.split(Delimiter);
    }
    else
    {
        return new Array();
    }
}

function NumChildNodes(Object)
{
    var Pos = 0;
    var RealPos = 0;
    
    for (Pos = 0; Pos < Object.childNodes.length; Pos++)
    {
        if (Object.childNodes.item(Pos).nodeType != 3)
        {
            RealPos++;
        }
    }
    
    return RealPos;
}


function ChildNodes(Object, Index)
{
    var Pos = 0;
    var RealPos = -1;
    
    for (Pos = 0; Pos < Object.childNodes.length; Pos++)
    {
        if (Object.childNodes.item(Pos).nodeType != 3)
        {
            RealPos++;
        }
        
        if (RealPos == Index)
        {
            return Object.childNodes.item(Pos);
        }
    }
    
    return null;
}

function CompatGetText(Target)
{
    if (Target.innerText == null)
    {
        return Target.textContent;
    }
    
    return Target.innerText;
}

function CompatSetText(Target, Text)
{
    if (Target.innerText == null && Target.textContent != null)
    {
        Target.textContent = Text;
    }
    else if (Target.innerText != null && Target.textContent == null)
    {
        Target.innerText = Text;
    }
    else
    {
        Target.innerText = Text;
        Target.textContent = Text;
    }
}

function UpdateMyProjects()
{
    RebuildLeftSection(false);
}


function CopyProject(ProjectID, Name, Desc)
{
    if (LoadingOn(CopyProject.bind(this, ProjectID, Name, Desc)))
    {
        if (ValidateResponse(BYOResources.BYO_RESOURCE_ITEMSELECTIONJS_ERROR_COPY, Common.CopyProject(ProjectID, Name, Desc)))
        {
            CopyProjectWindow(ProjectID);

            UpdateMyProjects();

            LoadingOff();
            return true;
        }
        
        LoadingOff();
        return false;
    }
}

function CopyProjectWindow(ProjectID)
{
    if (CopyWindow != null)
    {
        Windows.closeAll();
        CopyWindow = null;
    }
    else
    {
        var URL = WebRoot + "Popups/NewProject.aspx?";
        URL += BYOResources.BYO_QUERYSTRING_NEWPROJECT;
        URL = URL.replace("{0}", encodeURIComponent("window.parent.parent.CopyProject('" + ProjectID + "', ProjectName, ProjectDesc);"));
        URL = URL.replace("{1}", encodeURIComponent("window.parent.parent.CopyProjectWindow();"));
        URL = URL.replace("{2}", encodeURIComponent(ProjectID));


        Windows.closeAll();

        CopyWindow = new Window({
                    id: "NewProject",
                    className: "NewProject",
                    title: BYOResources.BYO_RESOURCE_ITEMSELECTION_COPYPROJECT,
                    url: URL,
                    width:500,
                    height:250,
                    resizable: false,
                    closable: true,
                    draggable: false,
                    showEffect: Effect.SlideDown,
                    destroyOnClose: true });

        CopyWindow.keepMultiModalWindow = false;
        CopyWindow.showCenter(true);        
    }        
}

function DeleteConfig(id)
{
    var response;
    
    response = confirm(BYOResources.BYO_RESOURCE_ITEMSELECTIONJS_CONFIRMDELETE);
    
    if (response)
    {
        if (LoadingOn(DeleteConfigConfirmed.bind(this, id)))
        {
            DeleteConfigConfirmed(id);
        }
    }
    
    return false;
}

function DeleteConfigConfirmed(id)
{
    if (ValidateResponse(BYOResources.BYO_RESOURCE_ITEMSELECTIONJS_ERROR_DELETE, Common.DeleteConfig(id)))
    {
        UpdateMyProjects();
        
        LoadingOff();
        return true;
    }
}

function ForgotPassword(email)
{
    if (LoadingOn(ForgotPassword.bind(this, email)))
    {
        var response;
        response = Common.ForgotPassword(email);
        
        LoadingOff();

        if (ValidateResponse(BYOResources.BYO_RESOURCE_LOGIN_FORGOTPASSWORDAJAX, response))
        {
            if (response.value)
            {
                alert(BYOResources.BYO_RESOURCE_LOGIN_FORGOTPASSWORDSUCCESS);
            }
            else
            {
                alert(BYOResources.BYO_RESOURCE_LOGIN_FORGOTPASSWORDFAILURE);
            }
        }   
    }
}

function PrintConfig(id)
{
    var URL = '../Reports/PrintProject.aspx?' + BYOResources.BYO_QUERYSTRING_PRINTSAVEDPROJECT;
    
    URL = URL.replace('{0}', encodeURIComponent(id));
    
    window.open(URL, (new Date()).getMinutes() + (new Date()).getSeconds() + (new Date()).getMilliseconds(), 'resizable=1, top=0, left=0, height=700,width=1000,status=no,toolbar=no,menubar=no,location=no,scrollbars=1');
}

function InitDynamicMyProjects()
{
    var Container = $("MyProjects_Container");
    var MyProjects = null;
    
    if (Container != null)
    {
        ProjectItems.length = 0;

        MyProjects = ChildNodes(Container, 0);
        
        ProjectItems = ConvertToArray(MyProjects.getAttribute("GraphicButtons"), "|");
        
        for (Index = 0; Index < ProjectItems.length; Index++)
        {
            ProjectItems[Index] = eval(ProjectItems[Index]);
        }
    }
}

function ValidEmail(value)
{
    if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(value))
    {
        return true;
    }
    
    return false;
}


function LoadingOn(Callback)
{
    if (Element.hasClassName("Blocking", "Hidden"))
    {
        //Force restart the loading animation for ie.
        var Image = ChildNodes(ChildNodes($("Blocking"), 0), 1)
        Image.src = Image.src;

        Element.toggleClassName("Blocking", "Hidden");
        
        
/*
        if (!Element.hasClassName("BYOToolbar_BreadCrumbs", "Hidden"))
        {
            Element.toggleClassName("BYOToolbar_BreadCrumbs", "Hidden");
        }
*/
        
        if (Callback != null)
        {
            setTimeout(Callback, 1000); //Do not double count loading for async calls.
        }
        else
        {
            LoadingCount++;
        }

        return false;
    }
    
    LoadingCount++;
    return true;
}

function LoadingOff(CalledBack)
{
    if (CalledBack == null)
    {
        setTimeout(LoadingOff.bind(this, true), 0);
    }
    else
    {
        LoadingCount--;

        if (LoadingCount <= 0 && !Element.hasClassName("Blocking", "Hidden"))
        {
            Element.toggleClassName("Blocking", "Hidden");
            

/*
            if (Element.hasClassName("BYOToolbar_BreadCrumbs", "Hidden"))
            {
                Element.toggleClassName("BYOToolbar_BreadCrumbs", "Hidden");
            }
*/
            
            LoadingCount = 0;
        }
        else if (LoadingCount <= 0)
        {
            LoadingCount = 0;
        }
    }
}

function isIE()
{
    return /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
}

function isDefined(object, variable)
{
    return (typeof((object)[variable]) == 'undefined')? false : true;
}