// SVN $Id: globals.js 33048 2008-10-13 11:26:57Z dev2003\aschiessl $ 
// browserdetection
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

// generell functions

var itemDisabled='item-disabled';
var selectDisabled='select-disabled';
var inputDisabled='input-disabled';
var texrareaDisabled='textarea-disabled';
var labelDisabled='label-disabled';

function AddCssClassToItem(cssclass, item)
{
    RemoveCssClassFromItem(cssclass, item);
    item.className = (item.className+' '+cssclass).replace(/^\s+|\s+$/, "");
}
function RemoveCssClassFromItem(cssclass, item)
{
    item.className = (item.className.replace(cssclass, '')).replace(/^\s+|\s+$/, "");
}

function gE(id) {
	return document.getElementById(id);
}

function defaultTextFocus(elem,cssclass)
{
	try {
		if (elem.defaultText==elem.value) elem.value='';
	}catch(e){ }
	if (elem.defaultTextCssClass)
	{
		RemoveClassName(elem, elem.defaultTextCssClass);
	} else if (cssclass)
	{
		elem.className = cssclass;
	}
}

function defaultTextBlur(elem, evt, cssclass)
{
	try	{
		if (elem.value=='')
		{
			elem.value=elem.defaultText;
			if (typeof(elem.onchange) == 'function') elem.onchange(evt);
			if (elem.defaultTextCssClass)
			{
				AddClassName(elem, elem.defaultTextCssClass);
			} else if (cssclass)
			{
				elem.className = cssclass;
			}
		}
	}catch(e){ }
}

function popUp(theUrl,theName,props)
{
 var popupwin=window.open(theUrl,theName,props);
 if (popupwin.focus) popupwin.focus();
}

function trim(str)
{
	// trim spaces from string
  return str.replace(/^\s+|\s+$/, "");
}

function AddClassName(elem, className)
{
  RemoveClassName(elem, className);
  elem.className = trim(elem.className+' '+className);
}

function RemoveClassName(elem, className)
{
  elem.className = trim(elem.className.replace(className, ''));
}

function ContainsClassName(elem, className)
{
  return (elem.className == elem.className.replace(className, ''));
}

// handling dom
function removeElements(id)
{
	var elem=gE(id);
	try
	{
		elem.innerHTML='';
		for (cn in elem.childNodes)
		{
			elem.removeChild(cn);
		}
	}
	catch (e) {}
}

function createElement(parentElement, newElem)
{
	var newNode=document.createElement(newElem);
	parentElement.appendChild(newNode);
	return newNode;
}

function createP(parentElement, css, text)
{
	var newNode=document.createElement('p');
	newNode.className=css;
	if (text) createText(newNode, text);
	parentElement.appendChild(newNode);
	return newNode;
}

function createDiv(parentElement, css, text)
{
	var newNode=document.createElement('div');
	newNode.className=css;
	if (parentElement) parentElement.appendChild(newNode);
	if (text) createText(newNode, text);
	return newNode;
}

function createSpan(parentElement, css, text)
{
	var newNode=document.createElement('span');
	newNode.className=css;
	if (parentElement) parentElement.appendChild(newNode);
	if (text) createText(newNode, text);
	return newNode;
}

function createText(parentElement, text)
{
	var newNode=document.createTextNode(text);
	parentElement.appendChild(newNode);
}

function createCheckbox(parentElement, id)
{
	var newNode=document.createElement('input');
	newNode.type='checkbox';
	newNode.id=id;
	parentElement.appendChild(newNode);
	return newNode;
}

function createAnchor(parentElement, css, href, text)
{
	var newNode=document.createElement('a');
	if (text) createText(newNode, text);
	newNode.href=href;
	newNode.className=css;
	parentElement.appendChild(newNode);
	return newNode;
}

function createImage(parentElement, css, src, alt)
{
	var newNode=document.createElement('img');
	newNode.src=src;
	newNode.alt=alt;
	newNode.title=alt;
	newNode.className=css;
	parentElement.appendChild(newNode);
	return newNode;
}

