/*
 * Constructor of ioArea class, takes care of all input related management
 *
 * */
function ioArea(isEmbed,msgObj){
  
  if(isEmbed && isEmbed.on==true) {
    this.embed={};
    this.embed.fix=isEmbed.fix;
    this.embed.hosting=isEmbed.hosting;  
    this.embed.other=(this.embed.fix=='start')?'end':
                     (this.embed.fix=='end')?'start':'';
    this.initEmbed();
  }
  this.mode="LOCATE"; //which mode the application is in ... LOCATE/ROUTE
  this.locationName=(typeof(msgObj.locationName)!='undefined')?msgObj.locationName:"Business or Address Locator";
  this.startPlaceName="Start Address";
  this.endPlaceName="End Address";
  this.defaultLocateMessage = "Please select a location to search";
  this.defaultRouteMessage = 'Please enter your Address for Video Directions';
  this.defaultRouteEmbedMessage = 'Please enter your Address for Video Directions'; 
  this.inputValEmail="id@company.com";
  this.inputValSMS="Eg. XXXXXYYYYY";
  this.inputMapOrText='TEXT';
  this.helpLocate=(typeof(msgObj.helpLocate)!='undefined')?msgObj.helpLocate:'';
  this.helpRoute=(typeof(msgObj.helpRoute)!='undefined')?msgObj.helpRoute:'';
  this.userText='';
  this.currentText={};
  this.currentText.start='';
  this.currentText.end='';
  this.sendSuggestRequest=1;
  this.theRowSelected=null;
  this.noOfSuggestions=0;
  this.startAddress=null;
  this.endAddress=null;
  this.loadSyncCalled=false;
  this.openLayersLoaded=false;
  this.popup=null;
  this.searchComplete=false;
  this.suggestedPlace=0;
  this.topBarUI = false;
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    this.topBarUI = true;
  }
  this.bangaloreCenter={
    address:{name:'Bangalore Center'},
    //geom:'POINT('+globalLon+' '+globalLat+')'
    geom:'POINT('+cfg.centerLon+' '+cfg.centerLat+')'
  }    
  this.loadingDivMessage="<table align='center'><tr><td><a class='message'><b>Loading..</b></a></td><td><img src='"+imagePathsObj.load+"' /></td><td><a style='cursor:pointer;' class='message'  href='javascript:void(0);' onclick='javascript:ioAreaObj.cancelRequest();return false;'>Cancel</a></td></tr></table>";
  // TBD need to be moved out to safe haven
  this.getRoadNameStartOrEnd=''; // Not a good idea TBD
  this.response = null;
  this.preReqStart = '';
  this.preReqEnd = '';

  this.defaultLoc=(typeof(msgObj.locationName)!='undefined')?msgObj.locationName:"Business or Address Locator";
  this.titleLoc = 'Enter your address',  this.defaultLoc=(typeof(msgObj.locationName)!='undefined')?msgObj.locationName:"Business or Address Locator";
  this.titleLoc = 'Enter your address',
  this.defaultTip = {start:"Start Address",end:"End Address"};
  this.titleTip = {
    start:'Enter your start address',
    end:'Enter your end address'
  };
  this.tIn = true;
  this.prepareSuggestBoxes();
  return false;
} 

ioArea.prototype.prepareSuggestBoxes = function () {
  if (!this.tIn) { return; }
  this.topClearList = {};
  this.topDownKeyList = {};
  this.topUpKeyList = {};
  var that = this;
  $('#starttextbox').attr('class',"big");
  this.keyBox = {};
  this.keyBox.start = new _suggestBox('starttextbox',
    this.defaultLoc,
    this.titleLoc,
    'Your Source',
    this);
  this.keyBox.start.sugDivId = '#sugdivstart';
  //this.keyBox.start.assignEvents();
  //if (this.routeEnds) {
  //  this.keyBox.start.clearTip = function () { that.routeEnds.remove('start'); };
  //}
  $('#endtextbox').attr('class',"small");
  this.keyBox.end = new _suggestBox('endtextbox',
    this.defaultTip.end,
    this.titleTip.end,
    'Your Destination',
    this);
  this.keyBox.end.sugDivId = '#sugdivend';
  //this.keyBox.end.assignEvents();
  //if (this.routeEnds) {
  //  this.keyBox.end.clearTip = function () { that.routeEnds.remove('end'); };
  //}
}

ioArea.prototype.executeAllFunc = function (funcArray) {
  for (var i in funcArray) {(funcArray[i])();}
}

ioArea.prototype.fixTheEnd = function (which) {
  this.embed.fix=which;
  this.embed.other=(this.embed.fix=='start')?'end':
                   (this.embed.fix=='end')?'start':'';
}

ioArea.prototype.initEmbed = function () {
  if (typeof(accountDetails) == 'undefined') return;
  switch (accountDetails.q) {
    //case "minimap": 
    //  ioAreaObj=new ioArea({on:true,fix:'end',hosting:true},{}); 
    //  captureMinimapParams(); 
    //  break;
    case "wayfinder-lite":
    case "wayfinder":
    case "blocate":
      this.fixTheEnd('end'); // TBD need to be programmable
      this.hosting = true; // TBD why duplication with vidteq object
      this.embed[accountDetails.q] = accountDetails.places;
      if (accountDetails.firstTimeRule) {
        this.embed.firstTimeRule = accountDetails.firstTimeRule; 
        // this is not necessary as we can use firstTimeRule 
        // from account detail and dump it TBD
      }
      this.embed.place = accountDetails.places.center.entity;
      this.prepareCenterEntity(this.embed.place);
      // this is present for backward compatibility TBD
      // TBD revise this place entity
      break;
    case "locatestores":
      this.fixTheEnd('end'); // TBD need to be programmable
      this.hosting = true; // TBD why duplication with vidteq object
      this.locationName = 'Enter your address to find a Store nearby & get Video Directions'; // TBD does not belong to embed object - may get overwritten

      //this.embed[accountDetails.q] = accountDetails.places;
      this.embed.locateStores = accountDetails.places;
      if (accountDetails.firstTimeRule) {
        this.embed.firstTimeRule = accountDetails.firstTimeRule; 
        // this is not necessary as we can use firstTimeRule 
        // from account detail and dump it TBD
      } else {
        this.embed.firstTimeRule = {
          locate:{ 
            address: {name:"The center of "+cfg.city+" city"},
            geom:'POINT('+cfg.centerLon+' '+cfg.centerLat+')'
        }};
      }
      break;
    //default: goToError(); break;
    default:document.location.href='error.html';break;
    // TBD - generic error handler needed - with messaging provision
    // Automatic minimap fall back in case allotted size is small TBD
  }
  switch (parseInt(vidteq.pf)) {
  case 1:
    this.embed.vidHeight='160px';
    this.embed.vidWidth='240px';  
    break;
  case 2:
    this.embed.vidHeight='256px';
    this.embed.vidWidth='384px';  
    break;
  case 3:
  default:
    this.embed.vidHeight='320px';
    this.embed.vidWidth='480px';  
    break;  
  }
  this.embed.cssUrl='css/embedcss.php?q='+accountDetails.q;
  this.embed.cssUrl+='&pf='+accountDetails.config.pf;
  this.embed.cssUrl+=typeof(this.embed.width)!='undefined'?'&w='+this.embed.width:'';
  this.embed.cssUrl+='&topStripColor='+vidteq.topStripColor;
  this.embed.cssUrl+='&fvtColor='+vidteq.fvtColor;   
  this.embed.cssUrl+='&topStripTextColor='+vidteq.topStripTextColor;
  this.embed.cssUrl+='&fvtTextColor='+vidteq.fvtTextColor;   
  this.embed.cssUrl+='&fvtTextHoverColor='+vidteq.fvtTextHoverColor;   
  this.embed.cssUrl = this.embed.cssUrl.replace(/#/g,"");
}

ioArea.prototype.selectMode=function (whichOne) {
  if(whichOne=='ROUTE') {
    if($('#locationtab')[0]) $('#locationtab')[0].className='inactive';
    if($('#routetab')[0]) $('#routetab')[0].className='active';
    if($('#helpdiv')[0]) $('#helpdiv')[0].innerHTML=this.helpRoute;
    $('#swaptd')[0].style.display='block';
    if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
      $('#starttextbox')[0].className="small1";
      $('#endtextbox')[0].className="small1";
    } else {
      document.GetVal.end.className='small';
      $('#starttextbox')[0].className="small";
      $('#endtextbox')[0].className="small";
    }
    $('#starttextbox')[0].tabIndex=1
    $('#endtextbox')[0].tabIndex=2
    $('#GoVid')[0].tabIndex=3
    //document.GetVal.start.value=(document.GetVal.start.value==this.locationName)?this.startPlaceName:document.GetVal.start.value;
    if ($('#starttextbox').length) {
      var val = $('#starttextbox').val();
      $('#starttextbox').val((val==this.defaultLoc)?this.defaultTip.start:val);
    }
    this.keyBox.start.defaultValue = this.defaultTip.start;
    this.keyBox.start.defaultTitle = this.titleTip.start;
    this.mode='ROUTE';
  } else {
    if($('#locationtab')[0]) $('#locationtab')[0].className='active';
    if($('#routetab')[0]) $('#routetab')[0].className='inactive';
    if($('#helpdiv')[0]) $('#helpdiv')[0].innerHTML=this.helpLocate;
    $('#swaptd')[0].style.display='none';
    document.GetVal.end.className='smallhidden';
    $('#starttextbox')[0].className="big";
    $('#endtextbox')[0].className="smallhidden";
    $('#starttextbox')[0].tabIndex=1
    $('#endtextbox')[0].tabIndex=-1
    $('#GoVid')[0].tabIndex=2
   //document.GetVal.start.value=(document.GetVal.start.value==this.startPlaceName)?this.locationName:document.GetVal.start.value;
    if ($('#starttextbox').length) {
      var val = $('#starttextbox').val();
      $('#starttextbox').val((val==this.defaultTip.start)?this.defaultLoc:val);
    }
    this.keyBox.start.defaultValue = this.defaultLoc;
    this.keyBox.start.defaultTitle = this.titleLoc;
    this.mode='LOCATE';
  }
  return false;
}  

ioArea.prototype.restoreDefaults=function () {
  this.keyBox.start.restoreDefaults();
  this.keyBox.end.restoreDefaults();
  //$('#starttextbox').val($('#locationtab').hasClass('active')?this.locationName:this.startPlaceName);
  //$('#endtextbox').val(this.endPlaceName);
}

ioArea.prototype.initialiseInputArea=function () {
  var boxValue;
  this.selectMode('ROUTE');
  if(!ioAreaObj.embed)
    boxValue=($('#locationtab')[0].className=='active')?(this.locationName):(this.startPlaceName);
  else { 
    if(this.embed.locateStores) 
      boxValue=this.locationName;
    else 
      boxValue=this.startPlaceName;
  }
  if (! document.GetVal.end.value) {
    document.GetVal.end.value=this.endPlaceName;
  }
  if (! document.GetVal.start.value) {
    document.GetVal.start.value=boxValue;
  }
  return false;
}

ioArea.prototype.swapParentType = function (obj) {
  if (obj.parentType && obj.parentType == 'startAddress') obj.parentType = 'endAddress';
  else if (obj.srfType && obj.srfType == 'startAddress') obj.srfType = 'endAddress';
  else if (obj.parentType && obj.parentType == 'endAddress') obj.parentType = 'startAddress';
  else if (obj.srfType && obj.srfType == 'endAddress') obj.srfType = 'startAddress';
}

ioArea.prototype.swapSrfResponse = function (obj) {
  var trans = {'ss':'ss','ff':'ff','mm':'mm',
               'sf':'fs','mf':'fm','fs':'sf','fm':'mf',
               'sm':'ms','ms':'sm'};
  for (var i in trans) {
    //if (obj.routeFailType == i) {
    //  obj.routeFailType = trans[i];
    if (obj.responseType == i) {
      obj.responseType = trans[i];
      var temp = obj.srf[0];
      obj.srf[0] = obj.srf[1];
      obj.srf[1] = temp;
      obj.srf[0].srfIndex = 0;
      obj.srf[1].srfIndex = 1;
      this.swapParentType(obj.srf[0]);
      this.swapParentType(obj.srf[1]);
      for (var j in obj.srf[0].results) {
        this.swapParentType(obj.srf[0].results[j]);
      } 
      for (j in obj.srf[1].results) {
        this.swapParentType(obj.srf[1].results[j]);
      }
      break;
    }
  }
}

ioArea.prototype.swapRoute=function () {
  //var tempVal=document.GetVal.start.value;
  //document.GetVal.start.value=document.GetVal.end.value;
  //document.GetVal.end.value=tempVal;
  //if (document.GetVal.start.value == ioAreaObj.endPlaceName) {
  //  $('#starttextbox')[0].value=ioAreaObj.startPlaceName;
  //}
  //if (document.GetVal.end.value == ioAreaObj.startPlaceName) {
  //  $('#endtextbox')[0].value=ioAreaObj.endPlaceName;
  //}
  var tempVal=$('#starttextbox').val();
  $('#starttextbox').val($('#endtextbox').val());
  $('#endtextbox').val(tempVal);
  if ($('#starttextbox').val() == this.defaultTip['end']) {
    $('#starttextbox').val(this.defaultTip['start']);
  }
  if ($('#endtextbox').val() == this.defaultTip['start']) {
    $('#endtextbox').val(this.defaultTip['end']);
  }
  ioAreaObj.displayMessage("&nbsp");
  if(typeof(mboxObj) == 'undefined') { return false; }
  mboxObj.killRcmPopup(); 
  var routeWasActive = false;
  if (mboxObj.routeActive) {  // clean up the route 
    clearRouteAndSrf(); 
    routeWasActive = true;
  }
  if (mboxObj.srfActive) {  // swap the response
    this.swapSrfResponse(this.srfResponse);
  }  
  routeEndsObj.swap(); 
  if(this.embed) {   // now swap fixed end
    if(ioAreaObj.embed.fix=='start') {
      ioAreaObj.embed.fix='end';
      ioAreaObj.embed.other='start';
      $('#starttextbox')[0].title='Enter your start address';
      if (!routeEndsObj.isNotEmpty('start') && 
          document.GetVal.start.value == ioAreaObj.endPlaceName) {
        $('#starttextbox')[0].value=ioAreaObj.startPlaceName;
      }
      $('#endtextbox')[0].title='';
    } else if(ioAreaObj.embed.fix=='end') {
      ioAreaObj.embed.fix='start';
      ioAreaObj.embed.other='end';
      $('#starttextbox')[0].title='';
      $('#endtextbox')[0].title='Enter your end address';
      if (!routeEndsObj.isNotEmpty('end') &&
          document.GetVal.end.value == ioAreaObj.startPlaceName) {
        $('#endtextbox')[0].value=ioAreaObj.endPlaceName;
      }
    }
    if(ioAreaObj.embed.fix!='') ioAreaObj.showFixedEnd();
    //if (!routeWasActive && ioAreaObj.embed.blocate) blocateCategoryList();
    //if (!routeWasActive && ioAreaObj.embed.blocate) ioAreaObj.locateNearByBiz();
  }
  if (mboxObj.srfActive) {  
    //fvtObj.writeSrfNew.apply(fvtObj,[this.srfResponse]);
    fvtObj.prepareForShowSrf.apply(fvtObj,[this.srfResponse]);
    this.writeSrfToTable();
  }
  return false;
}

//ioArea.prototype.suggestMatches=function (obj) {
//  this.inputMapOrText='TEXT';
//  var whichBox=obj.name;
//  this.userText=obj.value;
//  this.userText=this.userText.replace(/^\s+/,"");
//  this.userText=this.userText.replace(/\s+$/,"");
//  var text=(obj.id=='starttextbox')?(this.currentText.start):(this.currentText.end);
//  if(this.userText!=text) {
//    if(this.userText.length==0) {
//      this.clearSuggestDiv($('#sugdivstart')[0]);
//      this.clearSuggestDiv($('#sugdivend')[0]);
//    } else {  
//      if(obj.id=='starttextbox') {
//        if(typeof(routeEndsObj)!='undefined') routeEndsObj.remove.apply(routeEndsObj,['start']); // TBD
//      } else if(obj.id=='endtextbox') {
//        if(typeof(routeEndsObj)!='undefined') routeEndsObj.remove.apply(routeEndsObj,['end']); // TBD
//      }      
//    }
//    if(obj.id=='starttextbox') {this.currentText.start=this.userText;}
//    else {this.currentText.end=this.userText;}
//    this.sendSuggestRequest=1;
//    this.theRowSelected=null;
//  }
//  if(this.userText && this.sendSuggestRequest) {
//  var data=(vidteq.scriptBased?{qu:this.userText,city:cfg.city,callbackFunction:'prepareSuggestDropDown'}:{qu:this.userText,city:cfg.city});
//  var url="vs/suggest.php";
//  if(vidteq.scriptBased) url=_serverHostUrl+url;
//  if(this.sendSuggestRequest) {this.fetchMatches(url,data,whichBox);}
//  }
//  return false;
//}

//ioArea.prototype.fetchMatches=function(url,data,whichBox) {
//  var localUserText=this.userText;
//  classThis=this;
//  var localMode=this.mode;
//  this.noOfSuggestions=5;
//  prepareSuggestDropDown=function(placesList) {
//    var suggestDiv=(whichBox=='start')?($('#sugdivstart')[0]):($('#sugdivend')[0]);
//    if(placesList.length>=0) {
//      var innerHTML=null;
//      if(placesList.length>0) {
//        suggestDiv.innerHTML=null;
//        suggestDiv.style.visibility='visible';
//        suggestDiv.style.zIndex='90000';
//      suggestDiv.style.width=(localMode=='LOCATE')?'440px':'200px';
//        innerHTML=suggestDiv.innerHTML;
//        innerHTML="<table id='suggesttable' cellspacing=0 cellpadding=2 style='width:100%'><tbody>";
//        for(i=0;i<placesList.length;i++) {
//          var otherHalf=placesList[i].substring(localUserText.length,placesList[i].length);
//          var placeName=placesList[i].replace(/\s+/g,'-');
//          placeName=placeName.replace(/\'/g,"\\\'");
//          innerHTML+="<tr id=suggestrow"+i+" class=sugrow onmouseover=this.className='sugrowhighlight'; onclick=insertPlace('"+placeName+"','"+whichBox+"'); onmouseout=this.className='sugrow'  align='left'><td align='left' style='padding-left:4px;border-bottom:1px inset "+mainColor+";' ><a class='suggest' onfocus=this.blur();   href='javascript:void(0);'> <b>"+localUserText+"</b>"+otherHalf+"</a></td></tr>";
//        }
//        innerHTML+="</tbody></table>";
//        suggestDiv.innerHTML=innerHTML;
//        currentSuggestIndex=-1;
//        setTimeout('classThis.clearSuggestDiv($("#sugdivstart")[0])',40000);
//        setTimeout('classThis.clearSuggestDiv($("#sugdivend")[0])',40000);
//      } else {
//        classThis.clearSuggestDiv($('#sugdivstart')[0]);
//        classThis.clearSuggestDiv($('#sugdivend')[0]);
//      }
//    }else {
//      if(localUserText.charAt(0) =='' ) {
//        suggestDiv.innerHTML = "<div><a class=plain>Please enter atleast one alphabet</a></div>";
//      } else {
//        suggestDiv.innerHTML = "<div><a class=plain>No matching places</a></div>";
//      }
//    }
//    return false;
//  }
//  $.ajax({
//    url:url,
//    type: 'GET',
//    data:data,
//    dataType:vidteq.dataType,
//    success:prepareSuggestDropDown,
//    error:function () {}
//  });
//  return false;    
//}

