Event.observe(document, "dom:loaded", setupSideNav); //Sets up side nav accordion
Event.observe(document, "dom:loaded", setupAccordions); //Sets up random accordions
Event.observe(document, "dom:loaded", setupAccountTabs); //Sets up account tabs on account page
Event.observe(document, "dom:loaded", setupSocialNetworkingOptions); //Sets up options for the friends, fans, fanclubs account pages
Event.observe(document, "dom:loaded", setupScrollables); //Sets up 'scrollable' divs
Event.observe(document, "dom:loaded", setupSearchBox);
Event.observe(document, "dom:loaded", setupCharCount);
Event.observe(document, "dom:loaded", setupFlagLinks);
Event.observe(document, "dom:loaded", setupProfileThumbToFlash);
Event.observe(document, "dom:loaded", setBlogPagination);
Event.observe(document, "dom:loaded", setupMyContestsModule);

function setupMyContestsModule() {
	var cc = $("closed_contests");
	var ac = $("active_contests");
	var ct = $$("#contest_tabs li");
	var tablinks = $$("#contest_tabs a");

	if(!cc || !ac) return;
	
	
	tablinks.each(function(a) {
		a.onclick = function() { return false };
	});
	
	ct[0].observe('click', function() {
		this.next().removeClassName('current');
		this.addClassName('current');
							
		cc.setStyle({display:'none'});
		ac.setStyle({display:'block'});
	});				
	ct[1].observe('click', function() {
		this.previous().removeClassName('current');
		this.addClassName('current');
							
		ac.setStyle({display:'none'});
		cc.setStyle({display:'block'});
	});
	cc.setStyle({display:'none'});
	
	var ac_page = ac.select('.pagination')[0];
	var cc_page = cc.select('.pagination')[0];
	
	var fullURL = window.location;
	fullURL = fullURL.toString();
	var url = fullURL.split('?')[0];
	
	if(ac_page) {
		var pages = ac_page.select('a[rel^=page]');
		var current = ac_page.select('span')[0];
		var next = ac_page.select('a[rel=next]');
		var totalPages = pages.length + 1;
		if(next.length) totalPages += 1;
		
		ac_page.update('');
		ac_page.insert(renderPagination(current.innerHTML, totalPages, 2, url + '?active_page=', myCurrentContestsRequest));
	}
	if(cc_page) {
		var pages = cc_page.select('a[rel^=page]');
		var current = cc_page.select('span')[0];
		var next = cc_page.select('a[rel=next]');
		var totalPages = pages.length + 1;
		if(next.length) totalPages += 1;
		cc_page.update('');
		cc_page.insert(renderPagination(current.innerHTML, totalPages, 2, url + '?past_page=', myPastContestsRequest));
	}
} 

function myPastContestsRequest(start) {
	var postData = '';
	postData += '<InstantFame format="json"><UserContestsRequest>';
	postData += '<user_id>'+USER_ID+'</user_id>';
	postData += '<start>'+start+'</start>';
	postData += '<number>'+MY_CONTESTS_NUM+'</number>';
	postData += '<state>past</state>';
	postData += '</UserContestsRequest></InstantFame>';
	new Ajax.Request('/data/interface.php', {
		method: 'post',
		postBody: postData,
		onSuccess : function(transport) {
			var fullURL = window.location;
			fullURL = fullURL.toString();
			var url = fullURL.split('?')[0];

			var cc = $("closed_contests");
			var cc_page = cc.select('.pagination')[0];
			
			var totalPages = Math.ceil(transport.responseJSON.total / MY_CONTESTS_NUM);
			var range = 2;
			start = start / MY_CONTESTS_NUM + 1;
			
			renderContestsModule(cc, transport.responseJSON);
			var ret = renderPagination(start, totalPages, range, url + '?past_page=', myPastContestsRequest);
			cc_page.update('');	
			cc_page.insert(ret);
		}
	});
}

