﻿// Crank Javascript Library
// Version: 1.1
// Last Update: November 10, 2008
// Author: Ross Dickinson of Eek! LLC.
// Copyright: Ross Dickinson
// Contact: ross@zeropointpromotion.com
//
// This library is to be used in conjunction with the CrankOS Framework for ASP.Net
// Otherwise it's pretty useless.


var Crank = {
    Debugger : {
        IsOn : false,
        TurnOn : function() { Crank.Debugger.IsOn = true; },
        TurnOff : function() { Crank.Debugger.IsOn = false; } 
    },
    Desktop : { 
        Document : window.parent.document,
        Window : window.parent.window
    },
    Objects : { },
    System : {
        IsDesktop : function() { 
            var ID = (window.parent.location != window.location)? false : true;
            return ID;
        },
        Register : {
            Namespace : function(Object) { 
                Crank[Object.Namespace] = Object;
                if (Object.LoadEvents) { Object.LoadEvents(); }
            },
            Object : function(Object) { 
                Crank.Objects[Object.Namespace] = Object;        
            }
        } 
    },
    Operators : {
        $keysIn : function(Object) {
            var keys = [];
            for (var key in Object) { keys.push(key); }
            return keys;
        },
        ReturnFalse : function() { return false; }
    },
    Events : {        
        Add : function(Object,EventName,Function,Bubbles) {
            if (!Crank.User.HasIE) { Object.addEventListener(EventName,Function,Bubbles); }
            else if (Crank.User.HasIE) { Object.attachEvent("on"+EventName,Function); }
            else { Object["on"+EventName] = Function; }
            return true;
        },    
        Remove : function(Object,EventName,Function,Bubbles) {
            if (!Crank.User.HasIE) { Object.removeEventListener(EventName,Function,Bubbles); }
            else if (Crank.User.HasIE) { Object.detachEvent("on"+EventName,Function); }
            else { Object["on"+EventName] = false; }
            return true;
        },
        Event : function(e) { 
            var Ev = (e)? e : window.event;
            return Ev;
        },
        Target : function(e) {
            var Ev = Crank.Events.Event(e);
            var Target = (e.target)? e.target : e.srcElement;
            return Target;
        }
    }
};

var _CRNKMETH = {
    Namespace : "Methods", 
    RefreshDesktop : function() {
        Crank.Objects.Window.ReloadAllWindows(); 
        $Get('ctl00_ContentPlaceHolder1_btnRefreshDesktop').click(); 
    },
    
    ReloadMeNow : function(URL) { 
        if (!Crank.System.IsDesktop) { window.parent.Crank.Methods.ReloadMeNow(URL); }
        else {
            var Floaters = Crank.Methods.GetOpenWindows()
            var Test = "'" + URL + "'";
            for (var i=0; i<Floaters.length; i++) {
                if (Test.indexOf(Floaters[i].Content.src) != -1) {
                    Floaters[i].ReloadMeNow(); 
                }
            }    
        }
    },
    
    UnloadMe : function() { 
        try { PageMethods.UnloadMe();  }
        catch(Error) { 
            try { $('Crank_Body_UnloadMe').click(); }
            catch(Error) { return false; }
        }
    }
};
Crank.System.Register.Namespace(_CRNKMETH);