ioArea.prototype.checkKeyEvents=function (event) {
  var sTable=$("#suggesttable")[0];
  if(sTable) {
    var srows=sTable.getElementsByTagName("tr");
    for(var i=0;i<srows.length;i++) {
      srows[i].className="suggestrow";
    }
  }
  var startsug=$('#sugdivstart')[0].style.visibility;
  var endsug=$('#sugdivend')[0].style.visibility;
  var keyCode=event.keyCode?event.keyCode:(event.which?event.which:event.charCode);
  if(this.theRowSelected!=null) {  
    this.theRowSelected=this.theRowSelected.replace(new RegExp(/<b>/g),"");
    this.theRowSelected=this.theRowSelected.replace(/<\/b>/g,"");
  }
  switch (keyCode) {
  case 9:
    //this.captureTabEnterOnAutoSug(startsug,endsug);
    this.executeAllFunc(this.topClearList);
    //if ($("*:focus").attr("id") == 'endtextbox') {
    //  $('#starttextbox').focus();
    //}
    break;
  case 13:
    //if(this.theRowSelected!=null) {
    //  this.captureTabEnterOnAutoSug(startsug,endsug);
    //} else {
    //  this.clearSuggestDiv($('#sugdivstart')[0]);
    //  this.clearSuggestDiv($('#sugdivend')[0]);
    this.executeAllFunc(this.topClearList);
      if($("#comdiv")[0]) {
        if(whichPopup=="EMAIL") {
          send('email');  // TBD
        } else if(whichPopup=="SMS") {
          send('sms');  // TBD
        } 
      } else {
        if(document.getElementById('VideoPlayerDiv')) {
          document.getElementById('GoVid').focus();
          this.invokeTheMode();
        } else {
         document.getElementById('GoVid').onclick.call(ioAreaObj);
         document.getElementById('GoVid').focus();    
        }
      }
    //}
    break;
  case 38:
    this.executeAllFunc(this.topDownKeyList);
    //this.sendSuggestRequest=0;
    //if(startsug=='visible' || endsug=='visible') {
    //  currentSuggestIndex--;
    //  currentSuggestIndex=(currentSuggestIndex==-2)?(this.noOfSuggestions-1):currentSuggestIndex;
    //  currentSuggestIndex=(currentSuggestIndex==-1)?(this.noOfSuggestions-1):currentSuggestIndex;
    //  this.selectSuggestRow(currentSuggestIndex);
    //}
    //this.executeAllFunc(this.lowerAnySuggestFuncList);
    break;
  case 40:
    this.executeAllFunc(this.topUpKeyList);
    //this.sendSuggestRequest=0;
    //if(startsug=='visible' || endsug=='visible') {
    //  currentSuggestIndex++;
    //  currentSuggestIndex=(currentSuggestIndex==this.noOfSuggestions)?0:currentSuggestIndex;
    //  this.selectSuggestRow(currentSuggestIndex);
    //}
    //this.executeAllFunc(this.higherAnySuggestFuncList);
    break;
  default:break;
  }
}

//ioArea.prototype.captureTabEnterOnAutoSug=function (startsug,endsug) {
//  if(this.theRowSelected!=null) {
//    var whichElem={};  
//    whichElem=(startsug=='visible')?($('#sugdivstart')[0]):($('#sugdivend')[0]);
//    whichElem.value=this.theRowSelected;
//    this.clearSuggestDiv(whichElem);
//    this.currentText.start=this.theRowSelected;
//    currentSuggestIndex=-1;  
//    this.theRowSelected=null;  
//  }
//}

//ioArea.prototype.selectSuggestRow=function(rowIndex) {
//  var sugRowId="suggestrow"+rowIndex;
//  $('#'+sugRowId)[0].className='sugrowhighlight';
//  this.theRowSelected=$('#'+sugRowId)[0].getElementsByTagName("a")[0].innerHTML;
//  var x=new RegExp("<b>","gi");
//  this.theRowSelected=this.theRowSelected.replace(x,"");
//  x=new RegExp("<\/b>","gi");
//  this.theRowSelected=this.theRowSelected.replace(x,"");
//  this.theRowSelected=utils.trim(this.theRowSelected);
//  if($('#sugdivstart')[0].style.visibility=='visible' ) {
//    this.theRowSelected=this.theRowSelected.replace(/\s+$/,"");
//    this.currentText.start=this.theRowSelected;
//    document.GetVal.start.value=this.theRowSelected;
//  }
//  if($('#sugdivend')[0].style.visibility=='visible' ) {
//    this.theRowSelected=this.theRowSelected.replace(/\s+$/,"");
//    this.currentText.end=this.theRowSelected;
//    document.GetVal.end.value=this.theRowSelected;
//  }
//}

ioArea.prototype.focusTextbox=function(obj) {
  if(obj.name=='start') {
    var boxValue;
    if(!ioAreaObj.embed)
      boxValue=$('#locationtab')[0].className=='active'?this.locationName:this.startPlaceName;
    else boxValue=this.startPlaceName;
    obj.value=(obj.value=='')?boxValue:obj.value;
  } else {
    obj.value=(obj.value=='')?this.endPlaceName:obj.value;
  }
}

ioArea.prototype.clickTextbox=function (obj) {
  //ioAreaObj.suggestedPlace=0;
  //if(obj.name=="start") {
  //  var boxValue;
  //  if(!ioAreaObj.embed)
  //    boxValue=$('#locationtab')[0].className=='active'?this.locationName:this.startPlaceName;
  //  else { 
  //    if(this.embed.locateStores) boxValue=this.locationName;
  //    else boxValue=this.startPlaceName;
  //  }  
  //  if(obj.value==boxValue) {
  //    obj.value="";
  //    this.currentText.start="";
  //    if(typeof(routeEndsObj)!='undefined') routeEndsObj.remove.apply(routeEndsObj,['start']); 
  //  }
  //  this.clearSuggestDiv($('#sugdivend')[0]);
  //} else if(obj.name=="end") {
  //  this.clearSuggestDiv($('#sugdivstart')[0]);
  //  if(obj.value==this.endPlaceName) {
  //    obj.value="";
  //    this.currentText.end="";
  //    if(typeof(routeEndsObj)!='undefined') routeEndsObj.remove.apply(routeEndsObj,['end']);
  //  }
  //} else 
  if(obj.name=="emailbox") {
    obj.value=(obj.value==this.inputValEmail)?'':obj.value;
  }else if(obj.name=="smsbox") {
    obj.value=(obj.value==this.inputValSMS)?'':obj.value;
  }
}

ioArea.prototype.blurTextbox=function (obj) {
  if(obj.name=="emailbox") {
    obj.value=(obj.value=='')?this.inputValEmail:obj.value;  
  }
  else if(obj.name=="smsbox") {
    obj.value=(obj.value=='')?this.inputValSMS:obj.value;  
  //} else {  
  //  var boxValue;
  //  if(!this.embed)
  //    boxValue=$('#locationtab')[0].className=='active'?this.locationName:this.startPlaceName;
  //  else {
  //    if(this.embed && this.embed.locateStores) boxValue=this.locationName;
  //    else boxValue=this.startPlaceName;
  //  }  
  //  if(document.GetVal.start.value=='') {      
  //    this.currentText.start=document.GetVal.start.value=boxValue;
  //    if(typeof(routeEndsObj)!='undefined') routeEndsObj.remove.apply(routeEndsObj,['start']); 
  //  }
  //  if(document.GetVal.end.value=='') {      
  //    this.currentText.end=document.GetVal.end.value=this.endPlaceName;
  //    if(typeof(routeEndsObj)!='undefined') routeEndsObj.remove.apply(routeEndsObj,['end']);
  //  }  
  }
}

ioArea.prototype.checkDefaults=function (emptyCheck) {
  //var startValue = utils.trim(document.GetVal.start.value);
  //var endValue = utils.trim(document.GetVal.end.value);
  var startValue = utils.trim($('#starttextbox').val());
  var endValue = utils.trim($('#endtextbox').val());
  if (this.mode == 'LOCATE') { 
    if (startValue.match(new RegExp("^"+this.locationName+"$"))  ||
        (emptyCheck && startValue == '')) {
      this.displayMessage(this.defaultLocateMessage);
      return false;
    }
  }
  if (this.mode == 'ROUTE') {
    if (startValue.match(new RegExp("^"+this.startPlaceName+"$")) || 
         endValue.match(new RegExp("^"+this.endPlaceName+"$")) ||
         emptyCheck && (startValue == '' || endValue == '')) {
      if(ioAreaObj.embed) this.displayMessage(this.defaultRouteEmbedMessage);
      else this.displayMessage(this.defaultRouteMessage);
      return false;
    }
  }
  return true;
}  

//ioArea.prototype.clearSuggestDiv =function (whichDiv) {
//  whichDiv.innerHTML='';
//  whichDiv.style.visibility='hidden';
//}

ioArea.prototype.getBusRoute = function(busId) {
  ioAreaObj.displayMessage(ioAreaObj.loadingDivMessage);
  ioAreaObj.changeBackOpacity(0.2);
  //if(ioAreaObj.embed) shrinkMap();
  if(ioAreaObj.embed) {
    if(typeof(__experimentalUI)!='undefined' && __experimentalUI) { 
      fvtObj.showNew('route');
    } else {
      shrinkMap();
    }
  }
  var data={action:"getBusRoute",city:cfg.city,
    busId: busId,
    account:vidteq.account,key:vidteq.key};
  if(vidteq.scriptBased) {data.callbackFunction='ioAreaObj.handleGetRoute';}
  this.link='';
  this.globalAjaxObj=$.ajax({
        url:cfg.magicHappensUrl,
        data:data,
        dataType:vidteq.dataType,
      success:ioAreaObj.handleGetRoute,
      error:ioAreaObj.handleError
      }); 
}

ioArea.prototype.goVid = function (start,end) {
  if(!this.checkDefaults()) return false;
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
     //setTimeout("$('#close-float-input').click()",2000);
     $('#close-float-input').click();
  }
  this.executeAllFunc(this.topClearList);
  popUserInfoQuery();
  this.captureStartAndEnd();
  if(ioAreaObj.embed) {
    ioAreaObj.loadingPrompt = new showLoadingPrompt();
  } else {
    ioAreaObj.displayMessage(ioAreaObj.loadingDivMessage);
  }
  ioAreaObj.changeBackOpacity(0.2);
  //if(ioAreaObj.embed) shrinkMap();
  if(ioAreaObj.embed) {
    if(typeof(__experimentalUI)!='undefined' && __experimentalUI) { 
      fvtObj.showNew('route');
    } else {
      shrinkMap();
    }
  }
  if (ioAreaObj.embed && ioAreaObj.embed.fix && ioAreaObj.embed.fix != '' &&
      (routeEndsObj.isNotEmpty(ioAreaObj.embed.fix) && routeEndsObj.tips[ioAreaObj.embed.fix].parentType=='locateStores')) {
    ioAreaObj.prepareCenterEntity(ioAreaObj.embed.place)
    routeEndsObj.remove(ioAreaObj.embed.fix,true);
    routeEndsObj.addByIndex(ioAreaObj.embed.fix,1,'center');
    ioAreaObj.showFixedEnd();
  }
  //this.preReqStart = document.GetVal.start.value;
  this.preReqStart = utils.trim($('#starttextbox').val());
  if ((this.startStr = routeEndsObj.get.apply(routeEndsObj,['start'])) == null) {
    this.startStr=this.preReqStart
    this.startStr=this.startStr.replace(/^\s+/,"");
    this.startStr=this.startStr.replace(/\s+$/,"");
    this.startEntity = {address : {name : this.preReqStart}};
  } else this.startEntity = routeEndsObj.tips['start']; 
  this.startEntity.linkStr = this.startStr;
  if (!this.startEntity.type || this.startEntity.type != 'center') {
    //this.startEntity.icon = startIcon;
    this.startEntity.icon = mboxObj.startIcon;
    this.startEntity.index = -1;
    this.startEntity.type = 'rcm';
    routeEndsObj.remove('start');
  }
  if (this.mode == 'LOCATE') {
    var data={action:"businessSearch",city:cfg.city,place:this.startStr,account:vidteq.account,key:vidteq.key};
    if(vidteq.scriptBased) {
      data.callbackFunction='ioAreaObj.handleLocateCall';
    }
    this.createLink(this.startEntity);
    if (typeof(qSrfResponse) != 'undefined') {
      ioAreaObj.handleLocateCall(qSrfResponse);
      delete qSrfResponse;
    } else {
      this.globalAjaxObj=$.ajax({
              url:cfg.magicHappensUrl,
              data:data,
              suggestedplace:this.suggestedPlace,
              dataType:vidteq.dataType,
            success:ioAreaObj.handleLocateCall,
            error:function(response) {ioAreaObj.handleError.apply(ioAreaObj,[response]);}}); 
    }
  } else { // if (mode == 'route') is default
    //this.preReqEnd = document.GetVal.end.value;
    this.preReqEnd = utils.trim($('#endtextbox').val());
    if ((this.endStr = routeEndsObj.get.apply(routeEndsObj,['end'])) == null) {
      this.endStr = this.preReqEnd
      this.endStr=this.endStr.replace(/^\s+/,"");
      this.endStr=this.endStr.replace(/\s+$/,"");
      this.endEntity = {address : {name : this.preReqEnd}};
    } else this.endEntity = routeEndsObj.tips['end'];
    this.endEntity.linkStr = this.endStr; 
    if (!this.endEntity.type || this.endEntity.type != 'center') {
      this.endEntity.index = -1;
      this.endEntity.type = 'rcm';
      //this.endEntity.icon = endIcon;
      this.endEntity.icon = mboxObj.endIcon;
      routeEndsObj.remove('end');
    }
      data={
      action:"viaRoute",
      city:cfg.city,
      startaddress:this.startStr,
      endaddress:this.endStr,
      account:vidteq.account,
      key:vidteq.key,
      searchStartString:this.preReqStart,
      searchEndString:this.preReqEnd
           };
  if(ioAreaObj.embed) {
      data.mygid=accountDetails.mygid;
      if(accountDetails.config.sortby) data.sortby=accountDetails.config.sortby;
  }
  var viaString
  if ((viaString = mboxObj.getViaString()) != null) {data.via = viaString;}
  if(vidteq.scriptBased) {data.callbackFunction='ioAreaObj.handleGetRoute';}
    //this.link=encodeURI("?q=route&city="+cfg.city+"&start="+this.startStr+"&end="+this.endStr);  
    //this.createLink(this.startEntity,this.endEntity);  TBD needed ?
    this.globalAjaxObj=$.ajax({
    url:cfg.magicHappensUrl,
    data:data,
    dataType:vidteq.dataType,
        success:ioAreaObj.handleGetRoute,
        error:ioAreaObj.handleError
        }); 
  }
  return 0;
}

ioArea.prototype.handleLocateCall = function (response) {
  ioAreaObj.handleLocate.apply(ioAreaObj,[response]);
}

ioArea.prototype.placeViaAndRoute = function (lonlat) {
  this.changeBackOpacity(0.2);
  this.displayMessage(this.loadingDivMessage);
  mboxObj.addViaSet([lonlat]);
  this.placeViaRequest();
  mboxObj.killRcmPopup();
}

ioArea.prototype.placeViaRequest = function () {
  var data={
    action:"viaRoute",
    city:cfg.city,
    //startaddress:routeEndsObj.start.lonlat.lon+' '+routeEndsObj.start.lonlat.lat,
    //endaddress:routeEndsObj.end.lonlat.lon+' '+routeEndsObj.end.lonlat.lat,
    startaddress:routeEndsObj.get('start'),
    endaddress:routeEndsObj.get('end'),
    account:vidteq.account,
    key:vidteq.key
  };
  var viaString;
  if ((viaString = mboxObj.getViaString()) != null) {data.via = viaString;}
  if(vidteq.scriptBased) {data.callbackFunction='ioAreaObj.handleGetRoute';} 
  this.globalAjaxObj=$.ajax({
    url:cfg.magicHappensUrl,
    data:data,
    dataType:vidteq.dataType,
    success:ioAreaObj.handleGetRoute,
    error:ioAreaObj.handleError
  });
}

ioArea.prototype.handleError = function(reqObj,textStatus,errorThrown) {
  clearRouteAndSrf();
  ioAreaObj.changeBackOpacity(1);
  ioAreaObj.displayMessage ("Something wrong happened, please try again ");
}

ioArea.prototype.handleLocate = function (srfResponse,type) {
  try {
    pageTracker._trackPageview("/locate_"+vidteq.account);
  } catch(err) {};
  //if(type==undefined) type={'name':'','source':''};
  clearRouteAndSrf();
  ioAreaObj.changeBackOpacity(1);
  ioAreaObj.checkAndKillLoadingPrompt('',1);
  if(typeof(srfResponse)!='object') srfResponse=JSON.parse(srfResponse);
  if (typeof(srfResponse.error) != 'undefined') {
    ioAreaObj.displayMessage("Could not locate the place. Try again later ("+srfResponse.error+")");
    return false;
  }
  ioAreaObj.reviseSrf(srfResponse);
  //if (utils.isObjectEmpty(srfResponse[0])) srfResponse = [];  
  //reviseSrfWithParentTypeAndIndex(srfResponse);
  ioAreaObj.response = srfResponse;  // context clarify
  if(ioAreaObj.embed && ioAreaObj.embed.locateStores &&
     srfResponse.responseType!='locateStores') {
    // special requests of locateStores
    ioAreaObj.showHelpMessage("Please select one of the addresses");
    if (srfResponse.srf[0].length == 1) {
      //special case in store locator where result is unique
      ioAreaObj.srfResponse = srfResponse;
      //ioAreaObj.locateNearByStoresByIndex(0,'start'); 
      ioAreaObj.setupAndCallNBS({idx:0,tip:'start'}); 
      return;
    }
  }
  //if(srfResponse.responseType!='locateStores' && ioAreaObj.embed && ioAreaObj.embed.locateStores) 
  //  ioAreaObj.showHelpMessage("Please select one of the addresses");
  //ioAreaObj.response = srfResponse;  // context clarify
  //if(ioAreaObj.embed && ioAreaObj.embed.locateStores &&
  //  srfResponse.responseType!='locateStores' && srfResponse.srf[0].length == 1) {
  //  //special case in store locator where result is unique
  //  ioAreaObj.srfResponse = srfResponse;
  //  ioAreaObj.locateNearByStoresByIndex(0,'start'); 
  //  return;
  //}
  //if(ioAreaObj.embed && ioAreaObj.embed.locateStores &&
  //   type.name!='locateStores' && srfResponse.length == 1) {
  //  //special case in store locator where result is unique
  //  ioAreaObj.srfResponse = reviseSrfToNewOne(srfResponse,'location');
  //  ioAreaObj.locateNearByStoresByIndex(0,'start'); 
  //  return;
  //}
  ioAreaObj.toggleButtons({'clearroutetab' : true});
  //if(isMapXpanded) { undoExpandMapPopVideo(); }  
  ioAreaObj.displayMessage("&nbsp");
  document.title="Vidteq - Navigation made easy | Search results for "+ ioAreaObj.startStr;
  //var pass=type.name!=''?type.name:'location';
  //ioAreaObj.displayResults.apply(ioAreaObj,[pass,srfResponse]);
  ioAreaObj.showSrf.apply(ioAreaObj,[srfResponse,'location']);
  return 0;
}

