var arr_top_navigation = new Array(5);
var arr_tabs = new Array(2);
var arr_footer = new Array(4);
var flash_required = 6;
var flash_js_debug = false;
var site_root = '/uk/business/b2b/';
var search_error = 'Please enter a search term in box provided';
var current_navigation;
var xml_http;
var str_html='';
var form_action_local = 'http://www.martinburford.co.uk/_development/samsung/dealer_locator/';
var form_action_live = 'http://www.samsung.com/uk/search/locators/';
var iframe_local = 'http://www.martinburford.co.uk/_development/samsung/dealer_locator/';
var iframe_live = 'http://www.samsungstorelocator.com/';

//Google maps right hand panel product group array (b2b and b2c sites)
var b2b_products = new Array('Printers','Notebooks','Faxes','Displays');

arr_top_navigation[0] = 'products';
arr_top_navigation[1] = 'service';
arr_top_navigation[2] = 'support';
arr_top_navigation[3] = 'smarter_technology';
arr_top_navigation[4] = 'smarter_business';
arr_top_navigation[5] = 'why_choose_samsung';

arr_tabs[0] = 'overview';
arr_tabs[1] = 'specifications';
arr_tabs[2] = 'supplies_and_options';

arr_footer[0] = 'contact_us';
arr_footer[1] = 'sitemap';
arr_footer[2] = 'legal';
arr_footer[3] = 'privacy';
arr_footer[4] = 'accessibility';

//preload top navigation images
image_preloader(arr_top_navigation,'images/global/top_navigation/');
//preload product details tab images
image_preloader(arr_tabs,'images/global/product_tabs/');
//preload footer images
image_preloader(arr_tabs,'images/global/footer/');

function image_preloader(obj,directory_prefix){
	obj_image = new Image();
	obj_image = new Array();

	for(i=0; i<=obj.length-1; i++){
		obj_image.src = directory_prefix + obj[i] + '_off.gif';
		obj_image.src = directory_prefix + obj[i] + '_on.gif';
	}
}

function image_roll(obj,state,directory_prefix){
	if((check_highlighted_navigation() != undefined)&&(current_navigation==undefined)){
		current_navigation = check_highlighted_navigation();
	}
    
	//change image states
	for(i=0; i<=arr_top_navigation.length-1; i++){
		if(arr_top_navigation[i] == obj.id){
			if(state == 'over'){
				obj.src = site_root + directory_prefix + arr_top_navigation[i] + '_on.gif';
			}
			else if(arr_top_navigation[i] != current_navigation){
				obj.src = site_root + directory_prefix + arr_top_navigation[i] + '_off.gif';
			}
		}
		else{
			//only turn off an image if it isn't the currently selected on
			if(current_navigation == undefined){
				document.getElementById(arr_top_navigation[i]).src = site_root + directory_prefix + arr_top_navigation[i] + '_off.gif';
			}
		}
	}
    
	//current_navigation = check_highlighted_navigation();
}

function check_highlighted_navigation(){
	//check current highlighted image - there may not be one though
	for(i=0; i<=arr_top_navigation.length-1; i++){
		if(document.getElementById(arr_top_navigation[i]).src.indexOf('_on.gif') > -1){
			return arr_top_navigation[i];
		}
	}
}

function toggle_tabs(obj,position){
	var tabs = 3;
	var css_change = ''
	
	//switch tab image on/off states
	for(i=0; i<=tabs-1; i++){
		obj_li = obj.getElementsByTagName("LI")[arr_tabs[i]];
		if(tabs_lookup(obj_li.id) == position){
			obj_li.getElementsByTagName("IMG")[0].src = '/uk/business/b2b/images/global/product_tabs/' + obj_li.id + '_on.jpg';
		}
		else{
			obj_li.getElementsByTagName("IMG")[0].src = '/uk/business/b2b/images/global/product_tabs/' + obj_li.id + '_off.jpg';
		}
	}
	
	switch(position){
		case 0:
			css_change = 'ossContent overview';
			break;
		case 1:
			css_change = 'ossContent';
			break;
		case 2:
			css_change = 'ossContent';
			break;
	}
	
	document.getElementById("ossContent").className = css_change;
	document.getElementById("ossContent").innerHTML = obj.getElementsByTagName("DIV")[position].innerHTML;
}

function tabs_lookup(objid){
	switch(objid){
		case 'overview':
			return 0;
			break;
		case 'specifications':
			return 1;
			break;
		case 'supplies_and_options':
			return 2;
			break;
	}
}

function search_check(obj){
	if(obj.qt.value.length == 0){
		alert(search_error);
		obj.qt.focus();
		return false;
	}
	return;
}

