var AutoInitScripts = true;
var isPageLoaded = false;

window.addEvent("domready", function(){	
	isPageLoaded = true;
	
	$$('a.Share').each(function(a){
		//containers
		var storyList = a.getParent();
		var shareHover = storyList.getElements('div.share-hover')[0];
		shareHover.set('opacity',0);
		//show/hide
		a.addEvent('mouseenter',function() {
				shareHover.setStyle('display','block').fade('in');
		});
		shareHover.addEvent('mouseleave',function(){
			shareHover.fade('out');
		});
		storyList.addEvent('mouseleave',function() {
			shareHover.fade('out');
		});
	});
});

(function($){
	window.addEvent('domready',function() {
	});
})(document.id);

var ThumbCount = 0;
var ThumbControls = false;
function Crawl(url, type) {
	var error = "";
	url = trim(url);
	
	if(url == "" || url == "http://") error = "Please provide a URL before proceeding.";
	if(type == "vids") {
		if(	url.indexOf("youtube") < 0 &&
			url.indexOf("vimeo") < 0 &&
			url.indexOf("streetfire") < 0) error = "Vid URL must be either Youtube, Vimeo, or Streetfire.";
	}
	
	if(error == "") {
		$('Submission').setStyle('display', 'none');
		$('Preview').setStyle('display', 'block');
		
		if(url.substring(0,7) != 'http://') url = 'http://' + url;
	
		new Request({
			method: 'get',
			url: 'request.php',
			timeout: 60000,
			async: (Browser.Engine.trident)?true:false,
			data: { 'action'	:	'crawl',
					'URL'		:	url,
					'Type'		:	type},
			//onRequest: function() {
			//},
			onTimeout: function() {
				$('Preview').set('html', 'We encountered an error while reading the URL, please try again.');
			},
			onSuccess: function(response) {
				//alert(response);
				if(response == "PleaseRegister") window.top.location.href = "/forums/index.php?app=core&module=global&section=register";
				//else if(response == "404") $('Preview').innerHTML = 'URL Not Found';
				else {
					//alert(response);
					var SiteInfo = PHP_Unserialize(response);
					var ResponseHTML = "<form id='SubmitForm' method='POST' action='/?drift=submit' enctype='multipart/form-data' >";
					ResponseHTML += "<input type='hidden' name='Type' value='" + SiteInfo["Type"] + "'/>";
					
					// Thumbnail
					ResponseHTML += "<div id='Thumbnail' class='Thumbnail'>";
					for(i in SiteInfo["Thumb"]) {
						ThumbString = new String(SiteInfo["Thumb"][i]);
						IsUrl = ThumbString.substring(0,7);
						if(IsUrl == 'http://' && SiteInfo["Thumb"][i] != "Upload")
							ResponseHTML += "	<img src='" + SiteInfo["Thumb"][i] + "' id='Thumb" + i + "' class='LinkThumb' style='display:none;' />";
					}
					ResponseHTML += "	<img id='ThumbEdit' src='/images/ThumbEdit.gif' class='ThumbEdit' />";
					
					// Upload Image
					ResponseHTML += "<div id='Upload' class='Upload'>";
						ResponseHTML += "	<span id='ThumbCount'></span><br/>";
						ResponseHTML += "	<a class='Left' href='javascript:ChangeThumb(\"Prev\");'>Prev</a>";
						ResponseHTML += "	<a class='Right' href='javascript:ChangeThumb(\"Next\");'>Next</a><br/>";
					ResponseHTML += "</div>";
					
					ResponseHTML += "	<div id='Thumb" + (SiteInfo["Thumb"].length-1) + "' class='LinkThumb' style='display:none;'>no preview<br/><a id='UploadLink' onclick='$(\"File\").click();' href='javascript:void(0);'>upload image</a>";
					ResponseHTML += "	<input id='File' name='topic_photo' class='File' type='file' onchange='$(\"UploadLink\").set(\"text\", \"change image\");'/></div>";
					ResponseHTML += "</div>";
					ResponseHTML += "<input type='hidden' id='Thumb' name='Thumb' value='" + SiteInfo["Thumb"][0] + "'/>";
					
					// Submit Button
					Type = SiteInfo["Type"];
					if(Type.substr(Type.length-1) == "s") Type = Type.substr(0, Type.length-1);
					
					ResponseHTML += "<a class='Submit' onmouseup='if(validate(\"" + SiteInfo["Type"] + "\") != false) $(\"SubmitForm\").submit();' href='javascript:void(0);'>Add " + Type + "</a>";
					
					// Pagetitle
					ResponseHTML += "<input type='text' maxlength='43' id='topic_title' name='TopicTitle' class='Input PageTitle";
					var Pagetitle = SiteInfo["Title"].replace(/\\/g, '');
					if(Pagetitle == "")
						ResponseHTML += " Empty' value='" + Type + " title'/><br>";
					else
						ResponseHTML += "' value='" + Pagetitle + "'/><br>";
					
					// Homepage/Make/Model/URL
					if(SiteInfo["Type"] == "vids" || SiteInfo["Type"] == "features" || SiteInfo["Type"] == "random")
						ResponseHTML += "<input class='Input Homepage' id='topic_make' name='TopicMake' type='text' value='" + SiteInfo["Homepage"] + "'/><br/>";
					else if(SiteInfo["Type"] == "clogs") {
						ResponseHTML += "<select class='Input Empty' tabindex='0' name='TopicMake' id='topic_make' onchange='GetModels($(\"topic_model\"), this.value)'>";
						ResponseHTML += "	<option value=''>Vehicle Type</option>";
						for(i in car_types) {
							ResponseHTML += "<option value='" + i + "'>" + i + "</option>";
						}
						ResponseHTML += "</select>";
						
						ResponseHTML += "<select class='Input Other Empty' tabindex='0' name='TopicModel' id='topic_model' style='display: none;' onchange='if(this.value == \"Other\") $(\"topic_other\").getParent().setStyle(\"display\", \"block\");'>";
						ResponseHTML += "	<option value=''>Loading...</option>";
						ResponseHTML += "</select>";
						
						ResponseHTML += "<input class='Input Other Empty' type='text' tabindex='0' value='' name='TopicOther' maxlength='150' style='display: none; padding: 1px !important;' id='topic_other'/>";
					} else if(SiteInfo["Type"] == "techs") {
						ResponseHTML += "<select class='Input Empty' tabindex='0' name='TopicMake' id='topic_make'>";
						ResponseHTML += "	<option value=''>Article Type</option>";
						for(i in tech_types) {
							ResponseHTML += "<option value='" + i + "'>" + i + "</option>";
						}
						ResponseHTML += "</select>";
					} else
						ResponseHTML += "<span class='Homepage'>" + SiteInfo["URL"].substring(0,70) + "</span><br/>";
					
					// Description
					ResponseHTML += "<input name='TopicDesc' type='hidden' value='" + SiteInfo["URL"] + "'/>";
					
					// Post
					ResponseHTML += "<textarea name='Post' id='topic_post' class='Input Description";
					var Description = SiteInfo["Desc"].replace(/\\/g, '');
					if(Description == "")
						ResponseHTML += " Empty'>Enter a brief description...";
					else
						ResponseHTML += "'>" + Description;
					ResponseHTML += "</textarea></form>";
				
					// Set HTML
					$('Preview').set('html', ResponseHTML);
				
					// Set Thumbnail Controls
					$$('.LinkThumb')[0].setStyle('display', 'block');
					$('ThumbCount').set('text', 'Image ' + (ThumbCount+1) + ' of ' + $$('.LinkThumb').length);
	
					$('ThumbEdit').addEvent('mouseenter', function(){
							ThumbControls = true;
							$('Upload').fade('in');
					});
					$$('div.LinkThumb')[0].addEvent('mouseenter', function(){
							ThumbControls = true;
							$('Upload').fade('in');
					});
					$('Upload').addEvent('mouseenter', function(){
							ThumbControls = true;
					});
					$('ThumbEdit').addEvent('mouseleave', function(){
						setTimeout(function(){
							if(!ThumbControls) $('Upload').fade('out');
						}, 500);
					});
					$$('div.LinkThumb')[0].addEvent('mouseleave', function(){
						setTimeout(function(){
							if(!ThumbControls) $('Upload').fade('out');
						}, 500);
					});
					$('Upload').addEvent('mouseleave', function(){
						ThumbControls = false;
						setTimeout(function(){
							if(!ThumbControls) $('Upload').fade('out');
						}, 500);
					});
					
					// Set Empty / Hover states
					$$('.Input').each(function(Eobj){
						Eobj.addEvent('mouseenter', function(){
							this.addClass('Hover');
						}.bind(Eobj));
						Eobj.addEvent('mouseleave', function(){
							this.removeClass('Hover');
						}.bind(Eobj));
						Eobj.addEvent('focus', function(){
							this.addClass('Empty');
						}.bind(Eobj));
						Eobj.addEvent('blur', function(){
							this.removeClass('Empty');
						}.bind(Eobj));
					});
				}
			}
		}).send();
	} else {
		var PopupError = new Element('div', {
		    'class':	'PopupWin',
		    'title':	'Error',
		    'html':	('<div class="Error">' + error + '</div>')
    		}).inject($$('BODY')[0]);

		PopupWin('Error', 'Error', 150, 400);
	}
}
function ChangeThumb(Direction) {
	$$('.LinkThumb')[ThumbCount].setStyle('display', 'none');
				
	if(Direction == 'Next' && ThumbCount < ($$('.LinkThumb').length-1)) ThumbCount++;
	else if(Direction == 'Prev' && ThumbCount > 0) ThumbCount--;
	
	$$('.LinkThumb')[ThumbCount].setStyle('display', 'block');
	if(ThumbCount < ($$('.LinkThumb').length-1))
		$('Thumb').set('value', $$('.LinkThumb')[ThumbCount].get('src'));
	else
		$('Thumb').set('value', 'Upload');
	$('ThumbCount').set('text', 'Image ' + (ThumbCount+1) + ' of ' + $$('.LinkThumb').length);
}
function validate(type) {
	type2 = type;
	if(type2.substr(type2.length-1) == "s") type2 = type2.substr(0, type2.length-1);
					
	if($('topic_title').value == "" || $('topic_title').value == type2 + " title") {
		$('topic_title').addClass('Error');
		return false;
	} else $('topic_title').removeClass('Error');
	
	if(type == "clogs") {
		if($('topic_make').value == "") {
			$('topic_make').addClass('Error');
			return false;
		} else $('topic_make').removeClass('Error');

		if($('topic_model').value == "" && $('topic_make').value != "Other") {
			$('topic_model').addClass('Error');
			return false;
		} else $('topic_model').removeClass('Error');

		if($('topic_other').value == "" && $('topic_make').value == "Other" || $('topic_model').value == "Other") {
			$('topic_other').addClass('Error');
			return false;
		} else $('topic_other').removeClass('Error');
	} else if(type == "vids" || type == "techs" || type == "features") {
		if($('topic_make').value == "") {
			$('topic_make').addClass('Error');
			return false;
		} else $('topic_make').removeClass('Error');
	}
	
	if($('topic_post').value == "Enter a brief description..." || $('topic_post').value == "") {
		$('topic_post').value = 'Enter a brief description...';
		$('topic_post').addClass('Error');
		return false;
	} else $('topic_post').removeClass('Error');
}



    /**
    * Unserializes a PHP serialized data type. Currently handles:
    *  o Strings
    *  o Integers
    *  o Doubles
    *  o Arrays
    *  o Booleans
    *  o NULL
    *  o Objects
    * 
    * alert()s will be thrown if the function is passed something it
    * cant handle or incorrect data.
    *
    * @param  string input The serialized PHP data
    * @return mixed        The resulting datatype
    */
    function PHP_Unserialize(input)
    {
        var result = PHP_Unserialize_(input);
        return result[0];
    }


    /**
    * Function which performs the actual unserializing
    *
    * @param string input Input to parse
    */
    function PHP_Unserialize_(input)
    {
    	//alert(input);
        var length = 0;
        
        switch (input.charAt(0)) {
            /**
            * Array
            */
            case 'a':
                length = PHP_Unserialize_GetLength(input);
                input  = input.substr(String(length).length + 4);

                var arr   = new Array();
                var key   = null;
                var value = null;

                for (var i=0; i<length; ++i) {
                    key   = PHP_Unserialize_(input);
                    input = key[1];

                    value = PHP_Unserialize_(input);
                    input = value[1];

                    arr[key[0]] = value[0];
                }

                input = input.substr(1);
                return [arr, input];
                break;
            
            /**
            * Objects
            */
            case 'O':
                length = PHP_Unserialize_GetLength(input);
                var classname = String(input.substr(String(length).length + 4, length));
                
                input  = input.substr(String(length).length + 6 + length);
                var numProperties = Number(input.substring(0, input.indexOf(':')))
                input = input.substr(String(numProperties).length + 2);

                var obj      = new Object();
                var property = null;
                var value    = null;

                for (var i=0; i<numProperties; ++i) {
                    key   = PHP_Unserialize_(input);
                    input = key[1];
                    
                    // Handle private/protected
                    key[0] = key[0].replace(new RegExp('^\x00' + classname + '\x00'), '');
                    key[0] = key[0].replace(new RegExp('^\x00\\*\x00'), '');

                    value = PHP_Unserialize_(input);
                    input = value[1];

                    obj[key[0]] = value[0];
                }

                input = input.substr(1);
                return [obj, input];
                break;

            /**
            * Strings
            */
            case 's':
                length = PHP_Unserialize_GetLength(input);
                return [String(input.substr(String(length).length + 4, length)), input.substr(String(length).length + 6 + length)];
                break;

            /**
            * Integers and doubles
            */
            case 'i':
            case 'd':
                var num = Number(input.substring(2, input.indexOf(';')));
                return [num, input.substr(String(num).length + 3)];
                break;
            
            /**
            * Booleans
            */
            case 'b':
                var bool = (input.substr(2, 1) == 1);
                return [bool, input.substr(4)];
                break;
            
            /**
            * Null
            */
            case 'N':
                return [null, input.substr(2)];
                break;

            /**
            * Unsupported
            */
            case 'o':
            case 'r':
            case 'C':
            case 'R':
            case 'U':
                return [null, 'Error: Unsupported PHP data type found!'];

            /**
            * Error
            */
            default:
                return [null, null];
                break;
        }
    }
    

    /**
    * Returns length of strings/arrays etc
    *
    * @param string input Input to parse
    */
    function PHP_Unserialize_GetLength(input)
    {
        input = input.substring(2);
        var length = Number(input.substr(0, input.indexOf(':')));
        return length;
    }