ioArea.prototype.prepareCenterEntity= function (entity,startOrEnd) {
  entity.type='center';
  delete entity.distance;
  if(typeof(startOrEnd)!='undefined') {
    ioAreaObj.embed.fix=startOrEnd;
    ioAreaObj.embed.other=(startOrEnd=='start')?'end':'start';
  }
  populateIconContent(entity);
  if(!entity.lonlat) entity.lonlat=utils.lonLatObjFrmPoint(entity.geom);            
  if(!entity.popup) entity.popup={open:1};
  return entity;
}

ioArea.prototype.setupAndCallNBS =function (ref) {
  if (!ref.tip) { ref.tip = 'start'; }
  var g;
  if (ref.point) { 
    ioAreaObj.dirFromTo(ref.tip,-1,ref.point,true); 
    g = "POINT("+ref.point.lon+" "+ref.point.lat+")"; 
  }
  if (typeof(ref.idx) != 'undefined') {
    var entity=ioAreaObj.srfResponse.srf[0].results[ref.idx];
    ioAreaObj.dirFromTo(ref.tip,ref.idx,entity.parentType,true);
    routeEndsObj.detach(ref.tip);
    g=(entity.geom.replace(/\s+/," "));
  }
  ioAreaObj.embed.locateStores.myLocStr = 'your location';
  ioAreaObj.locateNearByStores(g,false);
  routeEndsObj.refresh(ref.tip);
}

//ioArea.prototype.locateNearByStoresByIndex =function (entityIndex,sORe) {
//  var entity;
//  var tempGeom;
//  if(entityIndex==-1) {
//    ioAreaObj.dirFromTo('start',-1,mboxObj.rcmLonlat,true);
//    tempGeom = "POINT("+mboxObj.rcmLonlat.lon+" "+mboxObj.rcmLonlat.lat+")";
//    tempGeom=(tempGeom.replace(/\s+/,"+"));
//  } else {
//    //entity=ioAreaObj.response[entityIndex];
//    entity=ioAreaObj.srfResponse.srf[0].results[entityIndex];
//    ioAreaObj.dirFromTo('start',entityIndex,entity.parentType,true);
//    routeEndsObj.detach('start');
//    tempGeom=(entity.geom.replace(/\s+/,"+"));
//  }
//  ioAreaObj.embed.locateStores.myLocStr = 'your location';
//  ioAreaObj.locateNearByStores(tempGeom,false);
//  routeEndsObj.refresh('start');
//}

ioArea.prototype.dirFromTo = function (which,entityIndex,entityParentType,noAutoGoVid) {
  var notWhich=(which=='start')?'end':'start';
  if(entityParentType=='locateStores' && ioAreaObj.mode=='ROUTE') {
    if(routeEndsObj.isNotEmpty(notWhich) && routeEndsObj.tips[notWhich].parentType=='locateStores') { 
      ioAreaObj.swapRoute();
    } else if(routeEndsObj.isNotEmpty(which) &&routeEndsObj.tips[which].parentType!='locateStores' ) {
      ioAreaObj.swapRoute();
    }   
  } else if (routeEndsObj.isNotEmpty(which) && routeEndsObj.tips[which].type &&
             routeEndsObj.tips[which].type == 'center') {
      ioAreaObj.swapRoute();
  }
  routeEndsObj.replace.apply(routeEndsObj,[which,entityIndex,entityParentType]);  
  if(entityParentType=='locateStores') {
    ioAreaObj.embed.place=routeEndsObj.tips[which];
    ioAreaObj.embed.fix=which;
    ioAreaObj.embed.other=notWhich;
    ioAreaObj.showFixedEnd();
     if(typeof(noAutoGoVid) == 'undefined' || !noAutoGoVid ) {
      if (routeEndsObj.isNotEmpty(which) &&  
          routeEndsObj.isNotEmpty(notWhich) && 
          routeEndsObj.tips[which].parentType!=routeEndsObj.tips[notWhich].parentType)
          ioAreaObj.goVid();
    }
  }
  return 0;
}

ioArea.prototype.locateNearByBiz = function (geom, noCenter) {
  //var categoryNameIds = ioAreaObj.embed.blocate.allowedCategoryList.split(","); 
  //if(__experimentalUI) {
  //    ioAreaObj.selectInTopPanel('div_bizdisplay');
  //}
  // above is redundent code
  var categoryNameIds = ioAreaObj.embed.blocate.allowedCategoryList;
  if (typeof(categoryNameIds[0]) == 'undefined' ||
      typeof(categoryNameIds[0].name) == 'undefined') {
    var newVar = [];
    for(var i in categoryNameIds) {
      newVar.push({name:i,categoryList:categoryNameIds[i],sortby:accountDetails.config.sortby || 'priority'});
    }
    categoryNameIds = newVar;
  }
  if(ioAreaObj.embed.blocate) {
    //if(!__experimentalUI) $('#bizdisplay')[0].style.display='block';
    //try {
    //    $('#locality')[0].style.display='block';
    //} catch (e) {}
    //if(ioAreaObj.embed.hosting) shrinkMap(); 
    if(ioAreaObj.embed.hosting) {
      if(typeof(__experimentalUI)!='undefined' && __experimentalUI) { 
        fvtObj.showNew('srf');
      } else {
        shrinkMap();
      }
    }
    if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
      //fvtObj.writeCategory_newUI(categoryNameIds);
    } else {
      fvtObj.writeCategory(categoryNameIds);
    }
  }
  //var toSearch,a;
  var a;
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    //a={};
    //for(var i in categoryNameIds) {
    //  var id=categoryNameIds[i];
    //  break;
    //}
    //toSearch = {categoryList:id,name:i};
    //a = toSearch;
    a = categoryNameIds[0];
  } else {
    var toSearch = {categoryList:document.getElementById('bizCatDropDown').options[0].id};
    var id=toSearch.categoryList.replace(/\s+/g,"_");
    id=id.toString();
    document.getElementById(id).selected=true;
    a={};
    a.categoryList = document.getElementById('bizCatDropDown').options[document.getElementById('bizCatDropDown').selectedIndex].value;
  }
  if(ioAreaObj.embed.firstTimeRule)  {
    //FirstTime Rule is not supposed to contain the CATEGORY LIST anymore.
    //toSearch = ioAreaObj.embed.firstTimeRule;
  }
  ioAreaObj.invokeBizSearch(geom,a);
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) { 
    fvtObj.showNew('srf');
  } else {
    fvtObj.showLorR('L');
  }
}

ioArea.prototype.invokeBizSearch = function(inGeom,inSearch) {
  var geom = inGeom;
  if (typeof(inGeom) == 'undefined' || inGeom == null) geom = ioAreaObj.embed.place.lonlat;
  var toSearch = inSearch;
  if (!toSearch.categoryList) toSearch.categoryList = document.getElementById('bizCatDropDown').options[0].value;
  if (!toSearch.distanceLimit) toSearch.distanceLimit = ioAreaObj.embed.blocate.allowedDistanceLimit;
  if (!toSearch.itemLimit) toSearch.itemLimit = ioAreaObj.embed.blocate.allowedItemLimit;
  if (toSearch.name) { ioAreaObj.embed.blocate.lastSearchCategory = toSearch.name; } 
  else { ioAreaObj.embed.blocate.lastSearchCategory = ''; }
  var data2Send={
    action:"businessLocate",
    city:cfg.city,            
    account:vidteq.account,key:vidteq.key,
    center:ioAreaObj.embed.place.lonlat.lon+","+ioAreaObj.embed.place.lonlat.lat,
    category:toSearch.categoryList,
    distance:toSearch.distanceLimit,limit:toSearch.itemLimit
  };
  if(ioAreaObj.embed) {
      data2Send.mygid=accountDetails.mygid;
      if(accountDetails.config.sortby) data2Send.sortby=accountDetails.config.sortby;
      if(toSearch.sortby) data2Send.sortby=toSearch.sortby;
  }
  popUserInfoQuery();
  ioAreaObj.loadingPrompt = new showLoadingPrompt();
  this.globalAjaxObj=$.ajax({
    url:cfg.magicHappensUrl,
    data:data2Send,
    dataType:'text/plain',
    success:function (response) {
      //ioAreaObj.loadingPrompt.putMessage('Loaded ...');
      //ioAreaObj.loadingPrompt.animateAndKill(0.5);
      ioAreaObj.checkAndKillLoadingPrompt('',0.5);
      ioAreaObj.handleLocate.apply(ioAreaObj,[response,{name:'blocate'}]);
      if(ioAreaObj.embed.place.popup.open==1) mboxObj.popoutCenterPlace(undefined,1);
      //ioAreaObj.toggleButtons({locality:false});  
    },
    error:function (response) { debugPrint(response);}
  });
}

ioArea.prototype.handleLocateStores = function (jsonResponse) {
  //try {
  //  pageTracker._trackPageview("/locate_"+vidteq.account);
  //} catch(err) {};
  // will be counted in handleLocate
  //shrinkMap();
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) { 
    fvtObj.showNew('srf');
  } else {
    shrinkMap();
  }
  ioAreaObj.changeBackOpacity(1);
  ioAreaObj.checkAndKillLoadingPrompt('',1);
  //if (ioAreaObj.loadingPrompt && !utils.isObjectEmpty(ioAreaObj.loadingPrompt)) { // TBD detection
  //  //ioAreaObj.loadingPrompt.putMessage(' Already loaded ...');
  //  ioAreaObj.loadingPrompt.animateAndKill(1);
  //}
  if(typeof jsonResponse=='string') jsonResponse=JSON.parse(jsonResponse);
  if(jsonResponse.error) { 
    ioAreaObj.displayMessage(jsonResponse.error); 
    return false; 
  }

  ioAreaObj.showHelpMessage('Enter your address to find a Store nearby');
  // TBD check why is it needed
  //if(typeof(ioAreaObj.embed.locateStores.results)=='undefined') {
  //  ioAreaObj.embed.locateStores.results=jsonResponse.results;
  //  ioAreaObj.embed.locateStores.type=jsonResponse.type;  
  //}
  //if(typeof(ioAreaObj.embed.locateStores.results)=='undefined') {
  //  ioAreaObj.embed.locateStores.results=jsonResponse.srf[0].results;
  //  ioAreaObj.embed.locateStores.type=jsonResponse.srf[0].srfType;  
  //}
  if(typeof(ioAreaObj.embed.locateStores.seedSrf)=='undefined') {
    ioAreaObj.embed.locateStores.seedSrf = jsonResponse;
  }
  //ioAreaObj.handleLocate(JSON.stringify(jsonResponse.results),jsonResponse.type);
  // TBD
  ioAreaObj.handleLocate(JSON.stringify(jsonResponse));
  if(ioAreaObj.mode=='ROUTE') ioAreaObj.dirFromTo('end',0,'locateStores',true);
}

ioArea.prototype.locateNearByStores = function (geom, resetTheMode) {
  ioAreaObj.embed.fix=ioAreaObj.embed.other='';
  if (resetTheMode) {
    ioAreaObj.selectMode('LOCATE');
    $('#starttextbox')[0].value=ioAreaObj.locationName;
    $('#endtextbox')[0].value=ioAreaObj.endPlaceName;
    ioAreaObj.enableField({a:'starttextbox',b:'endtextbox'});
    ioAreaObj.showHelpMessage('Enter your address to find a Store nearby');
  }
  popUserInfoQuery();
  ioAreaObj.changeBackOpacity(0.2);
  var data={
    action:"locateStores",
    city:cfg.city,
    storeid:ioAreaObj.embed.locateStores.storeId,
    geom:geom,
    limit:(typeof(ioAreaObj.embed.locateStores.limit)!='undefined')?ioAreaObj.embed.locateStores.limit:'',
    account:vidteq.account,
    key:vidteq.key
  };
  if(vidteq.scriptBased) data.callbackFunction='ioAreaObj.handleLocateStoresCall';    
  if(typeof(ioAreaObj.embed.locateStores.seedSrf)=='undefined' || 
     (typeof(ioAreaObj.embed.locateStores.seedGeom)!='undefined' &&
     ioAreaObj.embed.locateStores.seedGeom != geom )) {
    ioAreaObj.embed.locateStores.seedGeom = geom;
    if(typeof(geom)!='undefined') geom=geom.replace(/\+/," ");
    ioAreaObj.globalAjaxObj=$.ajax({
      url:cfg.magicHappensUrl,
      dataType:vidteq.dataType,
      data:data,
      success:ioAreaObj.handleLocateStoresCall,
      error:function(response) {ioAreaObj.handleError.apply(ioAreaObj,[response]);}
    });
  } else {
    ioAreaObj.searchComplete=true;
    //ioAreaObj.selectMode('LOCATE');
    //$('#starttextbox')[0].value=ioAreaObj.locationName;
    //$('#endtextbox')[0].value=ioAreaObj.endPlaceName;
    //ioAreaObj.enableField({a:'starttextbox',b:'endtextbox'});
    //ioAreaObj.showHelpMessage('Enter your address to find a store nearby');
    ioAreaObj.handleLocate(JSON.stringify(ioAreaObj.embed.locateStores.seedSrf));
  }
}

ioArea.prototype.handleLocateStoresCall = function (response) {
  ioAreaObj.searchComplete=true;  
  ioAreaObj.handleLocateStores.apply(ioAreaObj,[response]);
}

ioArea.prototype.showSrf = function(srfResponse,which) {
  mboxObj.clearAll.apply(mboxObj,[]);
  this.srfResponse = srfResponse;
  // TBD which use - this function may be called from fvt objects
  fvtObj.prepareForShowSrf.apply(fvtObj,[this.srfResponse]);
  this.writeSrfToTable();
  this.toggleButtons({'clearroutetab' : true});
}

//ioArea.prototype.displayResults = function(which,srfResponse) {
//  mboxObj.clearAll.apply(mboxObj,[]);
//  this.srfResponse = reviseSrfToNewOne(srfResponse,which);
//  reviseStartEndInSrfResponse(this.srfResponse);
//  fvtObj.writeSrfNew.apply(fvtObj,[this.srfResponse]);
//  this.toggleButtons({'clearroutetab' : true});
//}

ioArea.prototype.writeSrfToTable = function() {
  mboxObj.cleanSrf();
  var from = 0;
  for (var i in this.srfResponse.srf) {
    from = populateMarkers(this.srfResponse.srf[i],from);
    fvtObj.writeSrfToTable(this.srfResponse.srf[i]);
    mboxObj.writeSrfToTable(this.srfResponse.srf[i]);
  } 
  mboxObj.writeSrfToTableFinish(this.srfResponse.srf[i]);
}

ioArea.prototype.triggerOneLandmarkRoute = function (index) {
  mboxObj.clearViaMarkers();
  if (accountDetails.landmarkRoutes[index].via) {
    //for (var i in accountDetails.landmarkRoutes[index].via) {
    //  mboxObj.placeViaBallMarker(accountDetails.landmarkRoutes[index].via[i],1);
    //}
    mboxObj.addViaSet(accountDetails.landmarkRoutes[index].via);
  }
  if (!accountDetails.landmarkRoutes[index].geom.toString().match(/POINT/)) {
    accountDetails.landmarkRoutes[index].geom = "POINT("+accountDetails.landmarkRoutes[index].geom+")";
  }
  this.dirFromTo('start',index,'landmarkRoutes');
  this.goVid();
}

//ioArea.prototype.attachLandmarkRoutes = function () {
//  $('#lmrForLiteImage')[0].src=imagePathsObj.lmrForLite;
//  var divToAttach = 'lmrForLite';
//  var opt="<div id='lr_div' class=lmrForWayLiteDropDown ><div id='lr_div_inner' style='background-color:#ffffff;display:block;margin:0;padding:0;'><ul id='ul-dropdown' class='lmrForWayLiteDropDown'>";
//  var count=0;
//  for(var i in accountDetails.landmarkRoutes) {
//    opt+='<li id='+count+'__landmark_route class=drop-down-list>'; //+ ioAreaObj.embed.place.address.name;
//    opt+='<a  class=headlink-drop-down>'+accountDetails.landmarkRoutes[i].address.name+'</a>';
//    opt+='</li>';
//    count++;
//  }
//  $('#'+divToAttach).append(opt+"</ul></div></div>");
//  var maxW = 0;
//  var maxH = 0;
//  $('#lr_div ul li a').each(function () {
//    maxH += $(this).height();
//    if (maxW < $(this).width()) { maxW = $(this).width(); }
//  });
//  if (maxW < $('#'+divToAttach).width()) { maxW = $('#'+divToAttach).width(); }
//  maxW = parseInt(maxW*1.2);
//  maxH = parseInt(maxH*1.5);
//  $('#lr_div_inner').css('width',maxW+'px');
//  $('#lr_div_inner').css('height',maxH+'px');
//  var boxImage = { url:imagePathsObj.refBox8, cornerW:10, cornerH:10, boxW:510, boxH:378, offsetW:0, offsetH:0 };
//  utils.boxify(boxImage,'lr_div',{lt:1,rt:1,lb:1,rb:1});
//  $('#lr_div').css('display','none');
//  var totalCount=count;
//  for(count=0;count<totalCount;count++) {
//    $('#'+count+'__landmark_route')[0].onclick=function () {
//      $('#lr_div').hide('slow',null);
//      var index=parseInt(this.id);
//      mboxObj.clearViaMarkers();
//      if (accountDetails.landmarkRoutes[index].via) {
//        for (var i in accountDetails.landmarkRoutes[index].via) {
//          mboxObj.placeViaBallMarker(accountDetails.landmarkRoutes[index].via[i],1);
//        }
//      }
//      ioAreaObj.dirFromTo('start',index,'landmarkRoutes');
//      ioAreaObj.goVid();
//    }
//  }
//  $('#lmrForLiteHref').click(function () {
//    if($('#lr_div')[0].style.display=='block') {
//      //ioAreaObj.selectInTopPanel('');
//      $('#lr_div').hide('slow',null);
//      //$('#landmarkroutes')[0].className='headlink';
//      //$('#div_landmarkroutes')[0].className = 'top-panel-height';
//    } else {
//      //ioAreaObj.selectInTopPanel('div_landmarkroutes');
//      $('#lr_div').show('slow',null);
//      //$('#landmarkroutes')[0].className='headlink-clicked';
//      //$('#div_landmarkroutes')[0].className = 'top-panel-height-clicked';
//    }
//  });
//
//  return;
//}