function createRow(parentElement, css)
{
	var newNode=document.createElement('tr');
	newNode.className=css;
	parentElement.appendChild(newNode);
	return newNode;
}

function createCell(parentElement, css, text)
{
	var newNode=document.createElement('td');
	newNode.className=css;
	if (text) createText(newNode, text);
	parentElement.appendChild(newNode);
	return newNode;
}

// handling urls
function changeUrlParameter(url, param, val)
{
	var start=url.indexOf('?'+param);
	if (start==-1) start=url.indexOf('&'+param);
	if (start==-1)
	{
		if (url.indexOf('?')==-1)
			url+='?';
		else
			url+='&';
		return url+param+'='+escape(val);
	}
	var end=url.indexOf('&',start+1);
	if (end==-1) end=url.length;
	return url.substring(0,start+1)+param+'='+escape(val)+url.substring(end,url.length);
}

function changeMultipleUrlParameter(url, param, val) //val can be comma separated
{
	url = removeExistingUrlParameter(url, param);
	var a = val.split(',');
	for (var i=0; i<a.length; i++)
	{
		if (url.indexOf('='))
		{
			//already has parameters
			url = url.concat('&'+param+'='+escape(a[i]));
		}
		else
		{
			url = url.concat('?'+param+'='+escape(a[i]));
		}
	}
	return url;
}

function removeUrlParameter(url, param)
{
	var start=url.indexOf('?'+param);
	if (start==-1) start=url.indexOf('&'+param);
	if (start==-1) return url;
	var end=url.indexOf('&',start+1);
	if (end==-1) end=url.length;
	return url.substring(0,start+1)+url.substring(end,url.length);
}

function removeExistingUrlParameter(url, param)
{
	//parameters not at the end
	var regex = new RegExp(param+'=[^&]*&');
	var found = regex.exec(url);
	while (found)
	{
		url = url.replace(found[0], '');
		found = regex.exec(url);
	}
	//rightmost parameter
	regex = new RegExp('[?&]'+param+'=[^&]*');  //no ampersand
	found = regex.exec(url);
	if (found)
	{
		url = url.replace(found[0], '');
	}
	return url;
}

function getUrlParameter(url, param)
{
	var start=url.indexOf('?'+param);
	if (start==-1) start=url.indexOf('&'+param);
	if (start==-1) return null;
	var end=url.indexOf('&',start+1);
	if (end==-1) end=url.length;
	return url.substring(start+1,end);
}

// makemodel selection
function onSelectionChanged(selList,hdVal,versionboxId)
{
	var oSelList=gE(selList);
	gE(hdVal).value=oSelList.options[oSelList.selectedIndex].value;
	if (versionboxId != '')
	{
		var oVersionValue=gE(versionboxId);
		if(oVersionValue != null)
		{
		    oVersionValue.value='';
			if(gE(hdVal).value==0)
		    {
		        oVersionValue.disabled='disabled';
		        AddCssClassToItem(inputDisabled, oVersionValue);
		    }
		    else
		    {
		         oVersionValue.disabled='';
		         RemoveCssClassFromItem(inputDisabled, oVersionValue);
		    }
		}
	}
}

function initMakeModel(makeListId, modelListId, modelValId, versionboxId)
{
	chooseMake(true, makeListId, modelListId, false);
	var oModelSelect=gE(modelListId);
	var oModelValue=gE(modelValId).value;
	if (versionboxId != '')
	{
		var oVersionValue=gE(versionboxId);
		if(oVersionValue != null)
		{
		    if(oModelValue==0)
		    {
		        oVersionValue.disabled='disabled';
		        AddCssClassToItem(inputDisabled, oVersionValue);
		    }
		    else
		    {
		         oVersionValue.disabled='';
		         RemoveCssClassFromItem(inputDisabled, oVersionValue);
		    }
		}
	}
	
	for (var i=0;i<oModelSelect.options.length;i++)
	{
		if (oModelSelect.options[i].value==oModelValue)
		{
			oModelSelect.selectedIndex=i;
			break;
		}
	}
}
function initMultiControl(parent, make, model, version, caption, captionNr)
{
	//initMakeModel(make, model, "","");
	setMultiControl(parent, make, model, version, caption, captionNr);
}