function Vote(obj, tid) {
	new Request({
		method: 'get',
		url: 'request.php',
		data: { 'action'	:	'vote',
				'tid'		:	tid},
		onRequest: function() {
			//obj.getElement('STRONG').set('html', '&nbsp;');
			obj.getElementsByTagName('STRONG')[0].innerHTML = '&nbsp;';
		}.bind(obj),
		onSuccess: function(response) {
			if(response == "PleaseRegister") window.top.location.href = "/forums/index.php?app=core&module=global&section=register";
			//else obj.getElement('STRONG').set('html', response);
			else obj.getElementsByTagName('STRONG')[0].innerHTML = response;
		}.bind(obj)
	}).send();
	//obj.set('onclick', '');
	obj.setAttribute('onclick', '');
}

function GetModels(obj, make) {
	if(make != "Other") {
		$('topic_other').setStyle('display', 'none');
		new Request({
			method: 'get',
			url: 'request.php',
			data: { 'action'	:	'models',
					'make'		:	make},
			//onRequest: function() { obj.set('html', '<option value="">Loading...</option>'); obj.getParent().setStyle('display', 'block'); }.bind(obj),
			onRequest: function() { select_innerHTML(obj, "<option value=''>Loading...</option>"); obj.setStyle('display', 'block'); }.bind(obj),
			onSuccess: function(response) {
				if(response == "PleaseRegister") window.top.location.href = "/forums/index.php?app=core&module=global&section=register";
				else select_innerHTML(obj, response);
				//else obj.set('html', response);
			}.bind(obj)
		}).send();
	} else {
		obj.setStyle('display', 'none');
		obj.set('html', '<option value="">Loading...</option>');
		
		$('topic_other').setStyle('display', 'block');
	}
}