function myCurrentContestsRequest(start) {
	var postData = '';
	postData += '<InstantFame format="json"><UserContestsRequest>';
	postData += '<user_id>'+USER_ID+'</user_id>';
	postData += '<start>'+start+'</start>';
	postData += '<number>'+MY_CONTESTS_NUM+'</number>';
	postData += '<state>current</state>';
	postData += '</UserContestsRequest></InstantFame>';
	
	new Ajax.Request('/data/interface.php', {
		method: 'post',
		postBody: postData,
		onSuccess : function(transport) {
			var fullURL = window.location;
			fullURL = fullURL.toString();
			var url = fullURL.split('?')[0];

			var ac = $("active_contests");
			var ac_page = ac.select('.pagination')[0];
			
			var totalPages = Math.ceil(transport.responseJSON.total / MY_CONTESTS_NUM);
			var range = 2;
			start = start / MY_CONTESTS_NUM + 1;
			
			renderContestsModule(ac, transport.responseJSON);
			var ret = renderPagination(start, totalPages, range, url + '?active_page=', myCurrentContestsRequest);
			ac_page.update('');	
			ac_page.insert(ret);
		}
	});
}

function renderContestsModule(elem, json) {
	var rows = elem.select('.mod_row');	
	rows.each(function(row) { row.remove(); });
	
	var ps = elem.select('p');
	ps.each(function(p) { p.remove(); });
	
	var contests = json.contests;
	
	
	for(var i = 0; i < contests.length; i++) {
		var row = new Element('div');
		row.addClassName('mod_row');
		if(i%2!=0) row.addClassName('alt');
		
		var html = '';
		
		html = 	'<a href="/contests/general/'+contests[i].contest_id+'?cid='+
				    contests[i].content_id+'"><img src="'+contests[i].thumbnail+'" class="thumb"></a>' +
				'<div class="contest_info">' +
				'<h5><a href="/contests/general/'+contests[i].contest_id+'?cid='+
				    contests[i].content_id+'">'+contests[i].title+'</a></h5>' +
				'<dl>' +						
				'<dt>Closing in:</dt> ' +
				'<dd>'+contests[i].closing+'</dd> ' +
				'<dt>National Rank:</dt> ' +
				'<dd>'+contests[i].rank+'</dd> ' +
				//'<dt>Local Rank:</dt> ' +
				//'<dd>N/A</dd> ' +
				'</dl></div>';
		
		row.insert(html);
				
		row.insert('<p><a href="/contests/general/'+contests[i].contest_id+'?cid='+
				    contests[i].content_id+'" class="btn">Vote For me now!</a></p>');
						
		elem.insert({top: row});
	}
}

function renderPagination(currentPage, totalPages, range, url, clickEvent) {
	if(totalPages <= 1) return false;
	
	var s = Math.min(currentPage-range, totalPages-range*2);
	s = s<1?1:s;
	var end = Math.min(s+range*2, totalPages);
	var container = new Element('div');
	if(s > 1) {
		var a = new Element('a');
		a.insert('&laquo;');
		a.writeAttribute('href', url + (currentPage - 1));
		a.onclick = function() { return false; };
		
		a.observe('click', function(currentPage) { clickEvent(currentPage); }.bind(a, (currentPage-2) * MY_CONTESTS_NUM) );           
		container.insert(a);
	}
	for(var i = s; i <= end; i++) {
		if(i == currentPage) {
			container.insert('<span>'+i+'</span>' + '&nbsp;');
		} else {
			var a = new Element('a');
			a.insert(i);
			
			a.writeAttribute('href', url + i);
			a.onclick = function() { return false; };
							
			a.observe('click', function(i) { clickEvent(i); }.bind(a, (i-1) * MY_CONTESTS_NUM) );           
			container.insert(a);
			container.insert('&nbsp;');
		}
	}
	if(end < totalPages) {
		var a = new Element('a');
		a.insert('&raquo;');
		a.writeAttribute('href', url + (currentPage + 1));
		a.onclick = function() { return false; };
		
		a.observe('click', function(currentPage) { clickEvent(currentPage); }.bind(a, currentPage*MY_CONTESTS_NUM) );           
		container.insert(a);
	}
	return container;
}

		
function setBlogPagination() {   
	var pages = $$('#blogpages a');			 
	for(var i = 0; i < pages.length; i++) {
		var info = pages[i].readAttribute('rel');
		info = info.split('-');
		var user_id = info[1];
		var blog_id = info[2];
		
		pages[i].onclick = function() { return false; };
		pages[i].observe('click', function(start) {
			loadNewBlog(start, user_id);
		}.bind(pages[i], blog_id-1));
	}
}

