/*+*******************************************************************************
 * The contents of this file are subject to the vtiger CRM Public License Version 1.0
 * ("License"); You may not use this file except in compliance with the License
 * The Original Code is:  vtiger CRM Open Source
 * The Initial Developer of the Original Code is vtiger.
 * Portions created by vtiger are Copyright (C) vtiger.
 * All Rights Reserved.
 ******************************************************************************/

/**
 * Generic uitype popup selection handler
 */
function vtlib_setvalue_from_popup(recordid,value,target_fieldname) {
    if(window.opener.document.EditView) {
        var domnode_id = window.opener.document.EditView[target_fieldname];
        var domnode_display = window.opener.document.EditView[target_fieldname+'_display'];
        if(domnode_id) domnode_id.value = recordid;
        if(domnode_display) domnode_display.value = value;
        return true;
    } else if(window.opener.document.QcEditView) {
        var domnode_id = window.opener.document.QcEditView[target_fieldname];
        var domnode_display = window.opener.document.QcEditView[target_fieldname+'_display'];
        if(domnode_id) domnode_id.value = recordid;
        if(domnode_display) domnode_display.value = value;
        return true;
    } else {
        return false;
    }
}

/**
 * Show the vtiger field help if available.
 */
function vtlib_field_help_show(basenode, fldname) {
    var domnode = $('vtlib_fieldhelp_div');

    if(typeof(fieldhelpinfo) == 'undefined') return;

    var helpcontent = fieldhelpinfo[fldname];
    if(typeof(helpcontent) == 'undefined') return;

    if(!domnode) {
        domnode = document.createElement('div');
        domnode.id = 'vtlib_fieldhelp_div';
        domnode.className = 'dvtSelectedCell';
        domnode.style.position = 'absolute';
        domnode.style.width = '150px';
        domnode.style.padding = '4px';
        domnode.style.fontWeight = 'normal';
        document.body.appendChild(domnode);

        domnode = $('vtlib_fieldhelp_div');
        Event.observe(domnode, 'mouseover', function() {
            $('vtlib_fieldhelp_div').show();
        });
        Event.observe(domnode, 'mouseout', vtlib_field_help_hide);
    }
    else {
        domnode.show();
    }
    domnode.innerHTML = helpcontent;
    fnvshobj(basenode,'vtlib_fieldhelp_div');
}
/**
 * Hide the vtiger field help
 */
function vtlib_field_help_hide(evt) {
    var domnode = $('vtlib_fieldhelp_div');
    if(domnode) domnode.hide();
}

/**
 * Listview Javascript Event handlers API
 * 
 * Example: 
 * vtlib_listview.register('cell.onmouseover', function(evtparams, moreparams) { console.log(evtparams); }, [10,20]);
 * vtlib_listview.register('cell.onmouseout', function(evtparams) {console.log(evtparams); });
 */
var vtlib_listview = {
    /**
	 * Callback function handlers that needs to be triggered for an event
	 * 
	 * _handlers = {
	 *     'event1' : [ [handlerfn11, handlerfn11_moreparams], [handlerfn2, handlerfn12_moreparams] ],
	 *     'event2' : [ [handlerfn21, handlerfn21_moreparams], [handlerfn2, handlerfn22_moreparams] ]
	 * }
	 */
    _handlers : {},
		
    /**
	 * Register handler function for the event
	 */
    register : function(evttype, handler, callback_params) {
        if(typeof(callback_params) == 'undefined') callback_params = false;
        if(typeof(vtlib_listview._handlers[evttype]) == 'undefined') {
            vtlib_listview._handlers[evttype] = [];
        }
        // Event handlerinfo is an array having (function, optional_more_parameters)
        vtlib_listview._handlers[evttype].push([handler, callback_params]);
    },

    /**
	 * Invoke handler function based on event type
	 */
    invoke_handler : function(evttype, event_params) {
        var evthandlers = vtlib_listview._handlers[evttype];
        if(typeof(evthandlers) == 'undefined') return;
        for(var index = 0; index < evthandlers.length; ++index) {
            var evthandlerinfo = evthandlers[index];
            // Event handlerinfo is an array having (function, optional_more_parameters)
            var evthandlerfn = evthandlerinfo[0];
            if(typeof(evthandlerfn) == 'function') {
                evthandlerfn(event_params, evthandlerinfo[1]);
            }
        }
    },
	
    /**
	 * Trigger handler function for the event
	 */
    trigger  : function(evttype, node) {
        if(evttype == 'cell.onmouseover' || evttype == 'cell.onmouseout') {
            // Catch hold of DOM element which has meta inforamtion.
            var innerNodes = node.getElementsByTagName('span');
            if(typeof(innerNodes) != 'undefined') {
                var cellhandler = false;
                for(var index = 0; index < innerNodes.length; ++index) {
                    var innerNodeAttrs = innerNodes[index].attributes;
                    if(typeof(innerNodeAttrs) != 'undefined' && typeof(innerNodeAttrs.type) != 'undefined' && innerNodeAttrs['type'].nodeValue == 'vtlib_metainfo') {
                        cellhandler = innerNodes[index];
                        break;
                    }
                }
                if(cellhandler == false) return;
                var event_params = {
                    'event'  : evttype,
                    'domnode': node,
                    'module' : cellhandler.attributes['vtmodule'].nodeValue,
                    'fieldname': cellhandler.attributes['vtfieldname'].nodeValue,
                    'recordid': cellhandler.attributes['vtrecordid'].nodeValue
                }
                vtlib_listview.invoke_handler(evttype, event_params);
            }
        }
    }
}
/** END **/

/** 
 * DetailView widget loader API
 */
function vtlib_loadDetailViewWidget(urldata, target, indicator) {

    if(typeof(target) == 'undefined') {
        target = false;
    } else {
        target = $(target);
    }
    if(typeof(indicator) == 'undefined') {
        indicator = false;
    } else {
        indicator = $(indicator);
    }
	
    if(indicator) {
        indicator.show();
    }
	
    new Ajax.Request('index.php',
    {
        queue: {
            position: 'end',
            scope: 'command'
        },
        method: 'post',
        postBody:urldata,
        onComplete: function(response) {
            if(target) {
                target.innerHTML = response.responseText;
                if(indicator) {
                    indicator.hide();
                }
            }
        }
    });
    return false; // To stop event propogation
}

/**
 * return themeurl
 *
 */
function vtlib_vtiger_imageurl(theme){
    return "themes/"+theme+"/images";
}

/*
 * getElementsByClassName fix for I.E 8
 */
function vtlib_getElementsByClassName(obj,className,tagName){
    //Use getElementsByClassName if it is supported
    if ( typeof(obj.getElementsByClassName) != 'undefined' ) {
        return obj.getElementsByClassName(className);
    }

    // Otherwise search for all tags of type tagname with class "className"
    var returnList = new Array();
    var nodes = obj.getElementsByTagName(tagName);
    var max = nodes.length;
    for ( var i = 0; i < max; i++ ) {
        if ( nodes[i].className == className ) {
            returnList[returnList.length] = nodes[i];
        }
    }
    return returnList;
}
