
var mem
function load_functions( ctl ) {
	update_css() ;
	var anchor_list = document.getElementsByTagName("a")	
	var index
	for( index = 0 ; index < anchor_list.length ; ++index )	{
		var button = anchor_list[index]
		button.onmouseover = highlight
		button.onmouseout = normal
		button.onmousedown = navigate
		button.onclick = navigate
		if( button.getAttribute("id") == "submit") {
			if ( ctl == 0 ) 
				button.onclick = _submit
			else
				button.onclick = submit_form
		}
	}
	var select_nodes = document.getElementsByTagName("select")	
	for( var i = 0 ; i < select_nodes.length ; ++i )
		select_nodes[i].onchange = selection
				
	var input_list = document.getElementsByTagName("input")
	for( index = 0 ; index < input_list.length ; ++index )	{
		var rin = input_list[index]
		if( ctl == 2 )
			rin.onkeypress = update		
		else if ( ctl == 0 )
			rin.onkeypress = on_enter
	}

}
function update_css ( ) {
	var app = document . getElementById( "app" )
	var adv = document . getElementById( "adv" )
	var main = document . getElementById( "main" )
	main . style . height = app . clientHeight + 20 + "px"	
	if(adv)
		adv . style . height = app . clientHeight + 60 + "px"
	// alert( app . clientHeight + " " + adv . clientHeight )
}

function load_objects( ) {
	load_functions( 2 )
	mem = new link_memory()
	mem . p . onmousedown = create_link
	mem . p . onmouseup = store_link
}
function load_data ( u , s ) {
	load_objects( )
	mem . user = u
	mem . category = s

}
function update( event ) {
	if ( window . event ) 
		event = window . event
	if (event.keyCode == 13)
		add_link ( this . value )
}

function difference( x , y ) {
	return x . offset - y . offset 
}

function update_display ( ) {

	var plist = mem . p . getElementsByTagName("p")
	var cat = ""
	for( var j = 0 ; j < plist . length ; ++ j ) 
		cat += plist[ j ] . innerHTML

	mem . obj . sort( difference )
	
	var i = 0 , init = 0
	var subs = cat . substring ( init , mem . obj [ i ] . offset )
	var t = document . createTextNode( subs )

	var enter = document . createElement( "p" )
	enter . appendChild( t )
	
	for ( i = 0 ; i < mem . index ; ++i ) {
		var link_text = cat . substr ( mem . obj [ i ] . offset , mem . obj [ i ] . size )
		var input = document . createElement( "a" )
		t = document . createTextNode( link_text )
		input . setAttribute( "href" , mem . obj [ i ] . url )
		input . appendChild( t )
		enter . appendChild( input )
		
		init = mem . obj[ i ] . offset + mem . obj [ i ] . size
		
		if ( i == mem . index - 1 )
			subs = cat . substring ( init , cat . length )
		else
			subs = cat . substring ( init , mem . obj [ i + 1 ] . offset )
		t = document . createTextNode( subs )
		enter . appendChild( t )

	}
	if( mem . index == 1 )
		mem . p . nextSibling . appendChild( enter )
	else
		mem . p . nextSibling . replaceChild( enter , mem . p . nextSibling . lastChild )

}

function link_struct( x , y) {
	this . offset = x
	this . size = y
	this . url = ""
}

function link_memory(  ) {
	this . index = 0
	this . control = 0
	this . user = 0
	this . category = 0
	this . p = document . getElementById("blogging")
	this . obj = new Array()
}

function add_link ( url ) {
// alert( url )
	mem . obj [ mem . index ] . url  = url
	++mem . index
	update_display()
}