function loadNewBlog(start, user_id) {
	var post = '<InstantFame format="json"><UserBlogRequest>';
	post += '<user_id>'+user_id+'</user_id>';
	post += '<start>'+start+'</start>';
	post += '<number>1</number>';
	post += '<sort_by>newest</sort_by>';
	post += '</UserBlogRequest></InstantFame>';
	new Ajax.Request('/data/interface.php', {
		method: 'post',
		postBody: post,
		onSuccess: function(transport) {
			var blog = transport.responseJSON;
			var title = blog.blogs.entry[0].title;
			var created = blog.blogs.entry[0].created;
			var desc = blog.blogs.entry[0].description;
			var content_id = blog.blogs.entry[0].content_id;
			var domTitle = $('blogtitle');
			var domPosted = $('blogdate');
			var domText = $('blogtext');
			var domFlag = $('blogflag');
			var domWrap = domTitle.ancestors()[0];
			var domMod = domWrap.ancestors()[0];
			var pagination = $('blogpages');
			var comments = $('blogcomments');
			
			domTitle.update(title);
			domText.update(desc);
			domPosted.update('posted ' + created);
			domFlag.writeAttribute('rel','content-'+content_id);
			domFlag.show();
			domMod.setStyle({height:domWrap.getHeight()+'px'});								
			
			var blog_page = start+1;
			var totalpages = blog.total;
			var s = Math.min(blog_page - 2, totalpages-4);
			s = s<1?1:s;
			var end = Math.min(s+4, totalpages);
						
			comments.innerHTML = '<a href="/profile/blog_comments.php?profile_id='+user_id+
								'&blog_id='+content_id+'&from=profile">Post a comment&raquo;</a>';

			
			var html='';
			
			if(s>1) {
				html += '<a href="/profile/'+user_id+'/?blog_page='+(blog_page-1)+'#blog" rel="blog-'
				+user_id+'-'+(blog_page-1)+'">&laquo;</a> ';
			}
			for(var i=s;i<=end;i++) {
				if(i==blog_page&&s!=end) {
					html += i+' ';
				} else if(s!=end) {
					html += '<a href="/profile/'+user_id+'/?blog_page='+i+'#blog" rel="blog-'+user_id+'-'+i+'">'+i+'</a> ';
				}
			}
			if(end<totalpages) {
				html += '<a href="/profile/'+user_id+'/?blog_page='+(blog_page+1)+'#blog" rel="blog-'
				+user_id+'-'+(blog_page+1)+'">&raquo;</a> ';
			}
			pagination.innerHTML = html;
			setBlogPagination();
		}
	});
}

function getFlashMovie(movieName) {
	var isIE = navigator.appName.indexOf("Microsoft") != -1;
	return (isIE) ? window[movieName] : document[movieName];
}

function setupProfileThumbToFlash() {
	var profileThumb = $('profileThumb');
	
	if(profileThumb) {
		profileThumb.setStyle({cursor:'pointer'});
		profileThumb.observe('click', function() {
			getFlashMovie("mediaPlayer").resetProfileImage();
		});
	}
}


var _FLAGLINKS = new Array();
function destroyFlagLinks() {
	for(var i = 0; i < _FLAGLINKS.length; i++) {
		var obj = _FLAGLINKS.obj;
		var func = _FLAGLINKS.func;
		obj.stopObserving('click', flagClick);
	}
}

function setupFlagLinks() {
	var flags = $$('.flagMe');
	
	for(var i = 0; i < flags.length; i++) {
		var func = flagClick.bind(flags[i]);
		flags[i].onclick = function() { return false };
		flags[i].observe('click', func);
		_FLAGLINKS.push({obj:flags[i], func:func});
	}
}

