    var req;
    var todo="";
    var badZip=false;
    var errorsArray = new Array();

    // Bookmark this site using browsers
    function bookmarksiteIE(title, url){
      if (document.all) // ie
        window.external.AddFavorite(url, title);
    }
    function bookmarksiteFF(title, url){
      if (window.sidebar) // firefox
        window.sidebar.addPanel(title, url, "");
    }


    function loadXMLDoc(url) {
        // branch for native XMLHttpRequest object
        if (window.XMLHttpRequest) {
            req = new XMLHttpRequest();
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send(null);
        // branch for IE/Windows ActiveX version
        } else if (window.ActiveXObject) {
			req = new ActiveXObject("Microsoft.XMLHTTP");
            if (req) {
                req.onreadystatechange = processReqChange;
                req.open("GET", url, true);
                req.send();
            }
        }
    }

    function processReqChange()
    {
        // only if req shows "complete"
        if (req.readyState == 4) {
            // only if "OK"
            if (req.status == 200) {
                if (todo=="job_titles")
                {
                    clearJobsList();
                    buildJobsList();
                }
                else if(todo=="check_zip")
                {
                    return checkZip();
                }
                else
                    return;
            } else {
                alert("There was a problem retrieving\
                   the XML data:\n" + req.statusText);
            }
        }
    }

    // подгрузка job_title`ов
    function loadXMDoc(url, response)
    {
        if (response != "")
        {

            // Response mode
            //message   = document.getElementById("nameCheckFailed");
            if (response == "1")
            {
                //alert(2);
                //message.className = "error";
            }
            else
            {
                //alert(3);
                //message.className = "hidden";
            }
        }
        else
        {
            // Input mode
            //alert(4);
            loadXMLDoc(url);
         }

    }

    function zipCheckXMLload()
    {
        var state_id = document.getElementById('state_id').value;
        var city = document.getElementById('city').value;
        var zip = document.getElementById('zip').value;
        var qry = 'http://jobs.postiteasy.com/site/state-city-zip.xml.php?state_id='+state_id+'&city='+city+'&zip='+zip;
        //alert(qry);
        loadXMLDoc(qry, '');
        
    }

    // проверка ZIP на корректность и принадлежие к штату
    function checkZip()
    {
        var z = req.responseXML.getElementsByTagName("zip");
        alert(z.length);
        if (z.length>0)
        {
            todo = '';
            errorReset('error_incorrect_zip');
            badZip = false;
            //errorsWrite('error_block');
            return true;
            //alert(getElementTextNS("", "zip", location[0], 0));
        }
        else
        {
            todo = '';
            errorSet('error_incorrect_zip', 'Incorrect ZIP');
            badZip = true;
            //errorsWrite('error_block');
            return false;
        }
    }

    // очистка job_list`а
    function clearJobsList() {
        var select = document.getElementById("job_title_id[]");
        while (select.length > 0) {
            select.remove(0);
        }
    }

    // заполнение job list`а
    function buildJobsList()
    {
        var select = document.getElementById("job_title_id[]");
		var items = req.responseXML.getElementsByTagName("item");
        for (var i = 0; i < items.length; i++)
            appendToSelect(select, getElementTextNS("", "value", items[i], 0), getElementTextNS("", "title", items[i], 0));
        todo = "";
    }

    function appendToSelect(select, value, content)
    {
        var opt;
        opt = document.createElement("option");
        opt.value = value;
        opt.innerHTML = content;
        //opt.appendChild(content);
        select.appendChild(opt);
    }

    // retrieve text of an XML document element, including
    // elements using namespaces
    function getElementTextNS(prefix, local, parentElem, index)
    {
        var result = "";
        if (prefix && isIE)
        {
            // IE/Windows way of handling namespaces
            result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
        }
        else
        {
            // the namespace versions of this method
            // (getElementsByTagNameNS()) operate
            // differently in Safari and Mozilla, but both
            // return value with just local name, provided
            // there aren\'t conflicts with non-namespace element
            // names
            result = parentElem.getElementsByTagName(local)[index];
        }
        if (result)
        {
            // get text, accounting for possible
            // whitespace (carriage return) text nodes
            if (result.childNodes.length > 1)
            {
                return result.childNodes[1].nodeValue;
            }
            else
            {
                return result.firstChild.nodeValue;
            }
        } else {
            return "n/a";
        }
    }

    // подсчёт элементов в массиве
    function countArrElements(arr)
    {
        var c=0;
        for (var key in arr)
            c++;
        return c;	
    }

    // устанавливает ошибку
    function errorSet(error_id, text)
    {
        errorsArray[error_id] = text;
        //alert(errorsArray[error_id]);
    }
    // пишет ошибки в нужный block
    function errorsWrite(block)
    {
        //alert(errorsArray['error_incorrect_zip']+'!');
        //alert(errorsArray.length);
        if (d = document.getElementById(block))
        {
            d.innerHTML = '';
            for (var key in errorsArray)
                if (errorsArray[key].length>1)
                    d.innerHTML += '<br>'+errorsArray[key];
        }
    }

    // удаляет ошибку
    function errorReset(error_id)
    {
        errorsArray[error_id] = '';
    }

    // удаляет ошибкИ
    function errorsReset()
    {
        errorsArray = new Array();
    }

    // проверяем всю форму субмита, на пустоту полей
    function checkSubmitForm_call(frm)
    {
    	errorsReset();
        if (frm.active_until.value<1)
            errorSet('error_unselected_activity_term', 'Please Fill In <i>Active For</i>');

        if (frm.first_name.value.length<3)
            errorSet('error_empty_first_name', 'Please Fill In <i>Company Name</i>');

        if (frm.state_id.value<1)
            errorSet('error_unselected_state', 'Please Fill In <i>State</i>');

        if (frm.city.value.length<1)
            errorSet('error_empty_city', 'Please Fill In <i>City</i>');

        if (frm.zip.value.length<1)
            errorSet('error_empty_zip', 'Please Fill In <i>ZIP</i>');

        if (frm.email.value.length<4)
            errorSet('error_empty_email', 'Please Fill <i>E-mail</i>');

        if (frm.phonenumber.value.length<4)
            errorSet('error_empty_phonenumber', 'Please Fill In <i>Phone Number</i>');

        if (frm.category_id.value<1)
            errorSet('error_unselected_category', 'Please Fill In <i>Category</i>');

        // не работает, надо както определять выбранные элементы
        if (document.getElementById('job_title_id[]').length<1)
            errorSet('error_unselected_job_title', 'not set `error_unselected_job_title`');

        if (frm.degree_id.value<1)
            errorSet('error_unselected_degree', 'Unselected Degree');

        if (frm.description.value.length<5)
            errorSet('error_empty_description', 'Please Fill In <i>Description</i>');

        if (frm.vimg.value.length<5)
            errorSet('error_empty_verification', 'Please Fill In <i>Verification Code</i>');

		todo='check_zip';
		zipCheckXMLload();
		mTy = setTimeout('clearTimeout(mTy);', 5000);
		alert(badZip);
		if (badZip==true)
			errorSet('error_incorrect_zip', 'Incorrect ZIP');
            
        errorsWrite('error_block');
        

        if (countArrElements(errorsArray)>0)
        {
            errorsReset();
            return false;
        }
        else
        {
            errorsReset();
            return true;
        }
    }
    
	// проверяем всю форму субмита, на пустоту полей
    function checkSubmitForm_seek(frm)
    {
    	errorsReset();
        if (frm.active_until.value<1)
            errorSet('error_unselected_activity_term', 'Please Fill In <i>Active For</i>');

        if (frm.first_name.value.length<3)
            errorSet('error_empty_first_name', 'Please Fill In <i>First Name</i>');

        if (frm.last_name.value.length<3)
            errorSet('error_empty_last_name', 'Please Fill In <i>Last Name</i>');

        if (frm.state_id.value<1)
            errorSet('error_unselected_state', 'Please Fill In <i>State</i>');

        if (frm.city.value.length<1)
            errorSet('error_empty_city', 'Please Fill In <i>City</i>');

        if (frm.zip.value.length<1)
            errorSet('error_empty_zip', 'Please Fill In <i>ZIP</i>');

        if (frm.email.value.length<4)
            errorSet('error_empty_email', 'Please Fill <i>E-mail</i>');

        if (frm.phonenumber.value.length<4)
            errorSet('error_empty_phonenumber', 'Please Fill In <i>Phone Number</i>');

        if (frm.category_id.value<1)
            errorSet('error_unselected_category', 'Please Fill In <i>Category</i>');

        // не работает, надо както определять выбранные элементы
        if (document.getElementById('job_title_id[]').length<1)
            errorSet('error_unselected_job_title', 'not set `error_unselected_job_title`');

        if (frm.description.value.length<5)
            errorSet('error_empty_description', 'Please Fill In <i>Description</i>');

        if (frm.vimg.value.length<5)
            errorSet('error_empty_verification', 'Please Fill In <i>Verification Code</i>');
		
        todo='check_zip';
		zipCheckXMLload();		
		if (badZip==true)
			errorSet('error_incorrect_zip', 'Incorrect ZIP');
		
		
        errorsWrite('error_block');

        if (countArrElements(errorsArray)>0)
        {
            errorsReset();
            return false;
        }
        else
        {
            errorsReset();
            return true;
        }
    }    
    

    // даём список job-titleов, а она отмечает в селекте их
    function setSelectedJobTitles()
    {
    	var job_titles = setSelectedJobTitles.arguments;
    	var sel = document.getElementById("job_title_id[]");
    	var opts = sel.options;
    	
    	var opts_cc = opts.length;

    	for (i=0; i<opts_cc; i++)
    		if (arraySearch(job_titles, opts[i].value))
    		{
    			opts[i].selected = true;
    		}
    			
    }
    
    // поиск в массиве
    function arraySearch(arr, elem)
    {
    	var cc = arr.length;
    	for (loop=0; loop<cc; loop++)
    		if (arr[loop]==elem) return true;
    	return false;
    }
    
	// попапик
	function wOpen(lnk, w, h)
	{
		window.open(lnk, "", "left="+(screen.width/2-w/2)+", top="+(screen.height/2-h/2)+", width="+w+",height="+h+",resizable=yes,location=yes,scrollbars=yes,status=yes");
	}    
	// попапик
	function wOpenNamed(lnk, w, h, n)
	{
		window.open(lnk, n, "left="+(screen.width/2-w/2)+", top="+(screen.height/2-h/2)+", width="+w+",height="+h+",resizable=yes,location=yes,scrollbars=yes,status=yes");
	}    	

	
	        	function searchForm(v)
        		{
        			if (v==0)
        			{
        				document.getElementById("degree").disabled = true;        			
        				document.getElementById("e_degree").style.display = "none";
        				document.getElementById("sbutton").value = "Search For Job";
        				
        			}
        			else
        			{
        			  document.getElementById("degree").disabled = false;
        				document.getElementById("e_degree").style.display = "inline";
        				document.getElementById("sbutton").value = "Search For Employee";
        			}
        		}
        		function searchSubmit(f)
        		{
        			if (f.category.value<1)
        			{
        				alert("Please choose category")
        				return false;
        			}
        			if (f.state.value<1)
        			{
        				alert("Please choose state")
        				return false;
        			}        			
        			if (f.location.value.length<1)
        			{
        				alert("Please fill up location field")
        				return false;
        			}
        			if (f.keywords.value.length<1)
					    {
        				alert("Please fill up keyword field")
        				return false;
        			}
        			return true;
        		}
	function popIm(fname, w, h)
    {
                lnk = "http://jobs.postiteasy.com/picture/"+fname;
                window.open(lnk, 'show_img', 'width='+w+', height='+h+',directories=no,location=no,menubar=no,scrollbars=no,status=no,toolbar=no,resizable=yes,top='+(screen.height/2-h/2)+',left='+(screen.width/2-w/2));
    }        	