function browser_sniffer(){
	browser_agent = navigator.userAgent.toLowerCase();
	is_major = parseInt(navigator.appVersion);
	
	is_internet_explorer = (browser_agent.indexOf("msie") != -1);
	is_internet_explorer7 = (is_internet_explorer && (is_major == 4) && (browser_agent.indexOf("msie 7.")!=-1));

	is_windows = ((browser_agent.indexOf("win")!=-1) || (browser_agent.indexOf("16bit")!=-1));
}  

function load_xml_doc(url){
	xml_http = null;
	
	//detect browser
	browser_sniffer();

	//handle and override internet explorer 7's native xmlHTTP() support
	if(window.XMLHttpRequest && !is_internet_explorer7){
		xml_http = new XMLHttpRequest();
		mode = 'xml_http';
	}	
	else if(window.ActiveXObject){
		xml_http = new ActiveXObject("Microsoft.XMLHTTP");
		mode = 'activex';
	}
	
	if(xml_http!=null){
		xml_http.onreadystatechange = onResponse;
		xml_http.open("GET",url,true);
		xml_http.send(null);
	}
	else{
		//don't parse xml file
	}
}

function checkReadyState(obj){
	if(obj.readyState == 4){
		if(obj.status == 200){
			return true;
		}
		else{
			//problem parsing xml file
		}
	}
}

function onResponse(){
	if(checkReadyState(xml_http)){
		switch(mode){
			case 'xml_http':
				//non-ie
				render_xml_http();
				break;
			case 'activex':
				//ie
				render_activex();
				break;
		}
		document.getElementById('xml_navigation').innerHTML = str_html;
	}				
}

function render_xml_http(){
	var obj_response = xml_http.responseXML.documentElement;
	obj_sections = obj_response.getElementsByTagName("SECTION");
	matched_groups = 0;
	
	for(i=0; i<obj_response.childNodes.length; i++){
		if(obj_response.childNodes[i].hasAttributes()){
			str_html += '<strong>' + obj_response.childNodes[i].getAttribute("NAME") + '</strong><br />';
			obj_pages = obj_sections[matched_groups].getElementsByTagName("PAGE");

			for(y=0; y<obj_pages.length; y++){
				obj_link_texts = obj_pages[y].getElementsByTagName("LINK_TEXT");
				obj_link_urls = obj_pages[y].getElementsByTagName("LINK_URL");
				
				str_html += '-&nbsp;<a href="' + obj_link_urls[0].firstChild.data + '" target="_top">' + obj_link_texts[0].firstChild.data + '</a><br />';
			}
			
			//increment sections array counter
			matched_groups++;
		}
	}
}

function render_activex(){
	var obj_response = xml_http.responseXML.documentElement;				
	obj_sections = obj_response.getElementsByTagName("SECTION")

	for(i=0; i<obj_sections.length; i++){
		str_html += obj_response.childNodes(i).getAttribute("NAME") + '<br />';
		
		obj_pages = obj_sections[i].getElementsByTagName("PAGE");

		for(y=0; y<obj_pages.length; y++){
			obj_link_texts = obj_pages[y].getElementsByTagName("LINK_TEXT");
			obj_link_urls = obj_pages[y].getElementsByTagName("LINK_URL");
			
			str_html += '-&nbsp;<a href="' + obj_link_urls[0].firstChild.data + '" target="_top">' + obj_link_texts[0].firstChild.data + '</a><br />';
		}								
	}		
}

function dynamic_load_js(url){
	//dynamically call in relevant section js file
	var current_section = top.location.href.split("/");
	var section_name = current_section[current_section.length-3];
	
	return '<scr'+'ipt language="java'+'script" src="/uk/business/b2b/js/related_products_'+section_name+'.js"></scr'+'ipt>';
}

function dealer_locator_load_preset(site){
	var findAResellerDynamic = document.getElementById("findAResellerDynamic");
		
	switch(site){
		case 'b2b':
			obj = b2b_products;
			break;
		case 'b2c':
			obj = b2c_products;
			break;
	}

	//add initial element
	add_option(findAResellerDynamic,"Please select an option","");
	
	//add dynamic elements specific to either b2b or b2c site (array)
	for(i=0; i<=obj.length-1; i++){
		add_option(findAResellerDynamic,obj[i],obj[i].toLowerCase());
	}
	
	//auto-highlight product if running from b2b site
	if(site == 'b2b'){					
		for(i=1; i<findAResellerDynamic.length; i++){
			if(current_product_section == findAResellerDynamic.options[i].value){
				findAResellerDynamic[i].selected = true;
			}
		}
	}
}

function add_option(obj,text,value){
	var obj_option = new Option(text,value)
	var obj_length = obj.options.length
	
	obj.options[obj_length] = obj_option;
}

function delete_option(obj,obj_position){
	if(obj.options.length != 0){
		obj.options[obj_position] = null;
	}
}