function flagClick() {
	var rel = this.readAttribute('rel');
	var parts = rel.split('-');
	var content_id = parts.pop();
	
    var post = '<InstantFame format="json"><FlagContentRequest>';
    post += '<content_id>'+content_id+'</content_id>';
    post += '</FlagContentRequest></InstantFame>';
	
    new Ajax.Request('/data/interface.php', {
        method: 'post',
        postBody: post,
        onSuccess: function(transport) {
            this.hide();
			var thx = new Element('span');
			thx.addClassName('flagThanks');
			thx.insert('Thanks for contributing!');
			this.ancestors()[0].insert(thx);
			
			if(typeof Effect !="undefined") {
				new Effect.Fade(thx, {duration:1,delay:1, afterFinish:function() { this.remove() }.bind(thx) });
			}
        }.bind(this)
    });
}


function calcCharsLeft(field) {
    if(!field.hasClassName('charcount')) return;
    var label = field.previous().innerHTML;
    var max = field.readAttribute('maxlength');
    var val = field.value;
    var c = val.length;

    field.previous().innerHTML = label.replace(/(\([\-0-9\/]+\))?:/," ("+Math.max(max-c,0)+"/"+max+"):");
    return max-c;
}

function setupCharCount() {
    var textFields = $$("input.charcount", "textarea.charcount");
    for(var i = 0; i < textFields.length; i++) {
        var tn = textFields[i].tagName.toString();
        textFields[i].observe('keydown', function() { calcCharsLeft(this); } );
        textFields[i].observe('keyup', function() {
            var remaining = calcCharsLeft(this);
            if(remaining < 0) { 
                this.value = this.value.substring(0, this.readAttribute('maxlength'));
                calcCharsLeft(this);
            }
        });
        if(!textFields[i].hasClassName('unused')) calcCharsLeft(textFields[i]);
    } 
}

function loadBio(user_id, contest_id) {
	var post = '<InstantFame format="json"><UserBioRequest>';
    post += '<user_id>'+user_id+'</user_id>';
    post += '<contest_id>'+contest_id+'</contest_id>';
    post += '</UserBioRequest></InstantFame>';
	
	new Ajax.Request('/data/interface.php', {
        method: 'post',
        postBody: post,
        onSuccess: function(transport) {
            var json = transport.responseJSON;
            var bio = $("now_playing");
            if(bio) {
				var titleDiv = Element('div');
				titleDiv.addClassName('hdr_title');
				titleDiv.addClassName(json.title_text2);
				titleDiv.insert(json.title_text);
				
				var h2 = Element('h2');
				h2.addClassName(json.header);
				h2.insert(titleDiv);

                var img = Element("img");
                img.writeAttribute("src", "http://images.if.net/uploads/thumbs/"+json.thumbnail);
                img.addClassName("thumb");
                var h4 = Element("h4");
                h4.insert(json.displayName);
                var h5 = Element("h5");
                h5.insert(json.location);
                var p = Element("p");
                //p.insert(json.profile);

				var div3 = Element('div');
				div3.addClassName('contestWinner');
				div3.addClassName('bio');

                div3.insert(img);
                div3.insert(h4);
                div3.insert(h5);
                div3.insert(p);
				div3.insert('<p><a href="/profile/'+user_id+'">View Profile</a></p>'); 
				
				var div2 = Element('div');
				div2.addClassName('wrap');
				div2.insert(div3);
				
				var div1 = Element('div');
				div1.addClassName('boo');
				div1.insert(div2);
				
                bio.childElements().each(function(ch) { ch.remove(); } );
				bio.insert(h2);
				bio.insert(div1);
	        }
        }
    });

}

function setupSocialNetworkingOptions() {
    var sortby = $('sortby');
    var rem = $('btn_removefriends');
    var add = $('btn_makefriends');

    if(sortby) {
        sortby.observe('change', function() {
            net = $('hdnType').readAttribute('value');
            window.location = 'edit.php?page=network&net='+net+'&sortby=' + this.value;
        });
    }
    
    if(rem) {
        rem.observe('click', function() {
            var ret = confirm("Are you sure you want to remove these people from your network?");
            if(ret) $('hdnAction').writeAttribute('value','remove');
            return ret;
        });
    }
    if(add) add.observe('click', function() { 
		$('hdnType').writeAttribute('value','friends'); 
		$('hdnAction').writeAttribute('value','add'); 
	});
    
    var rembtns = $$('.ico_remove');
    for(var i = 0; i < rembtns.length; i++) {
        rembtns[i].onclick = function() {
            var nm = this.readAttribute('rel');
            var dn = nm.split('-')[1];
            var action = nl.split('-')[0];
            if(action=='remove') return confirm("You're about to remove "+dn+" from your network. Are you sure?");
        };
    }
}

