var GRID_ONLY;

// from: http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
function addEvent( obj, type, fn )
{
    if( obj.addEventListener )
        obj.addEventListener(type, fn, false);
    else 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]);
    }
}

function stopDefaultEvent( event )
{
    if( event )
    {
        if( event.preventDefault )
        {
            event.preventDefault();
            event.stopPropagation();
        }
        else
        {
            event.returnValue = false;
            event.cancelBubble = true;
        }
    }
}

function createCookie(name,value,days,path) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	if( path ) {
	   path = "/"
	}
	document.cookie = name+"="+value+expires+"; path=" + path;
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name,path) {
	createCookie(name,"",-1,path);
}

function setupQuizHover()
{
    var listing = document.getElementById("hubListing");
    if( listing )
    {
        var items = listing.getElementsByTagName("li");
        for( var i = 0; i < items.length; i++ )
        {
            if( items[i].className == "item" )
            {
                addEvent(items[i], "mouseover", function()
                {
                    this.className = "item selected";
                }
                        );

                addEvent(items[i], "mouseout", function()
                {
                    this.className = "item";
                }
                        );
            }
        }
    }
}

function swapViewType( newClass )
{
    var container = document.getElementById("hubContainer");

    if( container )
    {
        container.className = newClass;
    }

    var viewsNav = document.getElementById("viewsNav");
    if( viewsNav )
    {
        var viewItems = viewsNav.getElementsByTagName("a");
        if( viewItems.length >= 2 )
        {
            if( newClass == "grid" )
            {
                viewItems[0].className = "viewsGrid gridOn";
                viewItems[1].className = "viewsList";
            }
            else
            {
                viewItems[0].className = "viewsGrid";
                viewItems[1].className = "viewsList listOn";
            }
            
            if( newClass == "grid" ) {
                eraseCookie( "gridType", "./" );
            }
            else {
                createCookie( "gridType", newClass, null, "./" );
            }
        }
    }
}

function init()
{
    setupQuizHover();

    // add hub change event
    var viewsNav = document.getElementById("viewsNav");
    if( viewsNav )
    {
        var viewItems = viewsNav.getElementsByTagName("a");
        if( viewItems.length >= 2 )
        {
            addEvent(viewItems[0], "click", function( event )
            {
                stopDefaultEvent(event);
                swapViewType("grid");
            }
                    );
            addEvent(viewItems[1], "click", function( event )
            {
                stopDefaultEvent(event);
                swapViewType("list");
            }
                    );
        }
    }

    // setup default field for quiz search
    var form = document.getElementById("quizSearch");
    if( form )
    {
        var inputs = form.getElementsByTagName("input");
        for( var i = 0; i < inputs.length; i++ )
        {
            if( inputs[i].title != "" )
            {
                addInputDefaultHandlers(inputs[i]);
            }
        }
    }

    // make magnify glass submit form
    if( form )
    {
        var buttons = form.getElementsByTagName("a");
        for( var i = 0; i < buttons.length; i++ )
        {
            if( buttons[i].title == "Search" )
            {
                buttons[i].parentForm = form;
                addEvent(buttons[i], "click", function( event )
                {
                    stopDefaultEvent(event);
                    this.parentForm.submit();
                }
                        );
            }
        }
    }
    
    // make add admin submit form
    var adminForm = document.getElementById("adminForm");
    if( adminForm )
    {
        var buttons = adminForm.getElementsByTagName("a");
        for( var i = 0; i < buttons.length; i++ )
        {
            if( buttons[i].title == "Add" )
            {
                buttons[i].parentForm = adminForm;
                addEvent(buttons[i], "click", function( event )
                {
                    stopDefaultEvent(event);
                    this.parentForm.submit();
                }
                        );
            }
        }
    }
    
    // setup hub query string links
    /*var qs = getQueryStringArray();
    
    var links = document.getElementsByTagName( "a" );
    for( var i = 0; i < links.length; i++ ) {
        if( links[i].rel == "hubLink" ) {
            modifyHref( links[i], qs );    
        }
    }
    */
    // hub sorting dropdown
    var form = document.getElementById( "hubSortTimeframe" );
    if( form ) {
        if( form["sort"] ) {
            // change href
           /* for( var i = 0; i < form["sort"].options.length; i++ ) {
                 modifyHref( form["sort"].options[i], qs, true );
            }*/
            
            // add even to go on select
            addEvent( form["sort"], "change", function() {
                window.location = this.options[ this.selectedIndex ].value;
            } 
            );
        }
    }
    
    // setup cookie save for leaderboard links
    var nav = document.getElementById( "leaderboardNav" );
    if( nav ) 
    {
        var links = nav.getElementsByTagName( "a" );
        for( var i = 0; i < links.length; i++ )
        {  
            addEvent( links[i], "click", function( e ) {                
                // don't stop default... just set cookie
                var target = e.target ? e.target : e.srcElement;
                
                // find link type
                values = getKeyValueFromHref( target.href );
                var type = null;
                for( var a = 0; a < values.length; a++ )
                {
                    if( values[a][0] == "ltimeframe" )
                    {
                        type = values[a][1];
                    }
                }  
                                
                if( type ) 
                {
                    createCookie( "ltimeframe", type, null, "./" );
                    
                    // remove leaderboard from link
                    var qs = getQueryStringArray();   
                    target.href = "?ltimeframe="; // reset href
                    modifyHref( target, qs, false );                    
                }                  
            }
            );
        }
    }
     
    // default view type
    if( readCookie( "gridType" ) && GRID_ONLY != true )  {
        swapViewType( readCookie( "gridType" ) );
    }
    
    // add events for delete
    var container = document.getElementById( "hubListing" );
    if( container ) {
        var links = getElementsByClassName( container, "a", "deleteQuiz" );
        var buttonSet = getElementsByClassName( container, "div", "deleteConfirm" );
        var deleteCancel = getElementsByClassName( container, "a", "deleteCancel" );
        var deleteConfirmFinal = getElementsByClassName( container, "a", "deleteConfirmFinal" );
        
        for( var i = 0; i < links.length; i++ ) {
            links[i].buttonSet = buttonSet[i];
            addEvent( links[i], "click", function( e ) {
                stopDefaultEvent( e );
                this.buttonSet.style.display = "block";
            }
            );
            
            deleteCancel[i].buttonSet = buttonSet[i];
            addEvent( deleteCancel[i], "click", function(e) {
                stopDefaultEvent( e );
                this.buttonSet.style.display = "none";
            }
            );
            
            /*addEvent( deleteConfirmFinal[i], "click", function(e) {
                stopDefaultEvent( e );
                window.location = window.location + "?quiz-delete-id=" + this.href.split("?")[1].replace("/", "");
            }
            );*/

        }  
    }
    
    // add events for admin delete
    var container = document.getElementById( "adminListing" );
    if( container ) {
        var links = getElementsByClassName( container, "a", "deleteAdmin" );
        var buttonSet = getElementsByClassName( container, "div", "deleteConfirm" );
        var deleteCancel = getElementsByClassName( container, "a", "deleteCancel" );
        var deleteConfirmFinal = getElementsByClassName( container, "a", "deleteConfirmFinal" );
        
        for( var i = 0; i < links.length; i++ ) {
            links[i].buttonSet = buttonSet[i];
            addEvent( links[i], "click", function( e ) {
                stopDefaultEvent( e );
                this.buttonSet.style.display = "block";
            }
            );
            
            deleteCancel[i].buttonSet = buttonSet[i];
            addEvent( deleteCancel[i], "click", function(e) {
                stopDefaultEvent( e );
                this.buttonSet.style.display = "none";
            }
            );
        }  
    }
    
    // add event for profile upload
    var upload = document.getElementById( "profileUpload" );
    if( upload ) {
        quizFileUpload.setCallback(callSetImage);
        
        addEvent( upload, "click", function( e ) {
            stopDefaultEvent( e );
            quizFileUpload.show("size=132x132,crop=true,profile=" + PROFILE_SCREENNAME); 
        }
        );
    }
}

