//-------------------------------------------------------
// Javascript error alert
//-------------------------------------------------------

//onerror=handleErr

function handleErr(msg,url,l)
{
    txt="There was an javascript error on this page.\n\n";
    txt+="Error: " + msg + "\n";
    txt+="URL: " + url + "\n";
    txt+="Line: " + l + "\n\n";
    txt+="Click OK to continue.\n\n";
    alert(txt);
    return true
}

//-------------------------------------------------------
// Create random number
//-------------------------------------------------------
function rnd(length)
{
    var number = parseInt(Math.random()*new Date().getTime());
    if(length)
    {
        number = (''+number).substring(0,length);
    }
    return number;
}

//-------------------------------------------------------
// find dom child object by classname
//-------------------------------------------------------
function findNodeByClass(parentObj,paramName)
{
    var elems = parentObj.getElementsByTagName('*');

    for (var i=0, j=elems.length; i<j; i++)
    {
        var elem = elems[i];
        if (elem.className && paramName == elem.className)
        {
            return elem;
        }
    }
    return false;
}

//-------------------------------------------------------
//
//-------------------------------------------------------
function getElementsByTagAndClass(parentObj,tagName,className)
{
    var result = new Array();

    if(parentObj)
    {
        var elems = parentObj.getElementsByTagName(tagName);

        for (var i=0, j=elems.length; i<j; i++)
        {
            if (elems[i].className && className == elems[i].className)
            {
                result.push(elems[i]);
            }
        }
    }

    return result;
}

/**
 * Set all select tag options as selected or unselect all.
 * @param id String, id of the select tag.
 * @param value Boolean, true to select all, false unselect all.
 */
function setSelect(id,value)
{
    var select = document.getElementById(id);
    for(var i = 0; i < select.options.length; i++)
    {
        select.options[i].selected = value;
    }
}

//-------------------------------------------------------
// find dom child object by id
//-------------------------------------------------------
function findNodeById(parentObj,paramName)
{
    var elems = parentObj.getElementsByTagName('*');

    for (var i=0, j=elems.length; i<j; i++)
    {
        var elem = elems[i];
        if (elem.id && paramName == elem.id)
        {
            return elem;
        }
    }
    return false;
}

function setIframeHeight(iframe,id)
{
  //find the height of the internal page and
  //change the height of the iframe
  try
  {
    iframe.style.height = iframe.contentWindow.document.body.scrollHeight + 2 + 'px';  
  }
  catch(e)
  {
      iframe.style.height = document.getElementById(id).offsetHeight + 'px';
  }
}


//-------------------------------------------------------
// closes window only if its a popup window
//-------------------------------------------------------
function closePopUp()
{
    // is window popup window
    // (window.opener is defined only for popup windows)
    if(window.opener)
    {
        window.close();
    }
}

//-------------------------------------------------------
// changes popup window height, requires that body tag doesnt
// have height 100%
//-------------------------------------------------------
function resizePopup()
{
    if(window.opener)
    {
        var body = (document.getElementsByTagName('body'))[0];
        var doc = document.documentElement;

        if(doc.clientHeight != body.offsetHeight)
        {
            window.resizeBy(0, body.offsetHeight - doc.clientHeight);
        }
    }
}

//-------------------------------------------------------
// Array functions
//-------------------------------------------------------
// Returns true if the passed value is found in the
// array.  Returns false if it is not.
function inArray(array,value)
{
    var i;
    for (i=0; i < array.length; i++)
    {
        // Matches identical (===), not just similar (==).
        if (array[i] === value)
        {
            return true;
        }
    }
    return false;
}

function isArray(obj)
{
   return (typeof(obj) == 'object' && obj.constructor.toString().indexOf("Array") != -1);
}

//-------------------------------------------------------
// Trim string
//-------------------------------------------------------
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,''); };

//-------------------------------------------------------
// Remove class from the html element
//-------------------------------------------------------
function removeClass(obj, className)
{
    if (obj && obj.className)
    {
        obj.className = obj.className.replace(className, '').trim();
        if(obj.className == '')
        {
            obj.removeAttribute('class');
        }
    }
};

//-------------------------------------------------------
// Add class to the html element
//-------------------------------------------------------
function addClass(obj, className)
{
    if(obj && obj.className.indexOf(className) == -1)
    {
        obj.className += ' ' + className;
    }
};

//-------------------------------------------------------
// Events object
//-------------------------------------------------------
var Events = function()
{
    var ev = new Object();

    var funcs = new Object();

    var eventsList = new Array();

    ev.add = function( obj, type, fn )
    {
        // Gecko / W3C
        if (obj.addEventListener)
        {
            obj.addEventListener( type, fn, false );
            addEvent(obj, type, fn);
        }
        // IE
        else if (obj.attachEvent)
        {
            funcs[type+fn] = function(){ fn.apply(window.event.srcElement); };
            obj.attachEvent( "on"+type, funcs[type+fn] );
            addEvent(obj, type, funcs[type+fn]);
        }
        else
        {
            obj["on"+type] = obj["e"+type+fn];
        }
    };

    ev.remove = function(obj, type, fn )
    {
        // Gecko / W3C
        if (obj.removeEventListener)
        {
            obj.removeEventListener(type, fn, false );
        }
        // IE
        else if (obj.detachEvent)
        {
            obj.detachEvent("on" + type, funcs[type+fn]);
            funcs[type+fn] = null;
            obj = null;
        }
        else
        {
            obj["on" + type] = null;
        }
    };

    addEvent = function()
    {
        eventsList.push(arguments);
    };

    flush = function()
    {
        while(eventsList.length > 0)
        {
            var eventData = eventsList.pop();
            // Gecko / W3C
            if (eventData[0].removeEventListener)
            {
                eventData[0].removeEventListener(eventData[2], eventData[2], false );
            }
            // IE
            else if (eventData[0].detachEvent)
            {
                eventData[0].detachEvent("on" + eventData[1], eventData[2]);
            }
            else
            {
                eventData[0]["on" + eventData[1]] = null;
            }
        }
    };

    ev.stop = function(e)
    {
        if ( document.captureEvents && e)
        {
            e.preventDefault();
        }
        else if ( window.event )
        {
            window.event.cancelBubble = true;
            window.event.returnValue = false;
        }
        return false;
    };

    // remove all event listeners when window unloads to prevent memory leak in IE
    ev.add(window,'unload',flush);

    return ev;
}();

