/*
  Base S1 modules library. Call before calling any other s1-modules libraries.
*/

// Base S1 Class. All custom methods to be held here
function S1() { }

S1.hasClass = function( target, cl )
{
	var reg = new RegExp( "(^| )"+cl+"( |$)" );
	return ( target && target.className && target.className.match( reg ) ) ?  true : false;
}
S1.addClass = function( target, cl )
{
   if ( ! this.hasClass( target, cl ) )
   {
       var old = '';
	   if ( target.className && target.className != '' ) { old = ' '+target.className }
	   target.className = cl+old;
   }
}
S1.removeClass = function( target, cl )
{
  if ( this.hasClass( target,cl ) )
  {
     var list = target.className.split( ' ' );
	 var nl = new Array;
	 for ( var x in list )
	 {
	   if ( list[x] != cl ) { nl[nl.length] = list[x] }
	 }
     target.className = nl.join( ' ');
  }
}
S1.swapClass = function( target, cl1, cl2 )
{
   this.removeClass( target, cl1 );
   this.addClass( target, cl2 );
}
S1.getElementsByClass = function(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null )
	node = document;
    if ( tag == null )
	tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    for (i = 0, j = 0; i < elsLen; i++) {
	if ( this.hasClass(els[i], searchClass) ) {
	    classElements[j] = els[i];
	    j++;
	}
    }
    return classElements;
}

S1.runRequestText = function ( url, textFunction )
{
    var xmlhttp = '';
    if ( window.ActiveXObject ) // if it's ie
    {
	xmlhttp  = new ActiveXObject("Microsoft.XMLHTTP");
	xmlhttp.onreadystatechange = S1.updatefunc( xmlhttp, textFunction );
    }
    else
    {
	if (window.XMLHttpRequest)
	{
	    xmlhttp  = new XMLHttpRequest(); 
	    xmlhttp.onload = S1.updatefunc( xmlhttp, textFunction );
	}
	else return; //
    }
    // Long URL convert to POST
    var params = null;
    if ( url.length > 2048 )
    {
	var l = url.split( '?' );
	url = l[0];
	params = l[1];
	xmlhttp.open( 'POST', url, true );
	xmlhttp.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' );
	xmlhttp.setRequestHeader( 'Content-length', params.length );
    }
    else
    {
	xmlhttp.open( 'GET', url, true );
    }
    xmlhttp.send( params );
}
S1.updatefunc = function ( xmlh, textFunction )
{
    var f = function ()
    {
        if( xmlh.readyState == 4 )
        {
            if ( xmlh.status == 200 )
            {
                textFunction( xmlh.responseText );
            }
            else
            {
                textFunction( '' );
            }
        }
    };
    return f;
}
S1.filler = function( target )
{
   var f = function( content ) 
   { 
       target.innerHTML = content;
   }
   return f;
}