function ShowMenu(id) {
	//var objCoords = $(id).getCoordinates($$('DIV.User')[0]);
	//alert(objCoords.left);
	
	$(id).setStyles({
		display:	'block',
		//left:		objCoords.left,
		//top:		objCoords.bottom,
		left:		78,
		top:		27,
		opacity:	0
	});
	$(id).fade('in');
	
	document.body.addEvent('mouseup', function(event) {
		$(id).fade('out');
	}.pass(id));

	return false;
}

// BLURBG // Used in PopupWin, Multidropdown, SuggestiveFropdown & EditableDropdown
function BlurBg(fadeIn) {
	var BlurBgDiv = new Element('DIV', {
		'id': 'BlurBg',
		'class': 'BlurBg',
		'styles': {
			'position':			'fixed',
			'top':				'0',
			'left':				'0',
			'background-color':	'#FFFFFF',
			'opacity':			'0.01',
			'z-index':			'900'
		}/*,
		'events': {
			'click':			closeBlurBg
		}*/
	}).injectInside(document.body);
	
	ResizeBlurBg();
	
	window.addEvent('resize', ResizeBlurBg);
	if(Browser.Engine.trident4)	{
		fadeIn = false;
		window.addEvent('scroll', ResizeBlurBg);
	}
	
	if(fadeIn) new Fx.Tween(BlurBgDiv, {duration: (Browser.Engine.trident)?1500:1250}).start('opacity', 0.8);
	return BlurBgDiv;
}
function ResizeBlurBg() {
	if($type($('BlurBg')) != false) {
		BodyDimensions = $$('BODY')[0].getSize();
		
		if(Browser.Engine.trident4) {
			BodyScroll = $$('BODY')[0].getScroll();
			$('BlurBg').setStyles({
				'position':			'absolute',
				'top':				BodyScroll.y,
				'left':				BodyScroll.x
			});
		}
		$('BlurBg').setStyles({
			'height':			BodyDimensions.y,
			'width':			BodyDimensions.x
		});
		
		//If a PopupWin, check top position to stop IE accidentally firing this event before the tween in
		if($type($('PopupWin')) != false && $('PopupWin').getParent().getStyle('top').toInt() >= 0 && PopupWindow.Dragged != true) {
			PopupDimensions = $('PopupWin').getSize();
			PopupTop = ((BodyDimensions.y/4)-(PopupDimensions.y/4));
			PopupLeft = ((BodyDimensions.x/2)-(PopupDimensions.x/2));
			
			$('PopupWin').getParent().setStyles({
				'top':			(PopupTop >= 0)?PopupTop:0,
				'left':			(PopupLeft >= 0)?PopupLeft:0
			});
		}
	}
}
function closeBlurBg() {
	var BlurBg = $('BlurBg');
	if(BlurBg) {
		BlurBg.removeEvents('click');
		
		if(BlurBg.getStyle('opacity') > 0.01) {
			var FocusBgAnim = new Fx.Tween(BlurBg, {duration: (Browser.Engine.trident)?1000:500, transition: Fx.Transitions.Back.easeOut});
					
			FocusBgAnim.addEvent('onComplete', function() {
				window.removeEvents('resize');
				closePopup();
			});
			
			FocusBgAnim.start('opacity', 0);
		} else {
			BlurBg.destroy();
		}
	}
}