var _CRNKREG = function() {
    this.Namespace = "Register";
    var private_BodyHeight_Int; 
    this.public_sub_RegStyleClass = function(StyleManagerID,Class,Attributes) {
        var yes = document.styleSheets[0];
        var Rules = (yes.rules)? yes.rules : yes.cssRules;
        
        for (var i=0; i<Rules.length; i++) {
            if (Rules[0].selectorText === Class) {
                try { yes.deleteRule(i); }
                catch(Error) { yes.removeRule(i);}
            }
        }
        if (Crank.User.HasIE) { yes.addRule(Class, Attributes, 0); }
        else {  yes.insertRule(Class + "{" + Attributes + "}",0);}
    }
    
    function private_func_getRSBI(ID) {
        var PARSBI = private_array_RSBI
        var returnNumber = -1;
        for (var i=0; i<PARSBI.length; i++) {
          //  alert(ID.id + "   " + PARSBI[i].id);
            if (ID.id == PARSBI[i].id) { returnNumber = i; i = PARSBI.length; }
        }
        return returnNumber;
    }
    
    var private_array_RSBI = new Array();
    this.public_sub_RSBI = function(ID,HasServerEvents,GeneratedID,Value,BackColor,HighlightBackColor,SelectedBackColor,ForeColor,HighlightForeColor,SelectedForeColor,Height,SelectedItem) {
        try {
            ID = $(ID);
            
                var yessir = true  
            if (ID) {           
                if (yessir) {
                    private_array_RSBI[private_array_RSBI.length] = ID;
                    var Siblings = ID.parentNode.childNodes;
                    
                    var HiddenField = null;
                    
                    for (var i=0; i<Siblings.length; i++) {
                        if (Siblings[i].type == "hidden") { HiddenField = Siblings[i] }
                    }
                    ID.onmouseout = function() { ID.style.cursor = "default"; }
                    ID.onmouseover = function() { 
                        ID.style.cursor = "pointer";
                        for (var i=0; i<Siblings.length; i++) {
                            if (Siblings[i].style) { 
                                if (Siblings[i].style.backgroundColor != SelectedBackColor) { Siblings[i].style.backgroundColor = BackColor; }
                                if (Siblings[i].style.color != SelectedForeColor) { Siblings[i].style.color = ForeColor; }
                            }
                        }
                        if (ID.style.backgroundColor != SelectedBackColor) { 
                            ID.style.backgroundColor = HighlightBackColor;
                            ID.style.color = HighlightForeColor;
                        }
                     }
                    
                    
                    function Clicked(event) {
                        if (Crank.User.HasMozilla && event) { event.preventDefault(); }
                        if (HiddenField) { HiddenField.value = ID.id; }
                        for (var i=0; i<Siblings.length; i++) { 
                            if (Siblings[i].style) { 
                                Siblings[i].style.backgroundColor = BackColor;
                                Siblings[i].style.color = ForeColor;
                            } 
                        }
                        ID.style.backgroundColor = SelectedBackColor;
                        ID.style.color = SelectedForeColor;
                        
                        if (!HasServerEvents) { return false;  }
                        else { 
                            try {
                                src = ID.id;
                                src = src.replace(/_/g,"$");
                                try { __doPostBack(src,''); }
                                catch(Error) { alert(Error); }
                                return false;
                            }
                            catch(Error) { alert(Error); }
                        }
                    }
                
                    if (document.addEventListener) { ID.addEventListener("click",Clicked,false); }
                    else if (document.attachEvent) { ID.attachEvent("onclick",Clicked); }
                    
                    if (SelectedItem) { Clicked(); }
                }
            }
        }
        catch(Error) { alert(Error); }
    }

    // Register Ajax Tabbed Display
    
    this.public_sub_StretchToWindow = function() {
        try {
        document.body.style.height = GetBrowserHeight() + "px";
        private_BodyHeight_Int = document.body.style.height;
        }
        catch(Error) { return true; }
    }
    
    // Register Ajax Tabbed Display Panel
    this.public_sub_RADP = function(ID,HiddenFieldID,FillToHeight,FillToHeightControlID) {
        try {    
            ID = $(ID);
            var HiddenField = $(HiddenFieldID);
            if (FillToHeight) {
                var FTHC = $(FillToHeightControlID);
                var height;
                if (FTHC) { height = GetStyle(FTHC,"height") + "px"; }
                else { height = GetBrowserHeight() + "px"; }
                ID.style.height = height;
                HiddenField.value = height;
            }
        }
        catch(Error) { alert(Error); } 
    }

    // Register Toolbar 
    this.public_sub_RATD = function(ID) {
        
    }
    
    // Registers RightClickMenu
    
    var private_collection_RCM = new Array();
    
    this.public_sub_RegRCM = function(ID,ParentID) {
        try {
            ID = $(ID);
            ID.style.display = "none";
            ID.style.position = "absolute";
            var Parent = $(ParentID);
            Parent.oncontextmenu = function() { return false; }
                                    
            function onRightClick(e) {
                if (!e) { e = window.event; }
                ID.style.display = "block";
                ID.style.top = private_func_getY(e) + "px";
                ID.style.left = private_func_getX(e) + "px";
            }           
            
            function CancelMenu() { 
                private_func_ActivateListener();
                   ID.style.display = "none";
            }
            
            function private_sub_Listening(e) {
                if (e) {
                    if (e.type == "mouseover") { private_func_DeactivateListener(); }
                    if (e.type == "mouseout") { private_func_ActivateListener(); }
                }
                else if (!e) { 
                    e = window.event;
                    if (e.type == "mouseover") { private_func_DeactivateListener(); }
                    if (e.type == "mouseout") { private_func_ActivateListener(); }
                }
            }
            
            function private_func_getX(e) {
                if (e.offsetX) { return e.offsetX; }
                else if (e.layerX) { return e.layerX; }
            }
            
            function private_func_getY(e) {
                if (e.offsetY) { return e.offsetY; }
                else if (e.layerY) { return e.layerY; }
            }
            
            function private_func_ActivateListener() {
                if (document.addEventListener) { 
                    Parent.addEventListener("contextmenu",onRightClick,false);
                    document.addEventListener("click",CancelMenu,false);
                   // ID.addEventListener("mouseover",private_sub_Listening,false);
                  //  ID.addEventListener("mouseout",private_sub_Listening,false);
                }
                else if (document.attachEvent) { 
                    Parent.attachEvent("oncontextmenu",onRightClick);
                    document.attachEvent("onclick",CancelMenu);
                   // ID.attachEvent("onmouseover",private_sub_Listening);
                   // ID.attachEvent("onmouseout",private_sub_Listening);
                }
            }            
            private_func_ActivateListener();
            
            function private_func_DeactivateListener() {
                if (document.addEventListener) { 
                    Parent.removeEventListener("contextmenu",onRightClick,false);
                    document.removeEventListener("mousedown",CancelMenu,false);
                }
                else if (document.attachEvent) { 
                    Parent.detachEvent("oncontextmenu",onRightClick);
                    document.detachEvent("onmousedown",CancelMenu);
                }
            }    
            
            
            
        }
        catch(Error) { alert(Error); }
    }
    
        
    function private_func_getRCMI(ID) {
        var PARCMI = private_array_RCMI
        var returnNumber = -1;
        for (var i=0; i<PARCMI.length; i++) {
            if (ID.id == PARCMI[i].id) { returnNumber = i; i = PARCMI.length; }
        }
        return returnNumber;
    }
    
    
    var private_array_RCMI = new Array();
    this.public_sub_RegRCMI = function(ID,HasServerEvents,GeneratedID,Value,BackColor,HighlightBackColor,SelectedBackColor,ForeColor,HighlightForeColor,SelectedForeColor,Height,SelectedItem) {
        try {
            ID = $(ID);
            var yessir = true; 
            if (ID.id) {         
                if (yessir) {
                    private_array_RCMI[private_array_RCMI.length] = ID;
                    var Siblings = ID.parentNode.childNodes;
                    ID.onmouseout = function() { ID.style.cursor = "default"; }
                    ID.onmouseover = function() { 
                        ID.style.cursor = "pointer";
                        for (var i=0; i<Siblings.length; i++) {
                            if (Siblings[i].style) { 
                                if (Siblings[i].style.backgroundColor != SelectedBackColor) { Siblings[i].style.backgroundColor = BackColor; }
                                if (Siblings[i].style.color != SelectedForeColor) { Siblings[i].style.color = ForeColor; }
                            }
                        }
                        if (ID.style.backgroundColor != SelectedBackColor) { 
                            ID.style.backgroundColor = HighlightBackColor;
                            ID.style.color = HighlightForeColor;
                        }
                     }
                    
                    
                    function Clicked(event) {
                        if (Crank.User.HasMozilla && event) { event.preventDefault(); }
                        for (var i=0; i<Siblings.length; i++) { 
                            if (Siblings[i].style) { 
                                Siblings[i].style.backgroundColor = BackColor;
                                Siblings[i].style.color = ForeColor;
                            } 
                        }
                        ID.style.backgroundColor = SelectedBackColor;
                        ID.style.color = SelectedForeColor;
                        
                        if (!HasServerEvents) { return false;  }
                        else { 
                            try {
                                src = ID.id;
                                src = src.replace(/_/g,"$");
                                try { __doPostBack(src,'');  }
                                catch(Error) { alert(Error); }
                                return false;
                            }
                            catch(Error) { alert(Error); }
                        }
                    }
                
                    if (document.addEventListener) { ID.addEventListener("click",Clicked,false); }
                    else if (document.attachEvent) { ID.attachEvent("onclick",Clicked); }
                    
                    if (SelectedItem) { Clicked(); }
                }
            }
        }
        catch(Error) { alert("Crank.RegRMCI Error: " + Error); }
    }
    
    return this;
    
}
Crank.System.Register.Namespace(new _CRNKREG());