function callSetImage( url ) {    
    var profileImage = document.getElementById( "profileImage" );
    if( profileImage ) {
        profileImage.src = url;
    }
    
    var deleteButton = document.getElementById( "profileImageDelete" ) ;
    if( deleteButton ) {
        deleteButton.style.display = "block";
    }
}

function modifyHref( link, qsIn, isOption ) {
    // make a local copy of the query string
    var qs = clone( qsIn );
    
    // support for a tags and option tags
    var href = "";
    if( !isOption ) {
        href = link.href;
    }
    else {
        href = link.value;
    }
    
    // get key/value pair from tag
    var keyValue = getKeyValueFromHref( href );
    for( var a = 0; a < keyValue.length; a++ ) {
        var found = -1;
        for( var b = 0; b < qs.length; b++ ) {
            if( qs[b][0] == keyValue[a][0] ) {
                qs[b][1] = keyValue[a][1];
                found = b;
            }
        }
        
        // if the key isn't in qs, add it
        if( found == -1 && keyValue[a][1] != "" ) {
            qs.push( keyValue[a] );
        }
        
        // if found, and it's empty, remove completely
        if( found >= 0 && keyValue[a][1] == "" ) {
            qs.splice( found, 1 );
        }
    
    }
    

    
    // recreate qs
    var finalHref = "?";
    for( var i = 0; i < qs.length; i++ ) {
        finalHref += qs[i][0] + (qs[i][1] != null ? ("=" + qs[i][1]) : "");
        if( i != (qs.length-1) ) {
            finalHref += "&"
        }
    }
    
    if( !isOption ) {
        link.href = finalHref;
    }
    else {
        link.value = finalHref;
    }
}

function getKeyValueFromHref( href ) {
    var retVal = Array();
    var vars = href.split( "?" );
    if( vars.length > 1 ) {
        var values = vars[1].split( "&" );
        for( var i = 0; i < values.length; i++ ) {
            retVal.push( values[i].split( "=" ) );
        }
    }
    
    return retVal;
}

function getQueryStringArray() {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    var qs = Array();
    for( var i = 0; i < vars.length; i++ )
    {
        var pair = vars[i].split("=");
        if( pair[0] != "" ) {
            qs.push( pair );
        }
    }
    
    return qs;
}

function clone(obj){
    if(obj == null || typeof(obj) != 'object')
        return obj;

    var temp = new obj.constructor(); // changed (twice)
    for(var key in obj)
        temp[key] = clone(obj[key]);

    return temp;
}

function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

function addInputDefaultHandlers( input )
{
    // setup default
    if( input.value.replace(/^\s+|\s+$/g, "") == "" )
    {
        input.value = input.title;
    }

    // onfocus, remove default value
    addEvent(input, "focus", function()
    {
        if( this.value == this.title )
        {
            this.value = "";
        }
    }
            );

    // onblur, put back default value
    addEvent(input, "blur", function()
    {
        if( this.value.replace(/^\s+|\s+$/g, "") == "" )
        {
            this.value = this.title;
        }
    }
            );
}

//from: http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}

init();
