﻿
function getIndex(arry,elem) {
	for (var i=0; i < arry.length; i++) {
		if (arry[i] == elem) {
		return i;
		}
	}
}

function getTargetElement(evt) {
    return (evt.target) ? ((evt.target.nodeType == 3) ? evt.target.parentNode : evt.target) : evt.srcElement;
}

function getstyle(elem, prop) {
		if(document.defaultView)
		{
			return document.defaultView.getComputedStyle(elem, null).getPropertyValue(prop);
		}
		else if(elem.currentStyle)
		{
			var prop = prop.replace(/-(\w)/gi, function($0,$1)
			{
				//return $0.charAt($0.length - 1).toUpperCase();
				return $1.toUpperCase();
			});
			return elem.currentStyle[prop];
		}
		else return null;
	}


function pagecolumn() {
this.originalgridwidth=0;
//this.ChildNodes=[];
this.grandChildNodes=[];
this.header=[];
this.grid= {
	id:"src"	
	,rows:9
	,columns: 18
	,width: 46
	,height: 46
	,fontSize:"10px"
	,gutter:2
	,totalwidth:10
	,unit:"px"
	,backgroundColor:"#c00000"
	,isheader:false		
	,cell1:[]
	,cell2:[]	
};

this.group = {
    typ:"clik"
    ,handler:null
}
	
}

