var GB_ROOT_DIR = "/static/greybox/";

function gbid(elem){
    return document.getElementById(elem);
}
function setElemText(elem, txt){
    var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false;
    
    if(!hasInnerText){
        elem.textContent = txt;
    } else{
        elem.innerText = txt;
    }
}
function getElemText(elem){
    var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false;
    if(!hasInnerText){
        return elem.textContent;
    } else{
        return elem.innerText;
    }
}
function setHtml(elem, txt){
    elem.innerHTML = txt;
}

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

function setFocus(elemid)
{
        var elem = document.getElementById(elemid);
        if(elem) elem.focus();
}

function getWindowSize() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return {'width': myWidth, 'height': myHeight };
  //window.alert( 'Height = ' + myHeight );
}

function conf(url) {
	var answer = confirm("Are you sure?")
	if (answer){
		window.location = url;
	}
}

function getSelectValue(selectId){
        ele = gbid(selectId);
        return ele.options[ele.selectedIndex].value;
}

function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

function hideLayer( whichLayer ){
    var elem = gbid(whichLayer);
    elem.style.display = 'none';
}
function showLayer( whichLayer ){
    var elem = gbid(whichLayer);
    elem.style.display = 'block';    
}

//http://www.netlobo.com/div_hiding.html
function toggleLayer( whichLayer )
{
  var elem, vis;
  if( document.getElementById ) // this is the way the standards work
    elem = document.getElementById( whichLayer );
  else if( document.all ) // this is the way old msie versions work
      elem = document.all[whichLayer];
  else if( document.layers ) // this is the way nn4 works
    elem = document.layers[whichLayer];
  vis = elem.style;
  // if the style.display value is blank we try to figure it out here
  if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
    vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
  vis.display = (vis.display==''||vis.display=='block')?'none':'block';
}

function writeQuantity(){

    var quand = document.getElementById('quantityDisplay');
    var quan = document.getElementById('quantityInput');
    
    setElemText(quand, "1")

    if(quan.value == ""){
        return
    }
    
    var iquan = parseInt(quan.value);
    if( !isNaN(iquan) ){
        quan.value = iquan;
        setElemText(quand, iquan);
    }
}

function updateInvoice(price, inscost) {
    
    var item = document.getElementById('theitem');
    var ship = document.getElementById('ship');
    var ins = document.getElementById('ins');
    var tot = document.getElementById('tot');
    //var quan = document.getElementById('quantityInput');
    
    var val = parseInt(getCheckedValue(document.buystuff.shipServ));
    setElemText(ship,price[""+val+""].toFixed(2));
    var tex = getElemText(item);
    //alert(tex);
    var t = parseFloat(tex);
    
    //var iquan = 1;
    //if( quan.value != "" )
    //    iquan = parseInt(quan.value);
    //if( isNaN(iquan) )
    //    quan.value = "1"
        //alert("Quantity must be an integer!");
    //else
    //    t = t*iquan;
    
    t += parseFloat(price[""+val+""]);
    
    
    try{
        if(document.buystuff.insurance.checked == true){
            var c = inscost;
            setElemText(ins, c.toFixed(2));
            t += parseFloat(inscost);
        }
        else
            setElemText(ins, "0.00");
    }
    catch(err){
        setElemText(ins, "0.00");
    }
    
    setElemText(tot, t.toFixed(2));
}

function setEnable(checkid, textid) {
        var check = document.getElementById(checkid);
        var text = document.getElementById(textid);
        
        if(check.checked == true)
                text.disabled = false;
        else
                text.disabled = true;
}

function getUserTimezoneHours(){
    var visitortime = new Date();
    return -1*(visitortime.getTimezoneOffset()/60);
}

function getUserTimezone(){
    var visitortime = new Date();
    document.write('<input type="hidden" name="userTimezone" ');
    if(visitortime) {
        document.write('value="' + -1*(visitortime.getTimezoneOffset()/60) + '">');
    }
    else {
        document.write('value="0">');
    }
}

//***********************************************8

function trim(sInString) {
  sInString = sInString + '';
  sInString = sInString.replace( /^\s+/g, "" );// strip leading
  return sInString.replace( /\s+$/g, "" );// strip trailing
}

function numCharsLeftStr(txt, label, maxchars){
        var lab = document.getElementById(label);
        
        var num = maxchars - trim(txt).length;
        if( num <= 0 )
                num = 0;

        setElemText(lab, num + " left");
        
        //if(num == 0)
        //        return false;
        return true;
}

function numCharsLeft(txtb, label, maxchars){
        var box = document.getElementById(txtb);
        return numCharsLeftStr(box.value, label, maxchars);
}

function getKeyCode(e)
{
        if (window.event)
                return window.event.keyCode;
        else if (e)
                return e.which;
        else
                return null;
}
function keyRestrict(e, validchars, enterKey){//, caseSensitive) {
  var key='', keychar='';
  key = getKeyCode(e);
  if (key == null) return true;
  
  keychar = String.fromCharCode(key);
  //if( !caseSensitive ){
        keychar = keychar.toLowerCase();      
        validchars = validchars.toLowerCase();
  //}
  
  if (validchars.indexOf(keychar) != -1)
    return true;
  if ( key==null || key==0 || key==8 || key==9 /*|| key==13*/ || key==27 )
    return true;
  if ( enterKey && key==13 )
    return true;

  return false;
}

function stopRKey(evt) {
  var evt = (evt) ? evt : ((event) ? event : null);
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
}