/* MIDDLE CLICK DETECTED POPUPS */
function popup(obj, e, url, w, h) {
	var isLeftClick = false;
	
	if(e.shiftKey == false && e.ctrlKey == false) {
		if(Browser.Engine.trident != true && e.button == 0) isLeftClick = true;
		if(Browser.Engine.trident == true && e.button == 1) isLeftClick = true;
		if(Browser.Engine.trident == true && e.button == 0) obj.addEvent('click', function(obj, e, url, w, h) {popup(obj, e, url, w, h)});
	} else {
		return false;
	}
	
	if(isLeftClick) {
		var isScrollbars = 'yes';
		if(Browser.Engine.trident4) isScrollbars = 'no';
		
		window.open(url,'','width='+w+',height='+h+',scrollbars='+isScrollbars+',status=1,resizable=no');
		
		if(!Browser.Engine.trident)
			obj.addEvent('click', function() {return false});
		else
			return false;
	}
}

// GENERIC / ARRAY
function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function RemoveDuplicates(arr) {
	//get sorted array as input and returns the same array without duplicates.
	var result=new Array();
	var lastValue="";
	for (var i=0; i<arr.length; i++) {
		var curValue=arr[i];
		if (curValue != lastValue) {
			result[result.length] = curValue;
		}
		lastValue=curValue;
	}
	return result;
}

