﻿var AXEF = {};

AXEF.namespace = function() {
	var a=arguments, o=null, i, j, d;
	for (i=0; i<a.length; ++i) {
		d=a[i].split(".");
		o=AXEF;

		for (j=(d[0] == "AXEF") ? 1 : 0; j<d.length; ++j) {
			o[d[j]]=o[d[j]] || {};
			o=o[d[j]];
		}
	}

	return o;
};

AXEF.namespace("Widgets");
AXEF.namespace("util");

AXEF.Widgets.syncInput = function(e){

	var nTarget = Event.element(e);	
	
	var vContent = "" + nTarget.value;
		vContent = vContent.replace(/\s/g, "\n");
	
	var vHash = AXEF.util.toHash( vContent.split("\n")) ;

	var selection_root = AXEF.getAncestorWithClassName( nTarget, "axefSelectionList" );

    if( selection_root ){
	    var nList = selection_root.getElementsByClassName( "axefItem" );
	    for( var i=0; i < nList.length; i++ ){
		    var n = nList[i];
		    if( vHash[ AXEF.Widgets.getValue(n).trim().toLowerCase() ] ){
			    AXEF.Widgets.setActive(n);
		    } else {
			    AXEF.Widgets.setInactive(n);
		    }
	    }
	 }
}

AXEF.util.toHash = function( array, fn ){

	var retVal = new Object();

	if( fn ) array = fn( array );
	
	for( var i=0; i < array.length; i++ ){
		retVal[ array[i].trim().toLowerCase() ] = array[i].trim();
	}

	return retVal;
}

AXEF.Widgets.clickHandler = function(e) {	
	var nTarget = Event.element(e);	
    var nTarget = AXEF.getAncestorWithClassName( nTarget, "axefItem" );

	if( nTarget ) {
		var delimitedList = nTarget.parentNode.parentNode.getElementsByClassName( "axefSelectedItems" );			
		AXEF.Widgets.toggleItem( delimitedList[0], nTarget );
	}
}

AXEF.Widgets.mouseoverHandler = function( e ) {

	var nTarget = Event.element(e);	
    var nTarget = AXEF.getAncestorWithClassName( nTarget, "axefItem" );

	if( nTarget ) {
	    var oldStyle = nTarget.getStyle("border");
	    if( !oldStyle ) oldStyle = "1px solid white";
	    nTarget.setAttribute( "oldStyle", oldStyle );
		nTarget.setStyle( { 'border': "1px solid darkblue"});
	}
}

AXEF.Widgets.mouseoutHandler = function( e ) {

	var nTarget = Event.element(e);	
    var nTarget = AXEF.getAncestorWithClassName( nTarget, "axefItem" );

	if( nTarget ) {
	    nTarget.setStyle( { "border": nTarget.getAttribute("oldStyle") } );

	}
}

AXEF.Widgets.mouseoverHandler2 = function( e ) {

	var nTarget = Event.element(e);	
    var nTarget = AXEF.getAncestorWithClassName( nTarget, "axefItem" );

	if( nTarget ) {
        
        var value = parseInt( nTarget.getAttribute("value") );

        var selection_root = AXEF.getAncestorWithClassName( nTarget, "axefSingleSelection" );
        var list = selection_root.getElementsByClassName( "axefItem" );
        
        switch( value ){
            case -1:
                _set( list[0] );
                for( var i=1; i< list.length; i++ ){
                    _unset( list[i] );
                }
                break;
            default:
                _unset( list[0] );
                for( var i=1; i< list.length; i++ ){
                    if( i <= ( value + 1 ) ) _set( list[i] );
                    else _unset( list[i] );
                }
                if( value > 0 ) _unset( list[1] );
                break;
        }
        var selected_value = selection_root.getElementsByClassName( "axefSelectedValue" )[0];
        selected_value.value = value;
	}
	
	function _set( item ){
        window.status += item.getAttribute("value") + ",";
	    switch( parseInt(item.getAttribute("value")) ){
	        case -1:
	            item.setStyle({'color':'blue'});
		        break;
	        case 0:
	            item.setStyle({'color':'red'});
    	        break;
	        default:
	            item.update('★');
	            item.removeClassName("axefUnselected");
	            item.addClassName("axefSelected");
	            break;
	    }
	}
	
	function _unset( item ){
        window.status += "[" + item.getAttribute("value") + "],";
	    switch( parseInt( item.getAttribute("value") ) ){
	        case -1:
	            item.setStyle({'color':'#a0a0a0'});
		        break;
	        case 0:
	            item.setStyle({'color':'#a0a0a0'});
    	        break;
	        default:
	            item.update('☆');
	            item.removeClassName("axefSelected");
	            item.addClassName("axefUnselected");
	            break;
	    }
	}
}

AXEF.Widgets.toggleItem = function( delimitedList, item ){

  var tmp = delimitedList.value.replace(/\s/g, " ");
  var list = tmp.split(" ");
  
  var found = false;
  var ptr = 0;
  
  for( ptr = 0; ptr < list.length; ptr ++ ){
	var n = list[ptr].trim();
    
	if( n == AXEF.Widgets.getValue(item).trim() ){
		found = true;
		list.splice( ptr, 1 );
		ptr--;
	}
  }
  
  if( item.hasClassName("axefSelected") ){
	AXEF.Widgets.setInactive(item);
  } else {
	AXEF.Widgets.setActive(item);
	if( !found ) list.push( AXEF.Widgets.getValue(item).trim() );
  }

  delimitedList.value = list.toString().replace(/,/g," ").trim();
}

AXEF.Widgets.setActive = function( e ){
    e.addClassName( "axefSelected" );
    e.removeClassName( "axefUnselected" );
}

AXEF.Widgets.setInactive = function( e ){
    e.addClassName( "axefUnselected" );
    e.removeClassName( "axefSelected" );
//       e.setStyle( { "background-color": "transparent", "color": "#202080" } );
}

AXEF.Widgets.getValue = function( node ){

    var value = node.getAttribute("axefValue");
    
    if( value ){
        return value;
    } else {
	    var hasInnerText  = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false;

	    if(hasInnerText) 
		    return node.innerText;
	    else
		    return node.textContent;
    }
}

AXEF.getAncestorWithClassName = function( element, className ){

    while( element.parentNode && element.parentNode.hasClassName ){
        if( element.hasClassName( className ) ) return element;
        element = element.parentNode;
    }
    return null;

}
