﻿function SplitTable(_tableHolderId) {
    this.browser = new BrowserDetect().browser;

    this.tblcontainer = _tableHolderId;
    this.splitter = null;
    this.ishorizontal = true;
    
    this.doGenerateSplitter = Table_doGenerateSplitter;
    this.doAddGrid = Table_doAddGrid;
    
    this.gridNumber = 0;
    this.Grids = new Array();


	/* CSS CLASS NAMES */
	this.CLASS_TBL_CONTAINER = "tblContainer" ;	
	this.CLASS_TBL_CONTAINER_BODY = "tblContainerBody" ;
	this.CLASS_TBL_SPLITTER = "tblSplitter" ;
	this.CLASS_TBL_DIV_SPLITTER = "splitterDiv" ;
	this.CLASS_TBL_SPLITTER_BACKGROUND = "tblSplitterBackground" ;

	/* HTML OBJECTS */
	this.placeholder = jQuery("#" + _tableHolderId) ;
	if (!this.placeholder) {
		alert ("ERROR!\nNo placeholder defined!") ;
		return false ;
	}

	this.container = null ;	
	this.body = null ;	
	
	this.splitterBackground = null ;	
		
	
	/* TABLE PROPERTIES */		
	this.isResizePossible = true ;
	this.isResize = false ;	
	this.scrollBarColumn = null ;
	this.startPosition = 0 ;
	this.finishPosition = 0 ;
	this.trWidth = 0;		

	/* PUBLIC METHODS */
	//this.doInitLayout = Table_doInitLayout ;	
	//this.doGetBody = Table_doSetBodyDataDivs ;
	
	/*EVENTS*/
	this.onSplitterClick = null;	
	
}

function Table_doGenerateSplitter(_ishorizontal) {    
    var obj = this;    
    obj.ishorizontal = _ishorizontal;
    if(obj.ishorizontal) {
        if(jQuery("div#divTableSplitter").length == 0) {
            jQuery("body").append("<div id='divTableSplitter' class='splitterDiv'></div>");
        }
        this.splitter = jQuery("#divTableSplitter");
        this.splitter.addClass("splitterInPeace");
        
        document.getElementById(this.tblcontainer).rows["1"].onmousedown = function(_evt) { 
                        var evt = (obj.browser == "Explorer") ? window.event : _evt ;
                        obj.isResize = true ;

                        var target = (window.event) ? event.srcElement.parentNode : evt.target.parentNode ;

                        obj.startPosition = (window.event) ? evt.clientY : evt.pageY ;
                        document.body.style.cursor = "n-resize" ;

                        jQuery("#divTableSplitter")
                            .removeClass("splitterInPeace")
                            .addClass("splitterOnMove");    
                            
                        document.getElementById("divTableSplitter").style.width = target.offsetWidth ;
                        document.getElementById("divTableSplitter").style.top = jQuery(target).offset().top;//  target.offsetTop;
                        document.getElementById("divTableSplitter").style.left = jQuery(target).offset().left;                                                            

                        document.body.onselectstart = function () {return false} ;
                        document.body.onmousemove = function (evt) {doResizeAreaHor (evt, jQuery("#divTableSplitter")) ; /*return false*/} ;
                        document.body.onmouseup = function (evt) {doFinishResizeHor (evt, jQuery("#divTableSplitter"), obj)} ; };
    }
    else {
        if(jQuery("div#divTableSplitterVer").length == 0) {
            jQuery("body").append("<div id='divTableSplitterVer' class='splitterDivVertical'></div>");
        }
        this.splitter = jQuery("#divTableSplitterVer");
        this.splitter.addClass("splitterInPeace");
        
        document.getElementById(this.tblcontainer).rows["0"].cells["1"].onmousedown = function(_evt) { 
                        var evt = (obj.browser == "Explorer") ? window.event : _evt ;
                        obj.isResize = true ;

                        var target = (window.event) ? event.srcElement.parentNode : evt.target.parentNode ;

                        obj.startPosition = (window.event) ? evt.clientX : evt.pageX ;
                        document.body.style.cursor = "e-resize" ;

                        jQuery("#divTableSplitterVer")
                            .removeClass("splitterInPeace")
                            .addClass("splitterOnMove");    
                            
                        jQuery("#divTableSplitterVer").height(jQuery(target).height());
                        jQuery("#divTableSplitterVer")[0].style.top = jQuery(target).offset().top; //target.offsetTop; //
                        jQuery("#divTableSplitterVer")[0].style.left = jQuery(target)[0].childNodes[1].offsetLeft;
                        document.body.onselectstart = function () {return false} ;
                        document.body.onmousemove = function (evt) {doResizeAreaVer (evt, jQuery("#divTableSplitterVer")) ; /*return false*/} ;
                        document.body.onmouseup = function (evt) {doFinishResizeVer (evt, jQuery("#divTableSplitterVer"), obj)} ; };
    }
}

