if (BASE_URL == null) { BASE_URL = ''; }

function handleEnter (field, event, func) {
  var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
  if (keyCode == 13) {
    var i;
    for (i = 0; i < field.form.elements.length; i++) {
      if (field == field.form.elements[i]) { break; }
    }
    eval(func);    

    return false;
  } 
  else
  return true;
}



function getElementsByClassName(className, tag, elm){
  var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
  var tag = tag || "*";
  var elm = elm || document;
  var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
  var returnElements = [];
  var current;
  var length = elements.length;
  for(var i=0; i<length; i++){
    current = elements[i];
    if(testClass.test(current.className)){
      returnElements.push(current);
    }
  }
  return returnElements;
}

function removeElement(id) {
  if ($(id) && $(id).parentNode) { $(id).parentNode.removeChild($(id)); }
}

function urlencode(str) {
  return escape(str).replace(/\+/g,'%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
}

function findPos(obj) {
  var curleft = curtop = 0;
  if (obj.offsetParent) {
    do {
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;
    } while (obj = obj.offsetParent);
    return [curleft,curtop];
  }
}


// for rating thingy

function mouseOverStar(num) {
  for (i=1;i<6;i++) {
    if (i <= num) {
      $('star_'+i).src = 'images/star_2.gif';
    }
  }
}

function mouseOutStar() {
  var min = ($('rating').value != '') ? $('rating').value : 0;
  for (i=1;i<6;i++) {
    if (i > min) {
      $('star_'+i).src = 'images/star_1.gif';
    }
  }  
}

function clickStar(num) {
  $('rating').value = num;
}

function referralChanged() {
  $('referred_by_user_field').hide();
  $('referred_by_forum_field').hide();
  
  if ($('referral_type_id').value == 1) {
    $('referred_by_user_field').show();
  }
  else if ($('referral_type_id').value == 2) {
    $('referred_by_forum_field').show();
  }
}

function becomeFan(user_id, after) {
  
  new Ajax.Request(BASE_URL+'/ajax/add_fav', {
    method: 'post',
    parameters: { id: user_id },
    onComplete: function (transport) {
      after();
    }
  });    
  
}
  
after_fan = function () {
  $('become_fan').innerHTML = 'Added to Favorites..';
  setTimeout(function() {
    $('become_fan').innerHTML = 'Remove Favorite';
  }, 3000);
};

function removeFav(id) {
  new Ajax.Request('ajax/add_fav', {
    method: 'post',
    parameters: { id: id, remove: 1 },
    onComplete: function (transport) {
      $('become_fan').innerHTML = 'Removed from Favorites..';
      setTimeout(function() {
        $('become_fan').innerHTML = 'Become a Fan';
      }, 3000);        
    }
  });    
}

function toggleFav(id, remove) {
  if (remove) {
    removeFav(id);
  }
  else {
    becomeFan(id, after_fan);
  }
}

function hideFanLink(user_id) {
  $('become_fan_'+user_id).innerHTML = 'added to favs!';
  setTimeout(function() { $('become_fan_'+user_id).hide(); }, 1000);
}


var user_boxes = new Array();
function openUserBox(user_over_id, user_image_id, left_offset, top_offset) {
  
  if (user_boxes[user_over_id] == null) { user_boxes[user_over_id] = {}; }
  if(user_boxes[user_over_id].timeout) {
    clearTimeout(user_boxes[user_over_id].timeout);
  }
  user_boxes[user_over_id].timeout=setTimeout(function(){openBox(user_over_id, user_image_id, left_offset, top_offset);},1000);
}

function openBox(user_over_id, user_image_id, left_offset, top_offset) {
  pos = findPos($(user_image_id));  
  user_boxes[user_over_id].id = user_over_id;
  $(user_over_id).style.left = (left_offset == null) ? pos[0] - 100 + 'px' : left_offset+220 + 'px';
  $(user_over_id).style.top = (top_offset == null) ? pos[1] - 90 + 'px' : top_offset + 'px';
  Effect.Appear(user_over_id, { duration: 0.5 });
  user_boxes[user_over_id].attachEvent = function (name, action) { };
  Event.observe(user_boxes[user_over_id],'mouseover',function(event){
    if(user_boxes[user_over_id].timeout) { clearTimeout(user_boxes[user_over_id].timeout); }
    Event.observe(user_boxes[user_over_id],'mouseout',function(event) {
      
    });
  });  
}

function closeUserBox(user_over_id) {
  closeBox(user_over_id);
}
function closeBox(user_over_id) {
  if(user_boxes[user_over_id].timeout){ clearTimeout(user_boxes[user_over_id].timeout); }
  if(user_boxes[user_over_id].id){user_boxes[user_over_id].timeout=setTimeout(function(){Effect.Fade(user_boxes[user_over_id].id, { duration: 0.5 });},100);}
}


function textCounter(field,count_box,max_limit) {
  if (field.value.length > max_limit) {
    field.value = field.value.substring(0, max_limit);
  }
  else {
    count_box.innerHTML = (max_limit - field.value.length) + " characters left";
  }
}

function openOverlay(func, background) {
  
    if ($('overlay2')) { removeElement('overlay2'); }
  
    var arrayPageSize = getPageSize();
    var objBody = document.getElementsByTagName("body").item(0);
    var objOverlay = document.createElement("div");
    objOverlay.setAttribute('id','overlay2');
    if (background) {
      objOverlay.className = 'overlay2b';
    } else { objOverlay.className = 'overlay2'; }
    objOverlay.style.display = 'none';
    
    objOverlay.onclick = function () { eval(func); return false;} 
    objOverlay.style.position = 'absolute';
    objOverlay.style.top = '0';
    objOverlay.style.left = '0';
    objOverlay.style.zIndex = '3';
     objOverlay.style.height = (arrayPageSize[1] + 'px');
     objOverlay.style.width = '100%';
    objOverlay.style.display = 'block';
    objBody.insertBefore(objOverlay, objBody.firstChild);
  
}

function closeOverlay() {
  $('overlay2').hide();
}

var open_part_id;
var reverse_part_box;
function openPartBox(part_id, anchor_element) {

  if (open_part_id == part_id) {
    closePartBox();
  }
  else {

    openOverlay('closePartBox()');
    $('part_over_content').innerHTML = '';
    $('part_over_content').innerHTML += '<a href="#add_to_wishlist" onclick="openAddItemBox('+part_id+', \''+anchor_element.id+'\', 0); return false;">Add to Potential Mods</a> | ';
    $('part_over_content').innerHTML += '<a href="part_review?id='+part_id+'">Read Reviews</a> | ';
    $('part_over_content').innerHTML += '<a href="browse_vehicles?_part_id='+part_id+'">Find Vehicles w/ Part</a> | ';
    $('part_over_content').innerHTML += '<a href="#add_to_wishlist" onclick="openAddItemBox('+part_id+', \''+anchor_element.id+'\', 1); return false;">Ready to Buy</a> | ';
    //$('part_over_content').innerHTML += '<a href="private_listings?_part_id='+part_id+'">Find in Classifieds</a> | ';
    $('part_over_content').innerHTML += '<a href="#cancel" onclick="openPartBox('+part_id+'); return false;">Cancel</a>';
    
    pos = findPos(anchor_element);
    
    var move_left = (!reverse_part_box) ? 7 : 420;
    $('part_over').style.left = pos[0] - move_left + 'px';
    $('part_over').style.top = pos[1] - 60 + 'px';
    Effect.Appear('part_over', { duration: 0.5 });
    open_part_id = part_id;
    setTimeout(function() {    
      var orig_width = $('part_over_content').clientWidth;
      $('part_over_content').style.width = (orig_width-7) + 'px';
    }, 800);
  }
}

function closePartBox() {
  closeOverlay();
  Effect.Fade('part_over', { duration: 0.5 });
  open_part_id = -1;  
}

function openUsedWLBox(part_id, anchor_element, part_count, lead_count) {

  if (open_part_id == part_id) {
    closePartBox();
  }
  else {

    openOverlay('closePartBox()');
  
    $('part_over_content').innerHTML = '<a href="part_leads?_part_id='+part_id+'">Find Leads</a> ('+lead_count+') | ';
    $('part_over_content').innerHTML += '<a href="private_listings?_part_id='+part_id+'">See MySubie.com Listings</a> ('+part_count+')';
    
    pos = findPos(anchor_element);
    
    $('part_over').style.left = pos[0] - 250 + 'px';
    $('part_over').style.top = pos[1] - 60 + 'px';
    Effect.Appear('part_over', { duration: 0.5 });
    open_part_id = part_id;
  }
}

function openNewWLBox(part_id, anchor_element) {
  part_count = 0; //TODO
  if (open_part_id == part_id) {
    closePartBox();
  }
  else {

    openOverlay('closePartBox()');
  
    $('part_over_content').innerHTML = 'Get Quotes From Vendors <span style="font-size: 11px;">(last request: 6:40pm Feb 18, 2009)</span> | ';
    //$('part_over_content').innerHTML += '<a href="private_listings?_part_id='+part_id+'">See MySubie.com Listings</a> ('+part_count+')';
    $('part_over_content').innerHTML += 'See MySubie.com Listings (0)';
    
    pos = findPos(anchor_element);
    
    $('part_over').style.left = pos[0] - 520 + 'px';
    $('part_over').style.top = pos[1] - 60 + 'px';
    Effect.Appear('part_over', { duration: 0.5 });
    open_part_id = part_id;
  }
}

function openSubscribeBox(part_id, anchor_element) {
  
  if (open_part_id == part_id) {
    closePartBox();
  }
  else {

    openOverlay('closePartBox()');
  
    $('part_over_content').innerHTML = 'This feature is currently unavailble. Check back soon!';
    
    pos = findPos(anchor_element);
    
    $('part_over').style.left = pos[0] - 270 + 'px';
    $('part_over').style.top = pos[1] - 60 + 'px';
    Effect.Appear('part_over', { duration: 0.5 });
    open_part_id = part_id;
  }
}

function openAddItemBox(part_id, anchor_element, rtb) {
  sec = (rtb) ? 'shop_parts' : 'research_parts';
  new Ajax.Request('ajax/wishlist_get_vehicles', {
    method: 'post',
    onComplete: function (transport) {

      if (!which_vehicle || !which_vehicle_id) {
        return false;        
      }
      
      if (which_vehicle.length == 0) {
        $('part_over_content').innerHTML = 'You need to <a href="vehicle_add">Add a Vehicle</a> first.';
      }
      else if (which_vehicle.length == 1) {

        if ($('overlay2') && $('overlay2').style.display == 'block') {  
          //after = partAddedToWL;
          after = function() { location=BASE_URL+'/dashboard?t=garage&mod_path_section='+sec+'&vehicle_id='+which_vehicle_id[0]; };
        }
        else {
          var orig_atext = anchor_element.innerHTML;
          anchor_element.innerHTML = 'Added.....';
          //setTimeout(function() { anchor_element.innerHTML = orig_atext; }, 5000);
          after = function() { location=BASE_URL+'/dashboard?t=garage&mod_path_section='+sec+'&vehicle_id='+which_vehicle_id[0]; };
        }

        addToWishList(0, part_id, '', which_vehicle_id[0], after, rtb);
      }
      else {
        openOverlay('closePartBox()');

        $('part_over_content').innerHTML = 'For which Vehicle? ';
        for (i=0;i<which_vehicle_id.length;i++) {
          $('part_over_content').innerHTML += '<a href="#" onclick="addToWishList(0, '+part_id+', \'\', '+which_vehicle_id[i]+', partAddedToWL(), '+rtb+'); return false;">'+which_vehicle[i] + '</a>, ';
        }
    
        pos = findPos(anchor_element);
        
        $('part_over').style.right = pos[0] - 680 + 'px';
        $('part_over').style.top = pos[1] - 50 + 'px';
        Effect.Appear('part_over', { duration: 0.5 });
        open_part_id = part_id;
        
        setTimeout(function() {    
          var orig_width = $('part_over_content').clientWidth;
          $('part_over_content').style.width = (orig_width-7) + 'px';
        }, 800);
      }
    }
  });


}

function partAddedToWL() {
  $('part_over_content').innerHTML = 'Added!';
  setTimeout(closePartBox, 1000); 
}

function addToWishList(brand_id, part_id, extra, vehicle_id, after, ready) {
  if (ready == null) { ready = 1; }
  new Ajax.Request('ajax/wishlist_add_item', {
    method: 'post',
    parameters: { 
      vehicle_id: vehicle_id, 
      brand_id: brand_id,
      part_id: part_id,
      extra: extra,
      ready: ready

    },
    onComplete: function (transport) {
      if (after != null) {
        after();
      }
    }
  });

}

function readyToBuy(item_id, ready, vehicle_id) {
new Ajax.Request('ajax/wishlist_update_ready', {
    method: 'post',
    parameters: { 
      ready: ready,
      item_id: item_id
    },
    onComplete: function (transport) {
      if (ready) {
        location = BASE_URL+'/dashboard?t=garage&mod_path_section=shop_parts&vehicle_id='+vehicle_id;
      }
      else {
        location = BASE_URL+'/dashboard?t=garage&mod_path_section=research_parts&vehicle_id='+vehicle_id;
      }
    }
  });
}

function openAddCompat(pid) {
  new Ajax.Updater('add_compat', BASE_URL+'/ajax/review_add_compat', {
    method: 'post',
    parameters: { part_id: pid },
    onComplete: function () {
      $('add_compat').show();
    }
  });
}

function addCompat() {
  new Ajax.Updater('compatible_vehicles', BASE_URL+'/ajax/review_add_compat', {
    method: 'post',
    parameters: {
      part_id: $('compat_part_id').value,
      _model_id: $('model_id').value,
      _start_year: $('start_year').value,
      _end_year: $('end_year').value
      
    },
    onSuccess: function (transport) {
      $('add_compat').hide();
    }
  });    
}

function votePost(pid, vid, vote_count) {
  vote_count++;
  new Ajax.Request(BASE_URL+'/ajax/forum_post_vote', {
    method: 'post',
    parameters: { 
      post_id: pid, 
      vote_type_id: vid
    }
  });
  $('vote_post_'+pid+'_'+vid).style.fontWeight = 'bold';
  $('vote_post_'+pid+'_'+vid).setAttribute('onclick', 'deleteVote('+pid+','+vid+','+vote_count+'); return false;');
  $('vote_post_count_'+pid+'_'+vid).innerHTML = '('+vote_count+')';
}

function deleteVote(pid, vid, vote_count) {
  vote_count--;
  new Ajax.Request(BASE_URL+'/ajax/forum_post_vote', {
    method: 'post',
    parameters: { 
      post_id: pid, 
      vote_type_id: vid,
      delete_it: 1
    }
  });
  $('vote_post_'+pid+'_'+vid).style.fontWeight = 'normal';
  $('vote_post_'+pid+'_'+vid).setAttribute('onclick', 'votePost('+pid+','+vid+','+vote_count+'); return false;');
  $('vote_post_count_'+pid+'_'+vid).innerHTML = (vote_count == 0) ? '' : '('+vote_count+')';
}

function voteUser(uid, vid, vote_count) {
  vote_count++;
  new Ajax.Request(BASE_URL+'/ajax/user_vote', {
    method: 'post',
    parameters: { 
      user_id: uid, 
      vote_type_id: vid
    }
  });
  $('vote_user_'+uid+'_'+vid).setAttribute('onclick', 'deleteUserVote('+uid+','+vid+','+vote_count+'); return false;');
  var word = (vid == 1) ? 'Expert Credit' : 'Shocker';
  $('vote_user_'+uid+'_'+vid).innerHTML = "Undo "+word;
  
  var s = (vote_count != 1) ? 's' : '';
  $('user_vote_'+vid).innerHTML = vote_count+' '+word+s+'.';
  $('user_vote_'+vid).style.display = 'inline';
}

function deleteUserVote(uid, vid, vote_count) {
  vote_count--;
  new Ajax.Request(BASE_URL+'/ajax/user_vote', {
    method: 'post',
    parameters: { 
      user_id: uid, 
      vote_type_id: vid,
      to_delete: 1
    }
  });
  $('vote_user_'+uid+'_'+vid).setAttribute('onclick', 'voteUser('+uid+','+vid+','+vote_count+'); return false;');
  var word = (vid == 1) ? 'Give Expert Credit' : 'Wave Shocker';
  $('vote_user_'+uid+'_'+vid).innerHTML = word;
  
  var s = (vote_count != 1) ? 's' : '';
  $('user_vote_'+vid).innerHTML = vote_count+' '+word+s+'.';

}


function hideHelp(hid) {
  
  new Ajax.Request(BASE_URL+'/ajax/help_hide', {
    method: 'post',
    parameters: { 
      help_id: hid
    }
  });
  
  //$('help_box_'+hid).hide();
  Effect.Fade('help_box_'+hid, { duration: 0.5 });
}

function hideNext(nid) {
  
  new Ajax.Request(BASE_URL+'/ajax/help_hide', {
    method: 'post',
    parameters: { 
      next_id: nid
    }
  });
  
  Effect.Fade('next_step', { duration: 0.5 });
}

function feedbackBox(page) {
  $('feedback_box').innerHTML = '<div style="text-align: center; margin-top: 50px;"><img src="'+BASE_URL+'/images/loading.gif" alt="Loading" /></div>';
  
  openOverlay('closeFeedbackBox()', true);

  var arrayPageSize2 = getPageSize();
  var arrayPageScroll2 = getPageScroll();
  $('feedback_box').style.top =  (arrayPageScroll2[1] + ((arrayPageSize2[3] - 400) / 2) + 'px');
  $('feedback_box').style.left = (((arrayPageSize2[0] - 450) / 2) + 'px');
  $('feedback_box').show();    
  
  new Ajax.Updater('feedback_box', BASE_URL+'/ajax/feedback_box', {
    method: 'post',
    onComplete: function (transport) { 
      $('feedback_page').value = page;
    }
  });
  
}

function closeFeedbackBox() {
  closeOverlay();
  $('feedback_box').hide();
}

function siteNoticeBox() {
  $('feedback_box').innerHTML = '<div style="text-align: center; margin-top: 50px;"><img src="'+BASE_URL+'/images/loading.gif" alt="Loading" /></div>';
  
  openOverlay('closeSiteNoticeBox()', true);

  var arrayPageSize2 = getPageSize();
  var arrayPageScroll2 = getPageScroll();
  $('site_notice_box').style.top =  (arrayPageScroll2[1] + ((arrayPageSize2[3] - 400) / 2) + 'px');
  $('site_notice_box').style.left = (((arrayPageSize2[0] - 450) / 2) + 'px');
  $('site_notice_box').show();    
  
  new Ajax.Updater('site_notice_box', BASE_URL+'/ajax/site_notice_box');
  
}

function closeSiteNoticeBox() {
  closeOverlay();
  $('site_notice_box').hide();
}

function submitFeedback() {
  $('submit_feedback_button').innerHTML = 'Thanks!';
  new Ajax.Request(BASE_URL+'/ajax/feedback_submit', {
    method: 'post',
    evalScripts: true,
    parameters: $('feedback').serialize(true),
    onSuccess: function (transport) {
      if (transport.responseText == 'ok') {
          closeFeedbackBox();
      } else {
          $('feedback_message').innerHTML = transport.responseText;  
          $('feedback_message').className = "error";
      }
    }
  });
  
  return false;
}

function showAlerts() {
  new Ajax.Updater('alert_box', BASE_URL+'/ajax/alerts_show', {
    onComplete: function () { 
      $('alert_box').toggle(); 
      new Ajax.Request(BASE_URL+'/ajax/alerts_mark_hidden');
      setTimeout(function () { $('alert_count').innerHTML = '0'; $('alert_link').className = ''; }, 1500);
    }
  });
}

function photoShared(whole_gallery) {
  var yes = whole_gallery ? 1 : 0;
  new Ajax.Request(BASE_URL+'/ajax/mi_photo_shared', {
    method: 'post',
    parameters: { whole_gallery: yes, section: 'galleries' }
  });
} 


function descriptionBox(desc, id) {
  if (desc == "") { return false; }
  closeDescriptionBox();
  pos = findPos($(id));
  var div = document.createElement("div");
  div.setAttribute("id", "description_box");
  div.style.left = pos[0] + 50 + 'px';
  div.style.top = pos[1] + 20 + 'px';
  div.style.position = 'absolute';
  div.style.zIndex = '3';
  div.style.width = '200px';
  div.style.backgroundColor = '#FFFFE1';
  div.style.border = '1px solid #6E7587';
  div.style.padding = '3px';

  div.style.display = 'block';
    
  div.innerHTML = desc;

  
  var objBody = document.getElementsByTagName("body").item(0);
  objBody.insertBefore(div, objBody.firstChild);

}

function closeDescriptionBox() {
  if ($('description_box')) {
    removeElement('description_box');
  }
}

function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;
}