var _CRNKSITESET = {
    Namespace : "Site",
    Desktop : function ya() { var DT = $Get('CrankBody'); return DT; }
};
Crank.System.Register.Namespace(_CRNKSITESET);


var _CRNKUSER = {
    Namespace : "User",
    Browser : navigator.userAgent,
    BrowserHeight : function() {    
        var BrowserHeight = 0;
        if (document.documentElement.clientHeight) { BrowserHeight = document.documentElement.clientHeight; }
        else { BrowserHeight = window.innerHeight; }
        return BrowserHeight;
    },
    BrowserWidth : function() {
        var BrowserWidth = 0;
        if (document.body.offsetWidth) { BrowserWidth = document.body.offsetWidth; }
        else { BrowserWidth = window.innerWidth; }

        return BrowserWidth;
    },  
    HasMozilla : HasTerm(navigator.userAgent,"Gecko"),
    HasIE7 : HasTerm(navigator.userAgent,"MSIE 7"),
    HasIE6 : HasTerm(navigator.userAgent,"MSIE 6"),
    HasIE : HasTerm(navigator.userAgent,"MSIE")    
};
Crank.System.Register.Namespace(_CRNKUSER);

var _CRNKCOLOR = {
    Namespace : "Colors",
    CrankBlue : "#7391bb",
    CrankDeepBlue : "#617191"
}
Crank.System.Register.Namespace(_CRNKCOLOR);