//ioArea.prototype.attachLandmarkRoutes = function () {
//  var opt="<select id='lr_select' class='landmarkroutes'><option>Route From..</option>";
//  $('#newsticker').html('<img src='+imagePathsObj.newSticker+' />');
//  for(var i in accountDetails.landmarkRoutes) {
//      opt+='<option>'; //+ ioAreaObj.embed.place.address.name;
//      opt+=accountDetails.landmarkRoutes[i].address.name;
//      opt+='</option>';
//  }
//  $('#landmarkroutes').html(opt+"</select>");
//  $('#lr_select')[0].onchange=function () {
//    var index=$('#lr_select')[0].selectedIndex-1;
//    if(index==-1) return;
//    ioAreaObj.triggerOneLandmarkRoute(index);
//    //mboxObj.clearViaMarkers();
//    //if (accountDetails.landmarkRoutes[index].via) {
//    //  for (var i in accountDetails.landmarkRoutes[index].via) {
//    //    mboxObj.placeViaBallMarker(accountDetails.landmarkRoutes[index].via[i],1);
//    //  }
//    //}
//    //ioAreaObj.dirFromTo('start',index,'landmarkRoutes');
//    //ioAreaObj.goVid();
//  };
//  return;
//}

// this function need to be context independent as it is called by ajax
ioArea.prototype.handleGetRoute = function(routeResponse) {
  try {
    pageTracker._trackPageview("/route_"+vidteq.account);
  }catch(err) {};
  clearRouteAndSrf();
  ioAreaObj.displayMessage("&nbsp");
  if(typeof(routeResponse)==String) routeResponse=JSON.parse(routeResponse);
  if (typeof(routeResponse.error) != 'undefined') {
    ioAreaObj.changeBackOpacity(1);  
    ioAreaObj.checkAndKillLoadingPrompt(' Path Not Routable ...',1);
    //if (ioAreaObj.loadingPrompt && !utils.isObjectEmpty(ioAreaObj.loadingPrompt)) { // TBD detection
    //  ioAreaObj.loadingPrompt.putMessage(' Path Not Routable ...');
    //  ioAreaObj.loadingPrompt.animateAndKill(1);
    //}
    alert("Path not routable - "+routeResponse.error);
    ioAreaObj.displayMessage(routeResponse.error);
    return false;
  }     
  ioAreaObj.response = routeResponse;
  ioAreaObj.toggleButtons({'clearroutetab' : true});
  var jobList = {
    mm: {divContent:"We found multiple matches for <b>start</b> and <b>end</b> places you entered",
         sOrE:"startAddress"},
    sm: {divContent:"We found multiple matches for <b>end</b> place you entered",
          sOrE:"endAddress"},
    ms: {divContent:"We found multiple matches for <b>start</b> place you entered",
          sOrE:"startAddress"},
    fm: {divContent:"No match for <b>start</b> place and multiple matches for <b>end</b> place you entered",
          sOrE:"endAddress"},
    mf: {divContent:"No match for <b>end</b> place and multiple matches for <b>start</b> place you entered",
          sOrE:"startAddress"},
    fs: {divContent:"No match for <b>start</b> and one match for <b>end</b> place you entered",
          sOrE:"endAddress"},
    sf: {divContent:"No match for <b>end</b> place and one match for <b>start</b> place you entered",
          sOrE:"startAddress"},
    ff: {divContent:"We found no matches for <b>start</b> and <b>end</b> places you entered",
          sOrE:"startAddress"}
  };
  ioAreaObj.changeBackOpacity(1);
  ioAreaObj.checkAndKillLoadingPrompt('',1);
  try { mboxObj.eMap.hideStatus(); } catch (e) { };

  //if (ioAreaObj.loadingPrompt && !utils.isObjectEmpty(ioAreaObj.loadingPrompt)) { // TBD detection
  //  //ioAreaObj.loadingPrompt.putMessage(' Already loaded ...');
  //  ioAreaObj.loadingPrompt.animateAndKill(1);
  //}  
  //}if (typeof(routeResponse.routeFailType) == 'undefined') {
  if (typeof(routeResponse.vid) != 'undefined') {
    
     ioAreaObj.displayRoute.apply(ioAreaObj,[routeResponse]);
  } else {
    // Following seciton is TBD
    //if(response.startAddress.length>0) {
    //  routeEndsObj.add('start',0,'startAddress');
    //  if(typeof(response.startAddress[0].name)!='undefined') { // TBD variants  
    //    document.GetVal.start.value=response.startAddress[0].name;
    //  }
    //}
    //if(response.endAddress.length>0) {
    //  routeEndsObj.add('end',0,'endAddress');
    //  if(typeof(response.endAddress[0].name)!='undefined') { // TBD variants  
    //    document.GetVal.end.value=response.endAddress[0].name;
    //  }
    //}
    //ioAreaObj.displayMessage(jobList[routeResponse.routeFailType].divContent);
    //var sOrE = jobList[routeResponse.routeFailType].sOrE;
    //reviseSrfWithParentTypeAndIndex(routeResponse);
    //ioAreaObj.displayResults.apply(ioAreaObj,[sOrE,routeResponse]);
    ioAreaObj.displayMessage(jobList[routeResponse.responseType].divContent);
    var sOrE = jobList[routeResponse.responseType].sOrE;
    ioAreaObj.reviseSrf(routeResponse);
    ioAreaObj.showSrf.apply(ioAreaObj,[routeResponse,sOrE]);
    if ( routeResponse.responseType == 'sf' ||
         routeResponse.responseType == 'sm' ||
         routeResponse.responseType == 'ss' ) {
      var entity = routeResponse.srf[0].results[0];
      if (entity.type != 'center') this.dirFromTo('start',entity.index,entity.parentType);
    }
    if ( routeResponse.responseType == 'fs' ||
         routeResponse.responseType == 'ms' ||
         routeResponse.responseType == 'ss' ) {
      var entity = routeResponse.srf[1].results[0];
      if (entity.type != 'center') this.dirFromTo('end',entity.index,entity.parentType);
    }
  }
}

function alertswf(str){
  //alert(str);
}

ioArea.prototype.createRoutePouch = function (routeResponse,fresh) {
  var divId = 'divRoutePouchPop';
  if ($("#"+divId).length) { return; }
  var animateTime = 4000;
  var routePouchDiv = "<div style='background-color:"+vidteq.bgColor+";width:300px;padding:20px;' id=routePouchDiv>"+this.prepareRouteSummary(routeResponse.summary,2)+"</div>";
  createPopupGeneric({html:routePouchDiv,margins:(5+4+2),closeClass:'close2'},{name:divId,factor:2,returnIfPresent:1, boxImage:{ url:imagePathsObj.refBox8, cornerW:10, cornerH:10, boxW:510, boxH:378, offsetW:0, offsetH:0 },animateTime:animateTime});
  if ($("#"+divId).data('timerset') == 'blah') { return; }
  $("#"+divId).data('timerset','blah');
  var animateStyle = $("#"+divId).data('animateStyle');
  $("#"+divId).data('oldLeft',animateStyle.left);
  setTimeout(function () {
    var con = $("#"+divId);
    if (!con.length) { return; }
    con.animate({left:parseInt($(window).width())+'px'},{duration:animateTime,complete:function () { con.hide();}}); 
  },2*animateTime);
  if (fresh) {
    var con = $("#"+divId);
    var routeResponseRef = routeResponse;
    $("#routePouchImage").attr('src',imagePathsObj.routePouch);
    $("#routePouchDiv").show('slow');
    $("#routePouchDiv").unbind('click');
    $("#routePouchDiv").click( function () {
      var con = $("#"+divId);
      if (!con.length) {
        ioAreaObj.createRoutePouch(routeResponseRef,false);
        return;
      }
      if (con.is(':visible')) { return; }
      con.show();
      con.animate({left:con.data('oldLeft')},animateTime);
      setTimeout(function () { 
        con.animate({left:parseInt($(window).width())+'px'},{duration:animateTime,complete:function () { con.hide();}}); 
      },2*animateTime);
    });
  }
}

ioArea.prototype.displayRoute = function(routeResponse) {
  routeResponse.highBwUrl = cfg.videoUrl;
  routeResponse.lowBwUrl = (typeof(cfg.videoUrlLb) != 'undefined')?cfg.videoUrlLb:'';
  reviseStartEndInResponse(routeResponse);
  reviseImageInResponse(routeResponse);
  reviseVideoInResponse(routeResponse);
  reviseCaptionInResponse(routeResponse);
  ioAreaObj.toggleButtons({'smstab' : true,
                           'emailtab' : true,
                           'mapexpand' : true,
                           'mapexpand' : true,
                           'printtab' : true,
                           'clearroutetab' : true,
                           'downloadtab' : true});
  mboxObj.displayRoute.apply(mboxObj,[routeResponse]);
  fvtObj.displayRoute.apply(fvtObj,[routeResponse]);
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    $('#routeSummary').html('<a class=helptooltip1 >'+this.prepareRouteSummary(routeResponse.summary,1)+'</a>');
  } else {
    this.displayMessage(this.prepareRouteSummary(routeResponse.summary,3));
    if (ioAreaObj.embed) { this.createRoutePouch(routeResponse,true); }
  }
  this.createLink(routeResponse.startEntity,routeResponse.endEntity);
}

ioArea.prototype.createLink = function(startEntity,endEntity) {
  if (!this.embed) {
    if (typeof(endEntity) == 'undefined') {
      //this.link=this.linkPrefix+encodeURI("?q=locate&city="+cfg.city+"&place="+startEntity.linkStr);
      this.link=utils.getRootPath()+"?q=locate&city="+cfg.city+"&place="+encodeURIComponent(startEntity.linkStr);
    } else {
      //this.link=this.linkPrefix+encodeURI("?q=route&city="+cfg.city+"&start="+startEntity.linkStr+"&end="+endEntity.linkStr);
      this.link=utils.getRootPath()+"?q=route&city="+cfg.city+"&start="+encodeURIComponent(startEntity.linkStr)+"&end="+encodeURIComponent(endEntity.linkStr);
    }  
  } else {
    if (this.embed.fix == '') { return; }
    var firstTimeRule={};  
    if (this.embed.fix == '') { return; }
    var otherEnd = startEntity; 
    var tip = this.embed.other;
    if ( tip == 'end') { otherEnd = endEntity; }
    firstTimeRule[tip] = {};
    firstTimeRule[tip].geom=otherEnd.geom;
    if (otherEnd.address && otherEnd.address.name ) {
      firstTimeRule[tip].address = {name:otherEnd.address.name};
    }
    if (routeEndsObj.viaSet && routeEndsObj.viaSet.length) {
      firstTimeRule[tip].via = [];
      for(var i in routeEndsObj.viaSet) {
        firstTimeRule[tip].via.push({geom:routeEndsObj.viaSet[i].geom});
        // TBD address needed
      }
    }
    if (mboxObj.viaMarkers && mboxObj.viaMarkers.length) {
      firstTimeRule[tip].via = [];
      for(var i in mboxObj.viaMarkers) {
        firstTimeRule[tip].via.push({geom:'POINT('+mboxObj.viaMarkers[i].data.geom.lon+' '+mboxObj.viaMarkers[i].data.geom.lat+')'});
        // TBD address needed
      }
    }
    if (this.embed.locateStores) { 
      firstTimeRule[this.embed.fix] = {
        storeSubid:this.embed.place.storeSubid,
        seedGeom:this.embed.locateStores.seedGeom
      };
    }
    //var host=document.location.hostname;
    //if(document.location.pathname.match(/stage/)) host+='/stage';
    if (typeof(accountDetails) != 'undefined' && accountDetails.account=="Arthabfs"){
      this.link='http://www.arthabfs.com/map1.html?firstTimeRule='+encodeURIComponent(JSON.stringify(firstTimeRule));     
    } else {
      //this.link='http://'+host+'/which.php?urlid='+accountDetails.urlId+'&firstTimeRule='+JSON.stringify(firstTimeRule);     
      this.link=utils.getRootPath()+'which.php?urlid='+accountDetails.urlId+'&city='+cfg.city+'&firstTimeRule='+encodeURIComponent(JSON.stringify(firstTimeRule));     
    }
  } 
  //var linkString="http://"+document.location.host+document.location.pathname+(decodeURIComponent(this.link)).toString();
  //if(ioAreaObj.embed && !ioAreaObj.embed.locateStores) linkString=this.link;
}

ioArea.prototype.prepareRouteSummary = function(summary,mode) {
  var tempSplit=summary.split("|");
  var summaryHTML="";
  if (mode==1) {
    summaryHTML="&nbsp;&nbsp;&nbsp;&nbsp;Directions From <b>"+routeEndsObj.tips.start.address.name+"&nbsp;</b>";
    summaryHTML+="to <b>"+routeEndsObj.tips.end.address.name+"</b><br/>";
    summaryHTML+="&nbsp;&nbsp;&nbsp;&nbsp;Total Distance = <b>"+tempSplit[0]+" Kms</b>&nbsp;&nbsp;Video Time ~ <b>"+tempSplit[1]+"</b>";
  } else if (mode==2) {
    summaryHTML="<a class=helptooltip1 style='font-size:12px'>";
    summaryHTML+="Directions From <b>"+routeEndsObj.tips.start.address.name+"&nbsp;</b>";
    summaryHTML+="to <b>"+routeEndsObj.tips.end.address.name+"</b><br/><br/>";
    summaryHTML+="Total Distance = <b>"+tempSplit[0]+" Kms</b>&nbsp;&nbsp;Video Time ~ <b>"+tempSplit[1]+"</b>";
    summaryHTML+='</a>';
  } else summaryHTML+="Total Distance = <b>"+tempSplit[0]+" Kms</b>&nbsp&nbsp;Video Time ~ <b>"+tempSplit[1]+"</b>";
  return summaryHTML;
}

ioArea.prototype.fillIoForm = function(which,what) {
  this.inputMapOrText='TEXT';
  this.selectMode('ROUTE');
  if (!this.tIn) { return true; }
  if (what != 'Your location') {
    var val = what;
    val = val.toString().trim();
    this.keyBox[which].loadAndBlink(val);
  //} else {
  //  this.getPointInfo(entity,tip);  // TBD
  }
  //var whatBetter = what.toString();
  //whatBetter = whatBetter.replace(/^\s+/,"");
  //whatBetter = whatBetter.replace(/\s+$/,"");
  //if(which=='start'){
  //  document.GetVal.start.value=whatBetter;
  //  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
  //  } else {
  //    document.GetVal.start.style.backgroundColor=mainColor;
  //    document.GetVal.start.style.color='white';
  //    setTimeout("document.GetVal.start.style.backgroundColor='white'",2000);
  //    setTimeout("document.GetVal.start.style.color='black'",2000);
  //  }
  //} else if(which=='end'){
  //  document.GetVal.end.value=whatBetter;
  //  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
  //  } else {
  //    document.GetVal.end.style.backgroundColor=mainColor;
  //    document.GetVal.end.style.color='white';
  //    setTimeout("document.GetVal.end.style.backgroundColor='white'",2000);
  //    setTimeout("document.GetVal.end.style.color='black'",2000);
  //  }
  //}
  return true;
}

ioArea.prototype.showFixedEnd = function () {
  if (!this.embed) return;
  if (this.embed.fix == '') return;
  var tip = this.embed.fix;
  var otherTip = this.embed.other;
  if (this.tIn) {
    if (this.embed.place && this.embed.place.address &&
        this.embed.place.address.name) {
      $('#'+tip+'textbox').attr('title',this.embed.place.address.name);
    } else {
      $('#'+tip+'textbox').attr('title','');
    }
    $('#'+otherTip+'textbox').attr('title',this.keyBox[otherTip].defaultTitle);
    $('#'+tip+'textbox').attr('readonly',1);
    $('#'+otherTip+'textbox').attr('readonly',null);
  }
  if (this.embed.place && this.embed.place.popup && 
      this.embed.place.popup.open==1) this.mbox.popoutCenterPlace();
}

//ioArea.prototype.showFixedEnd = function () {
//  if(!this.embed) return;
//  if(this.embed.fix=='start') {
//    this.alterDisabledField({'starttextbox':'disabled',
//                             'endtextbox':''});
//  } else if(this.embed.fix=='end') {
//    this.alterDisabledField({'starttextbox':'',
//                             'endtextbox':'disabled'});
//  }
//  if(this.embed.place.popup && this.embed.place.popup.open==1) mboxObj.popoutCenterPlace(); 
//}

//ioArea.prototype.alterDisabledField = function(which) {
//  //for(dom in which) $('#'+dom)[0].disabled=which[dom];
//  for(var dom in which) {
//    if (which[dom] == 'disabled') $('#'+dom).attr('readonly',1);
//    else $('#'+dom).attr('readonly',null);
//  }
//}

ioArea.prototype.disableField = function (which)  {
  for(prop in which)
  $('#'+which[prop])[0].disabled='disabled';
}

ioArea.prototype.enableField = function (which)  {
  for(prop in which)
  $('#'+which[prop])[0].disabled='';
}