function valid_uk_postcode(postcode){
	var valid_format = /\b[a-z]{1,2}\d{1,2}[a-z]?\s*\d[a-z]{2}\b/i;
	var is_valid = valid_format.test(postcode);
	
	return is_valid;
}

function dealer_locator_search(obj){
	var error = '';
	
	if(obj.findAResellerDynamic.options[obj.findAResellerDynamic.selectedIndex].value.length == 0){
		error += '\n> Please select a product grouping';
	}
	if((obj.postcode.value == "[enter your postcode]") || (obj.postcode.value == "") || (!valid_uk_postcode(obj.postcode.value))){
		error += '\n> Please enter a valid UK postcode';
	}
	else{
		var updated_postcode = obj.postcode.value.toUpperCase();
		obj.postcode.value = updated_postcode.replace(/\ /g, '');
	}
	
	//final comparison to check whether ok to submit				
	if(error.length > 0){
		alert('The following errors occured:\n' + error);
		return false;
	}
	else{
		obj.findAReseller.value = obj.findAResellerDynamic.value;
		return true;
	}
}	

function lookup_domain(){
	switch(document.domain){
		case 'www.martinburford.co.uk':
			return 'martinburford';
			break;
		case 'www.samsungstorelocator.com':
			return 'samsungstorelocator';
			break;
		case 'www.samsung.com':
			return 'samsungstorelocator';
			break;
		default:
			return 'local';
			break;
	}
}

function set_b2b_form_action(obj){
	str = (lookup_domain() == 'samsungstorelocator') ? form_action_live : form_action_local;
	str += "find_nearest_b2b_loader.htm";
	
	document.forms[obj].action = str;
}

function set_b2c_form_action(obj){
	str = (lookup_domain() == 'samsungstorelocator') ? form_action_live : form_action_local;
	str += "find_nearest_b2c_loader.htm";
	
	document.forms[obj].action = str;
}

/* javascript for genuine tooltip  */
var dw_event = {
  
  add: function(obj, etype, fp, cap) {
    cap = cap || false;
    if (obj.addEventListener) obj.addEventListener(etype, fp, cap);
    else if (obj.attachEvent) obj.attachEvent("on" + etype, fp);
  }, 

  remove: function(obj, etype, fp, cap) {
    cap = cap || false;
    if (obj.removeEventListener) obj.removeEventListener(etype, fp, cap);
    else if (obj.detachEvent) obj.detachEvent("on" + etype, fp);
  }, 

  DOMit: function(e) { 
    e = e? e: window.event;
    e.tgt = e.srcElement? e.srcElement: e.target;
    
    if (!e.preventDefault) e.preventDefault = function () { return false; }
    if (!e.stopPropagation) e.stopPropagation = function () { if (window.event) window.event.cancelBubble = true; }
        
    return e;
  }
  
}

var Tooltip = {
    followMouse: true,
    offX: 8,
    offY: 12,
    tipID: "tipDiv",
    showDelay: 100,
    hideDelay: 200,
    
    ready:false, timer:null, tip:null, 
  
    init: function() {  
        if ( document.createElement && document.body && typeof document.body.appendChild != "undefined" ) {
            if ( !document.getElementById(this.tipID) ) {
                var el = document.createElement("DIV");
                el.id = this.tipID; document.body.appendChild(el);
            }
            this.ready = true;
        }
    },
    
    show: function(e, msg) {
        if (this.timer) { clearTimeout(this.timer);	this.timer = 0; }
        this.tip = document.getElementById( this.tipID );
        if (this.followMouse) // set up mousemove 
            dw_event.add( document, "mousemove", this.trackMouse, true );
        this.writeTip("");  // for mac ie
        this.writeTip(msg);
        viewport.getAll();
        this.positionTip(e);
        this.timer = setTimeout("Tooltip.toggleVis('" + this.tipID + "', 'visible')", this.showDelay);
    },
    
    writeTip: function(msg) {
        if ( this.tip && typeof this.tip.innerHTML != "undefined" ) this.tip.innerHTML = msg;
    },
    
    positionTip: function(e) {
        if ( this.tip && this.tip.style ) {
            // put e.pageX/Y first! (for Safari)
            var x = e.pageX? e.pageX: e.clientX + viewport.scrollX;
            var y = e.pageY? e.pageY: e.clientY + viewport.scrollY;
    
            if ( x + this.tip.offsetWidth + this.offX > viewport.width + viewport.scrollX ) {
                x = x - this.tip.offsetWidth - this.offX;
                if ( x < 0 ) x = 0;
            } else x = x + this.offX;
        
            if ( y + this.tip.offsetHeight + this.offY > viewport.height + viewport.scrollY ) {
                y = y - this.tip.offsetHeight - this.offY;
                if ( y < viewport.scrollY ) y = viewport.height + viewport.scrollY - this.tip.offsetHeight;
            } else y = y + this.offY;
            
            this.tip.style.left = x + "px"; this.tip.style.top = y + "px";
        }
    },
    
    hide: function() {
        if (this.timer) { clearTimeout(this.timer);	this.timer = 0; }
        this.timer = setTimeout("Tooltip.toggleVis('" + this.tipID + "', 'hidden')", this.hideDelay);
        if (this.followMouse) // release mousemove
            dw_event.remove( document, "mousemove", this.trackMouse, true );
        this.tip = null; 
    },

    toggleVis: function(id, vis) { // to check for el, prevent (rare) errors
        var el = document.getElementById(id);
        if (el) el.style.visibility = vis;
    },
    
    trackMouse: function(e) {
    	e = dw_event.DOMit(e);
     	Tooltip.positionTip(e);
    }
    
}

