﻿//================> public

//protect object with specified or any id and css class name
function setImageProtection(id, classname) {
        setProtection(selectProtected("img", id, classname));
}

function setTextProtection(id, classname) {
        setProtection(selectProtected("div", id, classname));
}


//================> utilities
function getEvents() {
    var events = new Array();
    events[events.length] = "beforecopy";
    events[events.length] = "beforecut";
    events[events.length] = "contextmenu";
    events[events.length] = "copy";
    events[events.length] = "cut";
    events[events.length] = "dblclick";
    events[events.length] = "mousedown";
    events[events.length] = "selectstart";
    return events;
}

function setProtectionW3C(dom) {
    var evnames = getEvents();
    //var s = dom + ": adding W3C listeners"; alert(s);
    for (var j = 0; j < evnames.length; j++) {
        dom.addEventListener(evnames[j], haltW3C, false);
    }
}

function setProtectionMS(dom) {
    var evnames = getEvents();
    //var s = dom + ": attaching MS listeners"; alert(s);
    for (var j = 0; j < evnames.length; j++) {
        dom.attachEvent("on"+evnames[j], haltMS);
    }
}

function setProtection(dom) {
    for (var i = 0; i < dom.length; i++) {
        if (dom[i].attachEvent)
            setProtectionMS(dom[i]);
        else if (dom[i].addEventListener)
            setProtectionW3C(dom[i]);
        else {
            dom[i].onbeforecopy = halt;
            dom[i].onbeforecut = halt;
            dom[i].oncontextmenu = halt;
            dom[i].oncopy = halt;
            dom[i].oncut = halt;
            dom[i].onmousedown = halt;
            dom[i].ondblclick = halt;
        }                
    }
}

//TAG must match one of html tags
//if ID is null or "" , id is ignored (i.e. selects objects with any id or without id at all)
//if CLASSNAME is null or "" , classname is ignored (i.e. selects objects of any class or without it)
//if both parameters are null or "" it selects
function selectProtected(tag, id, classname) {
    if(tag=="" || tag==null)
        throw new Error("'Tag' parameter value is null or empty");
    if(id==null)
        id="";
    if(classname==null)
        classname = ""; 
           
    var divs = document.getElementsByTagName(tag);
    var selected = new Array();
    
    if (id != "") {
        for (var i = 0; i < divs.length; i++) {
            if (divs[i].id == id)
                selected[selected.length] = divs[i];
        }
    }
    if (classname != "")
        for (var i = 0; i < divs.length; i++) {
            var classes = divs[i].className.split(" ");
            for (var j = 0; j < divs.length; j++) {
                if (classes[j] == classname) {
                    selected[selected.length] = divs[i];
                    break;
                }
            }
        }    
    if(id=="" && classname=="")
        selected = divs;
    return selected;
}

function halt(obj) {
    return false;
}

function haltW3C(evt) {
    evt.stopPropagation();
    evt.preventDefault();
    return false;
}

function haltMS(evt) {
    if(!evt)
        evt = window.event;
    evt.cancelBubble = true;
    evt.returnValue = false;
    if (evt.stopPropagation && evt.preventDefault) {
        evt.stopPropagation();
        evt.preventDefault();
    }
    return false;
}

////=============================
//var console=null;
//function Console() {
//    if (console == null) {
//        alert("openning console");
//        console = open("", "", "width=500,height=400,status=no,toolbar=no,menubar=no");
//    }
//    return console;
//}

//function out(string) {
////    var winHandle = Console();
////    winHandle.document.open();
////    winHandle.document.write(winHandle.document.body.innerHTML+"<p>" + string + "</p>");
////    winHandle.document.close();
////    alert(string);
//}