//---------------Vertical splitter--------------
function doResizeAreaVer (_evt, _target) {
	document.getElementById("divTableSplitterVer").style.left = (window.event) ? event.clientX + "px" : _evt.pageX + "px";
}

function doFinishResizeVer (_evt, _target, _obj) {	
    _target
        .removeClass("splitterOnMove")
        .addClass("splitterInPeace");

	document.body.onselectstart = null ;
	document.body.onmousemove = null ;
	document.body.onmouseup = null ;
	
	_obj.finishPosition = parseInt(document.getElementById("divTableSplitterVer").style.left.split('p')[0]) -
	                jQuery("#" + _obj.tblcontainer).parent().offset().left;
	
	if(!(_obj.finishPosition < (document.getElementById(_obj.tblcontainer).offsetWidth - 100) + "px")) {	
	    document.getElementById(_obj.tblcontainer).rows["0"].cells["0"].style.width = (_obj.finishPosition);
	}
	else {
	    document.getElementById(_obj.tblcontainer).rows["0"].cells["0"].style.width
	        = (document.getElementById(_obj.tblcontainer).offsetWidth - 100) + "px";
	}
	
	if(_obj.browser != "Explorer") {
	    if(_obj.Grids.length != 0) {
	        for(i = 0; i < _obj.Grids.length; i++) {
	            _obj.Grids[i].doResizeTable(_evt, _obj.Grids[i]);
	        }
	    }
	}
		
	document.body.style.cursor = "default" ;	
}

//--------Horizontal splitter----------
function doResizeAreaHor (_evt, _target) {
	document.getElementById("divTableSplitter").style.top = (window.event) ? event.clientY + "px" : _evt.pageY + "px";	
}

function doFinishResizeHor (_evt, _target, _obj) {	
    _target
        .removeClass("splitterOnMove")
        .addClass("splitterInPeace");

	document.body.onselectstart = null ;
	document.body.onmousemove = null ;
	document.body.onmouseup = null ;
	
	_obj.finishPosition = parseInt((document.getElementById("divTableSplitter").style.top).split('p')[0]) - 
	                jQuery("#" + _obj.tblcontainer).parent().offset().top;
	
	var tableHeight = document.getElementById(_obj.tblcontainer).offsetHeight;
	
	if(!(_obj.finishPosition > document.getElementById(_obj.tblcontainer).offsetHeight - 100)) {	
	    jQuery("#" + _obj.tblcontainer + " tr:first td:first").css("height", _obj.finishPosition);
	    //jQuery("#" + _obj.tblcontainer + " tr:eq(4) td:first").css("height", tableHeight - _obj.finishPosition - 4);
	    if(_obj.browser == "Firefox") {
	        document.getElementById(_obj.tblcontainer).rows[2].cells[0].style.height = tableHeight - _obj.finishPosition - 17;
	    }
	}
	else {
	    document.getElementById(_obj.tblcontainer).rows["0"].cells["0"].style.height
	        = (document.getElementById(_obj.tblcontainer).offsetHeight - 100) + "px";
	}
		
	if(_obj.browser != "Explorer") {
	    if(_obj.Grids.length != 0) {
	        for(i = 0; i < _obj.Grids.length; i++) {
	            _obj.Grids[i].doResizeTable(_evt, _obj.Grids[i]);
	        }
	    }
	}
	document.body.style.cursor = "default" ;	
}

function Table_doAddGrid(_dataGrid) {
    if(_dataGrid) {
        this.Grids[this.gridNumber] = _dataGrid; 
        this.gridNumber = this.gridNumber +1;
    }
}