function flashFix(o) {
	document.write(o)
}

function select_innerHTML(objeto,innerHTML) {
/******
* select_innerHTML - corrige o bug do InnerHTML em selects no IE
* Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Vers&#227;o: 2.1 - 04/09/2007
* Autor: Micox - N&#225;iron Jos&#233; C. Guimar&#227;es - micoxjcg@yahoo.com.br
* @objeto(tipo HTMLobject): o select a ser alterado
* @innerHTML(tipo string): o novo valor do innerHTML
*******/
    objeto.innerHTML = ""
    var selTemp = document.createElement("micoxselect")
    var opt;
    selTemp.id="micoxselect1"
    document.body.appendChild(selTemp)
    selTemp = document.getElementById("micoxselect1")
    selTemp.style.display="none"
    if(innerHTML.indexOf("<option")<0){//se n&#227;o &#233; option eu converto
        innerHTML = "<option>" + innerHTML + "</option>"
    }
    innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
    selTemp.innerHTML = innerHTML
      
    
    for(var i=0;i<selTemp.childNodes.length;i++){
  var spantemp = selTemp.childNodes[i];
  
        if(spantemp.tagName){     
            opt = document.createElement("OPTION")
    
   if(document.all){ //IE
    objeto.add(opt)
   }else{
    objeto.appendChild(opt)
   }       
    
   //getting attributes
   for(var j=0; j<spantemp.attributes.length ; j++){
    var attrName = spantemp.attributes[j].nodeName;
    var attrVal = spantemp.attributes[j].nodeValue;
    if(attrVal){
     try{
      opt.setAttribute(attrName,attrVal);
      opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));
     }catch(e){}
    }
   }
   //getting styles
   if(spantemp.style){
    for(var y in spantemp.style){
     try{opt.style[y] = spantemp.style[y];}catch(e){}
    }
   }
   //value and text
   opt.value = spantemp.getAttribute("value")
   opt.text = spantemp.innerHTML
   //IE
   opt.selected = spantemp.getAttribute('selected');
   opt.className = spantemp.className;
  } 
 }    
 document.body.removeChild(selTemp)
 selTemp = null
}