var viewport = {
  getWinWidth: function () {
    this.width = 0;
    if (window.innerWidth) this.width = window.innerWidth - 18;
    else if (document.documentElement && document.documentElement.clientWidth) 
  		this.width = document.documentElement.clientWidth;
    else if (document.body && document.body.clientWidth) 
  		this.width = document.body.clientWidth;
  },
  
  getWinHeight: function () {
    this.height = 0;
    if (window.innerHeight) this.height = window.innerHeight - 18;
  	else if (document.documentElement && document.documentElement.clientHeight) 
  		this.height = document.documentElement.clientHeight;
  	else if (document.body && document.body.clientHeight) 
  		this.height = document.body.clientHeight;
  },
  
  getScrollX: function () {
    this.scrollX = 0;
  	if (typeof window.pageXOffset == "number") this.scrollX = window.pageXOffset;
  	else if (document.documentElement && document.documentElement.scrollLeft)
  		this.scrollX = document.documentElement.scrollLeft;
  	else if (document.body && document.body.scrollLeft) 
  		this.scrollX = document.body.scrollLeft; 
  	else if (window.scrollX) this.scrollX = window.scrollX;
  },
  
  getScrollY: function () {
    this.scrollY = 0;    
    if (typeof window.pageYOffset == "number") this.scrollY = window.pageYOffset;
    else if (document.documentElement && document.documentElement.scrollTop)
  		this.scrollY = document.documentElement.scrollTop;
  	else if (document.body && document.body.scrollTop) 
  		this.scrollY = document.body.scrollTop; 
  	else if (window.scrollY) this.scrollY = window.scrollY;
  },
  
  getAll: function () {
    this.getWinWidth(); this.getWinHeight();
    this.getScrollX();  this.getScrollY();
  }
  
}

// adjust horizontal and vertical offsets here
// (distance from mouseover event which activates tooltip)
Tooltip.offX = 15;  
Tooltip.offY = 15;
Tooltip.followMouse = false;  // must be turned off for hover-tip

// tooltip content variables
var msgTips = 'Genuine Windows is authentic Windows software that is properly licensed and legally installed. Learn more about the special benefits reserved for genuine Windows customers by visiting <a href="http://www.microsoft.com/genuine" target="_blank">www.microsoft.com/genuine</a>.';

function doTooltip(e, msg) {
  if ( typeof Tooltip == "undefined" || !Tooltip.ready ) return;
  Tooltip.clearTimer();
  var tip = document.getElementById? document.getElementById(Tooltip.tipID): null;
  if ( tip && tip.onmouseout == null ) {
      tip.onmouseout = Tooltip.tipOutCheck;
      tip.onmouseover = Tooltip.clearTimer;
  }
  Tooltip.show(e, msg);
}

function hideTip() {
  if ( typeof Tooltip == "undefined" || !Tooltip.ready ) return;
  Tooltip.timerId = setTimeout("Tooltip.hide()", 300);
}

Tooltip.tipOutCheck = function(e) {
  e = dw_event.DOMit(e);
  // is element moused into contained by tooltip?
  var toEl = e.relatedTarget? e.relatedTarget: e.toElement;
  if ( this != toEl && !contained(toEl, this) ) Tooltip.hide();
}

// returns true of oNode is contained by oCont (container)
function contained(oNode, oCont) {
  if (!oNode) return; // in case alt-tab away while hovering (prevent error)
  while ( oNode = oNode.parentNode ) if ( oNode == oCont ) return true;
  return false;
}

Tooltip.timerId = 0;
Tooltip.clearTimer = function() {
  if (Tooltip.timerId) { clearTimeout(Tooltip.timerId); Tooltip.timerId = 0; }
}

Tooltip.unHookHover = function () {
    var tip = document.getElementById? document.getElementById(Tooltip.tipID): null;
    if (tip) {
        tip.onmouseover = null; 
        tip.onmouseout = null;
        tip = null;
    }
}

dw_event.add(window, "unload", Tooltip.unHookHover, true);