//==============================================================================
//==============================================================================
// FEATURED ITEM ROTATION
//==============================================================================
//==============================================================================
var fir;
// posNumber - number of banner positions
function init_featured_item_rotation(posNumber) {
  fir = new FeaturedItemRotation(posNumber);
  fir.init();
  fir.start();
};

function FeaturedItemRotation(posNumber) {
  this.cfg = {
    // number of banner positions
    posNumber: posNumber || 1,
    // (milliseconds) fade IN time
    timeFadeIn: 1000,
    // (milliseconds) fade OUT time
    timeFadeOut: 1000,
    // (milliseconds) display time for banners
    timeDisplay: 10*1000
  };

  this.positions = [];
};

//
// NOTE:
// item's indexes are ZERO-BASED, sequence from 0 to N
// positions's indexes are ZERO-BASED, sequence from 0 to N
//
FeaturedItemRotation.prototype.init = function() {
  var i, pos, items;

  // get positions
  var pos = $('div.featured-item-position');
  if (!pos || !pos.length)
    return false;

  for (var i = 0; i < pos.length; i++) {
    items = $(pos[i]).find('div.featured-item');
    if (!items || !items.length)
      continue;

    this.positions.push({items: items, num_items: items.length, curr_item_index: 0});
  }
};

// get item
FeaturedItemRotation.prototype.getItem = function(pos_index, item_index) {
  return this.positions[pos_index].items[item_index];
};

// get next item's index
FeaturedItemRotation.prototype.getNextItemIndex = function(pos_index, curr_item_index) {
  // get next item's index
  next_item_index = curr_item_index + 1;
  // drop it to beginning if we reached the end
  if (next_item_index >= this.positions[pos_index].num_items) {
    next_item_index = 0;
  }

  return next_item_index;
};

FeaturedItemRotation.prototype.start = function() {
  for (var pos_index in this.positions) {
    var pos = this.positions[pos_index];
    // rotation will happen only for those banner positions where number of banners is more than 1
    if (pos.num_items < 2)
      continue;

    var t = this;
    (function() {
      var pi = pos_index;
      var time1 = t.cfg.timeDisplay;
      setTimeout(function(){t.rotate(pi);}, time1);
    })();
  }

  return;
};

FeaturedItemRotation.prototype.rotate = function(pos_index) {
  // get banner position
  var pos = this.positions[pos_index];
  // get next item index
  var next_item_index = this.getNextItemIndex(pos_index, pos.curr_item_index);
  // get current item AND next item
  var curr_item = this.getItem(pos_index, pos.curr_item_index);
  var next_item = this.getItem(pos_index, next_item_index);
  // update next item index for current position
  this.positions[pos_index].curr_item_index = next_item_index;

  var t = this, time1 = this.cfg.timeFadeOut, time2 = this.cfg.timeFadeIn, time3 = this.cfg.timeDisplay;
  var pi = pos_index;

  $(curr_item).fadeOut(time1, function(){
    $(next_item).fadeIn(time2, function(){
      setTimeout(function(){t.rotate(pi);}, time3);
    })
  });

  return;
};
//==============================================================================
//==============================================================================
// Google Analytics tracking event: outbound banners click
// params: el - <A> html element
function ga_track_click(el) {
  if (!pageTracker || !el)
    return;

  var ga_event_category = 'Banner';
  var ga_event_action = 'Clicks';
  var ga_event_label = el.href;

  pageTracker._trackEvent(ga_event_category, ga_event_action, ga_event_label);

  return;
};

// for equipment details page only
var last_active_equipment_image = 0;
function toggle_active_image(index) {
  // hide all big images
  $('.large-images img').css({display:'none'});
  // show only one current big image
  $('.large-images #eqimg_'+index).css({display:'block'});
  // make all thumbs inactive
  $('.thumb-images .active').removeClass('active').addClass('inactive');
  // make current thumb active
  $('.thumb-images #eqimg_thumb_'+index).removeClass('inactive').addClass('active');

  return;
};

//here you place the ids of every element you want.
/*var ids=new Array('details','features','seller_info');*/
var ids=new Array('details','seller_info');

function switchid(id)
{
	hideallids();
	showdiv(id);
}

function hideallids()
{
	//loop through the array and hide each element by id
	for (var i=0;i<ids.length;i++){
		hidediv(ids[i]);
	}		  
}

function hidediv(id)
{
	//safe function to hide an element with a specified id
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById(id).style.display = 'none';
	} else {
		if (document.layers) { // Netscape 4
			document.id.display = 'none';
		} else { // IE 4
			document.all.id.style.display = 'none';
		}
	}
}

function showdiv(id)
{
	//safe function to show an element with a specified id
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById(id).style.display = 'block';
	} else {
		if (document.layers) { // Netscape 4
			document.id.display = 'block';
		} else { // IE 4
			document.all.id.style.display = 'block';
		}
	}
}


// declare a global  XMLHTTP Request object
var XmlHttpObj;