function setupSearchBox() {
    var ts = $$(".s_fields label");

    for(var i = 0; i < ts.length; i++) {
        ts[i].observe('click', function() {
            var labels = this.ancestors()[0].select('label');
            for(var i = 0; i < labels.length; i++) if(labels[i].hasClassName('selected')) labels[i].removeClassName('selected');
            this.addClassName('selected');
        });
    }
    
    var ss = $$("input[name='q']");
  
    for(var i = 0; i < ss.length; i++) {
        ss[i].observe('click', function() {
            if(this.readAttribute('value')=="Refine your search from left") {
                this.writeAttribute('value', '');
            }
        });
    }
}

function setupSideNav() {
    var sn = $("side_nav");
    
    if(sn) {
        var acc = new accordion("side_nav", {
        resizeSpeed : 9,
        defaultAccordion: -1,
        lockCurrent : true,
        classNames : { toggle : 'peek', toggleActive : 'opened', content : 'boo' },
        defaultSize : { height: 392 },
        startingSize : { height: 60 },
        showAll : true,
        direction : 'vertical',
        onEvent: 'click',
        rememberState : true,
        scrollBarOptions : {
            upArrow : { className : "up", width:18, height:20 },
            downArrow : { className : "down", width:18, height:20 },
            grabber : { className:"grabber", width: 18, height: 15 },
            scrubBar : { className : "scroller", width: 18, height: null }
        }
        });
    }
    
    var talents = $$("#side_nav .sublist li a");
    
    for(var i = 0; i < talents.length;i ++) {
        if(window.location == talents[i].href) {
            talents[i].addClassName('current');
        }
    }
}

function setupAccordions() {
    var acc = $$("div.acc");

    for(var i = 0; i < acc.length; i++) {
        new accordion(acc[i], {
        resizeSpeed : 9,
        defaultAccordion: -1,
        lockCurrent : true,
        classNames : { toggle : 'peek', toggleActive : 'opened', content : 'boo' },
        direction : 'vertical',
        showAll: true,
        onEvent: 'click',
        clickToLock: true,
        rememberState : false
        /*scrollBarOptions : {
            upArrow : { className : "up", width:18, height:20 },
            downArrow : { className : "down", width:18, height:20 },
            grabber : { className:"grabber", width: 18, height: 15 },
            scrubBar : { className : "scroller", width: 18, height: null }
        }*/
        });
    }
}

function setupAccountTabs() {
    var tabs = $("admin_nav");
    if(tabs) {
        var top = $$("#admin_nav li.tab");
        for(var i = 0; i < top.length; i++) {
            top[i].observe('mouseover', function() {
                var sub = this.childElements()[1];
                if(sub) sub.setStyle({display:'block'});
                this.addClassName('opened'); 
            });
            top[i].observe('mouseout', function() {
                var a = this.childElements()[0];
                var sub = this.childElements()[1];
                if(sub) sub.setStyle({display:'none'});
                if(a.href!=window.location) this.removeClassName('opened'); 
            });
        }
    }
}

var _scrollers = new Object();
function setupScrollables() {
    var s = $$('.scrollable');
    
    for(var i = 0; i < s.length; i++) {
        var scrollBarOptions = {
            upArrow : { className : "up", width:18, height:20 },
            downArrow : { className : "down", width:18, height:20 },
            grabber : { className:"grabber", width: 18, height: 15 },
            scrubBar : { className : "scroller", width: 18, height: null },
            direction : 'vertical'
        };
        var id = s[i].readAttribute('id')?s[i].readAttribute('id'):'scrollable'+i;
        _scrollers[id] = new Scrollable(s[i], scrollBarOptions);    
    }
}