pagecolumn.prototype = { 
init : function(settings) {

for(var i in this.grid){
	if(typeof(settings[i])!="undefined")
	  this.grid[i]=settings[i]; 
	
}

this.creategrids(this.grid);
},

creategrids:function(grid){

var colno = grid.columns;
var up =1;
var ve = grid.gutter/2;;
var ut = grid.unit;
var gutter = 2*ve/up + ut;
var vgridwidth = grid.width;
this.grid.totalwidth = vgridwidth*colno+(colno-1)*2*ve/up;
this.originalgridwidth = vgridwidth;	

for(var i=0; i<grid.columns; i++){
        var coldiv = document.createElement('div');
        coldiv.className="wpfloat";
        coldiv.style.width = vgridwidth + ut;;
        coldiv.style.left =(2*i+1)*ve/up + ut;
        //this.ChildNodes.push(coldiv);
        for(var j=0; j<grid.rows; j++){
           
            var rowdiv = this.gridbox(this.grid.height+ut,gutter,grid.backgroundColor,this.grid.fontSize);        
            coldiv.appendChild(rowdiv);
            
        }
        
        document.getElementById(grid.id).appendChild(coldiv);
        document.getElementById(grid.id).style.paddingTop=2*ve+ut;
        document.getElementById(grid.id).style.width = this.grid.totalwidth+ut;

 }

},


gridbox: function (hgt, margbottom,bkcolor,fontSize) {
var coldiv = document.createElement('div');
coldiv.style.height =hgt;
coldiv.style.width="100%";
coldiv.style.marginBottom = margbottom;
coldiv.style.backgroundColor = bkcolor;
coldiv.style.overflow="hidden";
coldiv.style.textAlign= "center";
coldiv.style.fontSize =fontSize;

return coldiv;
},

rowspan: function (cell1,cell2) {
if (cell1[0]!=cell2[0]) return;
var col = cell1[0],n = cell1[1],m=cell2[1];
var divcol0 = this.getChildNodes()[col];
var divs = divcol0.getElementsByTagName("div");
var divlen = divs.length;
var ut =this.grid.unit;
var marginbottom =this.grid.gutter+ut;
if (n==m) {
return;
}
else{
var s = (n>m) ? m : n;
var l = (n>m) ? n : m;}

if (this.Iscontinue(divs,s,l)){
var bkcolor = divs[s].style.backgroundColor;

var vgridheight=0;
for(var i=0; i<l-s+1; i++){ 
vgridheight += parseFloat(divs[s].style.height)+parseFloat(marginbottom);
divcol0.removeChild(divs[s]);

}
vgridheight = vgridheight-parseFloat(marginbottom)+ut;

var mergedbox = this.gridbox(vgridheight,marginbottom,bkcolor,this.grid.fontSize);

if ((l+1)==divlen) {
divcol0.appendChild(mergedbox);
}
else
{
divcol0.insertBefore(mergedbox, divs[s]);
}

//gridpos1=[];
//gridpos2=[];
}

},
//(col,n,m)
removegrids: function (cell1,cell2) {
//var divcol0 = getChildNodes($("wrp"),"div")[col];
var col = cell1[0],n = cell1[1],m=cell2[1];

var divcol0 = this.getChildNodes()[col];
var divs = divcol0.getElementsByTagName("div");
var ut =this.grid.unit;
var marginbottom =this.grid.gutter+ut;

var s =(n==m) ? n : (n>m) ? m : n;
var l = (n==m) ? n : (n>m) ? n : m;

var istop = (l==divs.length -1) ? true : false;

var vgridheight = this.getheightmargin(divs,s,l);

for(var i=0; i<l-s+1; i++){ 

divcol0.removeChild(divs[s]);
}

if (istop==false){

vgridheight = vgridheight+ut

divs[s].style.marginTop =  vgridheight;
if (s>0){
divs[s-1].style.marginBottom ="0px";
}

}

//gridpos1=[];
//gridpos2=[];

},


getheightmargin: function (divs,s,l) {
var h=0,mt =0,mb=0;
var gt = parseFloat(this.grid.gutter);
for(var i=s; i<l+1; i++){ 
var mbb = parseFloat(divs[i].style.marginBottom);
mbb  = isNaN(mbb) ? 0 : mbb;

h += parseFloat(divs[i].style.height);
var mtt = parseFloat(divs[i].style.marginTop);
if (isNaN(mtt)) {
mt = mt;

}
else
{
var n = parseInt(mtt/this.grid.height);
mt+=mtt;
}
mb +=mbb;

}

var mtt = (l<divs.length-1) ? parseFloat(divs[l+1].style.marginTop) : 0;
mt += isNaN(mtt) ? 0 : mtt;
var all = (mt>0) ? h+mt+mb : h+mt+mb+gt;
var mts = parseFloat(divs[s].style.marginTop);
mts = isNaN(mts) ? 0 : mts;

if (!this.Iscontinue(divs,s,l)&&(mts==0)) {
all =all+ gt;
}

var sno = this.getrownoX(divs[s]);
if (this.Iscontinue(divs,s,l)&&(sno==0)) {

var all = all-gt; 
}

if (this.Iscontinue(divs,s,l)&&(mt>0)) {

all =all+ gt;

}

return all;

},



Iscontinue: function (divs,s,l) {
var mt =0;
for(var i=s; i<l+1; i++){ 
var mtt = parseFloat(divs[i].style.marginTop);
mt += isNaN(mtt) ? 0 : mtt;

}

return (mt>0) ? false : true;

},

getChildNodes: function() {
var e = document.getElementById(this.grid.id).childNodes;
var divs=[];
for(var i=0; i<e.length; i++){
        if (e[i].nodeType==1) 
            divs.push(e[i]);        
}
return divs;
},

getgrandChildNodes: function (){
var e = document.getElementById(this.grid.id);
var rowdivs = [],j=0;
var divcol = e.getElementsByTagName("div");
var l=divcol.length; 
for(var i=0;i<l; i++){
if (divcol[i].parentNode.parentNode==e) {

rowdivs[j] = divcol[i];
j=j+1;

}
}
return rowdivs;
},

getheader: function() {
if (this.grid.isheader==true) {
  
var divcols = this.getChildNodes();
var l=divcols.length; 

for(var i=0;i<l; i++){
this.header.push(divcols[i].getElementsByTagName("div")[0])
}
}
return this.header;
},

getcolumns:function() {
var elements = new Array();
var divcols = this.getChildNodes();
for (var i = 0; i < arguments.length; i++) {
		var colno = arguments[i];
		if (typeof colno == 'number'){
		    var divgrids = divcols[colno].getElementsByTagName("div");
		    var s = (this.grid.isheader==false) ? 0 : 1;
		    for (var j=s; j<divgrids.length; j++) {
		        elements.push(divgrids[j]);
		    }
		}

}
return elements;
},

getrows:function() {
var elements = new Array();
var divcols = this.getChildNodes();
var l = divcols.length;
for (var i = 0; i < arguments.length; i++) {
var rowno = arguments[i];
		if (typeof rowno == 'number'){
		   
		    for (var j = 0; j < l; j++) {
		        var divgrids = divcols[j].getElementsByTagName("div"); 
		         elements.push(divgrids[rowno]);        		    
		    }	
		
		}
}
return elements;

},

getrowno: function (elm) {

var divs = elm.parentNode.getElementsByTagName("div");
return getIndex(divs,elm);
 
},

getrownoX: function (elm) {

var h=0,mt =0;
var divs = elm.parentNode.getElementsByTagName("div");
var index = getIndex(divs,elm);

for (var i=0; i < index+1; i++) {
h += parseFloat(getstyle(divs[i],"height"));
var mtt = parseFloat(getstyle(divs[i],"margin-top"));
mt += isNaN(mtt) ? 0 : mtt;

}

return parseInt((h+mt)/parseFloat(this.grid.height))-1;

},

getcolno: function(elm) {
var div0 = this.getChildNodes();
return getIndex(div0,elm.parentNode);
},

getgrandChildNodesX:function() {
var grids=[];
var div0 = this.getChildNodes();
var divs = this.getgrandChildNodes();

for(var j=0; j<this.grid.rows; j++){
  for(var i=0; i<divs.length; i++){
      if (this.getrowno(divs[i])==j)   
         grids.push(divs[i]);
  }
}
return grids;
},

groupgrids:function(key) {

var grids=[];
var divs =(key=="X") ? this.getgrandChildNodesX() : (key=="Y") ? this.getgrandChildNodes() : (key!=null) ? key : null;
if (divs==null) return this.getgrandChildNodes();
var typ = arguments[1];
var handler = arguments[2];
for (var i = 3; i < arguments.length; i++) {
	var index = arguments[i];
	if (typeof(index) == 'string'){
		if (index.indexOf("-")>0) {		
		var s =parseInt(index.split("-")[0]);
		var l = parseInt(index.split("-")[1]);	   
			for(var j=s; j<l+1; j++){
			grids.push(divs[j]);
			//divs[j].onclick = clickevent;
			if (typ!=null)
			addEvent(divs[j],typ,handler);

			}			
		}
	}
	else if (typeof(index) == 'number') {
		grids.push(divs[index]);
		//divs[index].onclick = this.groupbindEvent.bind(this);
		//divs[index].onclick = clickevent;
		if (typ!=null)
		addEvent(divs[index],typ,handler);
	}
}


groupbindEvent = function() {

}

return grids;
}
,

bindEvent: function (typ, handler) {
//var divs = this.groupgrids();
var divs = this.getgrandChildNodes();
var l = divs.length;
for(var i=0; i<l; i++){
addEvent(divs[i],typ,handler);

}

},


setwidth:function(width) {
var totalwidth=0;
var width_new = width+this.grid.unit;
var div0 = this.getChildNodes();
for (var i = 1; i < arguments.length; i++) {
var colno = arguments[i];
div0[colno].style.width = width_new;
}
for (var i = 0; i < div0.length; i++) {
totalwidth+= parseFloat(div0[i].style.width);
}
this.grid.totalwidth = totalwidth;
document.getElementById(this.grid.id).style.width = this.grid.totalwidth+this.grid.unit;

},

setbackgroundcolor:function(divs,color) {

var l = divs.length;
for(var i=0; i<l; i++){ 
	divs[i].style.backgroundColor= color;
}

},

noBubbleDefault:function (e)
{
	if (e && e.stopPropagation) {
		e.stopPropagation();
		e.preventDefault();
		}
	else
		window.event.cancelBubble = true;	
        window.event.returnValue = false; // IE	
}



}

function addEvent ( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj["e"+type+fn] = fn;
    obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
    obj.attachEvent( "on"+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
}
	
function removeEvent ( obj, type, fn ) {
      if ( obj.detachEvent ) {
        obj.detachEvent( "on"+type, obj[type+fn] );
		    obj[type+fn] = null;
      } else
        obj.removeEventListener( type, fn, false );
}

Function.prototype.bind = function(obj) {
	
    var _method = this;
    return function() {
        return _method.apply(obj, arguments);
    };
    
} 

function socialbkmk() {
var u = location.href;
var t = document.title;
location.href = 'http://www.pagecolumn.com/social_bookmark2.htm?pgcoluu='+u+'&pgcoltt='+t;
}