ioArea.prototype.toggleButtons = function(buttonValuePairs) {
  var buttonParams = {
    mapexpand : { 
      onTitle : 'Expand the Map and float the video',
      offTitle : 'This is not available for a empty route',
      onClickFunc: function () {changeLayout();return false;}
    },
    clearroutetab: {
      onTitle : 'Clear the Map',
      offTitle : 'Map is already cleared',
      onClickFunc: function () {clearAll();return false;}
    },
    smstab: {
      onTitle : 'Send text directions as SMS',
      offTitle : 'Select a route to enable this feature',
      outerDiv : 'smstabOuter',
      onClickFunc: function () { 
        if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
          var l = ioAreaObj.prepareSMS(ioAreaObj.response);
          ioAreaObj.drapeSheer('divRoutePop');
          createPopup({html:l.allHtml,overflowDiv:'smsInnerDiv',headerDiv:'smsHeaderDiv',margins:(5+4+2),submitId:'mobile_submit',submitFunc:ioAreaObj.sendSMS},{name:'divRoutePop',factor:2});
          return;
        }
        ioAreaObj.popup=(new PopUpWindow(2));
        ioAreaObj.popup.showContents(ioAreaObj.prepareSMS(ioAreaObj.response)); 
      }
    },
    emailtab: {
      onTitle : 'Email the current  route with/without images',
      offTitle : 'Select a route to enable this feature',
      outerDiv : 'emailtabOuter',
      onClickFunc : function () { 
        if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
          var l = ioAreaObj.prepareEmail(ioAreaObj.response);
          if (l.allHtml == '')  { return; }
          
          ioAreaObj.drapeSheer('divRoutePop');
          createPopup({html:l.allHtml,overflowDiv:'emailInnerDiv',headerDiv:'emailHeaderDiv',margins:(5+4+2),submitId:'email_submit',submitFunc:ioAreaObj.sendEmail},{name:'divRoutePop',factor:2});
          return;
        }
        var l = ioAreaObj.prepareEmail(ioAreaObj.response);
        if (l.allHtml == '')  { return; }  // poped email mode
        ioAreaObj.popup=(new PopUpWindow(2));
        ioAreaObj.popup.showContents(l);
      }
    },
    minvideo: {
      onTitle : 'Hide the Video container',
      offTitle : 'Select a route to enable this feature',
      displayOnOff : true,
      onClickFunc : clearVideoTd
    },
    downloadtab : {
      onTitle : 'Download the complete route',
      offTitle : 'Select a route to enable this feature',
      onClickFunc : function () { 
        ioAreaObj.popup=(new PopUpWindow(2));
        ioAreaObj.popup.showContents(ioAreaObj.prepareDownload()); 
      }
    },
    printtab : {
      onTitle : 'Print the text directions for complete route',
      offTitle : 'Select a route to enable this feature',
      outerDiv : 'printtabOuter',
      onClickFunc : function () { 
        if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
          var l = ioAreaObj.preparePrintOptions(ioAreaObj.response);
          ioAreaObj.drapeSheer('divRoutePop');
          createPopup({html:l.allHtml,overflowDiv:'printInnerDiv',headerDiv:'printHeaderDiv',margins:(5+4+2)},{name:'divRoutePop',factor:2});
          return;
        }
        ioAreaObj.popup=(new PopUpWindow(2));
        ioAreaObj.popup.showContents(ioAreaObj.preparePrintOptions()); 
      }
    },
    localinkhref : {
      onTitle : 'Link to this search/route',
      outerDiv : 'locallinkhrefOuter',
      onClickFunc : function () { 
        if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
          var l = ioAreaObj.prepareLink();
          ioAreaObj.drapeSheer('divRoutePop');
          createPopup({html:l.allHtml,overflowDiv:'linkInnerDiv',headerDiv:'linkHeaderDiv',margins:(5+4+2)},{name:'divRoutePop',factor:2});
          return;
        }
        ioAreaObj.popup=(new PopUpWindow(2));
        ioAreaObj.popup.showContents(ioAreaObj.prepareLink()); 
      }
    },
    stores : {
      onTitle : 'Show all stores around Center of Bangalore',
      offTitle : 'Already in Stores mode',
      imageSrcEnabled : imagePathsObj.storesEnabled,
      imageSrcDisabled : imagePathsObj.storesDisabled,
      displayOnOff : true,
      onClickFunc : function () { 
        routeEndsObj.remove.apply(routeEndsObj,['start',true]);  
        routeEndsObj.remove.apply(routeEndsObj,['end',true]);  
        ioAreaObj.embed.locateStores.myLocStr = 'center of City';
        //ioAreaObj.locateNearByStores('POINT('+globalLon+' '+globalLat+')',true);
        ioAreaObj.locateNearByStores('POINT('+cfg.centerLon+' '+cfg.centerLat+')',true);
      }
    }    
  };
  for (i in buttonValuePairs) {
    if(document.getElementById(i)==null ) continue;
    if (buttonValuePairs[i] && document.getElementById(i)) {
      if (ioAreaObj.embed) {
        document.getElementById(i).className="comlink";
        if (buttonParams[i].outerDiv) {
          if (!$('#'+buttonParams[i].outerDiv).is('.com-containerSub')) {
            $('#'+buttonParams[i].outerDiv).addClass('com-containerSub');
          }
        }
      } else document.getElementById(i).className="maptab";
      if(buttonParams[i].imageSrcEnabled) document.getElementById(i).src=buttonParams[i].imageSrcEnabled;
      if(buttonParams[i].displayOnOff) document.getElementById(i).style.display='block';
      if(buttonParams[i].onClickFunc)
        document.getElementById(i).onclick=buttonParams[i].onClickFunc;
      document.getElementById(i).title=buttonParams[i].onTitle;
    } else {
      //document.getElementById(i).className="maptabdisabled1";
      if (ioAreaObj.embed) {
        document.getElementById(i).className="comlinkDisabled";
        if (buttonParams[i].outerDiv) {
          $('#'+buttonParams[i].outerDiv).removeClass('com-containerSub');
        }
      } else document.getElementById(i).className="maptabdisabled";
      if(buttonParams[i].imageSrcDisabled) document.getElementById(i).src=buttonParams[i].imageSrcDisabled;
      if(buttonParams[i].displayOnOff) document.getElementById(i).style.display='none';
      document.getElementById(i).onclick='';
      document.getElementById(i).title=buttonParams[i].offTitle;
    }
  }
}

ioArea.prototype.customHelpTextBelowButton = function(title) {
  if(__experimentalUI) return;
  $('#localityhelpmesg').html('Click to explore surroundings');
  ioAreaObj.textFlashInterval=setInterval(function () {ioAreaObj.colorChanger('localityhelpmesg');},2000);
}

ioArea.prototype.colorChanger = function (id) {
  var color=($('#'+id)[0].style.color)=='black'?'white':'black';
  $('#'+id)[0].style.color=color;
}

ioArea.prototype.loadMapStandAlone=function(latlon,srfResponse) {
    //mboxObj = new mbox('map','map_OpenLayers_ViewPort','javascript:ioAreaObj.invokeTheMode.apply(ioAreaObj,[])');
    mboxObj = new mbox('map',ioAreaObj);
    ioAreaObj.mbox = mboxObj;
    routeEndsObj = new _routeEnds();
    routeEndsObj.mbox = mboxObj;
  if (typeof(routeEndsObj)!='undefined') {
    ioAreaObj.keyBox.start.clearTip = function () { routeEndsObj.remove('start'); };
  }
  if (typeof(routeEndsObj)!='undefined') {
    ioAreaObj.keyBox.end.clearTip = function () { routeEndsObj.remove('end'); };
  }
    document.getElementById('GoVid').onclick=function () {ioAreaObj.invokeTheMode.apply(ioAreaObj,[]);return false;};
    if(!latlon) ioAreaObj.invokeTheMode.apply(ioAreaObj,[]);
    else {fvtObj.showLorR('L');ioAreaObj.showSrf(srfResponse,'location');}
    //else {fvtObj.showLorR('L');ioAreaObj.displayResults('location',srfResponse);}
}

ioArea.prototype.loadSync=function (mode) {
  if(!this.checkDefaults(1)) return false;
  this.loadSyncCalled=true;
  fvtObj = new fvt(ioAreaObj);
  fvtObj.clearFvtContent=vidteq.clearFvtContent;
  vidteq.clearFvtContent='';
  $('#rightcolumn')[0].style.backgroundImage='';
  if (typeof(mode) == 'undefined' || mode != 'q') {
    if($('#routedetails_primitive')[0]) $('#routedetails_primitive')[0].innerHTML='';
    //createLoadingDiv ();
    ioAreaObj.displayMessage(ioAreaObj.loadingDivMessage);
    ioAreaObj.changeBackOpacity(0.2);
    var syncPageUrl=(ioAreaObj.newUi)?"vc/base_newui.php":"vc/base.php";
    var data=(this.mode=='LOCATE')?{q:"locate"}:{q:"route"};
    showSyncPage=function (response) {
      var syncDiv=$('#dynamicDiv')[0];
      syncDiv.innerHTML=response;
      page2Process();
      ioAreaObj.toggleButtons({'localinkhref':true,
                   'clearroutetab' : false,
                   'smstab' : false,
                   'printtab' : false,
                   'emailtab' : false,
                   'downloadtab' : false});
      if(ioAreaObj.openLayersLoaded) {
        ioAreaObj.loadMapStandAlone.call(ioAreaObj);
      }
    }
    ioAreaObj.globalAjaxObj=$.ajax({
      url:syncPageUrl, type: 'GET', data:data, dataType:"html",
      success:showSyncPage,
      error:function () {}
    });
  } else {
    page2Process();
    ioAreaObj.toggleButtons({'localinkhref':true,
                 'clearroutetab' : false,
                 'smstab' : false,
                 'printtab' : false,
                 'emailtab' : false,
                 'downloadtab' : false});
    if(ioAreaObj.openLayersLoaded) {
      ioAreaObj.loadMapStandAlone.call(ioAreaObj);
    }
  }
  return 0;
}

ioArea.prototype.invokeTheMode=function () {
  if($('#routedetails_primitive')[0]) $('#routedetails_primitive')[0].innerHTML='';
  if(!this.checkDefaults()) return false;  // additional check needed for rcm TBD
  //ioAreaObj.cancelLocate=false
  //ioAreaObj.flink={}
  //if(ioAreaObj.flink) ioAreaObj.flink.ll=0;
  if ($('#frontCurtainClose').length) { $('#frontCurtainClose').click(); }
  //createLoadingDiv();
  ioAreaObj.displayMessage(ioAreaObj.loadingDivMessage);
  ioAreaObj.changeBackOpacity(0.2);
  //document.getElementById('VideoPlayerDiv').innerHTML='';
  this.executeAllFunc(this.topClearList);
  //this.clearSuggestDiv($('#sugdivstart')[0]);
  //this.clearSuggestDiv($('#sugdivend')[0]);
  try { document.getElementById('GoVid').focus(); } catch (e) { }; // TBD why IE dies here
  this.captureStartAndEnd();
  //killQuestionPopup();
  mboxObj.killRcmPopup.apply(mboxObj,[]);
  if(this.mode == 'LOCATE') {
    //var c=encodeURI("?q=locate&place="+(this.startAddress));
    //this.link=c;
    this.goVid(this.startAddress);
  } else {
    this.toggleButtons({"downloadtab":false});
    //allVideoLinks = [];
    //mapnDpVideoLinks = [];
    //vidDuration = 0;
    //vVidDuration = 0;
    if(typeof(__experimentalUI)!='undefined' && __experimentalUI) { 
      fvtObj.showNew('route');
    } else {
      fvtObj.showLorR('R');
    }
    //this.link=encodeURI("?q=route&start="+this.startAddress+"&end="+this.endAddress);
    this.goVid(this.startAddress,this.endAddress);
  }
  return 0;
}

ioArea.prototype.captureStartAndEnd=function () {
  if (this.tIn) {
    this.startAddress=utils.trim($('#starttextbox').val());
    this.endAddress=utils.trim($('#endtextbox').val());
  } else {
    this.startAddress=routeEndsObj.getName('start');
    this.endAddress=routeEndsObj.getName('end');
  }
  //this.startAddress=document.GetVal.start.value
  //this.startAddress=this.startAddress.replace(/^\s+/,"");
  //this.startAddress=this.startAddress.replace(/\s+$/,"");
  //this.endAddress=document.GetVal.end.value
  //this.endAddress=this.endAddress.replace(/^\s+/,"");
  //this.endAddress=this.endAddress.replace(/\s+$/,"");
}  

ioArea.prototype.prepareSMS=function (response) {
  var smsHtml="";
  if(response.name) {
    smsHtml+="<p style='font-size:13px;padding:5px;'>"+response.name+"</p>";
    //for(i in addressSubsArray) {
    //  if(response[addressSubsArray[i].field]) smsHtml+="<p style='font-size:13px;padding:5px;'>"+response[addressSubsArray[i].field]+"</p>";
    //}
    for(i in addrParams) {
      if(response[addrParams[i].field]) smsHtml+="<p style='font-size:13px;padding:5px;'>"+response[addrParams[i].field]+"</p>";
    }
  } else {
    //if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
      smsHtml+="<p style='font-size:14px;margin:0;padding:0;padding-bottom:5px;'>Start Address - "+response.startAddress+"</p><p style='margin:0;padding:0;padding-bottom:5px;font-size:14px'>End Address - "+response.endAddress+"</p><p style='font-size:14px;margin:0;padding:0;padding-bottom:5px;'>Total Distance : "+response.routeSummary.distance+" Kms, Video Time : "+response.routeSummary.videoDuration+"</p>";
      if (this.embed && this.embed.place) { 
        smsHtml+="<p style='font-size:14px;margin:0;padding:0;padding-bottom:5px;'>Business Address : "+this.embed.place.address.name+getEntityHtmlAddrContent('fvt',this.embed.place,0).addrContent+"</p>";
      }
    //} else {
    //  smsHtml+="<p style='font-size:14px;padding:5px;'>Start Address - "+response.startAddress+"</p><p style='padding:5px;font-size:14px'>End Address - "+response.endAddress+"</p><p style='font-size:14px'>Total Distance : "+response.routeSummary.distance+" Kms, Video Time : "+response.routeSummary.videoDuration+"</p>";
    //}
    for(i in response.vid) {
      smsHtml+="<p style='font-size:13px'>"+(parseInt(i)+1)+". "+response.vid[i].direction+"</p>";
    }
  }
  var headerHtml="Please enter your Mobile Number";
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    var lowerHtml="<table align=center width=75% cellspacing=0 cellpadding=0><tr><td><a onfocus='this.blur();' style='font-size:14px'></a></td><td><a onfocus='this.blur();' style='font-size:14px'>+91</a><input type='text' maxlength=10 size=10 style='width:80%;' name='smsbox' onclick='ioAreaObj.clickTextbox(this)' id='mobinput' value='"+this.inputValSMS+"' /></td><td><div tabindex=0 id='mobile_submit' class='feedback_submit1' title='Send SMS' alt='SMS' href='javascript:void(0);' onclick='javascript:ioAreaObj.sendSMS.apply(ioAreaObj,[])'><a class='popSubmit' style='padding-right:24px;'>SMS</a></div></td></tr></table>";
  } else { 
    var lowerHtml="<table align=center width=75% cellspacing=0 cellpadding=0><tr><td><a onfocus='this.blur();' style='font-size:14px'></a></td><td><a onfocus='this.blur();' style='font-size:14px'>+91</a><input type='text' maxlength=10 size=10 style='width:80%;' name='smsbox' onclick='ioAreaObj.clickTextbox(this)' id='mobinput' value='"+this.inputValSMS+"' /></td><td><img src='"+imagePathsObj.sms+"' tabindex=0 style='cursor:pointer' height=25 href='javascript:void(0);' onclick= 'javascript:ioAreaObj.sendSMS.apply(ioAreaObj,[])'/></td></tr></table>";
  }
  //var allHtml = "<div style='background-color:white;text-align:left;min-width:410px;max-width:680px;'><div id='smsHeaderDiv' style='text-align:center;'><a onfocus='this.blur();' class='popupheader1'>"+headerHtml+"</a><br><br>"+lowerHtml+"<br></div><hr id='hrSeperator' style='line-height:0;height:2px;font-size:2px;background-color:black;color:black;width=100%;border:none;padding:0px;padding-top:0px;padding-bottom:0px;margin:0; margin-top:2px;margin-bottom:2px;'><div id='smsInnerDiv' style='background-color:white;text-align:left;margin:0;margin-top:5px;padding:5px;padding-left:10px;'>"+smsHtml+"</div><div style='height:20px;background-color:white;width:100%;'></div></div>";
  var allHtml = "<div style='background-color:"+vidteq.bgColor+";text-align:left;min-width:410px;max-width:680px;'><div id='smsHeaderDiv' style='text-align:center;'><a onfocus='this.blur();' class='popupheader1'>"+headerHtml+"</a><br><br>"+lowerHtml+"<br></div><hr id='hrSeperator' style='line-height:0;height:2px;font-size:2px;background-color:black;color:black;width=100%;border:none;padding:0px;padding-top:0px;padding-bottom:0px;margin:0; margin-top:2px;margin-bottom:2px;'><div id='smsInnerDiv' style='background-color:"+vidteq.bgColor+";text-align:left;margin:0;margin-top:5px;padding:5px;padding-left:10px;'>"+smsHtml+"</div><div style='height:20px;background-color:"+vidteq.bgColor+";width:100%;'></div></div>";
  return ({headerHtml:headerHtml,innerDivHtml:smsHtml,lowerHtml:lowerHtml,allHtml:allHtml});
}  

ioArea.prototype.prepareEmail = function (response,place) {
  var emailHtml;
  if(place!==undefined && place == 1) {
    emailHtml = this.preparePlaceHtml(response);
  } else emailHtml=this.prepareRouteDirectionsPreview();
  var headerHtml="Please enter your Email Id <br></a><a onfocus='this.blur();' style='text-align:center;'>(Multiple Email Ids separated by a comma)</a><a>";
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    var lowerHtml="<table align=center width=75% cellspacing=0 cellpadding=0><tr><td><a onfocus='this.blur();' style='font-size:14px'></a></td><td><input type='text'  style='width:95%;' id='emailinput' name='emailbox' value='"+this.inputValEmail+"' onclick='ioAreaObj.clickTextbox(this)' />&nbsp</td><td><div tabindex=0 id='email_submit' class='feedback_submit1' title='Send Email' alt='Email' href='javascript:void(0);' onclick='javascript:ioAreaObj.sendEmail.apply(ioAreaObj,[])'><a class='popSubmit' style='padding-right:18px;'>EMail</a></div></td></tr></table>";
  } else {
    var lowerHtml="<table align=center width=75% cellspacing=0 cellpadding=0><tr><td><a onfocus='this.blur();' style='font-size:14px'></a></td><td><input type='text'  style='width:95%;' id='emailinput' name='emailbox' value='"+this.inputValEmail+"' onclick='ioAreaObj.clickTextbox(this)' />&nbsp</td><td><img src='"+imagePathsObj.email+"' tabindex=0 style='cursor:pointer' height=25 href='javascript:void(0);' onclick='javascript:ioAreaObj.sendEmail.apply(ioAreaObj,[])' /></td></tr></table>";
  }
  var allHtml = "<div style='background-color:"+vidteq.bgColor+";text-align:left;min-width:200px;max-width:580px;'><div id='emailHeaderDiv' style='text-align:center;'><a onfocus='this.blur();' class='popupheader1'>"+headerHtml+"</a><br><br>"+lowerHtml+"<br></div><hr id='hrSeperator' style='line-height:0;height:2px;font-size:2px;background-color:black;color:black;width=100%;border:none;padding:0px;padding-top:0px;padding-bottom:0px;margin:0; margin-top:2px;margin-bottom:2px;'><div id='emailInnerDiv' style='background-color:"+vidteq.bgColor+";text-align:left;margin:0;margin-top:5px;padding:5px;padding-left:10px;'>"+emailHtml+"</div><div style='height:20px;background-color:"+vidteq.bgColor+";width:100%;'></div></div>";
  //ioAreaObj.invokeEmail(allHtml);
  //allHtml = '';
  return ({headerHtml:headerHtml,innerDivHtml:emailHtml,lowerHtml:lowerHtml,allHtml:allHtml});
}  

ioArea.prototype.preparePlaceHtml = function (placeObj) {
    var emailHtml="<p style='font-size:18px;padding:5px;'>"+placeObj['name']+"</p><br/>";
    //for(i in addressSubsArray) {
    //  if(placeObj[addressSubsArray[i].field]) emailHtml+="<p style='padding:5px;font-size:13px'>"+placeObj[addressSubsArray[i].field]+"</p>";
    //}
    for(i in addrParams) {
      if(placeObj[addrParams[i].field]) emailHtml+="<p style='padding:5px;font-size:13px'>"+placeObj[addrParams[i].field]+"</p>";
    }
    this.email={};
    this.email.files='';
    if(placeObj.lightPullImg) {
        this.email.files+=placeObj.lightPullImg+";";
        emailHtml+='<br/><img src=http://'+document.location.host+placeObj.lightPullImg+' />';
    }
    if(placeObj.image) {
        this.email.files+=placeObj.image;
        emailHtml+='<br/><img src='+cfg.cloneImageUrl+placeObj.image+' />';
    }
    emailHtml+='<br/><br/>Please visit ';
    emailHtml+='<a href=http://'+document.location.hostname+'>vidteq.com</a>';
    emailHtml+=' for richer experience';
    return emailHtml;
}

