﻿function copy(t)
{
    if(arguments.length == 0){return;}
    
    if(navigator.userAgent.indexOf("MSIE") > -1)
    {
        window.clipboardData.setData('Text',t);        
    }        
}

function getFirstChild(o)
{
    var x = o.firstChild;
    while(x.nodeType != 1)
    {
        x = x.nextSibling;
    }
    return x;
}

function getLastChild(o)
{
    var x = o.lastChild;
    while(x.nodeType != 1)
    {
        x = x.previousSibling;
    }
    return x;
} 

var CustomPopUp =
{
    Open: function(width,height,html)
    {
        if(width == null || height == null || html == null)
        {
            return;
        }
        
        var overlay = document.getElementById("CustomPopUpOverlay");
        var shell = document.getElementById("CustomPopUpShell");
        
        overlay.style.display = "block";        
        overlay.style.visibility = "visible";
        setOpacity(overlay,20);
        
        shell.style.display = "block";
        shell.style.visibility = "visible";
        shell.style.width = width + "px";
        shell.style.height = height + "px";
        shell.innerHTML = html;
        
        this.Adjust();        
    },
    Close: function()
    {
        var overlay = document.getElementById("CustomPopUpOverlay");
        var shell = document.getElementById("CustomPopUpShell");
        
        shell.style.display = "none";
        shell.style.visibility = "hidden";
        overlay.style.display = "none";
        overlay.style.visibility = "hidden";        
    },
    Adjust: function()
    {       
        document.getElementById("CustomPopUpOverlay").style.width = pageWidth()+"px";
        document.getElementById("CustomPopUpOverlay").style.height = pageHeight()+"px";
        centerIt("CustomPopUpShell");       
    }
};

var popUp = {    
    button: null,
    cancelButton: "Cancel",
    cancelFunc: null,
    buttonFunc: null,       
    titleHTML: null,
    bodyHTML: null,
    timeout: null,
    setTimeout: null,
    setTimeoutFunc: null,
    loaded: false,
    load: function()
    {        
        var overlay = document.createElement("div");
        overlay.id = "signInPopOverlay";
        overlay.style.visibility = "hidden";
        document.body.insertBefore(overlay,document.body.firstChild);
        
        var ps = document.createElement("div");
        ps.id = "signInPop";                  
        ps.style.visibility = "hidden";
        
        var pt = document.createElement("div");
        pt.id = "signInPopTitle";        
        
        aPpend(ps,pt);
        
        var pb = document.createElement("div");
        pb.id = "signInPopBody";
        
        aPpend(ps,pb);
        
        var b = document.createElement("div");
        b.id = "signInPopButtons";
        
        aPpend(ps,b);                        
        
        document.body.insertBefore(ps,document.getElementById("signInPopOverlay"));
        
        this.loaded = true;             
    },
    open: function()
    {       
        if(document.getElementById("signInPopOverlay") != null && document.getElementById("signInPop") != null)
        {
            document.getElementById("signInPopOverlay").style.display = "block";
            document.getElementById("signInPopOverlay").style.visibility = "visible";
            document.getElementById("signInPop").style.display = "block";
            document.getElementById("signInPop").style.visibility = "visible";
        }
        else
        {
            if(!this.loaded)
            {
                this.load();
            }
        }
        
        document.getElementById("signInPopTitle").innerHTML = this.titleHTML;
        document.getElementById("signInPopBody").innerHTML = this.bodyHTML;
        if(this.button != null && this.buttonFunc != null)
        {
            var bs = document.createElement("div");
            bs.className = "buttonShell";            
            bs.onclick = this.buttonFunc;
            bs.innerHTML = "<div class='buttonHolder'>"+this.button+"</div>";
            aPpend(document.getElementById("signInPopButtons"),bs);
        }
        var bscClass = (this.button == null && this.buttonFunc == null) ? "buttonShellCancelSingle" : "buttonShellCancel";   
        var bsc = document.createElement("div");
        bsc.className = bscClass;                 
        bsc.onclick = (this.cancelFunc != null) ? this.cancelFunc : function(){popUp.close();};
        bsc.innerHTML += "<div class='buttonHolderCancel'>"+this.cancelButton+"</div>";
        aPpend(document.getElementById("signInPopButtons"),bsc);
               
        setOpacity(document.getElementById("signInPopOverlay"),20);
        this.adjust();        
        
        if(this.setTimeout != null && this.setTimeoutFunc != null)
        {
            this.timeout = setTimeout(this.setTimeoutFunc,this.setTimeout);
        }                                      
        
    },
    close: function()
    {       
        clearTimeout(this.timeout);
        
        if(document.getElementById("videoPlayerComponent") != null)
        {
            document.getElementById("videoPlayerComponent").style.visibility = "visible";
        }
        
        this.button = null;
        this.cancelButton = "Cancel";
        this.cancelFunc = null;
        this.buttonFunc = null;        
        this.titleHTML = null;
        this.bodyHTML = null;
        this.setTimeout = null;
        this.setTimeoutFunc = null;
        
        document.getElementById("signInPopOverlay").style.display = "none";
        document.getElementById("signInPop").style.display = "none";
        
        document.getElementById("signInPopTitle").innerHTML = "";
        document.getElementById("signInPopBody").innerHTML = "";
        document.getElementById("signInPopButtons").innerHTML = "";       
    },
    adjust: function()
    {       
        document.getElementById("signInPopOverlay").style.width = pageWidth()+"px";
        document.getElementById("signInPopOverlay").style.height = pageHeight()+"px";
        centerIt("signInPop");
    }
};