// create an instance of XMLHTTPRequest Object, varies with browser type, try for IE first then Mozilla
function CreateXmlHttpObj()
{
	// try creating for IE (note: we don't know the user's browser type here, just attempting IE first.)
	try
	{
		XmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			XmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
		} 
		catch(oc)
		{
			XmlHttpObj = null;
		}
	}
	// if unable to create using IE specific code then try creating for Mozilla (FireFox) 
	if(!XmlHttpObj && typeof XMLHttpRequest != "undefined") {
		XmlHttpObj = new XMLHttpRequest();
	}
}

function getModel(makeListId)
{
	makeListFormId = makeListId;
	var makeList = document.getElementById(makeListId);
	var selectedMake = makeList.options[makeList.selectedIndex].value;
	var requestUrl;
	requestUrl = "xml_data_provider.php" + "?filter=" + encodeURIComponent(selectedMake);

	CreateXmlHttpObj();
	if(XmlHttpObj) {
        // assign the StateChangeHandler function ( defined below in this file)
        // to be called when the state of the XmlHttpObj changes
        // receiving data back from the server is one such change
		XmlHttpObj.onreadystatechange = StateChangeHandler;
		
		// define the iteraction with the server -- true for as asynchronous.
		XmlHttpObj.open("GET", requestUrl, true);
		
		// send request to server, null arg  when using "GET"
		XmlHttpObj.send(null);		
	}
}

// this function called when state of  XmlHttpObj changes
// we're interested in the state that indicates data has been
// received from the server
function StateChangeHandler()
{
	// state ==4 indicates receiving response data from server is completed
	if(XmlHttpObj.readyState == 4) {
		// To make sure valid response is received from the server, 200 means response received is OK
		if(XmlHttpObj.status == 200) {
			populateModelList(XmlHttpObj.responseXML.documentElement);
		} else {
			alert("problem retrieving data from the server, status code: "  + XmlHttpObj.status);
		}
	}
}

// populate the contents of the dropdown list
function populateModelList(modelNode)
{
	if(makeListFormId == 'makeSideList') {
		var modelFormId = 'modelList';
	} else if(makeListFormId == 'make') {
		var modelFormId = 'model';
	}	

    var modelList = document.getElementById(modelFormId);
	// clear the list 
	for (var count = modelList.options.length-1; count >-1; count--) {
		modelList.options[count] = null;
	}

	var modelNode = modelNode.getElementsByTagName('model');
	var idValue;
	var textValue; 
	var optionItem;
	// populate the dropdown list with data from the xml doc
	for (var count = 0; count < modelNode.length; count++) {
   		textValue = GetInnerText(modelNode[count]);
		idValue = modelNode[count].getAttribute("id");
		optionItem = new Option( textValue, idValue,  false, false);
		modelList.options[modelList.length] = optionItem;
	}
}

// returns the node text value 
function GetInnerText (node)
{
	 return (node.textContent || node.innerText || node.text) ;
}

function popup(url) {
  window.open(url,'','scrollbars=yes,menubar=yes,resizable=yes,toolbar=yes,location=no,status=no');
  return true;
}

function perPage(limit)
{
document.listingPerpage.submit();
}
function next_prev_page(val)
{
document.listingPerpage.page.value=val;
document.listingPerpage.submit();
}


var VIDEO_PLAYER = null;
function playerReady(obj) {
	VIDEO_PLAYER = document.getElementById(obj.id);
}

function changeDemo(id) {
  var vid = PREVIEW_SLIDER_IMAGES[id];
  if (!vid) {
    alert('Can not fetch video data!');
    return;
  }

  // STOP VIDEO
  VIDEO_PLAYER.sendEvent("STOP");

  // UPDATE CONTENT
  $('#pd_title').html(vid.title);
  $('#pd_desc').html(vid.desc);
  $('#pd_company_url').html(vid.url);
  $('#pd_company_url')[0].href = vid.url;

  var id1 = 'li#_thumb_'+PS_INSTANCE.currentImageNumber;
  var id2 = 'li#_thumb_'+id;
  $(id1).removeClass('ps-current');
  $(id2).addClass('ps-current');
  PS_INSTANCE.currentImageNumber = id;

  // LOAD NEW VIDEO
  VIDEO_PLAYER.sendEvent("LOAD", vid.s_u);
};

function changeImage(id) {
  var img = PREVIEW_SLIDER_IMAGES[id];
  if (!img) {
    alert('Can not fetch image data!');
    return;
  }

  // UPDATE CONTENT
  $('#pd_title').html(img.title);
  $('#pd_desc').html(img.desc);
  $('#big-image')[0].src = img.s_u;

  var id1 = 'li#_thumb_'+PS_INSTANCE.currentImageNumber;
  var id2 = 'li#_thumb_'+id;
  $(id1).removeClass('ps-current');
  $(id2).addClass('ps-current');
  PS_INSTANCE.currentImageNumber = id;
};


function bookmark_link(el) {
  if (window.external && window.external.AddFavorite) {
    //IE6+
    window.external.AddFavorite(window.location.href, document.title);
    return false;
  }

  if (window.opera && window.print) {
    // Opera
    return true;
  }

  alert('Press CTRL + D to add page into your browser bookmarks');

  return false;
};