ioArea.prototype.prepareLink = function () {
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    var headerHtml="Direct Link<br>Copy this link in email and send";
  } else {
    var headerHtml="Direct Link";
  }
  //var linkString="http://"+document.location.host+document.location.pathname+(decodeURIComponent(this.link)).toString();
  //if(ioAreaObj.embed && !ioAreaObj.embed.locateStores)
  //  linkString=this.link;
  var linkStr = this.link;
  var innerHtml;
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    innerHtml="<a style='font-size:12px;color:black;font-family:Terbuchet MS, Arial;' href='"+(linkStr).toString()+"' target='_blank' class=click>"+linkStr+"</a>";
  } else {
    innerHtml="<a style='font-size:12px;color:black;font-family:Terbuchet MS, Arial;' href='"+(linkStr).toString()+"' target='_blank' class=click>"+linkStr+"</a>";
  }
  var allHtml = "<div style='background-color:"+vidteq.bgColor+";text-align:left;min-width:410px;max-width:680px;'><div id='linkHeaderDiv' style='text-align:center;'><a onfocus='this.blur();' class='popupheader1'>"+headerHtml+"</a><br><br></div><hr id='hrSeperator' style='line-height:0;height:2px;font-size:2px;background-color:black;color:black;width=100%;border:none;padding:0px;padding-top:0px;padding-bottom:0px;margin:0; margin-top:2px;margin-bottom:2px;'><div id='linkInnerDiv' style='background-color:"+vidteq.bgColor+";text-align:center;margin:0;margin-top:5px;padding:5px;padding-left:10px;'><br>"+innerHtml+"<br><br></div></div>";
  return ({headerHtml:headerHtml,innerDivHtml:innerHtml,allHtml:allHtml});
}

ioArea.prototype.buildDiveInArray = function (dIRef,cI,sI,finalPoint) {
  var dI = {};
  var returnPoint = parseInt(finalPoint/2);
  for(var i=0;i<dIRef[cI];i++) {
    if (sI+i <= returnPoint) {
      if (!dI.pre) { dI.pre = []; }
      dI['pre'].push(sI+i);
    }
  }
  if ((sI + dIRef[cI]-1) < returnPoint) { 
    dI.dI = this.buildDiveInArray (dIRef,(cI+1),(sI+dIRef[cI]),finalPoint);
  }
  for(var i=dIRef[cI]-1;i>-1;i--) {
    if (finalPoint-i-sI > returnPoint ) {
      if (!dI.post) { dI.post = []; }
      dI['post'].push(finalPoint-i-sI);
    }
  }
  return dI;
}

ioArea.prototype.createEmailDITopHtml = function (dIRef,attr,dIHtml) {
  // note : function modifies incoming dIHtml as well using pointers
  var fullHtml; var hintHtml;
  hintHtml = "<a class='poi1' >,&nbsp;&nbsp;</a>"+dIHtml.hintHtml;
  dIHtml.hintHtml ="<a class='textdir1' style='display:inline;'> Additional "+(dIRef.post[0]-dIRef.pre[dIRef.pre.length-1]-1)+" POIs to watch for ... (</a>"+dIHtml.hintHtml+"<a class='textdir1' >)</a>";
  var gId = attr.id;
  var lId = dIRef.pre[0];
  fullHtml ="<br><div><div id=fullImageDiv_"+gId+"_"+lId+" style='display:none;'>"+dIHtml.fullHtml+"</div><div id=hintImageDiv_"+gId+"_"+lId+" style='display:block;cursor:pointer;text-align:left;padding-left:20px;padding-bottom:10px;' onclick = 'javascript:$(\"#hintImageDiv_"+gId+"_"+lId+"\").hide();$(\"#fullImageDiv_"+gId+"_"+lId+"\").show(); $(\"#fullImageDiv_"+gId+"_"+lId+"\").find(\"img[id^=imgdivpoi_"+gId+"_"+attr.depth+"_]\").each(function () {$(this).attr(\"src\",$(this).attr(\"alt_src\"));$(this).attr(\"alt_src\",\"\");});'>"+dIHtml.hintHtml+"</div></div>";
  return {hintHtml:hintHtml,fullHtml:fullHtml};
}

ioArea.prototype.createEmailImage = function (attr,oneRec) {
  var fullHtml; var hintHtml;
  if (attr.visible) {
    fullHtml = "<br><div><br><a class=simple style='display:block;text-align:left;padding-left:20px;padding-bottom:10px;'>"+oneRec.poiName+"</a><div id=imgdivpoi_"+attr.id+"_"+attr.depth+"_"+attr.lId+" style='margin-left:20px;z-index:12000;height:240px;width:320px;'><div style='display:block;' ><img id=imgdivpoi_"+attr.id+"_"+attr.depth+"_"+attr.lId+" alt='"+oneRec.poiName+"' src="+cfg.cloneImageUrl+oneRec.imgName +" /></div><div id='arrowoverlay' style='padding-top:180px;text-align:center'></div></div></div>";
  } else {
    fullHtml = "<br><div><br><a class=simple style='display:block;text-align:left;padding-left:20px;padding-bottom:10px;'>"+oneRec.poiName+"</a><div id=imgdivpoi_"+attr.id+"_"+attr.depth+"_"+attr.lId+" style='margin-left:20px;z-index:12000;height:240px;width:320px;'><div style='display:block;' ><img id=imgdivpoi_"+attr.id+"_"+attr.depth+"_"+attr.lId+" alt='"+oneRec.poiName+"' alt_src="+cfg.cloneImageUrl+oneRec.imgName +" /></div><div id='arrowoverlay' style='padding-top:180px;text-align:center'></div></div></div>";
  }
  if (attr.begin) {
    hintHtml = "<a class='poi1' >"+oneRec.poiName+"</a>";
  } else {
    hintHtml = "<a class='poi1' >,&nbsp;&nbsp;"+oneRec.poiName+"</a>";
  }
  return {hintHtml:hintHtml,fullHtml:fullHtml};
}

ioArea.prototype.buildDiveIn = function (dIRef,seedArray,attr,createDITopHtml,createOneHtml) {
  var fullHtml = '';
  var hintHtml = '';
  if (dIRef.pre) {
    for (var i in dIRef.pre) {
      attr.lId = dIRef.pre[i];
      attr.begin = false;
      attr.end = false;
      if (i==0) { attr.begin = true; }
      var allHtml = createOneHtml(attr,seedArray[dIRef.pre[i]]);
      hintHtml += allHtml.hintHtml;
      fullHtml += allHtml.fullHtml;
    }
  }
  var oldVisibility = attr.visible;
  attr.visible = false;
  attr.depth++;
  if (dIRef.dI) {
    var dIHtml = this.buildDiveIn(dIRef.dI,seedArray,attr,createDITopHtml,createOneHtml);
    var dITopHtml = createDITopHtml(dIRef,attr,dIHtml);
    hintHtml += dITopHtml.hintHtml;
    fullHtml += dITopHtml.fullHtml;
  }
  attr.visible = oldVisibility;
  attr.depth--;
  if (dIRef.post) {
    for (var i in dIRef.post) {
      attr.lId = dIRef.post[i];
      attr.begin = false;
      attr.end = false;
      if (i==dIRef.post.length-1) { attr.end = true; }
      var allHtml = createOneHtml(attr,seedArray[dIRef.post[i]]);
      hintHtml += allHtml.hintHtml;
      fullHtml += allHtml.fullHtml;
    }
  }
  return {hintHtml:hintHtml,fullHtml:fullHtml};
}    

ioArea.prototype.prepareRouteDirectionsSneakPeak = function (print,noImages) {
  var emailHTML="";
  emailHTML+="<h3>Driving Directions from "+this.startAddress+" to "+this.endAddress+"</h3>";
  emailHTML+="<p style='font-size:14px;margin:0;padding:0;padding-bottom:5px;'>Total Distance : "+this.response.routeSummary.distance+" Kms, Video Time : "+this.response.routeSummary.videoDuration+".</p>";
  if (this.embed && this.embed.place) { 
    emailHTML+="<p style='font-size:14px;margin:0;padding:0;padding-bottom:5px;'>Business Address : "+this.embed.place.address.name+getEntityHtmlAddrContent('fvt',this.embed.place,0).addrContent+"</p>";
  }
  for(var i=0;i<this.response.vid.length;i++) {
    hostname=document.location.host;
    var classPNG=(MSIE6==true)?"class='pngfixclass'":"''";  
    emailHTML+="<br><hr style='height:2px;width:100%;margin:0;padding:0;'>"; 
    emailHTML+="<div><table><tr><td><img id=arrowImage src="+this.response.vid[i].arrowSrc+" "+classPNG+" /> </td><td> <a class='simple' style='padding-bottom:5px;'>&nbsp;&nbsp;"+(i+1)+". "+this.response.vid[i].direction+"</a></td></tr></table></div>";
    if(typeof(noImages)=='undefined') { // TBD
      var refPois = [];
      for(j=0;j<this.response.vid[i].passBy.length;j++) {
        var curPoi=this.response.imgData[this.response.vid[i].passBy[j].id];
        refPois.push(curPoi);
        //this.email.files+=curPoi.imgName+";";
      }
      if (this.response.vid[i].passBy.length > 0) {
        var temp = this.buildDiveIn(
          this.buildDiveInArray([1,2,4,6,8,10,12,14,16,18],0,0,this.response.vid[i].passBy.length-1),
          refPois,
          {id:i,print:print,visible:true,depth:0},
          this.createEmailDITopHtml,
          this.createEmailImage);
        temp.fullHtml = "<div style='text-align:left'><br><a class='simple' style='text-align:center;padding-left:20px;padding-bottom:3px;'>Pass by following Points Of Interests (POI).<br></a></div>"+temp.fullHtml;
        emailHTML += temp.fullHtml;
      }
    }
  }
  try {
    if(typeof(noImages)=='undefined') {
      emailHTML+="<p id='routeimgsnap'>Loading the image of route .....</p>";
      this.addMapImage(this.prepareLightpullReqObj());
    }
  } catch (e) { }  
  emailHTML+="<p>Have a nice trip. Please do visit us back at www.vidteq.com</p>";
  //emailHTML+="</body></head></html>";
  return emailHTML;
}

ioArea.prototype.prepareRouteDirectionsPreview = function (print,noImages) {
  //if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    return this.prepareRouteDirectionsSneakPeak(print,noImages); 
  //} else {
  //  return this.prepareRouteDirectionsPreviewOld(print,noImages);
  //}
}

ioArea.prototype.prepareLightpullReqObj =function () {
  mapImageObject={};
  var lastOne = mboxObj.carPathArray[mboxObj.carPathArray.length-1];
  mapImageObject.route={'startGeom':"POINT("+mboxObj.carPathArray[0][0]+")",
                        'endGeom':"POINT("+lastOne[lastOne.length-1]+")"};
  mapImageObject.proximity=[];
  for(var i=1;i<(mboxObj.syncMapPoints.length-1);i++) {
    var a={};
    var cur = mboxObj.carPathArray[parseInt(mboxObj.syncMapPoints[i])][0];
    a.geom="POINT("+cur+")";
    a.icon={"name":(i+1)+".png","size":16};
    mapImageObject.proximity.push(a);
  }
  return mapImageObject;
}

ioArea.prototype.addMapImageToDom = function (html) {
  if(this.printWindow && this.printWindow!=null && 
     this.printWindow.document!=null && 
     this.printWindow.document.getElementById('routeimgsnap')) {  
    ioAreaObj.printWindow.document.getElementById('routeimgsnap').innerHTML= html;
  }
  if ($('#routeimgsnap').length) { $('#routeimgsnap').html(html); }
}

ioArea.prototype.addMapImage = function (mapData) {
  var s=JSON.stringify(mapData);
  var paramsToSend={'w':320,'h':320,'onlyPath':1,'places':s,city:cfg.city};
  var img=$.ajax({
    url:cfg.lightPullUrl,
    type:"POST",
    dataType:'json',
    data:paramsToSend,
    success:function (response) {
      var imgName=response.path;
      var toPut = "<img src=http://"+document.location.host+"/tmp/"+imgName+" />";
      if (typeof(imgName) != 'undefined' && imgName!='undefined') {
        ioAreaObj.addMapImageToDom(toPut);
      } else { ioAreaObj.addMapImageToDom(''); }
      //if(imgName && imgName!='undefined') {
      //  if(ioAreaObj.printWindow && ioAreaObj.printWindow!=null && ioAreaObj.printWindow.document!=null && ioAreaObj.printWindow.document.getElementById('routeimgsnap')) {  
      //    ioAreaObj.printWindow.document.getElementById('routeimgsnap').innerHTML= toPut;
      //  }
      //  if(document.getElementById('routeimgsnap')) {
      //    document.getElementById('routeimgsnap').innerHTML= toPut;  
      //  }
      //} else { 
      //  if(ioAreaObj.printWindow && ioAreaObj.printWindow!=null && ioAreaObj.printWindow.document!=null && ioAreaObj.printWindow.document.getElementById('routeimgsnap')) {  
      //    ioAreaObj.printWindow.document.getElementById('routeimgsnap').innerHTML= "";
      //  }
      //  if(document.getElementById('routeimgsnap')) {
      //    document.getElementById('routeimgsnap').innerHTML= "";  
      //  }
      //}
    },
    error: function () {
      ioAreaObj.addMapImageToDom('');
     // if(document.getElementById('routeimgsnap') || (ioAreaObj.printWindow && ioAreaObj.printWindow.document.getElementById('routeimgsnap'))) {
     //   document.getElementById('routeimgsnap').innerHTML= "";  
     // }
    }
  });
}  

ioArea.prototype.sendSMS= function () {
  /* if(isMapXpanded){
  setTimeout('getBackVideoTd()',4000);
  }*/
  var mobileNumber=$('#mobinput')[0].value;
  if (!checkPhoneNumber(mobileNumber)) { return false; }
  mobileNumber.replace(/\s+/g,'');
  //if(mobileNumber.length==10 && mobileNumber.match(/^9\d{9}/)) {
  var totalRoute;
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    totalRoute=$('#smsInnerDiv')[0].innerHTML;
  } else {
    totalRoute=$('#innerDiv')[0].innerHTML;
  }
  totalRoute=totalRoute.replace(/\<p[^\>]*\>/ig,"")
  totalRoute=totalRoute.replace(/\<\/p\>/ig,"\n")
  totalRoute=totalRoute.replace(/\<br[^\>]*\>/ig,"\n")
  totalRoute=totalRoute.replace(/\<a[^\>]*\>/ig,"")
  totalRoute=totalRoute.replace(/\<\/a\>/ig,"\n")
  totalRoute=totalRoute.replace(/&nbsp;/ig," ")
  var sendSMSAjaxData = {action:"sendSms",city:cfg.city,to:mobileNumber, text:totalRoute};
  this.globalAjaxObj=$.ajax({type: 'GET', url: cfg.magicHappensUrl,  data: sendSMSAjaxData,  error:function () {return true;}, dataType: vidteq.dataType});
  //} else {
  //  alert("Please check the number you have entered");
  //  return false;
  //}
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    var temp = new showSendingPrompt(3);
  } else {
    this.showSendingPrompt();
  }
  return true;
}

ioArea.prototype.sendEmail= function () { 
  var emailId=$('#emailinput')[0].value.split(/\,/);
  for(var i=0;i<emailId.length;i++) {
    if(!checkEmailId(emailId[i])) { return false; }
  }
  //var chiller=0;
  var innerDiv = 'innerDiv';
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    innerDiv = 'emailInnerDiv';
  }
  if (typeof(emailWindowMode) != 'undefined') { innerDiv = 'emailInnerDiv'; }
  //if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    //var innerDiv = 'emailInnerDiv';
    var fileNames = [];
    //$('#'+innerDiv).find('div').each(function () {
    //  if (!$(this).attr('id').match(/imgdiv/)) { return true; }
    //  if (!$(this).is(':visible')) { 
    //    $(this).css('background-image',''); // for now just remove it
    //    return true; 
    //  }
    //  var oneName = $(this).css('background-image');
    //  oneName = oneName.replace(/^.*\("/g,'');
    //  oneName = oneName.replace(/"\).*$/g,'');
    //  fileNames.push(oneName);
    //  $(this).css('background-image','');
    //  $(this).html("<img src='cid:image"+fileNames.length+"@vidteq.com' style='height:240px;width:320px;' \/>");
    //});
    $('#'+innerDiv).find('div[id^=fullImageDiv]').each(function () {
      if (!$(this).is(':visible')) { $(this).remove(); }
    });
    $('#'+innerDiv).find('img[id^=imgdivpoi_]').each(function () {
      var oneName = $(this).attr('src');
      if (typeof(oneName) == 'undefined') { return; }
      oneName = oneName.replace(/^[ ]*/g,'');
      oneName = oneName.replace(/[ ]*$/g,'');
      fileNames.push(oneName);
      $(this).attr('src','cid:image'+fileNames.length+'@vidteq.com');
    });
    
    var arrowPaths = {};
    $('#'+innerDiv).find('img').each(function () {
      if (!$(this).attr('id').match(/arrowImage/)) { return true; }
      var oneName = $(this).attr('src');
      if (typeof(arrowPaths[oneName]) == 'undefined') {
        fileNames.push(utils.makePathAbsolute(oneName));
        arrowPaths[oneName] = "cid:image"+fileNames.length+"@vidteq.com";
      }
      $(this).attr('src',arrowPaths[oneName]);
    });
    $('#routeimgsnap').find('img').each(function () {
      var oneName = $(this).attr('src');
      fileNames.push(utils.makePathAbsolute(oneName));
      $(this).attr('src',"cid:image"+fileNames.length+"@vidteq.com");
    });
  //} else {
  //  for(var i=0;i<$('#'+innerDiv)[0].getElementsByTagName('div').length;i++) {
  //    if(($('#'+innerDiv)[0].getElementsByTagName('div')[i].id).match(/imgdiv/)) {
  //      chiller++;
  //      $('#'+innerDiv)[0].getElementsByTagName('div')[i].style.backgroundImage='';
  //      $('#'+innerDiv)[0].getElementsByTagName('div')[i].innerHTML="<img src='cid:image"+chiller+"@vidteq.com' style='height:240px;width:320px;' \/>";
  //    }
  //  }    
  //}
  var totalRoute="<html><head><style>p{ font-size:14px;font-family:'Trebuchet MS', Arial; }h{ font-size:100%;font-family:'Trebuchet MS', Arial; }</style></head><body>";
  totalRoute+=$('#'+innerDiv)[0].innerHTML;
  totalRoute+="</body></html>";
  //var fileName=this.email.files;   //Big TBD why global ??
  //var fileName=ioAreaObj.email.files;   //Big TBD why global ??
  //if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
  //  fileName=fileNames.join(';')+';';
  //}
  var fileName=fileNames.join(';')+';';
  for(var i=0;i<emailId.length;i++) {
    //if(checkEmailId(emailId[i])==true) {
    if(checkEmailId(emailId[i])) {
      //emailData = {action:'email', to:emailId[i], content: totalRoute, start:this.startAddress,end:this.endAddress, attach:'yes', filename:fileName};
      emailData = {action:'email', to:emailId[i], content: totalRoute, start:ioAreaObj.startAddress,end:ioAreaObj.endAddress, attach:'yes', filename:fileName};
      if (typeof(accountDetails) != 'undefined' && accountDetails.account=="Arthabfs"){
        emailData.from ='customer@artha.in';
      }
      this.globalAjaxObj=$.ajax({type: 'POST', url:cfg.emailUrl, data:emailData, dataType: "text"});
    }
  }
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    if (typeof(showSendingPrompt) != 'undefined') {
    var temp = new showSendingPrompt(3);
    }
  } else {
    if (this.showSendingPrompt) {
    this.showSendingPrompt();
    }
  }
  if (typeof(emailWindowMode) != 'undefined') { window.close(); }
  return true;
}