function setMultiControl(parent, make, model, version, caption, captionNr)
{
	var oParent=gE(parent);
	
	var oMake=gE(make);
	var oModel=gE(model);
	var oVersion=gE(version);
	var oCaption=gE(caption);
	var oCaptionNr=gE(captionNr);
	   	
	oMake.disabled=((oParent.selectedIndex==0) ? 'disabled' : '');
	if(oMake.selectedIndex > 0)oMake.disabled= '';
	oModel.disabled=((oMake.selectedIndex==0) ? 'disabled' : '');
	oVersion.disabled=((oModel.selectedIndex==0) ? 'disabled' : '');
	
	if(oMake.disabled)
	{
	    AddCssClassToItem(selectDisabled, oMake);
	    AddCssClassToItem(labelDisabled, oCaption);
	    AddCssClassToItem(labelDisabled, oCaptionNr);
	}
	else
	{
	    RemoveCssClassFromItem(selectDisabled, oMake);
	    RemoveCssClassFromItem(labelDisabled, oCaption);
	    RemoveCssClassFromItem(labelDisabled, oCaptionNr);	
	}
	
	if(oModel.disabled)
	{
	    AddCssClassToItem(selectDisabled, oModel);
	}
	else
	{
	    RemoveCssClassFromItem(selectDisabled, oModel);	
	}
	
	if(oVersion.disabled)
	{
	    AddCssClassToItem(inputDisabled, oVersion);
	}
	else
	{
	    RemoveCssClassFromItem(inputDisabled, oVersion);	
	}	
}

function chooseMake(headContained, makeListId, modelListId, updateModel)
{
    var oMakeSelect=gE(makeListId);
	var oModelSelect=gE(modelListId);
	oModelSelect.selectedIndex=0;
	oModelSelect.options.length=1;
	var offsetForAll=(headContained ? 1 : 0);
	if (oMakeSelect.selectedIndex>=offsetForAll)
	{
		var modList=(arrModels[oMakeSelect.selectedIndex+1-offsetForAll]).split(';');
		oModelSelect.options.length=modList.length+1;
		for (var i=0;i<modList.length;i++)
		{
			oModelSelect.options[i+1].value=modList[i].split(',')[0];
			oModelSelect.options[i+1].text=modList[i].split(',')[1];
		}
	}
	if (oModelSelect.options.length==2) oModelSelect.selectedIndex=1;
	
	if(headContained && oMakeSelect.selectedIndex==0)
	{
	    oModelSelect.disabled='disabled';
	    AddCssClassToItem(selectDisabled, oModelSelect);
	}
	else
	{
	    oModelSelect.disabled='';
	    RemoveCssClassFromItem(selectDisabled, oModelSelect);
	}
			
	if (updateModel) oModelSelect.onchange();
}


function SetZipSearchOnChange(countrySelect, radiusSelect, zipInput)
{
	if((countrySelect == null) || (radiusSelect == null) || (zipInput == null))
	{
		return;
	}
	if (countrySelect.selectedIndex == 0)
	{
		radiusSelect.disabled = 'disabled';
		radiusSelect.selectedIndex = 0;
		zipInput.disabled = 'disabled';
		zipInput.value = zipInput.defaultText;
		
		// requested by PM - ticket 15158
	    AddCssClassToItem(selectDisabled, radiusSelect);
	    AddCssClassToItem(inputDisabled, zipInput);
	}
	else
	{
		radiusSelect.disabled = '';
		zipInput.disabled = '';
		
		// requested by PM - ticket 15158
	    RemoveCssClassFromItem(selectDisabled, radiusSelect);
	    RemoveCssClassFromItem(inputDisabled, zipInput);
	}
}