function getEvent(e){
        if (!e) var e = window.event;
        return e;
}

function getTarget(e){
	var targ;
        if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
        return targ;
}

function removeAllNodesElem(elem){
        if ( elem.hasChildNodes() )
        {
            while ( elem.childNodes.length >= 1 )
            {
                elem.removeChild( elem.firstChild );       
            } 
        }
}

function removeAllNodes(elemId){
        var cell = document.getElementById(elemId);       
        removeAllNodesElem(cell);
}

//*************************************************

//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Your Browser Sucks!\nIt's about time to upgrade don't you think?");
	}
}

//Our XmlHttpRequest object to get the auto suggest
var yajax = getXmlHttpRequestObject();

function nop(){}

//put the user's timezone in their session
function setTz() {
	if (yajax && (yajax.readyState == 4 || yajax.readyState == 0)) {
		var hours = getUserTimezoneHours()
                yajax.open("GET", '/settz?tz=' + hours, true);
                yajax.onreadystatechange =nop; 
                yajax.send(null);
	}
}

var tagTime;
var lastSelIndex;
var selIndex;
var selLen;
var keycode;

var bgSel = '#FFD67E';

function tagTimeout(e){
	var keynum = null
	if(window.event) // IE
	{
		keynum = e.keyCode
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which
	}
	
	if( keynum != null && ((keynum >= 37 && keynum <= 40) || keynum == 13 || keynum == 32 || keynum == 27 || keynum == 9) ){
		handleSuggKeyPress(keynum);
		clearTimeout(tagTime);
		return;
	}
	
	clearTimeout(tagTime);
	tagTime = setTimeout("tagSuggest(null)", 200);
}

function handleSuggKeyPress(keycode){
	if( keycode != null ){
		if( keycode == 38 && selLen > 0){ //up
			lastSelIndex = selIndex;
			selIndex = Math.max(0, selIndex-1);
			updateSuggIndex();
		}
		else if( keycode == 40 && selLen > 0){ //down
			lastSelIndex = selIndex;
			selIndex = Math.min(selLen-1, selIndex+1);
			updateSuggIndex();
		}
		else if( keycode == 13 || keycode == 32 ){ //enter
			clearSugBox(null);
		}
	}
}

function clearSugBox(value){
	if( value != null )
		document.getElementById('tags').value = value;
	sb = document.getElementById('tag_sug');
	sb.style.left = "-999px";
        sb.style.top = "-999px";
	sb.innerHTML = '';
	selLen = -1;
	selIndex = -1;
	lastSelIndex = -1;
}

function updateSuggIndex(){
	if( lastSelIndex != -1 && selLen > 0){
		var na = "tsug_"+lastSelIndex;
                var item = document.getElementById(na);
		item.style.background = '#ffffff';
	}
	if( selIndex != -1 && selLen > 0){
                var na = "tsug_"+selIndex;
                var item = document.getElementById(na);
		document.getElementById('tags').value = item.innerHTML + " ";
		item.style.background = bgSel;
	}
}

function tagSuggest(keycode) {
	if (yajax && (yajax.readyState == 4 || yajax.readyState == 0)) {
		var str = escape(document.getElementById('tags').value);
		arr = str.split("%20");
		str = arr[arr.length -1];
		if( str != ''){
			yajax.open("GET", '/tagsuggest?t=' + str, true);
			yajax.onreadystatechange = handleTagSuggest; 
			yajax.send(null);
		}
		else
			document.getElementById('tag_sug').innerHTML = ''
	}
}

//Called when the yajax response is returned.
function handleTagSuggest() {
	if (yajax && yajax.readyState == 4) {
		tbox = document.getElementById('tags');
		var txt = escape(tbox.value).split("%20");
		prep = "";
		for( i = 0; i< txt.length -1; i++){
			prep += txt[i] + ' ';
		}
		var ss = document.getElementById('tag_sug')
		ss.innerHTML = '';
		var str = yajax.responseText.split("\n");
		selLen = str.length -1;
		selIndex = -1;
		lastSelIndex = -1;
		
                var show = false;
		for(i=0; i < str.length -1 && str[i] != ''; i++) {
                        show = true;
                        //alert('-'+str[i]+'-')
			//Build our element string.  This is cleaner using the DOM, but
			//IE doesn't support dynamically added attributes.
			var suggest = '<div id="tsug_'+i+'" onmouseover="javascript:suggestOver(this);" ';
			suggest += 'onmouseout="javascript:suggestOut(this);" ';
			suggest += 'onclick="javascript:setTag(this.innerHTML);" ';
			suggest += 'class="suggest_link">' + prep + str[i] + '</div>';
			ss.innerHTML += suggest;
		}
                if(show){
                        //var pos = cumulativeOffset(tbox);
                        pos = [tbox.offsetLeft,tbox.offsetTop];
                        ss.style.left = tbox.offsetLeft+'px'
                        ss.style.top = (tbox.offsetTop+21)+'px'
                        ss.style.width = (tbox.offsetWidth)+'px'
                        //alert(pos);
                }
                else
                        clearSugBox(null)
	}
}

//Mouse over function
function suggestOver(div_value) {
	if( selIndex != -1 ){
		var item = document.getElementById('tsug_'+selIndex);
		item.style.background = '#ffffff';
	}
	div_value.style.background = bgSel;
}
//Mouse out function
function suggestOut(div_value) {
	//div_value.className = 'suggest_link';
	div_value.style.background = '#ffffff'
}

//Click function
function setTag(value) {
	clearSugBox(value);
}