ioArea.prototype.showSendingPrompt=function () {
  var a=$('#comdiv')[0];
  a.innerHTML='';
  a.style.width='250px';
  a.style.height='50px';
  var wLeft=(document.body.offsetWidth/2)-100;
  wLeft=wLeft>0?wLeft:0;
  a.style.left=wLeft+"px";
  var wHeight=(document.body.offsetHeight/2)-105;
  wHeight=wHeight>0?wHeight:0;
  a.style.top=wHeight+"px";
  timedComDivClose(3);
  for(i=2;i>0;i--) {
    setTimeout('timedComDivClose('+i+')',(3-i)*1000);
  }
  setTimeout('ioAreaObj.popup.close()',3000);
}

ioArea.prototype.preparePrintOptions = function() {
  var headerHtml="Print Directions";
  var innerHtml="<table align='center'; vertical-align='middle'; width=100% height=100%><tr height=100%; valign='middle;' align='center;'><td><div style='text-align:center'><a class='maptab' style='cursor:pointer' onclick='ioAreaObj.invokePrint(ioAreaObj.prepareRouteDirectionsPreview(true))'>With Images</a><br/>";
  innerHtml+="<a class='maptab' style='cursor:pointer' onclick='ioAreaObj.invokePrint(ioAreaObj.prepareRouteDirectionsPreview(true,true))'>Without Images</a><br/></div></td></tr></table>";
  var allHtml = "<div style='background-color:"+vidteq.bgColor+";text-align:left;min-width:200px;max-width:300px;'><div id='printHeaderDiv' style='text-align:center;'><a onfocus='this.blur();' class='popupheader1'>"+headerHtml+"</a><br><br></div><hr id='hrSeperator' style='line-height:0;height:2px;font-size:2px;background-color:black;color:black;width=100%;border:none;padding:0px;padding-top:0px;padding-bottom:0px;margin:0; margin-top:2px;margin-bottom:2px;'><div id='printInnerDiv' style='background-color:"+vidteq.bgColor+";text-align:left;margin:0;margin-top:5px;padding:5px;padding-left:10px;'>"+innerHtml+"</div></div>";
  return ({headerHtml:headerHtml,innerDivHtml:innerHtml,allHtml:allHtml});
}

ioArea.prototype.prepareDownload = function() {
  var headerHtml="Download Video";
  var messageDiv = utils.createElem("div"); 
  $('#comdiv')[0].appendChild(messageDiv);
  messageDiv.id = "download";
  var vVidDuration=ioAreaObj.response.vVidDuration;
  var vidDuration=ioAreaObj.response.vidDuration;
  var mainDpDuration = Math.round((vVidDuration / 60) * 100) / 100;
  var allVideoDuration = Math.round(((vidDuration + vVidDuration) / 60) * 100) / 100;
  var innerHtml="<table align='center'; vertical-align='middle'; width=100% height=100%><tr height=100%; valign='middle;' align='center;'><td><div style='text-align:center'>";
  innerHtml+=createDownloadLink("Main decision points only", ioAreaObj.response.mainDpVideoLinks);  
  innerHtml+=" - ~" + mainDpDuration + " minutes (Video Duration)" + " - ~" + (mainDpDuration * 4) + "Mbs (Video Size)";
  innerHtml+="<br/><br/>";
  innerHtml+=createDownloadLink("Complete Video Map", ioAreaObj.response.allVideoLinks);
  innerHtml+=" - ~" + allVideoDuration + " minutes (Video Duration)" + " - ~" + (allVideoDuration * 4) + "Mbs (Video Size)";
  innerHtml+="</div></td></tr></table>";
  function createDownloadLink(text, files) {
    var hrefString='<a href="javascript:void(0)" className="style8" onclick=clickFunc("'+files+'"); >'+text+'</a>';
    var hrefString="<a class='maptab' style='cursor:pointer' onclick=clickFunc(\""+files+"\"); >"+text+"</a><br/>";
    return hrefString;
  }
  return ({headerHtml:headerHtml,innerDivHtml:innerHtml});
}

var clickFunc = function(files) {
  files=files.split(",");
  messageDiv=$('#messageDiv')[0];
  //messageDiv.innerHTML = "<p style='text-align:center;font-size:16px;padding:5px;'>The file you requested for is being prepared.</p>";
  //messageDiv.innerHTML = "<a onfocus='this.blur();' style='font-size:18px;color:black;' class='style8'>The file you requested for is being prepared.</a>";
  messageDiv.innerHTML = "<table align='center'><tr><td><a onfocus='this.blur();' style='font-size:18px;color:black;' class='style8'>The file you requested for is being prepared.</a></td><td><img src='"+imagePathsObj.load+"' /></td><td><a style='cursor:pointer;' class='message'  href='javascript:void(0);' onclick='javascript:ioAreaObj.cancelRequest();return false;'>Cancel</a></td></tr></table>";
  $.post(cfg.magicHappensUrl + "?action=download&city="+cfg.city, 
    {action:'download', videoFile : files},
    function foo(data) {
      var doc = utils.getIFrameDocument('downloadIFrame');
      var href = document.location.href;
      var lastIndex = href.lastIndexOf("/");
      href = href.substring(0, lastIndex);
      href = href + "/" + cfg.magicHappensUrl + "?action=getFile&city="+cfg.city;
      formObj = utils.attachForm(href, doc.body, doc, "POST")
      utils.attachHiddenInputField(formObj, "start", doc, $("#starttextbox").val());
      utils.attachHiddenInputField(formObj, "end", doc, $("#endtextbox").val());
      utils.attachHiddenInputField(formObj, "fileName", doc, data.fileName);
      utils.attachHiddenInputField(formObj, "action", doc, "getFile");
      formObj.submit();
      //messageDiv.innerHTML = "<p>File download will start now.</p>";
      messageDiv.innerHTML = "<a onfocus='this.blur();' style='font-size:18px;color:black;' class='style8'>File download will start now.</a>";
    },
    'json'
  );
}

ioArea.prototype.invokeEmail = function (toEmail) {
  var l=(screen.width-300)/2;
  var t=(screen.height-300)/2;
  //ioAreaObj.printWindow=window.open('','','width=500,height=300,left='+l+',top='+t+',scrollbars=yes,resizable=yes,location=no,toolbar=no,menubar=no,directories=no');
  ioAreaObj.printWindow=window.open('','','width=500,height=300,left='+l+',top='+t+',scrollbars=yes,resizable=yes,titlebar=no,location=no,toolbar=no,menubar=no,directories=no');
  ioAreaObj.printWindow.document.open('text/html');
  ioAreaObj.printWindow.document.write("<head><style type='text/css'>a.poi   {font-size:11px;text-decoration:none;color:black;font-family:'Trebuchet MS', Arial;text-align:left;}a.textdir {text-decoration:none;cursor:pointer;font-family:'Trebuchet MS', Arial;font-size:13px;color:black;background-color:"+vidteq.bgColor+";text-align:left;}p,a,b{font-size:12px;text-decoration:none;color:black;font-family:'Trebuchet MS', Arial;text-align:left;}h3{font-size:14px;text-decoration:none;color:black;font-family:'Trebuchet MS', Arial;text-align:left;}</style><script type=\"text/javascript\" src=\"js/jquery-1.4.2.min.js?r='"+_rStr+"'\"></script><script>ioAreaObj = {}; ioAreaObj.sendEmail = "+ioAreaObj.sendEmail+";ioAreaObj.clickTextbox = "+ioAreaObj.clickTextbox+";ioAreaObj.inputValEmail = \""+ioAreaObj.inputValEmail+"\";"+checkEmailId+utils.makePathAbsolute+getRootPath+" ;var emailUrl =\""+utils.makePathAbsolute(cfg.emailUrl)+"\";var emailWindowMode = 1;"+showSendingPrompt+"</script><title>Driving Direction from "+this.startAddress+" to "+this.endAddress+"</title></head><body onload=\"$ = jQuery.noConflict();\"><div style='height:80px;'><div style='float:left;vertical-align:top;'><h3> Leaders in VideoMap<sup>TM</sup> based Driving Directions ..</h3><h3>&copy;&nbsp;VidTeq (India) Pvt. Ltd.</h3></div><div style='float:right;vertical-align:top;'></div></div><hr><div id='printdom' style='text-align:left'>"+toEmail+"</div></body>");
  ioAreaObj.printWindow.document.close();
  //ioAreaObj.printWindow.onunload = function () {
  //  alert("Email closed");
  //}
}  

ioArea.prototype.invokePrint = function (toPrint) {
  var l=(screen.width-300)/2;
  var t=(screen.height-300)/2;
  ioAreaObj.printWindow=window.open('','','width=480,height=300,left='+l+',top='+t+',scrollbars=yes,resizable=yes');
  ioAreaObj.printWindow.document.open('text/html');
  ioAreaObj.printWindow.document.write("<head><style type='text/css'>a.poi   {font-size:11px;text-decoration:none;color:black;font-family:'Trebuchet MS', Arial;text-align:left;}a.textdir {text-decoration:none;cursor:pointer;font-family:'Trebuchet MS', Arial;font-size:13px;color:black;background-color:"+vidteq.bgColor+";text-align:left;}p,a,b{font-size:12px;text-decoration:none;color:black;font-family:'Trebuchet MS', Arial;text-align:left;}h3{font-size:14px;text-decoration:none;color:black;font-family:'Trebuchet MS', Arial;text-align:left;}</style><script type=\"text/javascript\" src=\"js/jquery-1.4.2.min.js?r='"+_rStr+"'\"></script><title>Driving Direction from "+this.startAddress+" to "+this.endAddress+"</title></head><body onload=\"$ = jQuery.noConflict();window.print();\"><div style='height:80px;'><div style='float:left;vertical-align:top;'><h3> Leaders in VideoMap<sup>TM</sup> based Driving Directions ..</h3><h3>&copy;VidTeq (India) Pvt. Ltd.</h3></div><div style='float:right;vertical-align:top;'><form style='padding-top:20px;'><input type=\"button\" value=\"Print this Route\" onClick='javascript:window.print();return false;'></form></div></div><hr><div id='printdom' style='text-align:left'>"+toPrint+"</div></body>");
  ioAreaObj.printWindow.document.close();
}  

//function insertPlace(place,whichBox) {
//  ioAreaObj.suggestedPlace=1;
//  //place=place.replace(/\-/g," ");
//  if(whichBox=='start') {
//    document.GetVal.start.value=place;
//    ioAreaObj.clearSuggestDiv($('#sugdivstart')[0]);
//  } else {
//    document.GetVal.end.value=place;
//    ioAreaObj.clearSuggestDiv($('#sugdivend')[0]);
//  }
//}

ioArea.prototype.getRoadName = function(lonlat,startOrEnd) {
  this.getRoadNameStartOrEnd = startOrEnd; // Not a good idea TBD
  this.selectMode('ROUTE');
  if ( startOrEnd == 'start' ) {
    this.currentText.start=document.GetVal.start.value="Your Source";
    document.GetVal.start.style.backgroundImage='url('+imagePathsObj.ajaxLoader+')';
    document.GetVal.start.style.backgroundRepeat='no-repeat';
    document.GetVal.start.style.backgroundPosition='center';
  } else {
    this.currentText.end=document.GetVal.end.value="Your Destination";
    document.GetVal.end.style.backgroundImage='url('+imagePathsObj.ajaxLoader+')';
    document.GetVal.end.style.backgroundRepeat='no-repeat';
    document.GetVal.end.style.backgroundPosition='center';
  }
  var data=(vidteq.scriptBased?{action:"findhood",city:cfg.city,point: lonlat.lon + ' ' + lonlat.lat,callbackFunction:'ioAreaObj.handleGetRoadNameCall'}:{action:"findhood",city:cfg.city,point: lonlat.lon + ' ' + lonlat.lat})
  this.globalAjaxObj=$.ajax({
  url:cfg.magicHappensUrl,
  data:data,
    dataType: vidteq.dataType,
    success:ioAreaObj.handleGetRoadNameCall,
    error:ioAreaObj.handleError
  });
}

ioArea.prototype.handleGetRoadNameCall = function (response) {
  ioAreaObj.handleGetRoadName.apply(ioAreaObj,[response]);
}

ioArea.prototype.handleGetRoadName = function(response) {
  if(typeof(response)=='string') response=JSON.parse(response);
  document.GetVal.start.style.backgroundImage="";
  document.GetVal.end.style.backgroundImage="";
  if (response.error) {
    ioAreaObj.displayMessage(response.error);
    return false;
  }
  //runAll=0; TBD
  //features = []; TBD
  if(this.getRoadNameStartOrEnd =='start') {  // not accessible TBD 
    this.startAddress=this.gStart=this.currentText.start=document.GetVal.start.value= (!response.roadname)?'Your Start':response.roadname;
    if (routeEndsObj.tips['start'].address && 
        routeEndsObj.tips['start'].address.name) 
      routeEndsObj.tips['start'].address.name = this.startAddress;
    if (this.startEntity &&
        this.startEntity.address && this.startEntity.address.name)
      this.startEntity.address.name = this.startAddress;
  } else if(this.getRoadNameStartOrEnd =='end') {
    this.endAddress=this.gEnd=this.currentText.end=document.GetVal.end.value= (!response.roadname)?'Your End':response.roadname;
    if (routeEndsObj.tips['end'].address &&
        routeEndsObj.tips['end'].address.name) {
      routeEndsObj.tips['end'].address.name = this.endAddress;
    }
    if (this.endEntity &&
        this.endEntity.address && this.endEntity.address.name) {
      this.endEntity.address.name = this.endAddress;
    }
   }
   /*if(ioAreaObj.embed) {
      if(ioAreaObj.embed.firstTimeRule) {
          if(ioAreaObj.embed.firstTimeRule.address.name) {
          document.GetVal[this.getRoadNameStartOrEnd].value=ioAreaObj.embed.firstTimeRule.address.name;
          }
      }
  }*/
}

function clearAll () {
  //Why a global function here in ioArea ?
  //mboxObj.clearCatLayer();
  mboxObj.clearAll();
  fvtObj.clearRouteAndSrf();
  ioAreaObj.clearRouteAndSrf();
  if(ioAreaObj.embed) {
    var w=(ioAreaObj.embed.fix=='start')?'end':'start';
    routeEndsObj.remove.apply(routeEndsObj,[w]);
  } else {       
    routeEndsObj.remove.apply(routeEndsObj,['start']);
    routeEndsObj.remove.apply(routeEndsObj,['end']);
  }
}

function clearRouteAndSrf () {
  mboxObj.clearRouteAndSrf();
  fvtObj.clearRouteAndSrf();
  ioAreaObj.clearRouteAndSrf();
}
  
ioArea.prototype.clearRouteAndSrf = function () {
  this.toggleButtons({'clearroutetab' : false,
                 'smstab' : false,
                 'printtab' : false,
                 'emailtab' : false,
                 'downloadtab' : false});
  //this.clearSuggestDiv($('#sugdivstart')[0]);
  //this.clearSuggestDiv($('#sugdivend')[0]);
  this.executeAllFunc(this.topClearList);
  if(this.mode=='ROUTE') ioAreaObj.displayMessage('Route is Cleared');
  if(this.mode=='LOCATE' && document.getElementById("locadiv").innerHTML!='') {
    ioAreaObj.displayMessage('Location search is cleared');
  }
  if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
    $('#routeSummary').html('<a class=helptooltip1 >&nbsp;<br/>&nbsp;</a>');
  }
  if ($('#divRoutePouchPop').length) {  $('#divRoutePouchPop').remove(); }
  if ($('#routePouchDiv').length && $('#routePouchDiv').is(':visible')) {
    $('#routePouchDiv').hide('fast'); // TBD you can remove onclick,image
  }
}
 
ioArea.prototype.realBoldify = function(me,pat,who) {
  if(me.match(/\(|\)/gi)) {
    me=me.replace(/\(/gi," ")
    me=me.replace(/\)/gi," ")
  }
  var a=me.split(pat);
  var l=a.length;
  var n="";
  var s=who.substring(0,1);
  var t=who.substring(1);
  who=s.toUpperCase()+t.toLowerCase();
  for(var i=0;i<l;i++) {
    n+=a[i];
    if(i!=(l-1)) {
      if(a[i].match(/[^\s+]$/)) {
        who=who.toLowerCase();
      }  
      n+="<b style='color:red;'>"+who+"</b>";
      //n+=a[i+1];
    }  
  }
  return n;    
}

ioArea.prototype.boldify = function(who,name) {
  var pat,useVal;
  if(who=='location' || who=='locateStores') {
    //this.preReqStart = '';
    pat=new RegExp(this.preReqStart,"ig");
    useVal=this.preReqStart;
  } else if(who=='startAddress') {
    pat=new RegExp(this.preReqStart,"ig");  
    useVal=this.preReqStart;
  } else if(who=='endAddress') {
    pat=new RegExp(this.preReqEnd,"ig");  
    useVal=this.preReqEnd;
  } else {return name;}
  if (useVal.match(/^ *$/)) {return name;}
  var tmpname;
  if(self.navigator.appName.match(/Microsoft/i)) {
    tmpname=name;
  } else {
    tmpname=(name.match(pat))?this.realBoldify(name,pat,useVal):name;
  }
  return tmpname;
}

ioArea.prototype.displayMessage = function (message) {
  if($('#routedetails')[0]) {
    $('#routedetails')[0].style.display='block';  
    if($('#routedetails_primitive')[0]) $('#routedetails_primitive')[0].innerHTML='';
    if(typeof(__experimentalUI)!='undefined' && __experimentalUI) {
      $('#routedetails')[0].innerHTML="<a class=helptooltip1>"+message+"</a>";
    } else {
      $('#routedetails')[0].innerHTML="<a class=helptooltip>"+message+"</a>";
    }
  } else if($('#routedetails_primitive')[0]) {
    $('#routedetails_primitive')[0].innerHTML="<a style='font-size:16px;' class=helptooltip>"+message+"</a>";
  }
}