////////////////////////////////
////////PUBLIC SHORTCUTS////////
////////////////////////////////

function $(id) { 
    if (document.getElementById(id)) { return document.getElementById(id); }
    else { return false; } 
}

function CreateObj(type) { return document.createElement(type); }

function HasTerm(id,term) { 
    try {
    if (id.indexOf(term) != -1) { return true; }
    else { return false; }
    }
    catch(Error) {  }
}

function NewChild(id,child) { id.appendChild(child); }

function RemoveFromParent(id) { 
    var Parent = id.parentNode;
    Parent.removeNode[id];
}

function GetBrowserWidth() { 
    var BrowserWidth = 0;
    if (document.body.offsetWidth) { BrowserWidth = document.body.offsetWidth; }
    else { BrowserWidth = window.innerWidth; }
    
    return BrowserWidth;
}

function GetBrowserHeight() { 
    var BrowserHeight = 0;
    if (document.documentElement.clientHeight) { BrowserHeight = document.documentElement.clientHeight; }
    else { BrowserHeight = window.innerHeight; }
    return BrowserHeight;
}


function ClearDiv() { 
    var ClearDiv = document.createElement("div");
    ClearDiv.style.clear = "both";
    return ClearDiv;
}

// Gets current rendered properties for an element. Not from stylesheet class.
function getStyle(id,property) {
    return (document.defaultView)? document.defaultView.getComputedStyle(id,null).getPropertyValue(property) : id.currentStyle[property];
}

function GetHeight(id) { return parseFloat(getStyle(id,"height")); }
function GetWidth(id) { return parseFloat(getStyle(id,"width")); }

function AddClass(id,classname) { id.className = id.className + " " + classname; return id; }




// Mouse Coordinates stuff
//Crank.Desktop.Document.addEventListener("mousemove",mouseMove,false);

Doc = { x:'0', y:'0' }
function mouseMove(ev){
	ev = ev || Crank.Desktop.Window.event;
	Doc = mouseCoords(ev);
}

Crank.Events.Add(Crank.Desktop.Document,"mousemove",mouseMove);

function mouseCoords(ev){
	if (ev.pageX || ev.pageY) { 
	    return { 
	        x:ev.pageX,
	        y:ev.pageY,
	        layerX:ev.layerX,
	        layerY:ev.layerY,
            testX:ev.clientX + Crank.Desktop.Window.scrollX,
            testY:ev.clientY + Crank.Desktop.Window.scrollY
	    };
    }
	try {
	    return {
		    x:ev.clientX + Crank.Desktop.Document.body.scrollLeft - Crank.Desktop.Document.body.clientLeft,
		    y:ev.clientY + document.body.scrollTop  - document.body.clientTop, 
            layerX:ev.offsetX,
            layerY:ev.offsetY,
            testX:ev.clientX + document.body.scrollLeft,
            testY:ev.clientY + document.body.scrollTop
	        };
    }
    catch(Error) { return true; }
}






var $Get = function(ObjectID) { return Crank.Desktop.Document.getElementById(ObjectID); }
var $GetByTag = function(TagName) { return Crank.Desktop.Document.getElementsByTagName(TagName); }
var $GetDesktopObject = function(ObjectName) { return Crank.Desktop.Window.Crank.Objects[ObjectName]; }
var $Window = Crank.Desktop.Window;
var $Desktop = Crank.Desktop.Document;
var $Crank = $Window.Crank; 