//-------------------------------------------------------
// Drag object
//-------------------------------------------------------
var Drag = function()
{
    var o = new Object();

    o.attach = function(element,handle)
    {
        if( element )
        {
            if(!handle) handle = element;

            Events.add(handle,'mousedown',new d(element).dragStart);
        }
    }

    function d(obj)
    {
        obj.style.position = 'absolute';

        var xOffset = 0;
        var yOffset = 0;

        var mouseMove = function(e)
        {
            obj.style.left = (Mouse.X(e) - xOffset)/10 + "em";
            obj.style.top  = (Mouse.Y(e) - yOffset)/10 + "em";
            Events.stop(e);
        };

        this.dragStart = function(e)
        {
            Events.add(document,'mouseup',dragStop);
            Events.add(document,'mousemove',mouseMove);
            xOffset = Mouse.X(e) - obj.offsetLeft;
            yOffset = Mouse.Y(e) - obj.offsetTop;
            Events.stop(e);
        }

        var dragStop = function(e)
        {
            Events.remove(document,'mouseup',dragStop);
            Events.remove(document,'mousemove',mouseMove);
            Events.stop(e);
        }
    }

    return o;

}();

//-------------------------------------------------------
// Mouse object
//-------------------------------------------------------
var Mouse = function()
{
    var m = new Object();

    m.isRightClick = function(e)
    {
        var rightclick;
        if (!e) var e = window.event;
        if (e.which) rightclick = (e.which == 3);
        else if (e.button) rightclick = (e.button == 2);
        return rightclick;
    }

    m.isLeftClick = function(e)
    {
        var leftclick;
        if (!e) var e = window.event;
        if (e.which) leftclick = (e.which == 1);
        else if(e.button) leftclick = (e.button == 0 || e.button == 1);
        return leftclick;
    }

    m.X = function(e)
    {
        var x = 0;
        if(!e) var e = window.event;
        if(e.pageX) x = e.pageX;
        else if(e.clientX) x = e.clientX + document.documentElement.scrollLeft;
        return x;
    }

    m.Y = function(e)
    {
        var y = 0;
        if(!e) var e = window.event;
        if(e.pageY) y = e.pageY;
        else if(e.clientY) y = e.clientY + document.documentElement.scrollTop;
        return y;
    }

    return m;

}();

//-------------------------------------------------------
// Cookie object
//-------------------------------------------------------
var Cookie = function()
{
    var c = new Object();

    c.set = function(key, value, days, path, domain)
    {
        if(value == "")
        {
            days = -1;
        }

        value = encodeURIComponent(value);
        value += "; path=" + ((path) ? path : "/");
        if (domain) value += "; domain=" + domain;

        if (days)
        {
            var date = new Date();
            date.setTime(date.getTime() + (days * 86400000));
            value += "; expires=" + date.toGMTString();
        }

        document.cookie = key + "=" + value;
    }

    c.get = function(key)
    {
        var value = document.cookie.match('(?:^|;)\\s*'+key+'=([^;]*)');
        return (value) ? decodeURIComponent(value[1]) : false;
    }

    c.remove = function(key)
    {
        c.set(key,"",-1);
    }

    return c;

}();

//-------------------------------------------------------
// Setup wicket framework javascript settings
//-------------------------------------------------------

//Events.add(window,'load',setupWicket);
function setupWicket()
{
  try
  {
    // add ajax loading indicator
    if(Wicket.Ajax)
    {
        Wicket.Ajax.registerPreCallHandler(showBusysign);
        Wicket.Ajax.registerPostCallHandler(hideBusysign);
        Wicket.Ajax.registerFailureHandler(hideBusysign);
    }

    // remove modal window unload alert
    if(Wicket.Window)
    {
        Wicket.Window.unloadConfirmation = false;
    }
  }
  catch(err)
  {
  }
}

function hideBusysign() 
{  
  //alert("hide");
  document.getElementById('veil').style.display ='none';
}

function showBusysign() 
{
  //alert("show");
  document.getElementById('veil').style.display ='inline';
}

//-------------------------------------------------------
// 
//-------------------------------------------------------
function setAutocomplete(name, option)
{
    input = document.getElementById(name) ;
    if (option == 0) // off
    {
        input.setAttribute("autocomplete", "off") ;
    }
    else if (option == 1) // on
    {
        input.setAttribute("autocomplete", "on") ;
    }
}