ioArea.prototype.selectInTopPanel = function (id,stick) {
  ioAreaObj.embed.selectedLink=ioAreaObj.embed.selectedLink || 'div_home-link';

  var elems = ioAreaObj.embed.topPanelLinks;
  var curIndex = -1;
  var selIndex = -1;
  for (var i in elems) {
    if (id == 'div_'+elems[i].id) { curIndex = i; }
    if (ioAreaObj.embed.selectedLink == 'div_'+elems[i].id) { selIndex = i; }
    if (!elems[i].dropDown) continue;
    if (id !='div_'+elems[i].id && id != '') {
      if (typeof($('#'+elems[i].dropDown)[0]) !='undefined' && $('#'+elems[i].dropDown)[0].style.display=='block') {
        $('#'+elems[i].id).click();
      }
    }
  }  

  //if(id!='div_driving-dir-video-link' && id!='') {
  //  if($('#float_input_block_moved')[0].style.display=='block') {
  //    $('#driving-dir-video-link').click();
  //  }
  //}
  //if(id!='div_landmarkroutes' && id!='') {
  //  if(typeof($('#lr_div')[0])!='undefined' && $('#lr_div')[0].style.display=='block') {
  //    $('#landmarkroutes').click();
  //  }
  //}
  //if(id!='div_bizdisplay' && id!='') {
  //  if(typeof($('#div_biz')[0])!='undefined' && $('#div_biz')[0].style.display=='block') {
  //    $('#bizdisplay').click();
  //  }
  //}
  if ( selIndex > -1 && elems[selIndex].sticky ) { } else {
    $('#'+ioAreaObj.embed.selectedLink)[0].className = 'top-panel-height';
  }
  if(id  == '') { return; }
  ioAreaObj.embed.selectedLink=id;
  $('#'+id)[0].className = 'top-panel-height-selected';
  if (typeof(stick) != 'undefined' && stick) { elems[curIndex].sticky = 1; }
  if (typeof(stick) != 'undefined' && !stick) { 
    delete elems[curIndex].sticky; 
    $('#'+id)[0].className = 'top-panel-height';
  }
}

ioArea.prototype.showHelpMessage = function (message) {
        // There should be just one display message container. 
        ioAreaObj.displayMessage(message);
        return 0;
  try  {$('#helpmesg')[0].innerHTML="<b>"+message+"</b>";}
  catch (e) { }
}

ioArea.prototype.checkAndKillLoadingPrompt = function (str,waitTime) {
  if (!$('#divLoading').length) { return; }
  if (!this.loadingPrompt) { return; }
  if (str != '') { this.loadingPrompt.putMessage(str); }
  this.loadingPrompt.animateAndKill(waitTime);
}

ioArea.prototype.changeBackOpacity = function (value) {
  var whichDiv=$('#dynamicDiv')[0];
  var divId = 'dynamicDiv';
  if(ioAreaObj.embed) whichDiv=$('#maintable')[0];  
  if(ioAreaObj.embed) divId = 'maintable';
  if (jQuery.support.opacity) {
    whichDiv.style.opacity=value;
  } else {
    whichDiv.style.zoom=1;
    whichDiv.style.opacity=value;
    whichDiv.style.filter="alpha(opacity="+(parseInt(value*100))+")";
    //if (ioAreaObj.embed) {
    //  console.log("Opacity is false  "+value);
    //  $('#map')[0].style.opacity=value;
    //  $('#map')[0].style.filter="alpha(opacity="+(parseInt(value*100))+")";
    //  $('#map').addClass('simple_opacity');
    //  $('#divider')[0].style.opacity=value;
    //  $('#divider')[0].style.filter="alpha(opacity="+(parseInt(value*100))+")";
    //  $('#divider').addClass('simple_opacity');
    //  $('#fvtDiv')[0].style.opacity=value;
    //  $('#fvtDiv')[0].style.filter="alpha(opacity="+(parseInt(value*100))+")";
    //  $('#fvtDiv').addClass('simple_opacity');
    //}
    //console.log("Opacity is false  "+"alpha(opacity="+(parseInt(value*100))+")");
  }
  return;
  if(self.navigator.appName.match(/Microsoft/i)) {
    if(!MSIE6) {
    var s=whichDiv;  
    s.style.zoom=1;
    s.style.opacity=value;
    s.style.filter="alpha(opacity="+value*100+")";
  }
  } else {  
    whichDiv.style.opacity=value;
  }    
}

function PopUpWindow(factor, newOne, force) {
  if(newOne!==undefined) {
     PopUpWindow2.apply(this,[factor]);
     return 0;
  }
  try {
    $('#body')[0].removeChild($("#comdiv")[0]);
    $('#body')[0].removeChild($("#combg")[0]);
  } catch(e) {
  }
  var mainBody=$('#body')[0] || document.body;
  var vidteqDiv=$('#vidteq')[0] || '';
  var comWindow=utils.createElem('div');
  var comWindowBg=utils.createElem('div');
  this.popUp = comWindow;
  this.bg = comWindowBg;
  var left=$('#main')[0].offsetLeft;
  var top=(typeof(ioAreaObj.embed)!='undefined')?mainBody.offsetTop:parseInt($('#dynamicDiv')[0].offsetTop)+120;
  if(top==0) top=$('#map')[0].style.top;
  var a=utils.returnBrowserHeightWidth();
  height=a.height;
  var height=(typeof(ioAreaObj.embed)!='undefined')?a.height:$('#dynamicDiv')[0].offsetHeight; 
  var width=(typeof(ioAreaObj.embed)!='undefined')?mainBody.offsetWidth:$('#dynamicDiv')[0].offsetWidth;
  if(vidteq.scriptBased) {
    height=parseInt(vidteqDiv.style.height);
    width=parseInt(vidteqDiv.style.width);
  }   
  comWindowBg.style.width=a.width+"px";
  comWindowBg.style.height=a.height+"px";
  comWindowBg.id="combg";
  comWindowBg.style.left="0px";
  comWindowBg.style.top="0px";
  comWindowBg.style.opacity="0.4";
  comWindowBg.style.filter="alpha(opacity=40)";
  comWindowBg.style.backgroundColor=mainColor;
  comWindowBg.style.zIndex=80000;
  comWindowBg.style.position='absolute';  
  comWindow.id="comdiv";
  mainBody.appendChild(comWindow);
  mainBody.appendChild(comWindowBg);
  comWindow.className='popupclass';
  comWindow.style.width=(width/factor)+"px";
  comWindow.style.height=(height/factor)+"px";
  if(typeof(accountDetails) != 'undefined' && (accountDetails.q == 'blocate' || accountDetails.q == 'locatestores')) {
    comWindow.style.width="650px";
    comWindow.style.height="450px";
  }
  comWindow.style.left=left+parseInt((width-parseInt(comWindow.style.width))/2)+"px";
  comWindow.style.top=(typeof(ioAreaObj.embed)!='undefined')?((height-height/factor)/2+"px"):320+"px";
  if(vidteq.scriptBased) comWindow.style.top=parseInt(comWindow.style.top)+vidteqDiv.offsetTop+'px';
  comWindow.style.width=parseInt(comWindow.style.width)-4+"px";
  var border="10px solid #FFFFFF";
  comWindow.style.border=border;

  var closeDiv = utils.createElem("div");
  comWindow.appendChild(closeDiv);
  var that = this;
  function closeMe() {that.close();}
  closeDiv.className = 'close';
  var image = utils.createElem("img");
  image.src = imagePathsObj.cross;
  image.alt = "Close";
  image.className = "close";
  image.onclick = function() {closeMe();}
  if(force===undefined || force == 0) {
      closeDiv.appendChild(image);
  }
  //var boxImage = { url:"images/ref_box.png", cornerW:10, cornerH:10, boxW:510, boxH:378, offsetW:0, offsetH:0 };
  //debugPrint("boxify called");
  //utils.boxify(boxImage,'comdiv',{lt:1,rt:1,lb:1,rb:1});
  return 0;
}

ioArea.prototype.getPopupParams = function(shrinkFactor) {
  var s = {};
  var wh = parseInt($(window).height());
  var ww = parseInt($(window).width());
  s.wh = wh;
  s.ww = ww;
  s.height = parseInt(wh/shrinkFactor);
  s.width = parseInt(ww/shrinkFactor);
  s.left = 0;
  s.top = parseInt((wh-s.height)/2);
  // this ends stright calculations , 
  // now start crooked calculations
  var a=utils.returnBrowserHeightWidth();
  var wh=(typeof(ioAreaObj.embed)!='undefined')?a.height:$('#dynamicDiv')[0].offsetHeight; 
  var ww=(typeof(ioAreaObj.embed)!='undefined')?$('body')[0].offsetWidth:$('#dynamicDiv')[0].offsetWidth;
  if(vidteq.scriptBased) {
    wh=parseInt($('#vidteq')[0].style.height);
    ww=parseInt($('#vidteq')[0].style.width);
  }   
  s.height = parseInt(wh/shrinkFactor);
  s.width = parseInt(ww/shrinkFactor);
  if(typeof(accountDetails) != 'undefined' && (accountDetails.q == 'blocate' || accountDetails.q == 'locatestores')) {
    s.height = 450; s.width = 650;
  }
  s.left=$('#main')[0].offsetLeft;
  s.left+= parseInt((ww-s.width)/2);
  s.top=(typeof(ioAreaObj.embed)!='undefined')?parseInt((wh-s.height)/2):320;
  if(vidteq.scriptBased) s.top += $('#vidteq')[0].offsetTop;
  return s;
}

function PopUpWindow2 (factor) {
  var __VIDTEQ_H=($(window).height());
  var __VIDTEQ_TOP=parseInt((__VIDTEQ_H-(__VIDTEQ_H/factor))/2);
  __VIDTEQ_H=parseInt(__VIDTEQ_H/factor);
  var __VIDTEQ_W=parseInt(($(window).width())/factor);
  var floatDiv=document.createElement('div');
  var bgDiv=document.createElement('div');
  floatDiv.id='comDivFixed';
  var style={
      'position':'fixed',
      'top':__VIDTEQ_TOP+'px',
      'left':'0px',
      'width':'100%',
      'height':'100%',
      'textAlign':'center',
      'zIndex':'10000'
  }
  for(var prop in style) {
    floatDiv.style[prop]=style[prop];
  }
  var innerHTML=['<center style="height: '+__VIDTEQ_H+'px;">'];
  innerHTML.push('<div id="comdiv" style="width: '+__VIDTEQ_W+'px;background-color:#ACC488;border:10px solid white;height: '+__VIDTEQ_H+'px;"></div>');
  innerHTML.push('</center>');
  innerHTML=innerHTML.join('');
  floatDiv.innerHTML=innerHTML;
  bgDiv.id='vidteqBgDiv';
  style = {
      'width':'100%',
      'height':'100%',
      'overflow':'visible',
      'left':'0',
      'top':'0',
      'opacity':'0.4',
      'filter':'alpha(opacity=40)',
      'backgroundColor':'#000',
      'zIndex':8000,
      'position':'fixed'
  }
  for(var prop in style) {
    bgDiv.style[prop]=style[prop];
  }

  this.popUp = floatDiv;
  this.bg = bgDiv;
  document.body.appendChild(floatDiv);
  document.body.appendChild(bgDiv);
  var closeDiv = utils.createElem("div");
  $('#comdiv')[0].appendChild(closeDiv);
  var that = this;
  function closeMe() {that.close();}
  closeDiv.className = 'close';
  var image = utils.createElem("img");
  image.src = imagePathsObj.cross;
  image.alt = "Close";
  image.className = "close";
  image.onclick = function() {closeMe();}
  closeDiv.appendChild(image);
}

PopUpWindow.prototype.close = function() {
  try {
    if($('body')[0]) {  
      $('body')[0].removeChild(this.popUp);
      $('body')[0].removeChild(this.bg);
    }
    document.body.removeChild(this.bg);
    document.body.removeChild(this.popUp);
    ioAreaObj.changeBackOpacity(1);
  } catch(e) {
  }
}

PopUpWindow.prototype.showContents=function (htmlInfo) {
  mainColor = '#376092';
  var comParam,comFunc,comValue,inputVal,dynamicRows,dynamicColumns;
  /*if(isMapXpanded){
  clearVideoTd();
  }*/
  var h=parseInt($('#comdiv')[0].style.height)-125+"px";
  var w=parseInt($('#comdiv')[0].style.width)-20+"px";
  var innerTextDiv = document.createElement("div");
  $('#comdiv')[0].appendChild(innerTextDiv);
  var innerHTML="";
  innerHTML+="<div id='headerDiv' style='text-align:center;padding:10px;height:40px;'><a onfocus='this.blur();' class='popupheader'>"+htmlInfo.headerHtml+"</a><br><div style='text-align:center;padding:10px;height:40px;' id='messageDiv'></div></div>";
  if(typeof(accountDetails)!=='undefined')  {
      if(accountDetails.q == 'blocate' || accountDetails.q == 'locatestores') {
          innerHTML="<div id='headerDiv' style='text-align:center;padding:10px;height:40px;'><a onfocus='this.blur();' class='popupheader_yellow'>"+htmlInfo.headerHtml+"</a><br><div style='text-align:center;padding:10px;height:40px;' id='messageDiv'></div></div>";
      }
          
  }
  innerHTML+="<div style='text-align:center; padding:4px;'><div id='innerDiv' style='position:relative;border: 1px solid #7fbee3; vertical-align:middle;background-color:#fff;overflow:auto;margin-left:10px;margin-right:10px;height:"+h+";border:1px solid "+mainColor+"'>"+htmlInfo.innerDivHtml+"</div></div>";
  if(typeof htmlInfo.lowerHtml!='undefined') {
    innerHTML+="<div style='text-align:center;padding:10px;'>"+htmlInfo.lowerHtml+"</div>"
  }
  //$('#comdiv')[0].innerHTML=innerHTML;
  innerTextDiv.innerHTML=innerHTML;
  try {
    // Jquery round corners fails in IE. So don' don't do it.
    if(!self.navigator.userAgent.match(/MSIE/)) $('#comdiv').corner("round");
  }
  catch(e) {}
}

ioArea.prototype.undrapeCurtain = function (popName) {
  var pName = 'bgCurtain';
  if ($("#"+pName).length == 0) { return; } 
  var curtainDepth = $("#"+pName).data('curtainDepth');
  if (typeof(curtainDepth[popName]) == 'undefined') { return; }
  delete curtainDepth[popName];
  if (utils.isObjectEmpty(curtainDepth)) { $("#"+pName).remove(); }
  else $("#"+pName).data('curtainDepth',curtainDepth);
}

ioArea.prototype.drapeSheer = function (popName) {
  var pName = 'bgCurtain';
  if ($("#"+pName).length != 0) { 
    var curtainDepth = $("#"+pName).data('curtainDepth');
    curtainDepth[popName] = 1;
    $("#"+pName).data('curtainDepth',curtainDepth);
    return;
  }
  var con = $("<div id = '"+pName+"' class='curtain'></div>").appendTo('body');
  var curtainDepth = {};
  curtainDepth[popName] = 1;
  con.data('curtainDepth',curtainDepth);
  con.height($(window).height());
  con.width($(window).width());
}

ioArea.prototype.getEntity = function (source,index) {
  if (index == -1) return null;
  //if (source == 'location' || source == 'locateStores') return this.response[index];
  if (source == 'location' || 
      source == 'locateStores' || 
      source == 'startAddress' ||
      source == 'blocate') return this.srfResponse.srf[0].results[index];
  if (source == 'endAddress' ) return this.srfResponse.srf[1].results[index];
  if (source == 'center') return this.embed.place;
  if (source == 'ftrStart') return this.embed.firstTimeRule.start;
  if (source == 'ftrEnd') return this.embed.firstTimeRule.end;
  if (source == 'demoStart') return accountDetails.demoRoute.start;
  if (source == 'demoEnd') return accountDetails.demoRoute.end;
  if (source == 'lastMile') return accountDetails.lastMile.start;
  if (source == 'landmarkRoutes') return accountDetails.landmarkRoutes[index];
  if (source == 'genericEntity') return this.genericEntity[index];
  return null;
}

ioArea.prototype.cancelRequest = function () {
  // TBD and it does not work for now
  this.globalAjaxObj.abort();
  ioAreaObj.displayMessage("User cancelled the last request ");
}

//ioArea.prototype.toggleEntityShowOnFvtMoreOrLess = function (idNo,flag) {
//  $('#showMoreOrLess'+idNo)[0].innerHTML=(flag==0)?'Less <<':'More >>';
//  if(flag)
//  $('#showMoreDiv'+idNo).hide();
//  else 
//  $('#showMoreDiv'+idNo).show();
//  flag=(flag==0)?1:0;
//  $('#showMoreOrLess'+idNo)[0].onclick=function () {ioAreaObj.toggleEntityShowOnFvtMoreOrLess(idNo,flag);}
//}  

ioArea.prototype.categorySearchInvoke = function () {
    ioAreaObj.srfResponse.srf[0].categoryMatches = 0;
    var localResults=[];
    for(var i in ioAreaObj.srfResponse.srf[0].results) {
        if(ioAreaObj.srfResponse.srf[0].results[i].matchSource == "category") {
            ioAreaObj.srfResponse.srf[0].results[i].matchSource = "misc";
            localResults.push(ioAreaObj.srfResponse.srf[0].results[i]);
        }
    }
    ioAreaObj.srfResponse.srf[0].results=[];
    ioAreaObj.srfResponse.srf[0].results=localResults;
    ioAreaObj.handleLocate.apply(ioAreaObj,[ioAreaObj.srfResponse]);
}

ioArea.prototype.reviseSrf = function (srfResponse) {
  if (typeof(srfResponse.vid) != 'undefined') return;
  for (var i = 0; i < srfResponse.srf.length; i++) {
    srfResponse.srf[i].srfIndex = i;
    if (utils.isObjectEmpty(srfResponse.srf[i].results[0])) srfResponse.srf[i].results = [];
    reviseOneSrfArrayWithParentTypeAndIndex(srfResponse.srf[i].results,srfResponse.srf[i].srfType);
    if(srfResponse.srf[i].results.length > 0 &&
      srfResponse.srf[i].results[srfResponse.srf[i].results.length-1].matchSource == "category") {
        // Category match results are always pushed in the end.
        srfResponse.srf[i].categoryMatches = 1;
    }
    reviseIcons(srfResponse.srf[i]);
  }
  var putReqSeed = {'ss':1,'ff':1,'mm':1,
                    'sf':1,'mf':1,'fs':1,'fm':1,
                    'sm':1,'ms':1,'location':1};
  if (typeof(putReqSeed[srfResponse.responseType]) != 'undefined') {
    srfResponse.srf[0].reqSeed = this.preReqStart;
  }
  if (srfResponse.srf.length == 2) {
    srfResponse.srf[1].reqSeed = this.preReqEnd;
  }
  if ( srfResponse.responseType == 'sf' ||
       srfResponse.responseType == 'sm' ||
       srfResponse.responseType == 'ss' ) {
    var entity = srfResponse.srf[0].results[0];
    if (! entity.address.name) {
      entity.address.name = this.startEntity.address.name;
    }  // TBD assignment should be done according to source of startEntity
    // if startEntity is from earlier srf, use that, other wise use incoming
    // TBD center need to be fixed back
    if (this.embed && this.embed.fix=='start') {
      srfResponse.srf[0].results[0] = this.embed.place;
    }
  }
  if ( srfResponse.responseType == 'fs' ||
       srfResponse.responseType == 'ms' ||
       srfResponse.responseType == 'ss' ) {
    var entity = srfResponse.srf[1].results[0];
    if (! entity.address.name) {
      entity.address.name = this.endEntity.address.name;
    }
    // TBD center need to be fixed back
    if (this.embed && this.embed.fix=='end') {
      srfResponse.srf[1].results[0] = this.embed.place;
    }
  }
  if ( srfResponse.responseType == 'location' &&
       srfResponse.srf[0].results.length == 1) {
    var entity = srfResponse.srf[0].results[0];
    if (! entity.address.name) {
      entity.address.name = this.startEntity.address.name;
    }
  }
}