function store_link( event ) {
	var offset = 0 , len = 0
	if( window . getSelection ) {
		var s = window.getSelection()
		var sel = s . getRangeAt( 0 ) . cloneRange()
		
		if ( sel . endContainer != sel . startContainer  )
			return alert( "Selection must be contained within a single paragraph!" )

		offset = s . anchorOffset
		len = s . focusOffset - offset

		if( len < 0 ) {
			len = - len
			offset = s . anchorOffset - len
		}
		sel . setStart ( mem . p . firstChild , 0 )
		s = sel . toString()
		offset = s . length - len
				
	}
	// else if ( document . getSelection )
	//	sel = document.getSelection()
	else if ( document . selection ) {
		var s = document.selection.createRange()	
		var sel = s . text
		len = sel . length

		var clone = s . duplicate()		
		s . moveToElementText( mem . p )
		clone . setEndPoint( "StartToStart" , s )
			
		offset = clone . text
		offset = offset . length - len
	}

	var is_new = check_range( offset , len )
	
	if( ! is_new && mem . index )
		return alert( "Selections must not overlap." )
		
	var input = document . createElement( "input" )
	input . setAttribute( "name" , "v" + mem . index )
	
	var _in = document . createElement( "input" )
	_in . setAttribute( "type" , "hidden" )
	_in . setAttribute( "name" , "off_" + mem . index )
	_in . setAttribute( "value" , offset )

	var _in2 = document . createElement( "input" )
	_in2 . setAttribute( "type" , "hidden" )
	_in2 . setAttribute( "name" , "sz_" + mem . index )
	_in2 . setAttribute( "value" , len )

	var enter = mem . p . nextSibling
	if( ! mem . control ) {		
		// enter . setAttribute( "method" , "post" ) ;
		// enter . setAttribute( "action" , "links.cgi" ) ;
		var user = document . createElement( "input" )
		user . setAttribute( "type" , "hidden" )
		user . setAttribute( "name" , "name" )
		user . setAttribute( "value" , mem . user )
//		var pass = document . createElement( "input" )
//		pass . setAttribute( "type" , "hidden" )
//		pass . setAttribute( "name" , "session_id" )
//		pass . setAttribute( "value" , mem . session )


		var p = document . createElement( "p" )
		var t = document . createTextNode( "Please enter the url to link:" )
		p . appendChild( t )
		enter . appendChild( p )
		enter . appendChild( user )
//		enter . appendChild( pass )

		enter . appendChild( _in )
		enter . appendChild( _in2 )
		enter . appendChild( input )

		mem . p . parentNode . appendChild( enter )
		++ mem . control
	}
	else {
		enter . insertBefore( _in , mem . p . nextSibling . lastChild )	
		enter . insertBefore( _in2 , mem . p . nextSibling . lastChild )	
		enter . insertBefore( input , mem . p . nextSibling . lastChild )	
	}
	// alert( offset + " , " + len )
	

	mem . obj [ mem . index ] = new link_struct( offset , len )
	
	load_functions( 2 )
}

function check_range( start , sz ) {
	var done = false , new_range = false
	var j = 0
	while ( j < mem . index && ! done  ) {
		var _obj = mem . obj[ j ]
		// alert( _obj . offset )
		if ( start >= _obj . offset && start <= _obj . offset + _obj . size )
			done = true
		else if ( start + sz >= _obj . offset && start + sz <= _obj . offset + _obj . size )
			done = true
		else if ( start <= _obj . offset && start + sz >= _obj . offset + _obj . size )
			done = true
		else
			new_range = true
		++j
	}
	return new_range
}

function create_link( event ) {
}
function submit_form() {

//	alert( "index = " + mem . index )
//	var g = docmument . createElement("input")
	
	if ( ! mem . index ) {
//		alert( mem . user )
		var user = document . createElement( "input" )
		user . setAttribute( "type" , "hidden" )
		user . setAttribute( "name" , "name" )
		user . setAttribute( "value" , mem . user )
		
		var enter = mem . p . nextSibling
		enter . appendChild( user )

		var set = document . getElementsByName("create")
		set [ 0 ] . setAttribute("value" , "no_links")

	}

	var form = document . createElement( "form" )
	form . setAttribute ( "method" , "post" ) 
	form . setAttribute ( "action" , "input.cgi" ) 
	
	var f = mem . p . nextSibling . cloneNode( true )
	form . appendChild( f )
	
	mem . p . parentNode . replaceChild( form , mem . p . nextSibling )
	
	document . forms [ 0 ] . submit()

}
function _submit () {
	document . forms [ 0 ] . submit()
}
function on_enter(event) {
	if (event.which == 13)
		submit_form()
}
function selection( event ) {
	if ( this . getAttribute( "class" ) == "navigate" )
		window.location.assign( this.value )
	else if ( this . getAttribute( "class" ) == "edit" )
		document . forms [ 0 ] . submit()
}

function highlight( event ) {
	if ( window . event ) 
		event = window . event
	var img_src = "/buttons/" 
	if( this.getAttribute("id") )
                img_src += this.getAttribute("id") + "_hover.gif"
	else
		img_src += this . getAttribute("title") + "_hover.gif"
	this.getElementsByTagName("img")[0].setAttribute("src" , img_src )		
}
function normal(event) {
	if ( window . event ) 
		event = window . event
	var img_src = "/buttons/" 
        if( this.getAttribute("id") )
                img_src += this.getAttribute("id") + ".gif"
        else
                img_src += this . getAttribute("title") + ".gif"


	this.getElementsByTagName("img")[0].setAttribute("src" , img_src )		
}
function navigate(event) {
	if ( window . event ) 
		event = window . event
	       var img_src = "/buttons/" 
        if( this.getAttribute("id") )
                img_src += this.getAttribute("id") + "_click.gif"
        else
                img_src += this . getAttribute("title") + "_click.gif"

	this.getElementsByTagName("img")[0].setAttribute("src" , img_src )		
//	window . setTimeout( next , 2000 )
}
function next( event ) {
}
