/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


function getPosition(e) {
    e = e || window.event;
    if (!e) {
        cursor.x = 100;
        cursor.y = 100;
        return cursor;

    }
    var cursor = {x:0, y:0};
    if (e.pageX || e.pageY) {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.pageX - b.scrollLeft;
        cursor.y = e.pageY - b.scrollTop;
    }
    else {

        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX +
            (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY +
            (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
    return cursor;
}

alertTimerId = new Array();

function setTimeoutEvent(command, id) {
    timeouttid=300;
    if(alertTimerId[id] != "undefined")  {
        clearTimeout (alertTimerId[id]);
        alertTimerId[id] = setTimeout(command,timeouttid);
    } else {
        alertTimerId[id] = setTimeout(command,timeouttid);
    }

    command = command.replace('executeEventsAsync', 'setProcessing');
    command = command.replace('executeEvents', 'setProcessing');
    setTimeout(command,0);
}

var JsTreeCommon = {
    
    createNewNode : function (JS_OBJECT, JsTreeSaverClass, resultDiv, node, ref_node, TYPE) {
        data = JS_OBJECT.get();

        datab = {jstree : [ data ]};
        datab.type = 'test';
        datab.executionClass = JsTreeSaverClass;
        datab.domElement = resultDiv;
        datab.executionCommand = 'createnew';
        datab.nodeid = node.getAttribute("id");
        datab.tonodeid = ref_node.getAttribute("id");
        datab.type = TYPE;

        alert(datab.nodeid + " " + datab.tonodeid + " " + datab.type);

        res = CrappleCommon.postAjax(datab, false);
        res = res.trim();
        if (res == 'success') {
            return true;
        } else {
            alert("Failed to save:\n"+res);
            return false;
        }
    },

    saveJsTreeDataType : function(JS_OBJECT, JsTreeSaverClass, resultDiv, node, ref_node, TYPE) {
        data = JS_OBJECT.get();
        
        datab = {jstree : [ data ]};
        datab.type = 'test';
        datab.executionClass = JsTreeSaverClass;
        datab.domElement = resultDiv;
        datab.executionCommand = 'save';
        datab.nodeid = node.getAttribute("id");
        datab.tonodeid = ref_node.getAttribute("id");
        datab.type = TYPE;

        
        res = CrappleCommon.postAjax(datab, false);
        res = res.trim();
        if (res == 'success') {
            return true;
        } else {
            alert("Failed to save:\n"+res);
            return false;
        }
    },
    
    renameNode : function (node, tree_obj, JsTreeHandler) {
        datab = {jstree : ''};
        datab.type = 'test';
        datab.executionClass = JsTreeHandler;
        
        datab.domElement = 'status';
        datab.executionCommand = 'update';
        datab.nodeid = node.getAttribute("id");
        datab.name = tree_obj.get_text(node);

        var res = CrappleCommon.postAjax(datab, false);
        res = res.trim();

        if (res == 'success') {
            return true;
        } else {
            alert("Failed to delete node, please try to reload page and try again\n\n Reason of failure:\n"+res);
            return false;
        }

        
    },
    
    deleteSelectedNode : function (NODE, JsTreeHandler) {
        id = NODE.getAttribute("id");

        datab = {jstree : [ data ]};
        datab.type = 'test';
        datab.executionClass = JsTreeHandler;
        // Not in use
        datab.domElement = 'status';
        datab.executionCommand = 'delete';
        datab.nodeid = id;

        var res = CrappleCommon.postAjax(datab, false);
        res = res.trim();

        if (res == 'success') {
            return true;
        } else {
            alert("Failed to delete node, please try to reload page and try again\n\n Reason of failure:\n"+res);
            return false;
        }
    }
}


var CrappleCommon = {
    executeHistoryEvents : function(events_json, async, mouseevent) {
        var events = eval('{'+events_json+'}');
        CrappleCommon.doEvents(events, events[1].async, mouseevent);
    },
    
    addHash : function(events_json, async) {
        var randomnumber=Math.floor(Math.random()*11)
        events_json = events_json.substr(0, events_json.length-2) + ", hashvalue : " + randomnumber +  ", async : "+async+"}]";
        return events_json;
    },
    
    executeEventsAsync : function (events_json) {
        this.executeEvents(events_json, true, null)
    },
    
    executeEvents : function (events_json, async, mouseevent) {
        var events = eval('{'+events_json+'}');
        
        if(typeof(enablehistory) !== 'undefined' && (events_json.indexOf('5s55a55a5as4d5fas1df5asd1fa65sd1f3654512346551savehistory') > -1)) {
            events_json = this.addHash(events_json, async);
            jQuery.history.load(events_json);
        } else {
            CrappleCommon.doEvents(events, async, mouseevent);
        }
    },

    doEvents : function (events, async, mouseevent) {

        for(var i=0; i<events.length; i++) {
            var event = events[i];

            if (event.type == 'DIALOG_show') {
                CrappleCommon.showDialog(event, mouseevent);
            }

            if (event.type == 'DIALOG_close') {
                CrappleCommon.closeDialog(event);
            }

            if (event.type == 'CKEDITOR_destroy') {
                CrappleCommon.removeCkEditor(event);
            }

            if (event.type == 'CKEDITOR_replacediv') {
                CrappleCommon.setDivEditable(event);
            }

            if (event.type == 'Confirmation') {
                var answer = confirm(event.question);
                if (!answer){
                    return;
                }
            }

            if (event.type == 'PostAjaxEvent') {
                event = CrappleCommon.fetchExtraVariables(event);
                event = CrappleCommon.fetchRadioSet(event);
                CrappleCommon.postAjax(event, async);
            }

            if (event.type == 'FadeOut') {
                if (event.timeout != 0) {
                    setTimeout ( 'jQuery(\'#'+event.domElement+'\').fadeOut('+event.speed+')', event.timeout );
                } else {
                    jQuery('#'+event.domElement).fadeOut(event.speed);
                }
            }
        }
    },

    closeDialog : function (event) {
        $("#dialog").dialog("close");
        CrappleCommon.doEvents(event.events, true);
    },

    showDialog : function (event, mouseevent) {
        cursor = getPosition(mouseevent);

        if (event.showOnLeftSide == true) {
            cursor.x = cursor.x - event.width;
        } else {
            cursor.x = cursor.x;
        }
        
        if (cursor.x < 0) {
            cursor.x = 0;
        }

        if (event.xpos != null) {
            cursor.x = event.xpos;
        }

        if (event.ypos != null) {
            cursor.y = event.ypos;
        }

        $("#dialog").dialog("destroy");

        if (event.showCloseButton == true) {

            $("#dialog").dialog({buttons: {"Close": function() {$(this).dialog("close");}}, title : event.title, width : event.width, height : event.height, modal : event.modal, zIndex : 90000, autoOpen: true, position : [cursor.x,cursor.y]});
        } else {
            $("#dialog").dialog({title : event.title, width : event.width, height : event.height, modal : event.modal, zIndex : 90000, autoOpen: true, position : [cursor.x,cursor.y]});
        }

        
        
        CrappleCommon.doEvents(event.events, true);
    },

    dhtmlLoadScript : function (url) {
       var e = document.createElement("script");
       e.src = url;
       e.type="text/javascript";
       document.getElementsByTagName("head")[0].appendChild(e);
    },


    setDivEditable : function(event) {
        CrappleCommon.removeCkEditor(event);
//        CrappleCommon.dhtmlLoadScript("framework/javascripts/ckeditor/ckeditor.js");
        
        CKEDITOR.plugins.registered['save']=
        {
           init : function( editor )
           {
               var command = editor.addCommand( 'save',
                 {
                    modes : {wysiwyg:1, source:1},
                    exec : function( editor ) {
                        var blah = new Array();
                        i = 0;

                        events = event.saveEvents;

                        for(var i=0; i<events.length; i++) {
                            ev = events[i];
                            ev.CKeditorContent = editor.getData();
                            blah[i] = ev;

                        }
                        
                        CrappleCommon.doEvents(blah, false);

                    }
                 }
              );

             editor.ui.addButton( 'Save', {label : 'My Save', command : 'save'});
           }
        }

        editor = CKEDITOR.replace( event.domElement , {
            filebrowserBrowseUrl : 'framework/javascripts/ckfinder/ckfinder.html',
            filebrowserUploadUrl : 'uploader/upload.php'
        });
    },

    removeCkEditor : function(event) {
        var inst = CKEDITOR.instances[event.domElement];
        if (inst) {
            try {
                inst.destroy();
            } catch (err) {

            }
            CKEDITOR.remove(inst);
            delete CKEDITOR.instances[inst];
        }
    },

    setProcessing : function (events_json, async) {
        var events = eval('{'+events_json+'}');

        for(var i=0; i<events.length; i++) {
            var event = events[i];
            if (event.domElement != '' && event.showProcessingIcon == '1') {
                jQuery("div#"+event.domElement).html("<br><CENTER><IMG SRC='framework/images/loading.png'></CENTER>");
            }
        }
    },

    fetchRadioSet : function (event) {
        var values = event.fetchRadioSet;

        for (key in values) {
            for (i=0; i<document.getElementsByTagName('input').length; i++) {
                var element = document.getElementsByTagName('input')[i];
                if (element.type == 'radio' && element.name == key && element.checked == true) {
                    event.fetchRadioSet[key] = element.value;
                }
            }
        }
        
        return event;
    },

    fetchExtraVariables : function (event){
        var values = event.fetchValuesFrom;

        for (key in values) {
            event.fetchValuesFrom[key] = CrappleCommon.getValueOfElement(key);
        }
        
        event.fetchValuesFrom = values;
        return event;
    },

    getValueOfElement : function(elementid) {
        var val = '';

        if (document.getElementById(elementid).getAttribute('type') == 'checkbox') {
            if (document.getElementById(elementid).checked)
                val = document.getElementById(elementid).value;
        } else if(document.getElementById(elementid).nodeName == "DIV" || document.getElementById(elementid).nodeName == "div") {
              val = document.getElementById(elementid).innerHTML;
        } else {
            val = document.getElementById(elementid).value;
        }
        
        return val;
    },

    postAjax : function (executeAjaxEvent, async2) {
        if (async2 == 'false' || !async2 ) {
            async2 = false;
        } else {
            async2 = true;
        }

        if (executeAjaxEvent.domElement != '' && executeAjaxEvent.showProcessingIcon == '1') {
            jQuery("div#"+executeAjaxEvent.domElement).html("<br><CENTER><IMG SRC='framework/images/loading.png'></CENTER>");
        }

        var retdata = 'failed';
        
        jQuery.ajax({
            url: 'applications/ajax.php',
            type: 'POST',
            dataType: 'application/json',
            data: executeAjaxEvent,
            
            success: function(data){
                retdata = data;
                if (executeAjaxEvent.domElement != '') {
                    jQuery("#"+executeAjaxEvent.domElement).html(data);
                    if (executeAjaxEvent.domElement == 'modaloverlay') {
                        jQuery("div#"+executeAjaxEvent.domElement).trigger('exposemyevent');
                    }
                }
            },
            
            async: async2
        });

        return retdata;
    },

    addEvents : function () {
        jQuery('.resizable').live('mouseover', function() {
            var crudclass = $(this).attr('crudclass');
            var crudid = $(this).attr('crudid');

            $(this).resizable(
            {
                animateEasing: 'swing',

                stop: function(event, ui) {
                    datab = {jstree : [ data ]};
                    datab.type = 'test';
                    datab.executionClass = 'Resizer';
                    datab.domElement = '';
                    datab.executionCommand = 'resize';
                    datab.width = ui.size.width;
                    datab.height = ui.size.height;
                    datab.crudclass = crudclass;
                    datab.crudid = crudid;

                    CrappleCommon.postAjax(datab, true);
                }

            });
        });

        jQuery('img.clickable').live('mousedown', function() {
            var orgimage = this.src;
            if (orgimage) {
                this.src = orgimage.replace('.png', '-clicked.png');
            }
        });

        jQuery('img.clickable').live('mouseup', function() {
            var orgimage = this.src;
            if (orgimage) {
                this.src = orgimage.replace('-clicked.png', '.png');
            }
        });
        
        jQuery('img.clickable').live('mouseout', function() {
            var orgimage = this.src;
            if (orgimage) {
                this.src = orgimage.replace('-clicked.png', '.png');
            }
        });

        jQuery('.hovermix').live('mouseover', function() {
            $(this).addClass('hovermixhovered');
        });

        jQuery('.hovermix').live('mouseout', function() {
            $(this).removeClass('hovermixhovered');
        });

        jQuery('.leftmenuicon').live('mouseover', function() {
            $(this).addClass('leftmenuiconhovered');
        });

        jQuery('.leftmenuicon').live('mouseout', function() {
            $(this).removeClass('leftmenuiconhovered');
        });

//
        jQuery('div.clickable').live('mouseenter', function () {
                    var bgimage = $(this).css('background-image');
                    if (bgimage.indexOf('-hovered.png') > 0)  {
                        image = bgimage;
                    } else {
                        image = bgimage.replace('.png', '-hovered.png');
                    }
                    
                    $(this).css('background-image', image);
               }
        );

        jQuery('div.clickable').live('mouseout', function () {
                    var bgimage = $(this).css('background-image');
                    if (bgimage.indexOf('-hovered.png') > 0)  {
                        image = bgimage.replace('-hovered.png', '.png');
                    } else if (bgimage.indexOf('-clicked.png') > 0) {
                        image = bgimage.replace('-clicked.png', '.png');
                    } else {
                        image = bgimage;
                    }

                    $(this).css('background-image', image);
               }
        );

        jQuery('div.clickable').live('mouseup', function() {
            var bgimage = $(this).css('background-image');
            if (bgimage.indexOf('-clicked.png') > 0) {
                image = bgimage.replace('-clicked.png', '-hovered.png');
            } else {
                image = bgimage;
            }

            $(this).css('background-image', image);
        });

        jQuery('div.clickable').live('mousedown', function() {
            var bgimage = $(this).css('background-image');
            if (bgimage.indexOf('-hovered.png') > 0) {
                image = bgimage.replace('-hovered.png', '-clicked.png');
            } else if(bgimage.indexOf('.png') > 0) {
                image = bgimage.replace('.png', '-clicked.png');
            } else {
                image = bgimage;
            }

            $(this).css('background-image', image);
        });

        jQuery('#modaloverlay').live('exposemyevent', function() {
            
            $(this).ready(function(){
                var api = $("#modaloverlay").overlay(
                    {
                        oneInstance: true, api: true,

                        expose: {
                            color: '#333',
                            loadSpeed: 200,
                            opacity: 0.7
                        },

                        async: false,

                        onClose: function() {
                            jQuery('#modaloverlay').html('');
                        },

                        onBeforeClose : function() {
                            var divs = document.getElementsByTagName('div');
                            for (var i = 0; i < divs.length; i++){
                                var divname = divs[i].id;
                                var inst = CKEDITOR.instances[divname];
                                if (inst) {
                                    inst.destroy();
                                }
                            }
                        }
                    }
                );
                
                api.load();
                
            });

        });

    },
    
    closeOverlay : function() {
        jQuery('#modaloverlay').overlay().close();
    },
    
    createButton : function (button, dom, command, execclass, progressbar, uuid, fileDescId) {
        new AjaxUpload(button, {
            action: 'upload.php',

            onComplete: function(file, response) {
                var executeAjaxEvent = {
                    "executionClass": execclass,
                    "executionCommand" : command,
                    "domElement" : dom,
                    "type" : "PostAjaxEvent",
                    "file" : file,
                    "fileid" : response,
                    "fileDescId" : fileDescId
                };

                autoSubmit : true,

                CrappleCommon.postAjax(executeAjaxEvent, '');
                CrappleCommon.stopUpload(progressbar);
            },

            onChange : function(file , ext){
                CrappleCommon.startUpload(progressbar, uuid);
            },

            uploadkey : uuid,

            data : {
                submitBtn : "Upload"
            }
        });
    },

    startUpload : function (progressbar, uuid){
            var progress_key = uuid;
            jQuery(progressbar).fadeIn();
            jQuery(progressbar).progressBar(0);

            intervalid = setInterval(function() {
                jQuery.getJSON("upload.php?id=" + progress_key, function(data) {
                    if (data != null) {
    //                    location.reload(false);
    //                    return;
                        var percentage = Math.floor(100 * parseInt(data.bytes_uploaded) / parseInt(data.bytes_total));
                        jQuery(progressbar).progressBar(percentage);
                    } else {
    //                    jQuery("#uploadprogressbar").progressBar(50);
                    }
            });
        }, 1000, 800);
        return true;
    },

    stopUpload : function (progressbar) {
        clearInterval(intervalid);
        jQuery(progressbar).css('display', 'none');
        jQuery(progressbar).progressBar(0);
    }
}