window.onresize = window.onscroll = function()
{
    if(document.getElementById("signInPopOverlay") != null)
    {
        popUp.adjust();
    }
    
    if(document.getElementById("CustomPopUpOverlay") != null)
    {
        CustomPopUp.Adjust();
    }    
};

function soapBoxStatusAlert(n)
{
    var resultCodeArray = new Array("Success","Unknown Error","Not Signed In","Offending Input","Limit Reached","Invalid Input","Nickname Not Set","Feature Not Available","Permission Denied","Beta Not Authorized","Video Not Found","Video Not Editable","Access Denied ","Invalid Title","Invalid Description","Invalid Category","Invalid Tags","Invalid Permission","Storage Full","Unknown File Type","File Not Specified","Invalid User Id","Invalid Video Id","Invalid Time Stamp", "Invalid Hash");
    return resultCodeArray[n];       
}

function soapBoxNicknameAlert(n)
{
    if(n == -1){return "Already Taken"}
    else
    {
        var resultCodeArray = new Array("Success", "Unknown Error", "Too Many Changes", "Too Short. Please try again.", "Too Long.  Please try again.", "Offensive.  Choose another nickname.", "Invalid Characters: White space, /, \\, <, >.  Please try again.", "Service Down", "Not Signed In", "Access Denied", "Cannot Override");
        return resultCodeArray[n];
    }
}

function scriptAppend(id,src)
{
    if(!id || !src){redAlert.error()}
    if(document.getElementById(id) != null){removeFromDOM(id);}
    var s1 = document.createElement("script");
    s1.id = id;
    s1.src = src;
    s1.type = "text/javascript";   
    headAppend(s1);
}

function removeFromDOM(o)
{    
    if(typeof o == "string")
    {        
        if(document.getElementById(o) != null)
        {
            document.getElementById(o).parentNode.removeChild(document.getElementById(o));
        }
    }
    if(typeof o == "object")
    {
        if(typeof o != "undefined")
        {
            o.parentNode.removeChild(o);
        }
    }
}

function headAppend(o)
{
    var head = document.getElementsByTagName("head")[0];
    head.appendChild(o);
}

function aPpend(parent,obj)
{   
    var p;
    var o;
    if(typeof parent == "string"){p = document.getElementById(parent);}
    if(typeof parent == "object"){p = parent;}
    if(typeof obj == "string"){o = document.getElementById(o);}
    if(typeof obj == "object"){o = obj;}   
    p.appendChild(o);
}

function centerIt(id)
{
    if(!document.getElementById(id)){return false;}    
    var obj = document.getElementById(id);
	   
    var w = getWidth( obj );
    var h = getHeight( obj );
    var t = scrollY() + ( windowHeight() / 2 ) - ( h / 2 );
    if ( t < 0 ){t = 0;}
    var l = scrollX() + ( windowWidth() / 2 ) - ( w / 2 );
    if ( l < 0 ){l = 0;}
    setY( obj, t );
    setX( obj, l );    
}

function setOpacity(elem,level) 
{    
    if (elem.filters){elem.style.filter = 'alpha(opacity='+level+')';}
    else{elem.style.opacity = level / 100;}
}

function windowHeight() 
{    
    var de = document.documentElement;
    return self.innerHeight || (de && de.clientHeight) || document.body.clientHeight;
}

function windowWidth() 
{
    var de = document.documentElement;
    return self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
}

function setX(elem, pos){elem.style.left = pos + "px";}

function setY(elem, pos){elem.style.top = pos + "px";}

function scrollX() 
{    
    var de = document.documentElement;
    return self.pageXOffset || (de && de.scrollLeft) || document.body.scrollLeft;
}

function scrollY() 
{    
    var de = document.documentElement;    
    return self.pageYOffset || ( de && de.scrollTop ) || document.body.scrollTop;
}

function getStyle(elem, name) 
{    
    if (elem.style[name]){return elem.style[name];}
    else if (elem.currentStyle){return elem.currentStyle[name];}
    else if (document.defaultView && document.defaultView.getComputedStyle) 
    {    
        name = name.replace(/([A-Z])/g,"-$1");
        name = name.toLowerCase();
        var s = document.defaultView.getComputedStyle(elem,"");
        return s && s.getPropertyValue(name);   
    } 
    else {return null};
}

function getHeight(elem){return parseInt(getStyle(elem, 'height'));}

function getWidth(elem){return parseInt(getStyle(elem, 'width'));}

function pageHeight(){return document.body.scrollHeight;}

function pageWidth(){return document.body.scrollWidth;}

function addEvent(element, type, handler) {
	if (element.addEventListener) {
		element.addEventListener(type, handler, false);
	} else {
		
		if (!handler.$$guid) handler.$$guid = addEvent.guid++;
		
		if (!element.events) element.events = {};
		
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			}
		}
		
		handlers[handler.$$guid] = handler;
		
		element["on" + type] = handleEvent;
	}
};

addEvent.guid = 1;

function removeEvent(element, type, handler) {
	if (element.removeEventListener) {
		element.removeEventListener(type, handler, false);
	} else {
		
		if (element.events && element.events[type]) {
			delete element.events[type][handler.$$guid];
		}
	}
};

function handleEvent(event) {
  var returnValue = true;
  
  event = event || fixEvent(window.event);
  
  var handlers = this.events[event.type];
  
  for (var i in handlers) {
    this.$$handleEvent = handlers[i];
    if (this.$$handleEvent(event) === false) {
      returnValue = false;
    }
  }
  return returnValue;
};

function fixEvent(event) {
  
  event.preventDefault = fixEvent.preventDefault;
  event.stopPropagation = fixEvent.stopPropagation;
  return event;
};
fixEvent.preventDefault = function() {
  this.returnValue = false;
};
fixEvent.stopPropagation = function() {
  this.cancelBubble = true;
};

