var FS_SIZE_DEFAULT_WIDTH = 350;
var FS_SIZE_DEFAULT_HEIGHT = 200;
var FS_SIZE_DEFAULT_LEFT = 0;
var FS_SIZE_DEFAULT_TOP = 0;
var FS_INVALID_PARAMETER_TYPE = 2104;
var FS_LOWER_THAN = -1;
var FS_GREATER_THAN = 1;
var FS_EQUAL = 0;
//0 IE, 1-netscape/mozilla 2-opera
var fs_InternetExplorer = 0;
var fs_Mozilla = 1;
var fs_Opera = 2;
var fs_browserType = (navigator.userAgent.indexOf('Gecko') != -1) + 2*(navigator.userAgent.indexOf('Opera') != -1);  
var fs_Document = document;
var fs_LeftButton = 1;
var fs_RightButton = 2;
var fs_MiddleButton = 4;
//fs_delayCode("fs_defaultLogger = new fs_logger(document.body);");



function assets(str){
    if(!window.domain)
        domain = ".myavh.info";
    if(str.indexOf("http://") == -1)
        return "http://assets" + Math.floor(Math.random()*3) + domain + str;
    else
        return str;
}

function fs_getEvent(ev){
    if(ev == null)
        return fs_Document.parentWindow.event;
    return ev;
}

function fs_getTargetElement(event){
    if(event.target!=null)
        return event.target; // Mozilla/Firefox
    return event.srcElement; // Internet explorer
}

function fs_Element(ob){    
    return ob == window ? fs_getTargetElement() : ob;
}

function fs_getMouseButton(ev){    
    if(fs_browserType == fs_Mozilla){
        switch(ev.button){
            case 0:return 1;//Left button
            case 1:return 4;//Middle button            
        }
               
    }
    return ev.button;
}

function fs_getInt(src){
    var val = parseInt(src);
    if(isNaN(val)) 
        return 0;
    else 
        return val;
}

function fs_getPx (val){
    if(new String(val).toLowerCase().indexOf("px") == -1)
        return val + 'px';
    else return val;
}


/*
 *           <fs_container>
 */
function fs_isInstanceOf(a_class, an_object){
    return a_class.prototype.isPrototypeOf(an_object);
}
function fs_isObject(obj){    
    return typeof(obj) == 'object';
}

function fs_isId(id){
    return isObject(getElementById(id));
}

function fs_getObject (obj){          
    if(fs_isObject(obj))
        return obj;    
    return fs_Document.getElementById(obj);                
}

function fs_changeParentNode(n, p){
    var node = fs_getObject(n);
    var newParent = fs_getObject(p);
    if(node == null || newParent == null)
        return false;
    newParent.appendChild(node);
    return true;
}


function fs_getDocument (doc){
    if(doc == null || doc.nodeName != "#document")
        return fs_Document;
    return doc;
}
/*
 * returns the first child element with the specified nodeName
 */

function fs_getElement(parentNode, nodeName, createIfNotExist){
    
    pN = fs_getObject(parentNode,true);    
    if(!fs_isObject(pN))
        return null;

    for (var i = 0; i < parentNode.childNodes.length; i++) {
        var element = parentNode.childNodes.item(i);
        if (element.nodeType == 1 && element.nodeName == nodeName ) {
            return element;      
        }
    }

    if (createIfNotExist) {
        element = fs_Document.createElement(nodeName);
        parentNode.appendChild(element);
        return element;
    }
    return null;

}


function fs_loadScript(filename, forceReload) {
    if(window.assets)
        filename = assets(filename);
    if (forceReload == null)
        forceReload = false;
    var Head = fs_getElement(fs_getElement(fs_Document, 'HTML'), 'HEAD', true);        
    var script = fs_Document.createElement('SCRIPT');
    
    script.src = filename
        
    for (var i=0; i < Head.childNodes.length; i++) {
        var el = Head.childNodes.item(i);
        if (el.nodeName == "SCRIPT") {
            if (el.src == script.src) {
                var sPos = script.src.lastIndexOf("/");
                if (sPos != -1) sPos++;
                if (forceReload != true || confirm(script.src.substr(sPos) + " is already loaded. Do you want to reload it?")) {
                    Head.insertBefore(script,el,0);
                    Head.removeChild(el);
                    return;                        
                }
            }
        }
    }
        
    Head.appendChild(script);        
        
}
    
function fs_loadCSS(filename){
    if(window.assets)
        filename = assets(filename);
    var progressCssFile = document.createElement("link");
    progressCssFile.setAttribute("rel", "stylesheet");
    progressCssFile.setAttribute("type", "text/css");
    progressCssFile.setAttribute("href", filename);
    document.getElementsByTagName("head")[0].appendChild(progressCssFile);
}


/*
 * fs_delayCode - runs a piece of code after the specified number of miliseconds
 * ex: fs_delayCode('alert("test")', 3000);
 */
function fs_delayCode(code, mseconds){
    if(isNaN(mseconds))
        mseconds = 1;
    setTimeout(function(){eval(code);}, mseconds);
}

/*
 * fs_addListener should be a browser independent listener adder.
 * so whenever the specified event occurs for the desired object, 
 * a handler function will be called
 *
 * @param obj The object for which the event will be handled. Could be a Div, an Img or even the whole document
 * @param evStr It is the name of the event. It should be something like onMouseMove or MouseMove
 * @param handler is the function that will handle the specified event
 */
function fs_addListener(obj, evStr, handler, captureEvent) {

    evStr = new String(evStr).toLowerCase();
    if(evStr.substr(0,2) == 'on') 
        evStr = evStr.substr(2, evStr.length - 2);  
    obj = fs_getObject(obj);
    if(obj.attachEvent)
        return obj.attachEvent('on' + evStr, handler);
    else
        if(obj.addEventListener) {         
            if(!captureEvent)
                captureEvent = false 
            return obj.addEventListener(evStr, handler, captureEvent);       
        }  
    eval(obj + '.on' + evStr + '=' + handler); 
} 

function fs_removeListener(obj, evStr, handler){
    evStr = new String(evStr).toLowerCase();
    if(evStr.substr(0,2) == 'on') 
        evStr = evStr.substr(2, evStr.length - 2);  
    obj = fs_getObject(obj);
    if(obj == null)
        return;
    if(obj.detachEvent)
        return obj.detachEvent('on' + evStr, handler);
    else if(obj.removeEventListener){
        return obj.removeEventListener(evStr, handler, true);                
    }        
    eval(obj + '.on' + evStr + '= null'); 
}

function fs_setCookie(name, value, duration){
    var now = new Date();
    document.cookie = name + '=' + value + ';expires=' + new Date(now + duration).toGMTString();
}

function fs_readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}


function strip_class(ob, str){
    if(ob)
        ob.className = ob.className.replace(str, "");    
}

function add_class(ob, str){
    if(ob && ob.className.indexOf(str) == -1)
        ob.className+=(" " + str);
}

